From feefb63e4aa8f012817debfcf8ea589bb5dfe20c Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Wed, 6 May 2026 09:07:12 +0000 Subject: [PATCH] chore(i18n): refresh ar translations --- docs/ar/ci.md | 432 ++++++----- docs/ar/cli/infer.md | 149 ++-- docs/ar/cli/plugins.md | 245 +++--- docs/ar/concepts/model-providers.md | 315 ++++---- docs/ar/plugins/codex-harness.md | 894 +++++++++++----------- docs/ar/plugins/dependency-resolution.md | 80 +- docs/ar/plugins/google-meet.md | 922 +++++++++++------------ docs/ar/plugins/voice-call.md | 443 ++++++----- docs/ar/providers/openai.md | 542 ++++++------- docs/ar/tools/plugin.md | 682 +++++++++-------- 10 files changed, 2354 insertions(+), 2350 deletions(-) diff --git a/docs/ar/ci.md b/docs/ar/ci.md index 42a12a411..0e4fea70b 100644 --- a/docs/ar/ci.md +++ b/docs/ar/ci.md @@ -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= ## المشغّلات -| المشغّل | المهام | -| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `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//-//`. يُكتب مؤشر المرجع المختبر الحالي باسم `openclaw-performance//latest-.json`. +يرفع كل مسار مصنوعات GitHub. عندما يكون `CLAWGRIT_REPORTS_TOKEN` مهيأ، يثبت سير العمل أيضا `report.json`، و`report.md`، والحزم، و`index.md`، ومصنوعات مجسات المصدر في `openclaw/clawgrit-reports` تحت `openclaw-performance//-//`. يُكتب مؤشر المرجع المختبر الحالي باسم `openclaw-performance//latest-.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=`: ```bash pnpm ci:full-release --sha ``` -يجب أن تكون مراجع إرسال سير عمل GitHub فروعًا أو وسومًا، وليست SHAs خامًا للالتزامات. يدفع -المساعد فرعًا مؤقتًا باسم `release-ci/-...` عند SHA الهدف، -ويرسل `Full Release Validation` من ذلك المرجع المثبت، ويتحقق من أن كل -`headSha` لسير عمل فرعي يطابق الهدف، ويحذف الفرع المؤقت عندما -تكتمل التشغيل. كما يفشل متحقق المظلة إذا عمل أي سير عمل فرعي عند +يجب أن تكون مراجع إطلاق سير عمل GitHub فروعا أو وسوما، وليست SHAs خاما للالتزامات. يدفع +المساعد فرع `release-ci/-...` مؤقتا عند 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:` لكل التزام محدد. يبني سير عمل إصدار المباشر تلك الصورة ويدفعها مرة واحدة، ثم تعمل شظايا نموذج Docker المباشر وGateway المقسّمة حسب المزوّد وخلفية CLI وربط ACP وحزمة Codex مع `OPENCLAW_SKIP_DOCKER_BUILD=1`. تحمل شظايا Gateway Docker حدود `timeout` صريحة على مستوى السكربت أقل من مهلة مهمة سير العمل حتى يفشل مسار الحاوية العالق أو التنظيف بسرعة بدلاً من استهلاك ميزانية release-check كاملة. إذا أعادت تلك الشظايا بناء هدف Docker الكامل من المصدر بشكل مستقل، فتشغيل الإصدار مضبوط بشكل خاطئ وسيهدر وقت الساعة على بناء صور مكرر. +تستخدم أجزاء النماذج/الخلفيات الحية المدعومة بـ Docker صورة مشتركة منفصلة `ghcr.io/openclaw/openclaw-live-test:` لكل تثبيت محدد. يبني سير عمل الإصدار الحي تلك الصورة ويدفعها مرة واحدة، ثم تعمل أجزاء نموذج 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 # download Docker artifacts and print combined/per-lane targeted rerun commands pnpm test:docker:timings # 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 # 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 Plugin؛ -- تغييرات اختبارات Plugin فقط تشغل فحص أنواع اختبارات Plugin إضافة إلى lint Plugin؛ -- تغييرات Plugin SDK العام أو عقد Plugin تتوسع إلى فحص أنواع Plugin لأن Plugins تعتمد على عقود النواة تلك (وتبقى فحوصات Vitest الخاصة بـ Plugin عملا اختباريا صريحا)؛ -- زيادات الإصدار الخاصة ببيانات تعريف الإصدار فقط تشغل فحوصات مستهدفة للإصدار/الإعدادات/تبعيات الجذر؛ -- تفشل تغييرات الجذر/الإعدادات غير المعروفة بأمان إلى كل مسارات الفحص. +- تغييرات إنتاج core تشغل typecheck لإنتاج core واختبارات core إضافة إلى lint/guards الخاصة بـ core؛ +- تغييرات اختبارات core فقط تشغل فقط typecheck لاختبارات core إضافة إلى lint الخاص بـ core؛ +- تغييرات إنتاج extension تشغل typecheck لإنتاج extension واختبارات extension إضافة إلى lint الخاص بـ extension؛ +- تغييرات اختبارات extension فقط تشغل typecheck لاختبارات extension إضافة إلى lint الخاص بـ extension؛ +- تغييرات 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 ``` -استخدم إعادة الاستخدام فقط عندما تحتاج عمدًا إلى أوامر متعددة على الصندوق المهيأ نفسه: +استخدم إعادة الاستخدام فقط عندما تحتاج عمدًا إلى أوامر متعددة على الصندوق نفسه بعد تهيئته: ```bash pnpm crabbox:run -- --provider blacksmith-testbox --id --no-sync --timing-json --shell -- "pnpm test " pnpm crabbox:stop -- ``` -إذا كانت الطبقة المعطلة هي 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 "env CI=1 NODE_OPTIONS=--max-old-space-size blacksmith testbox stop --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 --timing-json --shell -- "env NODE_OPT pnpm crabbox:stop -- ``` -يمتلك `.crabbox.yaml` إعدادات المزوّد، والمزامنة، والتهيئة الافتراضية لـ GitHub Actions لمسارات السحابة المملوكة. يستثني `.git` المحلي لكي يحتفظ سحب Actions المهيأ ببيانات Git الوصفية البعيدة الخاصة به بدلًا من مزامنة المستودعات البعيدة ومخازن الكائنات المحلية الخاصة بالمشرف، ويستثني آثار التشغيل/البناء المحلية التي يجب ألا تُنقل أبدًا. يمتلك `.github/workflows/crabbox-hydrate.yml` السحب، وإعداد Node/pnpm، وجلب `origin/main`، وتسليم البيئة غير السرية لأوامر السحابة المملوكة `crabbox run --id `. +تملك `.crabbox.yaml` افتراضيات المزوّد والمزامنة والتهيئة عبر GitHub Actions لمسارات السحابة المملوكة. وهي تستبعد `.git` المحلي بحيث يحتفظ checkout المهيأ من Actions ببيانات Git الوصفية البعيدة الخاصة به بدلًا من مزامنة المستودعات البعيدة ومخازن الكائنات المحلية الخاصة بالمشرف، كما تستبعد آثار وقت التشغيل/البناء المحلية التي ينبغي عدم نقلها أبدًا. تملك `.github/workflows/crabbox-hydrate.yml` خطوات checkout، وإعداد Node/pnpm، وجلب `origin/main`، وتسليم البيئة غير السرية لأوامر السحابة المملوكة `crabbox run --id `. -## ذات صلة +## ذو صلة - [نظرة عامة على التثبيت](/ar/install) - [قنوات التطوير](/ar/install/development-channels) diff --git a/docs/ar/cli/infer.md b/docs/ar/cli/infer.md index 27024ef48..9d2c8a77f 100644 --- a/docs/ar/cli/infer.md +++ b/docs/ar/cli/infer.md @@ -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` نموذجًا قادرًا على الصور بصيغة `` | +| وصف ملف صورة | `openclaw infer image describe --file ./image.png --prompt "..." --json` | يجب أن يكون `--model` نموذجا قادرا على الصور بصيغة `` | | نسخ صوت | `openclaw infer audio transcribe --file ./memo.m4a --json` | يجب أن يكون `--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` بصيغة `` | | البحث في الويب | `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` الصيغة ``. -- بالنسبة إلى `image describe`، يشغّل `--model` الصريح ذلك المزوّد/النموذج مباشرة. يجب أن يكون النموذج قادرًا على الصور في كتالوج النماذج أو تكوين المزوّد. يشغّل `codex/` دورة محدودة لفهم الصور عبر خادم تطبيق Codex؛ ويستخدم `openai-codex/` مسار مزوّد OpenAI Codex OAuth. -- أوامر التنفيذ عديمة الحالة تكون محلية افتراضيًا. -- أوامر الحالة المُدارة بواسطة Gateway تستخدم Gateway افتراضيًا. -- المسار المحلي العادي لا يتطلب تشغيل Gateway. -- `model run` المحلي هو إكمال مزوّد خفيف لمرة واحدة. يحل نموذج الوكيل المكوّن والمصادقة، لكنه لا يبدأ دورة وكيل محادثة، ولا يحمّل الأدوات، ولا يفتح خوادم MCP المضمّنة. -- يقبل `model run --file` ملفات الصور، ويكتشف نوع MIME الخاص بها، ويرسلها مع المطالبة المقدّمة إلى النموذج المحدد. كرّر `--file` لصور متعددة. +- بالنسبة إلى `image describe`، يشغّل `--model` الصريح ذلك المزود/النموذج مباشرة. يجب أن يكون النموذج قادرا على الصور في كتالوج النماذج أو إعدادات المزود. يشغّل `codex/` دورة فهم صور محدودة عبر خادم تطبيق Codex؛ ويستخدم `openai-codex/` مسار مزود 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 ` اعتماد Gateway لمشغّل موثوق لأن الطلب يطلب من Gateway تشغيل تجاوز مزوّد/نموذج لمرة واحدة. +- يمرّن `model run --gateway` توجيه Gateway والمصادقة المحفوظة واختيار المزود ووقت التشغيل المضمّن، لكنه ما يزال يعمل كمسبار نموذج خام: فهو يرسل المطالبة المقدمة وأي مرفقات صور دون نص جلسة سابق، أو سياق bootstrap/AGENTS، أو تجميع محرك السياق، أو أدوات، أو خوادم MCP مضمّنة. +- يتطلب `model run --gateway --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 ``` -استخدم مراجع `` الكاملة لاختبار دخاني لمزوّد محدد بدون +استخدم مراجع `` الكاملة لاختبار 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 --json` كأضيق اختبار دخاني - حي عبر CLI لتغييرات إنشاء الصور. مثال: + `--model openai/gpt-image-1.5` لمخرجات PNG من OpenAI بخلفية شفافة؛ + يظل `--openai-background` متاحًا كاسم بديل خاص بـ OpenAI. المزوّدون + الذين لا يعلنون دعم الخلفية يبلّغون عن التلميح كتجاوز تم تجاهله. +- استخدم `image providers --json` للتحقق من مزوّدي الصور المضمّنين الذين + يمكن اكتشافهم، وتكوينهم، واختيارهم، وإمكانات الإنشاء/التحرير التي + يعرضها كل مزوّد. +- استخدم `image generate --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` نموذجًا قادرًا على معالجة الصور بصيغة ``. -- بالنسبة إلى نماذج رؤية 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` نموذج `` يدعم الصور. +- بالنسبة إلى نماذج الرؤية المحلية في 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` بصيغة ``. ## 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` بصيغة `` لـ `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 ...`. ## ذات صلة diff --git a/docs/ar/cli/plugins.md b/docs/ar/cli/plugins.md index 62fb082f1..7246e5c86 100644 --- a/docs/ar/cli/plugins.md +++ b/docs/ar/cli/plugins.md @@ -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 وحِزم الخطافات والحِزم المتوافقة. - - دليل المستخدم النهائي لتثبيت Plugins وتفعيلها واستكشاف مشكلاتها وإصلاحها. + + دليل المستخدم النهائي لتثبيت Plugins وتمكينها واستكشاف مشكلاتها وإصلاحها. - - أمثلة سريعة للتثبيت، والسرد، والتحديث، وإلغاء التثبيت، والنشر. + + أمثلة سريعة للتثبيت والعرض والتحديث وإلغاء التثبيت والنشر. - - نموذج توافق الحزم. + + نموذج توافق الحِزم. - + حقول البيان ومخطط الإعدادات. - - تعزيز الأمان لتثبيتات Plugin. + + تعزيز الأمان لعمليات تثبيت Plugin. @@ -67,11 +67,11 @@ openclaw plugins marketplace list --json إلى stderr ويحافظ على قابلية تحليل مخرجات JSON. راجع [تصحيح الأخطاء](/ar/help/debugging#plugin-lifecycle-trace). -تُشحن 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`) بالإضافة إلى قدرات الحزمة المكتشفة. ### التثبيت @@ -81,6 +81,7 @@ openclaw plugins search "calendar" # search ClawHub plugins openclaw plugins install # npm by default openclaw plugins install clawhub: # ClawHub only openclaw plugins install npm: # npm only +openclaw plugins install npm-pack: # local npm pack through npm install semantics openclaw plugins install git:github.com// # git repo openclaw plugins install git:github.com//@ openclaw plugins install --force # overwrite existing install @@ -93,101 +94,107 @@ openclaw plugins install --marketplace https://github.com// -تُثبَّت أسماء الحزم المجردة من npm افتراضيًا أثناء انتقال الإطلاق. استخدم `clawhub:` من أجل ClawHub. تعامل مع تثبيتات Plugin مثل تشغيل كود. يُفضّل استخدام الإصدارات المثبّتة. +تُثبَّت أسماء الحِزم المجرّدة من npm افتراضيًا أثناء الانتقال الأولي للإطلاق. استخدم `clawhub:` لـ ClawHub. تعامل مع تثبيت Plugin كما تتعامل مع تشغيل الكود. فضّل الإصدارات المثبّتة. -يستعلم `plugins search` من ClawHub عن حزم Plugin القابلة للتثبيت ويطبع -أسماء حزم جاهزة للتثبيت. يبحث في حزم code-plugin وbundle-plugin، +يستعلم `plugins search` من ClawHub عن حِزم Plugin القابلة للتثبيت ويطبع +أسماء حِزم جاهزة للتثبيت. يبحث في حِزم code-plugin وbundle-plugin، وليس Skills. استخدم `openclaw skills search` للبحث عن Skills في ClawHub. -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`. - - إذا كان قسم `plugins` لديك مدعومًا بملف `$include` واحد، فإن `plugins install/update/enable/disable/uninstall` تكتب إلى ذلك الملف المضمّن وتترك `openclaw.json` دون تغيير. تفشل تضمينات الجذر، ومصفوفات التضمين، والتضمينات ذات التجاوزات الشقيقة بشكل مغلق بدلًا من التسطيح. راجع [تضمينات الإعدادات](/ar/gateway/configuration) لمعرفة الأشكال المدعومة. + + إذا كان قسم `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`. - - يعيد `--force` استخدام هدف التثبيت الحالي ويستبدل Plugin أو حزمة خطافات مثبّتة مسبقًا في مكانها. استخدمه عندما تعيد عمدًا تثبيت المعرّف نفسه من مسار محلي جديد، أو أرشيف، أو حزمة ClawHub، أو عنصر npm. للترقيات الروتينية لـ Plugin npm متتبع بالفعل، فضّل `openclaw plugins update `. + + يعيد `--force` استخدام هدف التثبيت الحالي ويستبدل Plugin أو حزمة خطافات مثبتة مسبقًا في مكانها. استخدمه عندما تعيد عمدًا تثبيت المعرّف نفسه من مسار محلي جديد أو أرشيف أو حزمة ClawHub أو أثر npm. للترقيات الروتينية لـ Plugin من npm متتبعة بالفعل، فضّل `openclaw plugins update `. - إذا شغّلت `plugins install` لمعرّف Plugin مثبّت بالفعل، يتوقف OpenClaw ويوجهك إلى `plugins update ` للترقية العادية، أو إلى `plugins install --force` عندما تريد فعلًا استبدال التثبيت الحالي من مصدر مختلف. + إذا شغّلت `plugins install` لمعرّف Plugin مثبت مسبقًا، يتوقف OpenClaw ويوجهك إلى `plugins update ` للترقية العادية، أو إلى `plugins install --force` عندما تريد فعلًا استبدال التثبيت الحالي من مصدر مختلف. - + ينطبق `--pin` على تثبيتات npm فقط. لا يُدعم مع تثبيتات `git:`؛ استخدم مرجع git صريحًا مثل `git:github.com/acme/plugin@v1.2.3` عندما تريد مصدرًا مثبّتًا. ولا يُدعم مع `--marketplace`، لأن تثبيتات السوق تحفظ بيانات تعريف مصدر السوق بدلًا من مواصفة npm. - `--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). - - `plugins install` هو أيضًا سطح التثبيت لحزم الخطافات التي تعرض `openclaw.hooks` في `package.json`. استخدم `openclaw hooks` لرؤية الخطافات المفلترة وتفعيل كل خطاف على حدة، وليس لتثبيت الحزم. + + `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:` عندما تريد جعل حل npm صريحًا. تثبّت مواصفات الحزم المجردة أيضًا مباشرةً من npm أثناء انتقال الإطلاق. + استخدم `npm:` عندما تريد جعل حل 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`). - - استخدم `git:` للتثبيت مباشرةً من مستودع git. تتضمن الصيغ المدعومة `git:github.com/owner/repo`، و`git:owner/repo`، وروابط الاستنساخ الكاملة `https://`، و`ssh://`، و`git://`، و`file://`، و`git@host:owner/repo.git`. أضف `@` أو `#` لاختيار فرع أو وسم أو commit قبل التثبيت. + + استخدم `git:` للتثبيت مباشرة من مستودع git. تشمل الصيغ المدعومة `git:github.com/owner/repo` و`git:owner/repo` وعناوين النسخ الكاملة `https://` و`ssh://` و`git://` و`file://` و`git@host:owner/repo.git`. أضف `@` أو `#` للتحويل إلى فرع أو وسم أو التزام قبل التثبيت. - تستنسخ تثبيتات Git إلى دليل مؤقت، وتنتقل إلى المرجع المطلوب عند وجوده، ثم تستخدم مثبت دليل Plugin العادي. هذا يعني أن التحقق من البيان، وفحص الكود الخطِر، وعمل تثبيت مدير الحزم، وسجلات التثبيت تتصرف مثل تثبيتات npm. تتضمن تثبيتات git المسجلة رابط/مرجع المصدر إضافة إلى commit المحلول حتى يستطيع `openclaw plugins update` إعادة حل المصدر لاحقًا. + تستنسخ تثبيتات Git إلى دليل مؤقت، وتتحول إلى المرجع المطلوب عند وجوده، ثم تستخدم مثبّت دليل Plugin العادي. يعني ذلك أن تحقق البيان، وفحص الكود الخطِر، وعمل تثبيت مدير الحِزم، وسجلات التثبيت تتصرف مثل تثبيتات npm. تتضمن تثبيتات git المسجلة عنوان/مرجع المصدر بالإضافة إلى الالتزام المحلول بحيث يستطيع `openclaw plugins update` إعادة حل المصدر لاحقًا. - بعد التثبيت من git، استخدم `openclaw plugins inspect --runtime --json` للتحقق من تسجيلات وقت التشغيل مثل طرق gateway وأوامر CLI. إذا سجّل Plugin جذر CLI باستخدام `api.registerCli`، نفّذ ذلك الأمر مباشرةً عبر CLI الجذري لـ OpenClaw، مثل `openclaw demo-plugin ping`. + بعد التثبيت من git، استخدم `openclaw plugins inspect --runtime --json` للتحقق من تسجيلات وقت التشغيل مثل طرق gateway وأوامر CLI. إذا سجّلت Plugin جذر CLI باستخدام `api.registerCli`، فنفّذ ذلك الأمر مباشرة عبر CLI الجذرية لـ OpenClaw، مثل `openclaw demo-plugin ping`. - - الأرشيفات المدعومة: `.zip`، و`.tgz`، و`.tar.gz`، و`.tar`. يجب أن تحتوي أرشيفات Plugin الأصلية لـ OpenClaw على `openclaw.plugin.json` صالح في جذر Plugin المستخرج؛ أما الأرشيفات التي تحتوي فقط على `package.json` فتُرفض قبل أن يكتب OpenClaw سجلات التثبيت. + + الأرشيفات المدعومة: `.zip` و`.tgz` و`.tar.gz` و`.tar`. يجب أن تحتوي أرشيفات Plugin الأصلية لـ OpenClaw على `openclaw.plugin.json` صالح في جذر Plugin المستخرج؛ تُرفض الأرشيفات التي تحتوي فقط على `package.json` قبل أن يكتب OpenClaw سجلات التثبيت. - تثبيتات سوق Claude مدعومة أيضًا. + استخدم `npm-pack:` عندما يكون الملف tarball من npm-pack وتريد + اختبار مسار تثبيت npm-root المُدار نفسه الذي تستخدمه تثبيتات السجل، + بما في ذلك التحقق من `package-lock.json`، وفحص التبعيات المرفوعة، وسجلات + تثبيت npm. لا تزال مسارات الأرشيف العادية تُثبَّت كأرشيفات محلية + تحت جذر امتدادات Plugin. + + تُدعم أيضًا تثبيتات سوق Claude. -تستخدم تثبيتات ClawHub محدد موقع صريحًا `clawhub:`: +تستخدم تثبيتات ClawHub محددًا صريحًا `clawhub:`: ```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 @@ -204,28 +211,28 @@ openclaw plugins install --marketplace ./my-marketplace ``` - - - اسم marketplace معروف في Claude من `~/.claude/plugins/known_marketplaces.json` - - جذر marketplace محلي أو مسار `marketplace.json` + + - اسم سوق معروف لدى Claude من `~/.claude/plugins/known_marketplaces.json` + - جذر سوق محلي أو مسار `marketplace.json` - اختصار مستودع GitHub مثل `owner/repo` - عنوان URL لمستودع GitHub مثل `https://github.com/owner/repo` - عنوان URL لـ git - - بالنسبة إلى marketplaces البعيدة المحمّلة من GitHub أو git، يجب أن تبقى إدخالات Plugin داخل مستودع marketplace المستنسخ. يقبل OpenClaw مصادر المسارات النسبية من ذلك المستودع ويرفض مصادر Plugin التي تكون HTTP(S)، أو مسارات مطلقة، أو git، أو GitHub، أو غيرها من مصادر Plugin غير المسارية من البيانات التعريفية البعيدة. + + بالنسبة للأسواق البعيدة المحملة من GitHub أو git، يجب أن تبقى إدخالات Plugin داخل مستودع السوق المستنسخ. يقبل OpenClaw مصادر المسارات النسبية من ذلك المستودع ويرفض HTTP(S)، والمسارات المطلقة، وgit، وGitHub، وغيرها من مصادر Plugin غير المسارية من بيانات البيان البعيدة. -بالنسبة إلى المسارات والأرشيفات المحلية، يكتشف 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`) -تُثبَّت الحزم المتوافقة في جذر 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 المتوافقة؛ تظهر إمكانات الحزم المكتشفة الأخرى في التشخيصات/المعلومات لكنها لم توصل بعد إلى تنفيذ وقت التشغيل. ### القائمة @@ -241,59 +248,59 @@ openclaw plugins search --json ``` - اعرض Plugins الممكّنة فقط. + اعرض Plugins الممكنة فقط. - بدّل من عرض الجدول إلى أسطر تفاصيل لكل Plugin تتضمن بيانات تعريف المصدر/الأصل/الإصدار/التفعيل. + بدّل من عرض الجدول إلى أسطر تفاصيل لكل Plugin مع بيانات تعريف المصدر/الأصل/الإصدار/التفعيل. - مخزون قابل للقراءة آلياً مع تشخيصات السجل وحالة تثبيت تبعيات الحزم. + مخزون قابل للقراءة آليا مع تشخيصات السجل وحالة تثبيت تبعيات الحزمة. -يقرأ `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، أو يشغل مدير حزم، أو يصلح التبعيات المفقودة. -`plugins search` هو بحث في كتالوج ClawHub البعيد. لا يفحص الحالة المحلية، -ولا يغيّر التكوين، ولا يثبّت الحزم، ولا يحمّل كود وقت تشغيل Plugin. تتضمن +`plugins search` هو بحث بعيد في كتالوج ClawHub. لا يفحص الحالة المحلية، +ولا يغير التهيئة، ولا يثبت الحزم، ولا يحمل كود وقت تشغيل Plugin. تتضمن نتائج البحث اسم حزمة ClawHub، والعائلة، والقناة، والإصدار، والملخص، و تلميح تثبيت مثل `openclaw plugins install clawhub:`. -للعمل على 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 --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..hooks.allowConversationAccess=true`. +- يعرض `openclaw plugins inspect --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..hooks.allowConversationAccess=true`. -استخدم `--link` لتجنب نسخ مجلد محلي (يضيفه إلى `plugins.load.paths`): +استخدم `--link` لتجنب نسخ دليل محلي (يضيف إلى `plugins.load.paths`): ```bash openclaw plugins install -l ./my-plugin ``` -لا يُدعَم `--force` مع `--link` لأن التثبيتات المرتبطة تعيد استخدام مسار المصدر بدلاً من النسخ فوق هدف تثبيت مُدار. +`--force` غير مدعوم مع `--link` لأن التثبيتات المرتبطة تعيد استخدام مسار المصدر بدلا من النسخ فوق هدف تثبيت مدار. -استخدم `--pin` في تثبيتات npm لحفظ المواصفة الدقيقة المحلولة (`name@version`) في فهرس Plugin المُدار مع إبقاء السلوك الافتراضي غير مثبت. +استخدم `--pin` في تثبيتات npm لحفظ المواصفة الدقيقة المحلولة (`name@version`) في فهرس Plugin المدار مع إبقاء السلوك الافتراضي غير مثبت. ### فهرس 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 --dry-run openclaw plugins uninstall --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`. -`--keep-config` مدعوم كاسم بديل مهمل لـ `--keep-files`. +`--keep-config` مدعوم كاسم مستعار مهمل لـ `--keep-files`. ### التحديث @@ -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`. - - عندما تمرر معرّف Plugin، يعيد OpenClaw استخدام مواصفة التثبيت المسجلة لذلك Plugin. وهذا يعني أن وسوم التوزيع المخزنة سابقاً مثل `@beta` والإصدارات الدقيقة المثبتة تظل مستخدمة في عمليات `update ` اللاحقة. + + عند تمرير معرف Plugin، يعيد OpenClaw استخدام مواصفة التثبيت المسجلة لذلك Plugin. وهذا يعني أن وسوم التوزيع المخزنة سابقا مثل `@beta` والإصدارات الدقيقة المثبتة تستمر في الاستخدام في عمليات `update ` اللاحقة. - بالنسبة إلى تثبيتات npm، يمكنك أيضاً تمرير مواصفة حزمة npm صريحة مع وسم توزيع أو إصدار دقيق. يحل OpenClaw اسم الحزمة هذا مرة أخرى إلى سجل Plugin المتتبع، ويحدّث ذلك Plugin المثبّت، ويسجل مواصفة npm الجديدة للتحديثات المستقبلية المستندة إلى المعرّف. + بالنسبة لتثبيتات npm، يمكنك أيضا تمرير مواصفة حزمة npm صريحة مع وسم توزيع أو إصدار دقيق. يحل OpenClaw اسم الحزمة هذا إلى سجل Plugin المتتبع، ويحدّث ذلك Plugin المثبت، ويسجل مواصفة npm الجديدة لتحديثات المعرف المستقبلية. - يؤدي تمرير اسم حزمة npm دون إصدار أو وسم أيضاً إلى الحل مرة أخرى إلى سجل Plugin المتتبع. استخدم هذا عندما يكون Plugin مثبتاً على إصدار دقيق وتريد إعادته إلى خط الإصدار الافتراضي في السجل. + تمرير اسم حزمة npm بدون إصدار أو وسم يحل أيضا إلى سجل Plugin المتتبع. استخدم هذا عندما يكون Plugin مثبتا على إصدار دقيق وتريد إعادته إلى خط الإصدار الافتراضي للسجل. - - يعيد `openclaw plugins update` استخدام مواصفة Plugin المتتبعة ما لم تمرر مواصفة جديدة. يعرف `openclaw update` أيضاً قناة تحديث OpenClaw النشطة: على قناة beta، تحاول سجلات Plugin الافتراضية من npm وClawHub استخدام `@beta` أولاً، ثم تعود إلى المواصفة الافتراضية/الأحدث المسجلة إذا لم يكن هناك إصدار beta لـ Plugin. تبقى الإصدارات الدقيقة والوسوم الصريحة مثبتة على ذلك المحدد. + + يعيد `openclaw plugins update` استخدام مواصفة Plugin المتتبعة ما لم تمرر مواصفة جديدة. يعرف `openclaw update` بالإضافة إلى ذلك قناة تحديث OpenClaw النشطة: على قناة بيتا، تحاول سجلات Plugin الخاصة بـ npm وClawHub على الخط الافتراضي `@beta` أولا، ثم تعود إلى مواصفة الافتراضي/الأحدث المسجلة إذا لم يكن هناك إصدار بيتا لـ Plugin. تبقى الإصدارات الدقيقة والوسوم الصريحة مثبتة على ذلك المحدد. - - قبل تحديث npm مباشر، يتحقق OpenClaw من إصدار الحزمة المثبّتة مقابل بيانات سجل npm التعريفية. إذا كان الإصدار المثبّت وهوية الأثر المسجلة يطابقان الهدف المحلول بالفعل، يُتخطى التحديث دون تنزيل أو إعادة تثبيت أو إعادة كتابة `openclaw.json`. + + قبل تحديث npm حي، يتحقق OpenClaw من إصدار الحزمة المثبتة مقابل بيانات تعريف سجل npm. إذا كان الإصدار المثبت وهوية الأثر المسجلة يطابقان الهدف المحلول بالفعل، يتخطى التحديث بدون تنزيل أو إعادة تثبيت أو إعادة كتابة `openclaw.json`. - عندما توجد بصمة نزاهة مخزنة وتتغير بصمة الأثر المجلوب، يتعامل OpenClaw مع ذلك على أنه انحراف في أثر npm. يطبع أمر `openclaw plugins update` التفاعلي البصمات المتوقعة والفعلية ويطلب التأكيد قبل المتابعة. تفشل مساعدات التحديث غير التفاعلية بإغلاق آمن ما لم يقدّم المستدعي سياسة متابعة صريحة. + عند وجود تجزئة سلامة مخزنة وتغير تجزئة الأثر المجلب، يعامل OpenClaw ذلك على أنه انحراف في أثر npm. يطبع أمر `openclaw plugins update` التفاعلي التجزئات المتوقعة والفعلية ويطلب التأكيد قبل المتابعة. تفشل مساعدات التحديث غير التفاعلية بشكل مغلق ما لم يقدم المستدعي سياسة متابعة صريحة. - يتوفر `--dangerously-force-unsafe-install` أيضاً في `plugins update` كتجاوز طارئ للإيجابيات الكاذبة في فحص الكود الخطِر المضمّن أثناء تحديثات Plugin. لا يزال لا يتجاوز حظر سياسة `before_install` الخاصة بـ Plugin أو حظر فشل الفحص، ولا ينطبق إلا على تحديثات Plugin، وليس تحديثات hook-pack. + يتوفر `--dangerously-force-unsafe-install` أيضا في `plugins update` كتجاوز طارئ للإيجابيات الكاذبة في فحص الكود الخطر المدمج أثناء تحديثات Plugin. لكنه لا يتجاوز حظر سياسة `before_install` الخاصة بـ Plugin أو حظر فشل الفحص، وينطبق فقط على تحديثات Plugin، وليس تحديثات حزم الخطافات. @@ -353,21 +360,21 @@ openclaw plugins inspect --runtime openclaw plugins inspect --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 ...`؛ على سبيل المثال، يمكن التحقق من Plugin يسجل `demo-git` باستخدام `openclaw demo-git ping`. +تثبت أوامر CLI المملوكة لـ Plugin كمجموعات أوامر جذرية لـ `openclaw`. بعد أن يعرض `inspect --runtime` أمرا ضمن `cliCommands`، شغله بصيغة `openclaw ...`؛ على سبيل المثال، يمكن التحقق من 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) لمزيد حول نموذج الإمكانات. -يعرض علم `--json` تقريراً قابلاً للقراءة آلياً ومناسباً للبرمجة النصية والتدقيق. يعرض `inspect --all` جدولاً على مستوى المجموعة يتضمن أعمدة الشكل، وأنواع القدرات، وإشعارات التوافق، وقدرات الحزم، وملخص الخطافات. `info` اسم بديل لـ `inspect`. +يخرج علم `--json` تقريرا قابلا للقراءة آليا مناسبا للبرمجة النصية والتدقيق. يعرض `inspect --all` جدولا شاملا للأسطول مع أعمدة الشكل، وأنواع الإمكانات، وإشعارات التوافق، وإمكانات الحزم، وملخص الخطافات. `info` اسم مستعار لـ `inspect`. ### الطبيب @@ -376,11 +383,11 @@ openclaw plugins inspect --json openclaw plugins doctor ``` -يبلغ `doctor` عن أخطاء تحميل Plugin، وتشخيصات البيان/الاكتشاف، وإشعارات التوافق. عندما يكون كل شيء سليماً يطبع `No plugin issues detected.` +يبلغ `doctor` عن أخطاء تحميل Plugin، وتشخيصات البيان/الاكتشاف، وإشعارات التوافق. عندما يكون كل شيء سليما يطبع `No plugin issues detected.` -إذا كان Plugin مكوَّن موجوداً على القرص لكن محظوراً بفحوصات أمان المسار الخاصة بالمحمّل، فإن التحقق من التكوين يُبقي إدخال Plugin ويبلغ عنه كـ `present but blocked`. أصلح تشخيص Plugin المحظور السابق، مثل ملكية المسار أو أذونات الكتابة العالمية، بدلاً من إزالة تكوين `plugins.entries.` أو `plugins.allow`. +إذا كان Plugin مهيأ موجودا على القرص لكنه محظور بواسطة فحوصات أمان المسار في المحمل، تحتفظ عملية التحقق من التهيئة بإدخال Plugin وتبلغ عنه كـ `present but blocked`. أصلح تشخيص Plugin المحظور السابق، مثل ملكية المسار أو أذونات الكتابة للعامة، بدلا من إزالة تهيئة `plugins.entries.` أو `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 يزيل تلك الحزمة القديمة ويعيد بناء السجل بحيث يتحقق بدء التشغيل مقابل البيان المضمّن. -`OPENCLAW_DISABLE_PERSISTED_PLUGIN_REGISTRY=1` هو مفتاح توافق قديم لكسر الحاجز عند فشل قراءة السجل. فضّل `plugins registry --refresh` أو `openclaw doctor --fix`؛ فالرجوع إلى متغير البيئة مخصص فقط لاستعادة بدء التشغيل في حالات الطوارئ أثناء طرح الترحيل. +`OPENCLAW_DISABLE_PERSISTED_PLUGIN_REGISTRY=1` هو مفتاح توافق مهمل لكسر الحاجز عند فشل قراءة السجل. فضّل `plugins registry --refresh` أو `openclaw doctor --fix`؛ فالرجوع إلى متغير البيئة مخصص فقط لاستعادة بدء التشغيل الطارئة أثناء طرح الترحيل. -### السوق +### Marketplace ```bash openclaw plugins marketplace list openclaw plugins marketplace list --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. ## ذو صلة diff --git a/docs/ar/concepts/model-providers.md b/docs/ar/concepts/model-providers.md index 5eae8748b..35d9b5fdb 100644 --- a/docs/ar/concepts/model-providers.md +++ b/docs/ar/concepts/model-providers.md @@ -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). ## قواعد سريعة - + - تستخدم مراجع النماذج الصيغة `provider/model` (مثال: `opencode/claude-opus-4-6`). - يعمل `agents.defaults.models` كقائمة سماح عند ضبطه. - مساعدات CLI: `openclaw onboard`، و`openclaw models list`، و`openclaw models set `. - - تضبط `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). - - يحافظ `openclaw configure` على `agents.defaults.model.primary` الموجود عند إضافة موفّر أو إعادة المصادقة معه. قد تستمر Plugins الخاصة بالموفّرين في إرجاع نموذج افتراضي موصى به ضمن رقعة إعداد المصادقة الخاصة بها، لكن configure يتعامل مع ذلك على أنه "إتاحة هذا النموذج" عندما يكون هناك نموذج أساسي موجود بالفعل، وليس "استبدال النموذج الأساسي الحالي". + + يحافظ `openclaw configure` على `agents.defaults.model.primary` موجود عند إضافة موفّر أو إعادة المصادقة معه. قد تظل Plugins الموفّرين تُرجع نموذجاً افتراضياً موصى به في تصحيح إعدادات المصادقة لديها، لكن configure يتعامل مع ذلك على أنه "اجعل هذا النموذج متاحاً" عندما يكون نموذج أساسي موجوداً بالفعل، وليس "استبدل النموذج الأساسي الحالي." - للتبديل المقصود للنموذج الافتراضي، استخدم `openclaw models set ` أو `openclaw models auth login --provider --set-default`. + لتبديل النموذج الافتراضي عمداً، استخدم `openclaw models set ` أو `openclaw models auth login --provider --set-default`. - - مسارات عائلة OpenAI مخصّصة حسب البادئة: + + مسارات عائلة OpenAI محددة بالبادئة: - - يستخدم `openai/` مع `agents.defaults.agentRuntime.id: "codex"` حزمة خادم تطبيق Codex الأصلية. هذا هو إعداد اشتراك ChatGPT/Codex المعتاد. + - يستخدم `openai/` مع `agents.defaults.agentRuntime.id: "codex"` حزمة تشغيل خادم تطبيق Codex الأصلية. هذا هو إعداد اشتراك ChatGPT/Codex المعتاد. - يستخدم `openai-codex/` مصادقة Codex OAuth في PI. - - يستخدم `openai/` من دون تجاوز وقت تشغيل Codex موفّر OpenAI المباشر بمفتاح API في PI. + - يستخدم `openai/` من دون تجاوز 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/` إلى OpenAI Plugin، بينما يتم تفعيل Codex Plugin عبر `agentRuntime.id: "codex"` أو مراجع `codex/` القديمة. + يتبع التفعيل التلقائي لـ Plugin الحد نفسه: ينتمي `openai-codex/` إلى OpenAI plugin، بينما تُفعّل Codex plugin عبر `agentRuntime.id: "codex"` أو مراجع `codex/` القديمة. - يتوفر 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 المباشرة عندما يتيحه حسابك. - - تستخدم أوقات تشغيل CLI الفصل نفسه: اختر مراجع نماذج معيارية مثل `anthropic/claude-*` أو `google/gemini-*` أو `openai/gpt-*`، ثم اضبط `agents.defaults.agentRuntime.id` على `claude-cli` أو `google-gemini-cli` أو `codex-cli` عندما تريد واجهة خلفية محلية عبر CLI. + + تستخدم 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 بشكل منفصل. -## سلوك الموفّرين المملوك للـ 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). الموفّر الذي يحتاج منفّذ طلبات مخصصاً بالكامل هو سطح امتداد منفصل وأعمق. -يوجد سلوك المشغّل المملوك للموفّر على خطافات موفّر صريحة مثل سياسة إعادة التشغيل، وتطبيع مخطط الأدوات، وتغليف البث، ومساعدات النقل/الطلب. الحاوية الثابتة القديمة `ProviderPlugin.capabilities` مخصّصة للتوافق فقط ولم تعد تُقرأ بواسطة منطق المشغّل المشترك. +يوجد سلوك المشغّل المملوك للموفّر على خطافات موفّر صريحة مثل سياسة إعادة التشغيل، وتطبيع مخطط الأدوات، وتغليف البث، ومساعدات النقل/الطلب. حقيبة `ProviderPlugin.capabilities` الثابتة القديمة مخصصة للتوافق فقط ولم يعد منطق المشغّل المشترك يقرأها. ## تدوير مفاتيح API - - اضبط مفاتيح متعددة عبر: + + اضبط عدة مفاتيح عبر: - - `OPENCLAW_LIVE__KEY` (تجاوز مباشر واحد، أعلى أولوية) - - `_API_KEYS` (قائمة مفصولة بفواصل أو فواصل منقوطة) + - `OPENCLAW_LIVE__KEY` (تجاوز مباشر واحد، بأعلى أولوية) + - `_API_KEYS` (قائمة مفصولة بفواصل أو بفواصل منقوطة) - `_API_KEY` (المفتاح الأساسي) - - `_API_KEY_*` (قائمة مرقّمة، مثل `_API_KEY_1`) + - `_API_KEY_*` (قائمة مرقمة، مثل `_API_KEY_1`) - بالنسبة إلى موفّري Google، يتم تضمين `GOOGLE_API_KEY` أيضًا كخيار رجوع احتياطي. يحافظ ترتيب اختيار المفاتيح على الأولوية ويزيل القيم المكررة. + بالنسبة لموفّري Google، يُضمَّن `GOOGLE_API_KEY` أيضاً كاحتياطي. يحافظ ترتيب اختيار المفاتيح على الأولوية ويزيل القيم المكررة. - - - تتم إعادة محاولة الطلبات بالمفتاح التالي فقط عند استجابات حدود المعدّل (على سبيل المثال `429`، أو `rate_limit`، أو `quota`، أو `resource exhausted`، أو `Too many concurrent requests`، أو `ThrottlingException`، أو `concurrency limit reached`، أو `workers_ai ... quota limit exceeded`، أو رسائل حدود الاستخدام الدورية). - - تفشل الإخفاقات غير المتعلقة بحدود المعدّل فورًا؛ ولا تتم محاولة تدوير المفاتيح. - - عندما تفشل كل المفاتيح المرشحة، يتم إرجاع الخطأ النهائي من المحاولة الأخيرة. + + - تُعاد محاولة الطلبات بالمفتاح التالي فقط عند استجابات تحديد المعدل (على سبيل المثال `429`، أو `rate_limit`، أو `quota`، أو `resource exhausted`، أو `Too many concurrent requests`، أو `ThrottlingException`، أو `concurrency limit reached`، أو `workers_ai ... quota limit exceeded`، أو رسائل حد الاستخدام الدورية). + - تفشل الإخفاقات غير المرتبطة بتحديد المعدل فوراً؛ ولا تُحاول أي عملية تدوير مفاتيح. + - عندما تفشل كل المفاتيح المرشحة، يُرجع الخطأ النهائي من آخر محاولة. -## الموفّرون المدمجون (كتالوج 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/"].params.transport` (`"sse"`، أو `"websocket"`، أو `"auto"`) -- يتم تمكين إحماء WebSocket لاستجابات OpenAI افتراضيًا عبر `params.openaiWsWarmup` (`true`/`false`) -- يمكن تمكين المعالجة ذات الأولوية في OpenAI عبر `agents.defaults.models["openai/"].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/"].params.transport` (`"sse"` أو `"websocket"` أو `"auto"`) +- يكون الإحماء لـ OpenAI Responses WebSocket مفعّلاً افتراضياً عبر `params.openaiWsWarmup` (`true`/`false`) +- يمكن تفعيل المعالجة ذات الأولوية في OpenAI عبر `agents.defaults.models["openai/"].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` القديمة تعمل للتوافق. -أخبرنا موظفو 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` عند توفرهما. ```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/"].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/"].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: ### خيارات مستضافة أخرى بأسلوب الاشتراك - - خطة Z.AI Coding أو نقاط نهاية API العامة. + + خطة Z.AI Coding Plan أو نقاط نهاية API العامة. - مصادقة OAuth لخطة MiniMax Coding أو الوصول بمفتاح API. + وصول MiniMax Coding Plan عبر OAuth أو مفتاح API. - سطح موفّر Qwen Cloud بالإضافة إلى Alibaba DashScope وتعيين نقطة نهاية Coding Plan. + سطح موفّر Qwen Cloud إضافة إلى ربط نقاط نهاية Alibaba DashScope وCoding Plan. ### 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/"].params.cachedContent` (أو `cached_content` القديمة) لتمرير مقبض `cachedContents/...` أصلي للمزوّد؛ وتظهر إصابات ذاكرة التخزين المؤقت في Gemini كـ `cacheRead` في OpenClaw +- تقبل عمليات تشغيل Gemini المباشرة أيضًا `agents.defaults.models["google/"].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 الخاص به -مصادقة OAuth في Gemini CLI داخل OpenClaw هي تكامل غير رسمي. أبلغ بعض المستخدمين عن قيود على حسابات Google بعد استخدام عملاء من جهات خارجية. راجع شروط Google واستخدم حسابًا غير حرج إذا اخترت المتابعة. +يُعد OAuth الخاص بـGemini CLI في OpenClaw تكاملاً غير رسمي. أبلغ بعض المستخدمين عن قيود على حسابات Google بعد استخدام عملاء تابعين لجهات خارجية. راجع شروط Google واستخدم حسابًا غير حرج إذا اخترت المتابعة. -تُشحن مصادقة OAuth في Gemini CLI كجزء من Plugin `google` المضمّن. +يُشحَن OAuth الخاص بـGemini CLI كجزء من Plugin `google` المضمّن. - + ```bash @@ -248,25 +249,25 @@ x-i18n: - + ```bash openclaw plugins enable google ``` - + ```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. - + إذا فشلت الطلبات بعد تسجيل الدخول، فعيّن `GOOGLE_CLOUD_PROJECT` أو `GOOGLE_CLOUD_PROJECT_ID` على مضيف Gateway. -تُحلَّل ردود 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` | -#### خصوصيات يجدر معرفتها +#### سلوكيات خاصة يجدر معرفتها - يطبّق ترويسات نسبة التطبيق الخاصة به وعلامات 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 فقط. - تتبع المراجع المدعومة من Gemini مسار التنقية نفسه الخاص بـ proxy-Gemini؛ ويتجاوز `kilocode/kilo/auto` وغيره من المراجع غير المدعومة لاستدلال الوكيل حقن استدلال الوكيل. + تتبع المراجع المستندة إلى Gemini مسار تنظيف وكيل Gemini نفسه؛ ويتخطى `kilocode/kilo/auto` وغيره من المراجع غير الداعمة للاستدلال عبر الوكيل حقن الاستدلال عبر الوكيل. - يكتب الإعداد بمفتاح API تعريفات صريحة لنموذج محادثة M2.7 النصي فقط؛ ويبقى فهم الصور على مزوّد الوسائط `MiniMax-VL-01` المملوك من Plugin. + يكتب إعداد مفتاح API تعريفات صريحة لنماذج محادثة M2.7 النصية فقط؛ ويظل فهم الصور على موفر الوسائط `MiniMax-VL-01` المملوك للـ plugin. - تستخدم معرّفات النماذج مساحة أسماء `nvidia//` (مثل `nvidia/nvidia/nemotron-...` إلى جانب `nvidia/moonshotai/kimi-k2.5`)؛ وتحافظ أدوات الاختيار على تركيب `/` الحرفي، بينما يبقى المفتاح القانوني المُرسل إلى API ببادئة واحدة. + تستخدم معرّفات النماذج مساحة أسماء `nvidia//` (على سبيل المثال `nvidia/nvidia/nemotron-...` إلى جانب `nvidia/moonshotai/kimi-k2.5`)؛ وتحافظ أدوات الاختيار على تركيبة `/` الحرفية بينما يبقى المفتاح القانوني المرسل إلى API ذا بادئة واحدة. - يستخدم مسار 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/"].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/"].params.tool_stream=false`. - يُشحن بوصفه 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`. -## المزوّدون عبر `models.providers` (مخصص/عنوان URL أساسي) +## الموفرون عبر `models.providers` (عنوان URL مخصص/أساسي) -استخدم `models.providers` (أو `models.json`) لإضافة مزوّدين **مخصصين** أو وكلاء متوافقين مع OpenAI/Anthropic. +استخدم `models.providers` (أو `models.json`) لإضافة موفرين **مخصصين** أو وكلاء متوافقين مع OpenAI/Anthropic. -تنشر العديد من Plugins المزوّدين المضمّنة أدناه كتالوجًا افتراضيًا بالفعل. استخدم إدخالات `models.providers.` الصريحة فقط عندما تريد تجاوز عنوان URL الأساسي الافتراضي أو الترويسات أو قائمة النماذج. +ينشر كثير من plugins الموفرين المضمّنة أدناه فهرسا افتراضيا بالفعل. استخدم إدخالات `models.providers.` الصريحة فقط عندما تريد تجاوز عنوان URL الأساسي الافتراضي أو الترويسات أو قائمة النماذج. -تقرأ فحوصات قدرات نماذج Gateway أيضًا بيانات تعريف `models.providers..models[]` الصريحة. إذا كان نموذج مخصص أو وكيل يقبل الصور، فاضبط `input: ["text", "image"]` على ذلك النموذج حتى يمرّر WebChat ومسارات المرفقات الصادرة من Node الصور كمدخلات نموذج أصلية بدلًا من مراجع وسائط نصية فقط. +تقرأ فحوصات قدرات نموذج Gateway أيضا بيانات `models.providers..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 إلى الكتالوج غير المرشّح بدلاً من عرض منتقٍ فارغ مقيّد بالمزوّد. @@ -445,7 +446,7 @@ x-i18n: - `volcengine/deepseek-v3-2-251201` (DeepSeek V3.2 128K) - + - `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 إلى الكتالوج غير المرشّح بدلاً من عرض منتقٍ فارغ مقيّد بالمزوّد. @@ -483,7 +484,7 @@ x-i18n: - `byteplus/glm-4-7-251222` (GLM 4.7) - + - `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) لتفاصيل الإعداد، وخيارات النماذج، ومقتطفات الإعدادات. -في مسار البث المتوافق مع Anthropic لدى MiniMax، يعطّل OpenClaw التفكير افتراضيًا ما لم تضبطه صراحةً، ويعيد `/fast on` كتابة `MiniMax-M2.7` إلى `MiniMax-M2.7-highspeed`. +في مسار البث المتوافق مع Anthropic الخاص بـ MiniMax، يعطّل OpenClaw التفكير افتراضياً ما لم تضبطه صراحةً، ويعيد `/fast on` كتابة `MiniMax-M2.7` إلى `MiniMax-M2.7-highspeed`. -تقسيم القدرات المملوك من 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` - موصى به: اضبط قيمًا صريحة تطابق حدود الوكيل/النموذج لديك. + موصى به: اضبط قيماً صريحة تطابق حدود الوكيل/النموذج لديك. - بالنسبة إلى `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..timeoutSeconds`. يمدّد هذا معالجة طلبات HTTP لنماذج المزوّد، بما في ذلك الاتصال والترويسات وبث الجسم وإلغاء الجلب المحمي الإجمالي، من دون زيادة مهلة تشغيل الوكيل بالكامل. - - تسمح استدعاءات HTTP لمزوّد النموذج بإجابات DNS ذات IP وهمي من Surge وClash وsing-box ضمن `198.18.0.0/15` و`fc00::/7` فقط لاسم مضيف `baseUrl` الخاص بالمزوّد المضبوط. لا تزال الوجهات الخاصة الأخرى وloopback وlink-local وmetadata تتطلب اشتراكًا صريحًا عبر `models.providers..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..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..timeoutSeconds`. يمدد هذا معالجة طلبات HTTP الخاصة بنموذج المزوّد، بما في ذلك الاتصال، والترويسات، وبث الجسم، وإيقاف الجلب المحروس الإجمالي، من دون زيادة مهلة تشغيل الوكيل بالكامل. + - تسمح نداءات HTTP لمزوّد النموذج بإجابات DNS ذات IP زائف من Surge وClash وsing-box في `198.18.0.0/15` و`fc00::/7` فقط لاسم مضيف `baseUrl` الخاص بالمزوّد المضبوط. لا تزال الوجهات الخاصة الأخرى، وloopback، وlink-local، والبيانات الوصفية تتطلب اشتراكاً صريحاً عبر `models.providers..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..headers["anthropic-beta"]` صراحةً إذا كان وكيلك يحتاج إلى ميزات beta محددة. @@ -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) - أدلة الإعداد لكل مزوّد diff --git a/docs/ar/plugins/codex-harness.md b/docs/ar/plugins/codex-harness.md index 1492b18bd..fd6f6f89b 100644 --- a/docs/ar/plugins/codex-harness.md +++ b/docs/ar/plugins/codex-harness.md @@ -1,54 +1,53 @@ --- read_when: - - تريد استخدام إطار تشغيل خادم التطبيقات المضمّن الخاص بـ Codex - - تحتاج إلى أمثلة لتكوين إطار تشغيل Codex - - تريد أن تفشل عمليات النشر المقتصرة على Codex بدلًا من الرجوع احتياطيًا إلى PI -summary: تشغيل جولات وكيل OpenClaw المضمّن عبر إطار تشغيل خادم التطبيق المرفق من Codex -title: إطار Codex + - تريد استخدام إطار تشغيل خادم تطبيق Codex المضمّن + - تحتاج إلى أمثلة لإعدادات حاضنة Codex + - تريد أن تفشل عمليات النشر المخصصة لـ Codex فقط بدلًا من الرجوع احتياطيًا إلى PI +summary: شغّل جولات الوكيل المضمّن في OpenClaw عبر إطار تشغيل app-server المرفق مع Codex +title: بيئة اختبار Codex x-i18n: - generated_at: "2026-05-06T08:06:14Z" + generated_at: "2026-05-06T09:02:30Z" model: gpt-5.5 provider: openai - source_hash: 353812c804c896eccc3415a108e8b9c4628adb8c98bba8978bfc6c3dc57587b5 + source_hash: a35ab08c1a7327437aadb6c2517bd962071bbb25982718d4c0b043680163ab70 source_path: plugins/codex-harness.md workflow: 16 --- -يتيح Plugin `codex` المضمّن لـ OpenClaw تشغيل دورات الوكيل المضمّنة عبر -خادم تطبيق Codex بدلا من حزمة PI المدمجة. +تتيح Plugin `codex` المضمّنة لـ OpenClaw تشغيل دورات الوكيل المضمّنة عبر +خادم تطبيق Codex بدلا من مسار PI المدمج. استخدم هذا عندما تريد أن يتولى Codex ملكية جلسة الوكيل منخفضة المستوى: اكتشاف -النماذج، واستئناف الخيط الأصلي، وCompaction الأصلي، وتنفيذ خادم التطبيق. -يظل OpenClaw مسؤولا عن قنوات الدردشة، وملفات الجلسات، واختيار النماذج، والأدوات، -والموافقات، وتسليم الوسائط، ومرآة السجل المرئي. +النموذج، واستئناف السلسلة الأصلي، وCompaction الأصلية، وتنفيذ خادم التطبيق. +يظل OpenClaw مسؤولا عن قنوات المحادثة، وملفات الجلسة، واختيار النموذج، والأدوات، +والموافقات، وتسليم الوسائط، ومرآة النص الظاهر. -عندما تعمل دورة دردشة مصدرية عبر حزمة Codex، تكون الردود المرئية افتراضيا عبر -أداة OpenClaw `message` إذا لم يضبط النشر `messages.visibleReplies` صراحة. -لا يزال بإمكان الوكيل إنهاء دورة Codex الخاصة به بخصوصية؛ ولا ينشر في القناة -إلا عندما يستدعي `message(action="send")`. اضبط -`messages.visibleReplies: "automatic"` لإبقاء الردود النهائية للدردشة المباشرة +عندما تمر دورة محادثة مصدرية عبر مسار Codex، تكون الردود المرئية افتراضيا +عبر أداة OpenClaw `message` إذا لم يضبط النشر `messages.visibleReplies` +صراحة. لا يزال بإمكان الوكيل إنهاء دورة Codex الخاصة به بشكل خاص؛ ولا ينشر في +القناة إلا عندما يستدعي `message(action="send")`. اضبط +`messages.visibleReplies: "automatic"` لإبقاء الردود النهائية للمحادثات المباشرة على مسار التسليم التلقائي القديم. -تحصل دورات Heartbeat في Codex أيضا على أداة `heartbeat_respond` افتراضيا، حتى -يستطيع الوكيل تسجيل ما إذا كان ينبغي أن تبقى الإيقاظة صامتة أو ترسل إشعارا من -دون ترميز تدفق التحكم هذا في النص النهائي. +تحصل دورات Heartbeat في Codex أيضا على أداة `heartbeat_respond` افتراضيا، بحيث +يمكن للوكيل تسجيل ما إذا كان ينبغي أن تبقى اليقظة صامتة أو ترسل إشعارا من دون +ترميز تدفق التحكم هذا في النص النهائي. -ترسل إرشادات المبادرة الخاصة بـ Heartbeat كتعليمة مطور في نمط التعاون الخاص -بـ Codex على دورة Heartbeat نفسها. أما دورات الدردشة العادية فتستعيد وضع Codex -الافتراضي بدلا من حمل فلسفة Heartbeat في مطالبة وقت التشغيل العادية الخاصة بها. +يتم إرسال إرشادات المبادرة الخاصة بـ Heartbeat كتعليمة مطور في وضع تعاون Codex +على دورة Heartbeat نفسها. تستعيد دورات المحادثة العادية وضع Codex Default بدلا +من حمل فلسفة Heartbeat في موجّه وقت التشغيل العادي. -إذا كنت تحاول تحديد نقطة البداية، فابدأ من -[بيئات تشغيل الوكلاء](/ar/concepts/agent-runtimes). النسخة المختصرة هي: -`openai/gpt-5.5` هو مرجع النموذج، و`codex` هو بيئة التشغيل، وتظل Telegram أو +إذا كنت تحاول تكوين تصور عام، فابدأ بـ +[أوقات تشغيل الوكلاء](/ar/concepts/agent-runtimes). الخلاصة القصيرة هي: +`openai/gpt-5.5` هو مرجع النموذج، و`codex` هو وقت التشغيل، وتبقى Telegram أو Discord أو Slack أو قناة أخرى هي سطح التواصل. -## الإعداد السريع +## تهيئة سريعة -معظم المستخدمين الذين يريدون "Codex داخل OpenClaw" يريدون هذا المسار: سجّل -الدخول باشتراك ChatGPT/Codex، ثم شغّل دورات الوكيل المضمّنة عبر بيئة تشغيل -خادم تطبيق Codex الأصلية. يبقى مرجع النموذج معياريا كـ -`openai/gpt-*`؛ تأتي مصادقة الاشتراك من حساب/ملف Codex الشخصي، لا من بادئة -نموذج `openai-codex/*`. +يريد معظم المستخدمين الذين يرغبون في "Codex داخل OpenClaw" هذا المسار: تسجيل +الدخول باشتراك ChatGPT/Codex، ثم تشغيل دورات الوكيل المضمّنة عبر وقت تشغيل +خادم تطبيق Codex الأصلي. يظل مرجع النموذج معياريا كـ `openai/gpt-*`؛ وتأتي +مصادقة الاشتراك من حساب/ملف Codex، لا من بادئة نموذج `openai-codex/*`. سجّل الدخول أولا باستخدام Codex OAuth إذا لم تكن قد فعلت ذلك بالفعل: @@ -56,7 +55,7 @@ Discord أو Slack أو قناة أخرى هي سطح التواصل. openclaw models auth login --provider openai-codex ``` -ثم فعّل Plugin `codex` المضمّن وافرض بيئة تشغيل Codex: +ثم فعّل Plugin `codex` المضمّنة وافرض وقت تشغيل Codex: ```json5 { @@ -78,7 +77,7 @@ openclaw models auth login --provider openai-codex } ``` -إذا كان إعدادك يستخدم `plugins.allow`، فأدرج `codex` هناك أيضا: +إذا كانت تهيئتك تستخدم `plugins.allow`، فأدرج `codex` هناك أيضا: ```json5 { @@ -93,206 +92,201 @@ openclaw models auth login --provider openai-codex } ``` -لا تستخدم `openai-codex/gpt-*` في الإعداد. هذه البادئة مسار قديم يعيد +لا تستخدم `openai-codex/gpt-*` في التهيئة. هذه البادئة مسار قديم يعيد `openclaw doctor --fix` كتابته إلى `openai/gpt-*` عبر النماذج الأساسية، -والبدائل، وتجاوزات Heartbeat/الوكيل الفرعي/Compaction، والخطافات، وتجاوزات -القنوات، ودبابيس مسارات الجلسات المحفوظة القديمة. +والاحتياطيات، وتجاوزات heartbeat/الوكيل الفرعي/Compaction، والخطافات، وتجاوزات +القنوات، وتثبيتات مسار الجلسات المستمرة القديمة. -## ما الذي يغيره هذا Plugin +## ما الذي تغيّره هذه Plugin -يساهم Plugin `codex` المضمّن بعدة قدرات منفصلة: +تضيف Plugin `codex` المضمّنة عدة قدرات منفصلة: -| القدرة | كيف تستخدمها | ما الذي تفعله | -| --------------------------------- | ---------------------------------------------------- | ----------------------------------------------------------------------------- | -| بيئة تشغيل مضمّنة أصلية | `agentRuntime.id: "codex"` | تشغّل دورات وكيل OpenClaw المضمّنة عبر خادم تطبيق Codex. | -| أوامر تحكم دردشة أصلية | `/codex bind`, `/codex resume`, `/codex steer`, ... | تربط خيوط خادم تطبيق Codex وتتحكم فيها من محادثة مراسلة. | -| مزود/فهرس خادم تطبيق Codex | داخليات `codex`، مكشوفة عبر الحزمة | يتيح لبيئة التشغيل اكتشاف نماذج خادم التطبيق والتحقق منها. | -| مسار فهم الوسائط في Codex | مسارات توافق نماذج الصور `codex/*` | يشغّل دورات خادم تطبيق Codex محدودة لنماذج فهم الصور المدعومة. | -| ترحيل خطافات أصلي | خطافات Plugin حول أحداث Codex الأصلية | يتيح لـ OpenClaw مراقبة/حظر أحداث أدوات/إنهاء Codex الأصلية المدعومة. | +| القدرة | كيف تستخدمها | ما الذي تفعله | +| --------------------------------- | --------------------------------------------------- | ----------------------------------------------------------------------------- | +| وقت تشغيل مضمّن أصلي | `agentRuntime.id: "codex"` | يشغّل دورات وكيل OpenClaw المضمّنة عبر خادم تطبيق Codex. | +| أوامر تحكم محادثة أصلية | `/codex bind`, `/codex resume`, `/codex steer`, ... | يربط ويتحكم في سلاسل خادم تطبيق Codex من محادثة مراسلة. | +| موفر/فهرس خادم تطبيق Codex | داخليات `codex`، معروضة عبر المسار | يتيح لوقت التشغيل اكتشاف نماذج خادم التطبيق والتحقق منها. | +| مسار فهم الوسائط في Codex | مسارات توافق نماذج الصور `codex/*` | يشغّل دورات محدودة في خادم تطبيق Codex لنماذج فهم الصور المدعومة. | +| ترحيل الخطافات الأصلي | خطافات Plugin حول أحداث Codex الأصلية | يتيح لـ OpenClaw مراقبة/حظر أحداث الأدوات/الإنهاء الأصلية المدعومة في Codex. | -تفعيل Plugin يجعل هذه القدرات متاحة. لا يقوم ذلك بـ: +جعل Plugin مفعّلة يتيح هذه القدرات. لكنه **لا**: -- البدء باستخدام Codex لكل نموذج OpenAI -- تحويل مراجع نماذج `openai-codex/*` إلى بيئة التشغيل الأصلية من دون أن يتحقق doctor - من أن Codex مثبّت ومفعّل ويساهم بحزمة `codex` وجاهز لـ OAuth -- جعل ACP/acpx مسار Codex الافتراضي -- التبديل الفوري للجلسات الموجودة التي سجّلت بالفعل بيئة تشغيل PI -- استبدال تسليم قنوات OpenClaw أو ملفات الجلسات أو تخزين ملفات المصادقة الشخصية أو +- يبدأ باستخدام Codex لكل نموذج OpenAI +- يحوّل مراجع نماذج `openai-codex/*` إلى وقت التشغيل الأصلي من دون أن يتحقق doctor + من أن Codex مثبتة، ومفعّلة، وتساهم بمسار `codex`، وجاهزة لـ OAuth +- يجعل ACP/acpx مسار Codex الافتراضي +- يبدّل الجلسات القائمة التي سجّلت مسبقا وقت تشغيل PI بشكل فوري +- يستبدل تسليم قنوات OpenClaw، أو ملفات الجلسات، أو تخزين ملفات المصادقة، أو توجيه الرسائل -يمتلك Plugin نفسه أيضا سطح أوامر التحكم بالدردشة الأصلية `/codex`. إذا كان -Plugin مفعّلا وطلب المستخدم ربط خيوط Codex أو استئنافها أو توجيهها أو إيقافها -أو فحصها من الدردشة، فينبغي للوكلاء تفضيل `/codex ...` على ACP. يظل ACP هو -الخيار الاحتياطي الصريح عندما يطلب المستخدم ACP/acpx أو يختبر محول Codex ACP. +تملك Plugin نفسها أيضا سطح أوامر التحكم بالمحادثة الأصلية `/codex`. إذا كانت +Plugin مفعّلة وطلب المستخدم ربط سلاسل Codex أو استئنافها أو توجيهها أو إيقافها +أو فحصها من المحادثة، فينبغي للوكلاء تفضيل `/codex ...` على ACP. يبقى ACP هو +الخيار الاحتياطي الصريح عندما يطلب المستخدم ACP/acpx أو يختبر موائم Codex لـ ACP. -تحافظ دورات Codex الأصلية على خطافات Plugin في OpenClaw كطبقة التوافق العامة. +تحافظ دورات Codex الأصلية على خطافات OpenClaw Plugin كطبقة التوافق العامة. هذه خطافات OpenClaw داخل العملية، وليست خطافات أوامر Codex `hooks.json`: - `before_prompt_build` - `before_compaction`, `after_compaction` - `llm_input`, `llm_output` - `before_tool_call`, `after_tool_call` -- `before_message_write` لسجلات السجل المنسوخة +- `before_message_write` لسجلات النص المرآة - `before_agent_finalize` عبر ترحيل Codex `Stop` - `agent_end` -يمكن لـ Plugins أيضا تسجيل برمجيات وسيطة محايدة لبيئة التشغيل لنتائج الأدوات -لإعادة كتابة نتائج أدوات OpenClaw الديناميكية بعد أن ينفذ OpenClaw الأداة وقبل -إرجاع النتيجة إلى Codex. هذا منفصل عن خطاف Plugin العام -`tool_result_persist`، الذي يحوّل كتابات نتائج الأدوات في السجل المملوك لـ -OpenClaw. +يمكن لـ Plugins أيضا تسجيل وسيط نتائج أدوات محايد لوقت التشغيل لإعادة كتابة +نتائج أدوات OpenClaw الديناميكية بعد أن ينفذ OpenClaw الأداة وقبل إرجاع النتيجة +إلى Codex. هذا منفصل عن خطاف Plugin العام `tool_result_persist`، الذي يحوّل +كتابات نتائج الأدوات في النص الذي يملكه OpenClaw. -لمعرفة دلالات خطافات Plugin نفسها، راجع [خطافات Plugin](/ar/plugins/hooks) +لمعاني خطافات Plugin نفسها، راجع [خطافات Plugin](/ar/plugins/hooks) و[سلوك حارس Plugin](/ar/tools/plugin). -الحزمة متوقفة افتراضيا. ينبغي للإعدادات الجديدة أن تبقي مراجع نماذج OpenAI -معيارية كـ `openai/gpt-*` وأن تفرض صراحة -`agentRuntime.id: "codex"` أو `OPENCLAW_AGENT_RUNTIME=codex` عندما تريد تنفيذ -خادم التطبيق الأصلي. لا تزال مراجع نماذج `codex/*` القديمة تختار الحزمة تلقائيا -للتوافق، لكن بادئات المزود القديمة المدعومة ببيئة تشغيل لا تظهر كخيارات -نماذج/مزودين عادية. +المسار معطّل افتراضيا. ينبغي للتهيئات الجديدة إبقاء مراجع نماذج OpenAI معيارية +كـ `openai/gpt-*` وفرض +`agentRuntime.id: "codex"` أو `OPENCLAW_AGENT_RUNTIME=codex` صراحة عندما تريد +تنفيذ خادم التطبيق الأصلي. لا تزال مراجع نماذج `codex/*` القديمة تختار المسار +تلقائيا للتوافق، لكن بادئات الموفر القديمة المدعومة بوقت التشغيل لا تظهر كخيارات +نماذج/موفرين عادية. -إذا ظل أي مسار نموذج مضبوط هو `openai-codex/*`، فإن `openclaw doctor --fix` -يعيد كتابته إلى `openai/*`. وبالنسبة لمسارات الوكلاء المطابقة، فإنه يضبط بيئة -تشغيل الوكيل على `codex` فقط عندما يكون Plugin Codex مثبّتا ومفعّلا ويساهم -بحزمة `codex` ولديه OAuth صالح للاستخدام؛ وإلا فإنه يضبط بيئة التشغيل على `pi`. +إذا كان أي مسار نموذج مضبوط لا يزال `openai-codex/*`، يعيد +`openclaw doctor --fix` كتابته إلى `openai/*`. بالنسبة لمسارات الوكيل المطابقة، +يضبط وقت تشغيل الوكيل على `codex` فقط عندما تكون Plugin Codex مثبتة، ومفعّلة، +وتساهم بمسار `codex`، ولديها OAuth صالح للاستخدام؛ وإلا فيضبط وقت التشغيل على +`pi`. ## خريطة المسارات -استخدم هذا الجدول قبل تغيير الإعداد: +استخدم هذا الجدول قبل تغيير التهيئة: -| السلوك المطلوب | مرجع النموذج | إعداد بيئة التشغيل | مسار المصادقة/الملف الشخصي | تسمية الحالة المتوقعة | -| --------------------------------------------------- | -------------------------- | ------------------------------------- | --------------------------------- | ------------------------------ | -| اشتراك ChatGPT/Codex مع بيئة تشغيل Codex أصلية | `openai/gpt-*` | `agentRuntime.id: "codex"` | Codex OAuth أو حساب Codex | `Runtime: OpenAI Codex` | -| واجهة OpenAI API عبر مشغّل OpenClaw العادي | `openai/gpt-*` | محذوف أو `runtime: "pi"` | مفتاح OpenAI API | `Runtime: OpenClaw Pi Default` | -| إعداد قديم يحتاج إلى إصلاح doctor | `openai-codex/gpt-*` | يصلح إلى `codex` أو `pi` | المصادقة المضبوطة الحالية | أعد الفحص بعد `doctor --fix` | -| مزودون مختلطون مع وضع تلقائي محافظ | مراجع خاصة بالمزود | `agentRuntime.id: "auto"` | حسب المزود المحدد | يعتمد على بيئة التشغيل المحددة | -| جلسة محول Codex ACP صريحة | يعتمد على مطالبة/نموذج ACP | `sessions_spawn` مع `runtime: "acp"` | مصادقة خلفية ACP | حالة مهمة/جلسة ACP | +| السلوك المطلوب | مرجع النموذج | تهيئة وقت التشغيل | مسار المصادقة/الملف | تسمية الحالة المتوقعة | +| --------------------------------------------------- | -------------------------- | -------------------------------------- | ---------------------------- | ------------------------------ | +| اشتراك ChatGPT/Codex مع وقت تشغيل Codex أصلي | `openai/gpt-*` | `agentRuntime.id: "codex"` | Codex OAuth أو حساب Codex | `Runtime: OpenAI Codex` | +| OpenAI API عبر مشغّل OpenClaw العادي | `openai/gpt-*` | محذوفة أو `runtime: "pi"` | مفتاح OpenAI API | `Runtime: OpenClaw Pi Default` | +| تهيئة قديمة تحتاج إصلاح doctor | `openai-codex/gpt-*` | يتم إصلاحها إلى `codex` أو `pi` | المصادقة الحالية المضبوطة | أعد الفحص بعد `doctor --fix` | +| موفرون مختلطون مع وضع تلقائي محافظ | مراجع خاصة بالموفر | `agentRuntime.id: "auto"` | حسب الموفر المحدد | يعتمد على وقت التشغيل المحدد | +| جلسة موائم Codex ACP صريحة | يعتمد على موجّه/نموذج ACP | `sessions_spawn` مع `runtime: "acp"` | مصادقة واجهة ACP الخلفية | حالة مهمة/جلسة ACP | -الفاصل المهم هو المزود مقابل بيئة التشغيل: +الفصل المهم هو بين الموفر ووقت التشغيل: - `openai-codex/*` مسار قديم يعيد doctor كتابته. -- `agentRuntime.id: "codex"` يتطلب حزمة Codex ويفشل بإغلاق إذا لم تكن متاحة. -- يتيح `agentRuntime.id: "auto"` للحزم المسجلة المطالبة بمسارات المزود المطابقة، - لكن مراجع OpenAI المعيارية تظل مملوكة لـ PI ما لم تدعم حزمة زوج المزود/النموذج - ذلك. -- يجيب `/codex ...` عن سؤال "أي محادثة Codex أصلية ينبغي أن ترتبط بها هذه الدردشة - أو تتحكم فيها؟" -- يجيب ACP عن سؤال "أي عملية حزمة خارجية ينبغي أن يطلقها acpx؟" +- يتطلب `agentRuntime.id: "codex"` مسار Codex ويفشل مغلقا إذا لم يكن متاحا. +- يسمح `agentRuntime.id: "auto"` للمسارات المسجلة بالمطالبة بمسارات الموفر + المطابقة، لكن مراجع OpenAI المعيارية تظل مملوكة لـ PI ما لم يدعم مسار ما + زوج الموفر/النموذج هذا. +- يجيب `/codex ...` عن "أي محادثة Codex أصلية ينبغي لهذه المحادثة ربطها + أو التحكم فيها؟" +- يجيب ACP عن "أي عملية مسار خارجية ينبغي أن يطلقها acpx؟" ## اختر بادئة النموذج الصحيحة -مسارات عائلة OpenAI خاصة بالبادئة. في إعداد الاشتراك الشائع مع بيئة تشغيل -Codex الأصلية، استخدم `openai/*` مع `agentRuntime.id: "codex"`. تعامل مع -`openai-codex/*` كإعداد قديم ينبغي لـ doctor إعادة كتابته: +مسارات عائلة OpenAI خاصة بالبادئة. لإعداد الاشتراك الشائع مع وقت تشغيل Codex +الأصلي، استخدم `openai/*` مع `agentRuntime.id: "codex"`. +تعامل مع `openai-codex/*` كتهيئة قديمة ينبغي أن يعيد doctor كتابتها: -| مرجع النموذج | مسار بيئة التشغيل | استخدمه عندما | -| --------------------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------- | -| `openai/gpt-5.4` | مزود OpenAI عبر تمديدات OpenClaw/PI | تريد وصولا مباشرا حاليا إلى OpenAI Platform API باستخدام `OPENAI_API_KEY`. | -| `openai-codex/gpt-5.5` | مسار قديم يصلحه doctor | لديك إعداد قديم؛ شغّل `openclaw doctor --fix` لإعادة كتابته. | -| `openai/gpt-5.5` + `agentRuntime.id: "codex"` | حزمة خادم تطبيق Codex | تريد مصادقة اشتراك ChatGPT/Codex مع تنفيذ Codex الأصلي. | +| مرجع النموذج | مسار وقت التشغيل | استخدمه عندما | +| --------------------------------------------- | -------------------------------------------- | ------------------------------------------------------------------------- | +| `openai/gpt-5.4` | موفر OpenAI عبر بنية OpenClaw/PI | تريد وصولا مباشرا حاليا إلى OpenAI Platform API مع `OPENAI_API_KEY`. | +| `openai-codex/gpt-5.5` | مسار قديم يصلحه doctor | أنت على تهيئة قديمة؛ شغّل `openclaw doctor --fix` لإعادة كتابتها. | +| `openai/gpt-5.5` + `agentRuntime.id: "codex"` | مسار خادم تطبيق Codex | تريد مصادقة اشتراك ChatGPT/Codex مع تنفيذ Codex أصلي. | -يمكن أن يظهر GPT-5.5 على كل من مسارات مفتاح OpenAI API المباشر واشتراك Codex -عندما يتيحها حسابك. استخدم `openai/gpt-5.5` مع حزمة خادم تطبيق Codex لبيئة -تشغيل Codex الأصلية، أو `openai/gpt-5.5` من دون تجاوز بيئة تشغيل Codex لحركة -مرور مفتاح API المباشرة. +يمكن أن يظهر GPT-5.5 على مسارات مفتاح OpenAI API المباشر واشتراك Codex عندما +يتيحها حسابك. استخدم `openai/gpt-5.5` مع مسار خادم تطبيق Codex لوقت تشغيل Codex +الأصلي، أو `openai/gpt-5.5` من دون تجاوز وقت تشغيل Codex لحركة مفتاح API مباشرة. تظل مراجع `codex/gpt-*` القديمة مقبولة كأسماء مستعارة للتوافق. تعيد هجرة توافق -doctor كتابة مراجع بيئة التشغيل القديمة إلى مراجع نماذج معيارية وتسجل سياسة -بيئة التشغيل بشكل منفصل. ينبغي لإعدادات حزمة خادم التطبيق الأصلية الجديدة أن -تستخدم `openai/gpt-*` إضافة إلى `agentRuntime.id: "codex"`. +doctor كتابة مراجع وقت التشغيل القديمة إلى مراجع نماذج معيارية وتسجل سياسة وقت +التشغيل بشكل منفصل. ينبغي لتهيئات مسار خادم التطبيق الأصلي الجديدة استخدام +`openai/gpt-*` مع `agentRuntime.id: "codex"`. -يتبع `agents.defaults.imageModel` فصل البادئات نفسه. استخدم +يتبع `agents.defaults.imageModel` الفصل نفسه بين البادئات. استخدم `openai/gpt-*` لمسار OpenAI العادي و`codex/gpt-*` عندما ينبغي أن يعمل فهم الصور -عبر دورة محدودة من خادم تطبيق Codex. لا تستخدم `openai-codex/gpt-*`؛ يعيد -doctor كتابة تلك البادئة القديمة إلى `openai/gpt-*`. يجب أن يعلن نموذج خادم -تطبيق Codex دعمه لإدخال الصور؛ تفشل نماذج Codex النصية فقط قبل أن تبدأ دورة -الوسائط. +عبر دورة محدودة في خادم تطبيق Codex. لا تستخدم `openai-codex/gpt-*`؛ يعيد doctor +كتابة هذه البادئة القديمة إلى `openai/gpt-*`. يجب أن يعلن نموذج خادم تطبيق Codex +دعمه لإدخال الصور؛ نماذج Codex النصية فقط تفشل قبل بدء دورة الوسائط. -استخدم `/status` لتأكيد الحزمة الفعلية للجلسة الحالية. إذا كان الاختيار مفاجئا، -فعّل تسجيل التصحيح للنظام الفرعي `agents/harness` وافحص سجل Gateway المنظم -`agent harness selected`. يتضمن ذلك معرّف الحزمة المحددة، وسبب الاختيار، -وسياسة بيئة التشغيل/الرجوع، وفي وضع `auto` نتيجة دعم كل مرشح Plugin. +استخدم `/status` لتأكيد المسار الفعال للجلسة الحالية. إذا كان الاختيار مفاجئا، +فعّل التسجيل التفصيلي للنظام الفرعي `agents/harness` وافحص سجل Gateway المنظم +`agent harness selected`. يتضمن معرّف المسار المحدد، وسبب الاختيار، وسياسة +وقت التشغيل/الاحتياطي، وفي وضع `auto`، نتيجة دعم كل مرشح Plugin. -### معنى تحذيرات doctor +### ما الذي تعنيه تحذيرات doctor -يحذر `openclaw doctor` عندما لا تزال مراجع النماذج المضبوطة أو حالة مسار -الجلسة المحفوظة تستخدم `openai-codex/*`. يعيد `openclaw doctor --fix` كتابة -تلك المسارات إلى: +يحذر `openclaw doctor` عندما لا تزال مراجع النماذج المضبوطة أو حالة مسار الجلسة +المستمرة تستخدم `openai-codex/*`. يعيد `openclaw doctor --fix` كتابة تلك المسارات +إلى: - `openai/` -- `agentRuntime.id: "codex"` عندما يكون Codex مثبّتا ومفعّلا ويساهم بحزمة - `codex` ولديه OAuth صالح للاستخدام -- `agentRuntime.id: "pi"` بخلاف ذلك +- `agentRuntime.id: "codex"` عندما يكون Codex مثبتا، ومفعّلا، ويساهم بمسار + `codex`، ولديه OAuth صالح للاستخدام +- `agentRuntime.id: "pi"` في غير ذلك -يفرض مسار `codex` حزمة Codex الأصلية. أما مسار `pi` فيبقي الوكيل على مشغّل -OpenClaw الافتراضي بدلا من تمكين Codex أو تثبيته كأثر جانبي لتنظيف المسار القديم. -يصلح doctor أيضا دبابيس الجلسات المحفوظة القديمة عبر مخازن جلسات الوكلاء +يفرض مسار `codex` مسار Codex الأصلي. يبقي مسار `pi` الوكيل على مشغّل OpenClaw +الافتراضي بدلا من تفعيل Codex أو تثبيته كأثر جانبي لتنظيف المسار القديم. +يصلح doctor أيضا تثبيتات الجلسات المستمرة القديمة عبر مخازن جلسات الوكلاء المكتشفة حتى لا تبقى المحادثات القديمة عالقة على المسار المحذوف. -اختيار أداة التشغيل ليس عنصر تحكم مباشرًا في الجلسة. عند تشغيل دور مضمّن، -يسجل OpenClaw معرّف أداة التشغيل المحددة على تلك الجلسة ويواصل استخدامه -للأدوار اللاحقة داخل معرّف الجلسة نفسه. غيّر إعداد `agentRuntime` أو -`OPENCLAW_AGENT_RUNTIME` عندما تريد أن تستخدم الجلسات المستقبلية أداة تشغيل أخرى؛ -واستخدم `/new` أو `/reset` لبدء جلسة جديدة قبل تبديل محادثة قائمة -بين PI وCodex. يتجنب هذا إعادة تشغيل نص جلسة واحد عبر نظامي جلسات أصليين -غير متوافقين. +اختيار الحاضنة ليس عنصر تحكم في جلسة مباشرة. عند تشغيل دور مضمّن، +يسجّل OpenClaw معرّف الحاضنة المحددة في تلك الجلسة ويستمر في استخدامه +للأدوار اللاحقة ضمن معرّف الجلسة نفسه. غيّر إعداد `agentRuntime` أو +`OPENCLAW_AGENT_RUNTIME` عندما تريد أن تستخدم الجلسات المستقبلية حاضنة أخرى؛ +استخدم `/new` أو `/reset` لبدء جلسة جديدة قبل تبديل محادثة حالية بين PI وCodex. +يمنع هذا إعادة تشغيل نص محادثة واحد عبر نظامي جلسات أصليين غير متوافقين. -تُعامل الجلسات القديمة التي أُنشئت قبل تثبيت أدوات التشغيل على أنها مثبتة على PI بمجرد -أن يصبح لديها سجل محادثة. استخدم `/new` أو `/reset` لإدخال تلك المحادثة في -Codex بعد تغيير الإعداد. +تُعامل الجلسات القديمة التي أُنشئت قبل تثبيت الحاضنة على أنها مثبتة على PI بمجرد +أن يكون لديها سجل محادثة. استخدم `/new` أو `/reset` لإدخال تلك المحادثة في +Codex بعد تغيير الإعدادات. -يعرض `/status` وقت تشغيل النموذج الفعّال. تظهر أداة تشغيل PI الافتراضية باسم -`Runtime: OpenClaw Pi Default`، وتظهر أداة تشغيل خادم تطبيق Codex باسم +يعرض `/status` وقت تشغيل النموذج الفعلي. تظهر حاضنة PI الافتراضية على أنها +`Runtime: OpenClaw Pi Default`، وتظهر حاضنة خادم تطبيق Codex على أنها `Runtime: OpenAI Codex`. ## المتطلبات -- OpenClaw مع Plugin `codex` المضمّن متاحًا. -- خادم تطبيق Codex بالإصدار `0.125.0` أو أحدث. يدير Plugin المضمّن ملفًا ثنائيًا - متوافقًا لخادم تطبيق Codex افتراضيًا، لذلك لا تؤثر أوامر `codex` المحلية على `PATH` - في بدء تشغيل أداة التشغيل العادي. -- مصادقة Codex متاحة لعملية خادم التطبيق أو لجسر مصادقة Codex الخاص بـ OpenClaw. - تستخدم عمليات تشغيل خادم التطبيق المحلية منزل Codex مُدارًا من OpenClaw لكل - وكيل و`HOME` فرعيًا معزولًا، لذلك لا تقرأ حسابك الشخصي في - `~/.codex` أو المهارات أو Plugins أو الإعداد أو حالة الخيط أو - `$HOME/.agents/skills` الأصلية افتراضيًا. +- OpenClaw مع Plugin `codex` المضمّن المتاح. +- خادم تطبيق Codex `0.125.0` أو أحدث. يدير Plugin المضمّن ملفًا ثنائيًا متوافقًا + لخادم تطبيق Codex افتراضيًا، لذلك لا تؤثر أوامر `codex` المحلية على `PATH` + في بدء تشغيل الحاضنة العادي. +- توفر مصادقة Codex لعملية خادم التطبيق أو لجسر مصادقة Codex في OpenClaw. + تستخدم عمليات تشغيل خادم التطبيق المحلية مجلد Codex رئيسيًا يديره OpenClaw لكل + وكيل و`HOME` فرعيًا معزولًا، لذلك لا تقرأ حسابك الشخصي في `~/.codex` أو Skills + أو plugins أو الإعدادات أو حالة السلاسل أو `$HOME/.agents/skills` الأصلي + افتراضيًا. -يحظر Plugin مصافحات خادم التطبيق الأقدم أو غير المعرّفة بالإصدار. يحافظ ذلك على -OpenClaw ضمن سطح البروتوكول الذي تم اختباره عليه. +يحظر Plugin مصافحات خادم التطبيق الأقدم أو غير محددة الإصدار. يحافظ ذلك على +OpenClaw ضمن سطح البروتوكول الذي اختُبر عليه. -بالنسبة لاختبارات الدخان الحية واختبارات Docker، تأتي المصادقة عادةً من حساب Codex CLI -أو ملف تعريف مصادقة OpenClaw `openai-codex`. ويمكن لعمليات تشغيل خادم تطبيق stdio +في اختبارات الدخان المباشرة وDocker، تأتي المصادقة عادةً من حساب Codex CLI أو +ملف مصادقة OpenClaw باسم `openai-codex`. يمكن لعمليات تشغيل خادم تطبيق stdio المحلية أيضًا الرجوع إلى `CODEX_API_KEY` / `OPENAI_API_KEY` عند عدم وجود حساب. ## ملفات تمهيد مساحة العمل -يتعامل Codex مع `AGENTS.md` بنفسه عبر اكتشاف مستندات المشروع الأصلية. لا يكتب OpenClaw -ملفات مستندات مشروع Codex اصطناعية ولا يعتمد على أسماء ملفات Codex الاحتياطية لملفات -الشخصية، لأن احتياطات Codex لا تنطبق إلا عند غياب -`AGENTS.md`. +يتعامل Codex مع `AGENTS.md` بنفسه عبر اكتشاف مستندات المشروع الأصلية. لا يكتب +OpenClaw ملفات مستندات مشروع Codex اصطناعية ولا يعتمد على أسماء ملفات الرجوع في +Codex لملفات الشخصية، لأن بدائل Codex لا تنطبق إلا عند غياب `AGENTS.md`. -لمعادلة مساحة عمل OpenClaw، تحل أداة تشغيل Codex ملفات التمهيد الأخرى -(`SOUL.md` و`TOOLS.md` و`IDENTITY.md` و`USER.md` و`HEARTBEAT.md` و -`BOOTSTRAP.md` و`MEMORY.md` عند وجودها) وتمررها عبر تعليمات إعداد Codex -في `thread/start` و`thread/resume`. يحافظ هذا على ظهور سياق الشخصية/الملف الشخصي -لمساحة العمل في `SOUL.md` والملفات ذات الصلة دون تكرار -`AGENTS.md`. +لتحقيق تكافؤ مساحة عمل OpenClaw، تحل حاضنة Codex ملفات التمهيد الأخرى +(`SOUL.md` و`TOOLS.md` و`IDENTITY.md` و`USER.md` و`HEARTBEAT.md` و`BOOTSTRAP.md` +و`MEMORY.md` عند وجودها) وتمررها عبر تعليمات مطوري Codex في `thread/start` و +`thread/resume`. يحافظ هذا على ظهور `SOUL.md` وسياق الشخصية/الملف التعريفي ذي +الصلة لمساحة العمل في مسار تشكيل سلوك Codex الأصلي بدون تكرار `AGENTS.md`. -## إضافة Codex إلى جانب النماذج الأخرى +## إضافة Codex إلى جانب نماذج أخرى -لا تضبط `agentRuntime.id: "codex"` عامًا إذا كان ينبغي للوكيل نفسه التبديل بحرية -بين Codex ونماذج مزودي غير Codex. ينطبق وقت التشغيل المفروض على كل -دور مضمّن لذلك الوكيل أو الجلسة. إذا اخترت نموذج Anthropic بينما -وقت التشغيل هذا مفروض، فسيظل OpenClaw يحاول استخدام أداة تشغيل Codex ويفشل بإغلاق -بدلًا من توجيه ذلك الدور بصمت عبر PI. +لا تضبط `agentRuntime.id: "codex"` عالميًا إذا كان ينبغي للوكيل نفسه التبديل +بحرية بين Codex ونماذج مزودي غير Codex. ينطبق وقت التشغيل المفروض على كل دور +مضمّن لذلك الوكيل أو تلك الجلسة. إذا اخترت نموذج Anthropic بينما وقت التشغيل +هذا مفروض، فسيظل OpenClaw يحاول استخدام حاضنة Codex ويفشل بإغلاق بدلاً من +توجيه ذلك الدور بصمت عبر PI. استخدم أحد هذه الأشكال بدلًا من ذلك: - ضع Codex على وكيل مخصص مع `agentRuntime.id: "codex"`. -- أبقِ الوكيل الافتراضي على `agentRuntime.id: "auto"` واحتياطي PI للاستخدام المختلط العادي - للمزودين. -- استخدم مراجع `codex/*` القديمة للتوافق فقط. ينبغي للإعدادات الجديدة تفضيل +- أبقِ الوكيل الافتراضي على `agentRuntime.id: "auto"` ورجوع PI للاستخدام العادي + المختلط بين المزودين. +- استخدم مراجع `codex/*` القديمة للتوافق فقط. يجب أن تفضل الإعدادات الجديدة `openai/*` مع سياسة وقت تشغيل Codex صريحة. على سبيل المثال، يُبقي هذا الوكيل الافتراضي على الاختيار التلقائي العادي ويضيف @@ -334,36 +328,35 @@ OpenClaw ضمن سطح البروتوكول الذي تم اختباره علي مع هذا الشكل: -- يستخدم الوكيل الافتراضي `main` مسار المزود العادي واحتياطي توافق PI. -- يستخدم وكيل `codex` أداة تشغيل خادم تطبيق Codex. -- إذا كان Codex مفقودًا أو غير مدعوم لوكيل `codex`، يفشل الدور - بدلًا من استخدام PI بهدوء. +- يستخدم الوكيل الافتراضي `main` مسار المزود العادي ورجوع توافق PI. +- يستخدم الوكيل `codex` حاضنة خادم تطبيق Codex. +- إذا كان Codex مفقودًا أو غير مدعوم للوكيل `codex`، يفشل الدور بدلًا من استخدام + PI بصمت. ## توجيه أوامر الوكيل -ينبغي للوكلاء توجيه طلبات المستخدم حسب القصد، وليس حسب كلمة "Codex" وحدها: +يجب أن يوجّه الوكلاء طلبات المستخدم حسب القصد، لا حسب كلمة "Codex" وحدها: -| عندما يطلب المستخدم... | ينبغي للوكيل استخدام... | +| ما يطلبه المستخدم... | يجب أن يستخدم الوكيل... | | ------------------------------------------------------ | ------------------------------------------------ | -| "اربط هذه المحادثة بـ Codex" | `/codex bind` | -| "استأنف خيط Codex `` هنا" | `/codex resume ` | -| "اعرض خيوط Codex" | `/codex threads` | -| "افتح تقرير دعم لتشغيل Codex سيئ" | `/diagnostics [note]` | -| "أرسل ملاحظات Codex فقط لهذا الخيط المرفق" | `/codex diagnostics [note]` | -| "استخدم اشتراك ChatGPT/Codex الخاص بي مع وقت تشغيل Codex" | `openai/*` بالإضافة إلى `agentRuntime.id: "codex"` | -| "أصلح تثبيتات إعداد/جلسة `openai-codex/*` القديمة" | `openclaw doctor --fix` | -| "شغّل Codex عبر ACP/acpx" | ACP `sessions_spawn({ runtime: "acp", ... })` | -| "ابدأ Claude Code/Gemini/OpenCode/Cursor في خيط" | ACP/acpx، وليس `/codex` وليس الوكلاء الفرعيين الأصليين | +| "اربط هذه الدردشة بـ Codex" | `/codex bind` | +| "استأنف سلسلة Codex `` هنا" | `/codex resume ` | +| "اعرض سلاسل Codex" | `/codex threads` | +| "قدّم تقرير دعم لتشغيل Codex سيئ" | `/diagnostics [note]` | +| "أرسل ملاحظات Codex فقط لهذه السلسلة المرفقة" | `/codex diagnostics [note]` | +| "استخدم اشتراكي في ChatGPT/Codex مع وقت تشغيل Codex" | `openai/*` plus `agentRuntime.id: "codex"` | +| "أصلح تثبيتات إعداد/جلسة `openai-codex/*` القديمة" | `openclaw doctor --fix` | +| "شغّل Codex عبر ACP/acpx" | ACP `sessions_spawn({ runtime: "acp", ... })` | +| "ابدأ Claude Code/Gemini/OpenCode/Cursor في سلسلة" | ACP/acpx، وليس `/codex` ولا الوكلاء الفرعيين الأصليين | -لا يعلن OpenClaw إرشادات إنشاء ACP للوكلاء إلا عندما يكون ACP مفعّلًا، -وقابلًا للإرسال، ومدعومًا بوقت تشغيل خلفي محمّل. إذا لم يكن ACP متاحًا، -فينبغي ألا يعلّم موجه النظام ومهارات Plugin الوكيل عن توجيه ACP. +لا يعلن OpenClaw إرشادات إنشاء ACP للوكلاء إلا عندما يكون ACP مفعّلًا وقابلًا +للإرسال ومدعومًا بواجهة وقت تشغيل خلفية محمّلة. إذا لم يكن ACP متاحًا، فيجب ألا +تعلّم مطالبة النظام وSkills الخاصة بالـ Plugin الوكيل عن توجيه ACP. ## عمليات نشر Codex فقط -افرض أداة تشغيل Codex عندما تحتاج إلى إثبات أن كل دور وكيل مضمّن -يستخدم Codex. تفشل أوقات تشغيل Plugin الصريحة بإغلاق ولا يُعاد تجربتها بصمت -عبر PI: +افرض حاضنة Codex عندما تحتاج إلى إثبات أن كل دور وكيل مضمّن يستخدم Codex. +تفشل أوقات تشغيل Plugin الصريحة بإغلاق ولا يُعاد تجريبها بصمت عبر PI مطلقًا: ```json5 { @@ -384,13 +377,13 @@ OpenClaw ضمن سطح البروتوكول الذي تم اختباره علي OPENCLAW_AGENT_RUNTIME=codex openclaw gateway run ``` -مع فرض Codex، يفشل OpenClaw مبكرًا إذا كان Plugin Codex معطلًا، أو كان -خادم التطبيق قديمًا جدًا، أو تعذر بدء خادم التطبيق. +مع فرض Codex، يفشل OpenClaw مبكرًا إذا كان Plugin Codex معطلًا، أو كان خادم +التطبيق قديمًا جدًا، أو تعذر بدء خادم التطبيق. ## Codex لكل وكيل -يمكنك جعل وكيل واحد مخصصًا لـ Codex فقط بينما يحافظ الوكيل الافتراضي على -الاختيار التلقائي العادي: +يمكنك جعل وكيل واحد خاصًا بـ Codex فقط بينما يحافظ الوكيل الافتراضي على الاختيار +التلقائي العادي: ```json5 { @@ -420,14 +413,14 @@ OPENCLAW_AGENT_RUNTIME=codex openclaw gateway run ``` استخدم أوامر الجلسة العادية للتبديل بين الوكلاء والنماذج. ينشئ `/new` جلسة -OpenClaw جديدة، وتنشئ أداة تشغيل Codex خيط خادم التطبيق الجانبي أو تستأنفه -عند الحاجة. يمسح `/reset` ربط جلسة OpenClaw لذلك الخيط -ويتيح للدور التالي حل أداة التشغيل من الإعداد الحالي مرة أخرى. +OpenClaw جديدة، وتنشئ حاضنة Codex سلسلة خادم التطبيق الجانبية الخاصة بها أو +تستأنفها حسب الحاجة. يمسح `/reset` ربط جلسة OpenClaw لتلك السلسلة ويسمح للدور +التالي بحل الحاضنة من الإعدادات الحالية مرة أخرى. ## اكتشاف النماذج -افتراضيًا، يطلب Plugin Codex من خادم التطبيق النماذج المتاحة. إذا -فشل الاكتشاف أو انتهت مهلته، يستخدم فهرسًا احتياطيًا مضمّنًا لـ: +افتراضيًا، يطلب Plugin Codex من خادم التطبيق النماذج المتاحة. إذا فشل الاكتشاف +أو انتهت مهلته، فإنه يستخدم كتالوج رجوع مضمّنًا لـ: - GPT-5.5 - GPT-5.4 mini @@ -453,8 +446,8 @@ OpenClaw جديدة، وتنشئ أداة تشغيل Codex خيط خادم ال } ``` -عطّل الاكتشاف عندما تريد أن يتجنب بدء التشغيل فحص Codex وأن يلتزم -بالفهرس الاحتياطي: +عطّل الاكتشاف عندما تريد أن يتجنب بدء التشغيل فحص Codex وأن يلتزم بكتالوج +الرجوع: ```json5 { @@ -473,26 +466,25 @@ OpenClaw جديدة، وتنشئ أداة تشغيل Codex خيط خادم ال } ``` -## اتصال خادم التطبيق والسياسة +## اتصال خادم التطبيق وسياسته -افتراضيًا، يبدأ Plugin ملف Codex الثنائي المدار من OpenClaw محليًا باستخدام: +افتراضيًا، يبدأ Plugin ملف Codex الثنائي المُدار من OpenClaw محليًا باستخدام: ```bash codex app-server --listen stdio:// ``` -يشحن الملف الثنائي المدار مع حزمة Plugin `codex`. يحافظ هذا على ربط إصدار -خادم التطبيق بـ Plugin المضمّن بدلًا من أي Codex CLI منفصل -مصادف للتثبيت محليًا. اضبط `appServer.command` فقط عندما -تريد عمدًا تشغيل ملف تنفيذي مختلف. +يُشحن الملف الثنائي المُدار مع حزمة Plugin `codex`. يحافظ هذا على ربط إصدار خادم +التطبيق بالـ Plugin المضمّن بدلًا من أي Codex CLI منفصل قد يكون مثبتًا محليًا. +اضبط `appServer.command` فقط عندما تريد عمدًا تشغيل ملف تنفيذي مختلف. -افتراضيًا، يبدأ OpenClaw جلسات أداة تشغيل Codex المحلية في وضع YOLO: +افتراضيًا، يبدأ OpenClaw جلسات حاضنة Codex المحلية في وضع YOLO: `approvalPolicy: "never"` و`approvalsReviewer: "user"` و -`sandbox: "danger-full-access"`. هذا هو وضع المشغل المحلي الموثوق المستخدم -لـ Heartbeat المستقلة: يستطيع Codex استخدام أدوات الصدفة والشبكة دون -التوقف عند مطالبات الموافقة الأصلية التي لا يوجد أحد حولها للإجابة عنها. +`sandbox: "danger-full-access"`. هذا هو وضع المشغّل المحلي الموثوق المستخدم +لـ Heartbeat الذاتية: يمكن لـ Codex استخدام أدوات الصدفة والشبكة بدون التوقف +عند مطالبات الموافقة الأصلية التي لا يوجد أحد للإجابة عليها. -للاشتراك في موافقات Codex المراجعة بالحارس، اضبط `appServer.mode: +للاشتراك في موافقات Codex التي يراجعها الحارس، اضبط `appServer.mode: "guardian"`: ```json5 @@ -513,21 +505,20 @@ codex app-server --listen stdio:// } ``` -يستخدم وضع الحارس مسار الموافقة بالمراجعة التلقائية الأصلي في Codex. عندما يطلب Codex -مغادرة صندوق الرمل، أو الكتابة خارج مساحة العمل، أو إضافة أذونات مثل الوصول إلى الشبكة، -يوجه Codex طلب الموافقة هذا إلى المراجع الأصلي بدلًا من -مطالبة بشرية. يطبق المراجع إطار مخاطر Codex ويوافق أو يرفض -الطلب المحدد. استخدم الحارس عندما تريد ضوابط أكثر من وضع YOLO -ولكنك لا تزال تحتاج إلى وكلاء غير مراقبين يحققون تقدمًا. +يستخدم وضع الحارس مسار موافقة المراجعة التلقائية الأصلي في Codex. عندما يطلب +Codex مغادرة صندوق العزل، أو الكتابة خارج مساحة العمل، أو إضافة أذونات مثل +الوصول إلى الشبكة، يوجه Codex طلب الموافقة هذا إلى المراجع الأصلي بدلًا من مطالبة +بشرية. يطبق المراجع إطار مخاطر Codex ويوافق على الطلب المحدد أو يرفضه. استخدم +الحارس عندما تريد حواجز حماية أكثر من وضع YOLO لكنك لا تزال تحتاج إلى أن يحرز +الوكلاء غير المراقبين تقدمًا. -يتوسع الضبط المسبق `guardian` إلى `approvalPolicy: "on-request"` و -`approvalsReviewer: "auto_review"` و`sandbox: "workspace-write"`. -لا تزال حقول السياسة الفردية تتجاوز `mode`، لذلك يمكن لعمليات النشر المتقدمة مزج -الضبط المسبق مع اختيارات صريحة. لا تزال قيمة المراجع القديمة `guardian_subagent` -مقبولة كاسم بديل للتوافق، لكن ينبغي للإعدادات الجديدة استخدام -`auto_review`. +يتوسع الإعداد المسبق `guardian` إلى `approvalPolicy: "on-request"` و +`approvalsReviewer: "auto_review"` و`sandbox: "workspace-write"`. لا تزال حقول +السياسة الفردية تتجاوز `mode`، لذلك يمكن لعمليات النشر المتقدمة مزج الإعداد +المسبق مع اختيارات صريحة. لا تزال قيمة المراجع الأقدم `guardian_subagent` مقبولة +كاسم مستعار للتوافق، لكن يجب أن تستخدم الإعدادات الجديدة `auto_review`. -بالنسبة إلى خادم تطبيق قيد التشغيل بالفعل، استخدم نقل WebSocket: +لخادم تطبيق قيد التشغيل بالفعل، استخدم نقل WebSocket: ```json5 { @@ -549,45 +540,47 @@ codex app-server --listen stdio:// } ``` -ترث عمليات تشغيل خادم تطبيق stdio بيئة عملية OpenClaw افتراضيًا، -لكن OpenClaw يملك جسر حساب خادم تطبيق Codex ويضبط كلًا من -`CODEX_HOME` و`HOME` إلى أدلة لكل وكيل ضمن حالة OpenClaw لذلك الوكيل. -يقرأ محمّل المهارات الخاص بـ Codex كلًا من `$CODEX_HOME/skills` و -`$HOME/.agents/skills`، لذلك تكون القيمتان معزولتين لعمليات تشغيل خادم التطبيق -المحلية. يحافظ ذلك على حصر مهارات Codex الأصلية وPlugins والإعداد والحسابات وحالة الخيط -ضمن وكيل OpenClaw بدلًا من تسربها من منزل Codex CLI الشخصي -للمشغل. +ترث عمليات تشغيل خادم تطبيق stdio بيئة عملية OpenClaw افتراضيًا، لكن OpenClaw +يمتلك جسر حساب خادم تطبيق Codex ويضبط كلًا من `CODEX_HOME` و`HOME` على مجلدات +لكل وكيل تحت حالة OpenClaw لذلك الوكيل. يقرأ محمّل Skills الخاص بـ Codex +`$CODEX_HOME/skills` و`$HOME/.agents/skills`، لذلك تُعزل القيمتان لعمليات تشغيل +خادم التطبيق المحلية. يحافظ ذلك على Skills الأصلية في Codex وplugins والإعدادات +والحسابات وحالة السلاسل ضمن نطاق وكيل OpenClaw بدلًا من تسربها من مجلد Codex CLI +الشخصي للمشغّل. -لا تزال Plugins OpenClaw ولقطات مهارات OpenClaw تتدفق عبر سجل Plugins -ومحمّل المهارات الخاصين بـ OpenClaw. لا تفعل أصول Codex CLI الشخصية ذلك. إذا كانت لديك -مهارات أو Plugins مفيدة في Codex CLI ينبغي أن تصبح جزءًا من وكيل OpenClaw، -فاحصرها صراحةً: +لا تزال Plugins في OpenClaw ولقطات Skills في OpenClaw تتدفق عبر سجل Plugins +ومحمّل Skills الخاصين بـ OpenClaw. أما أصول Codex CLI الشخصية فلا تفعل ذلك. إذا +كانت لديك Skills أو plugins مفيدة في Codex CLI ينبغي أن تصبح جزءًا من وكيل +OpenClaw، فاجردها صراحةً: ```bash openclaw migrate codex --dry-run openclaw migrate apply codex --yes ``` -ينسخ مزود ترحيل Codex المهارات إلى مساحة عمل وكيل OpenClaw الحالية. -تُبلّغ Plugins Codex الأصلية والخطافات وملفات الإعداد أو تُؤرشف -للمراجعة اليدوية بدلًا من تفعيلها تلقائيًا، لأنها قد -تنفذ أوامر، أو تكشف خوادم MCP، أو تحمل بيانات اعتماد. +ينسخ مزود ترحيل Codex المهارات إلى مساحة عمل وكيل OpenClaw الحالي. يتم الإبلاغ +عن plugins الأصلية في Codex والخطافات وملفات الإعداد أو أرشفتها للمراجعة اليدوية +بدلًا من تفعيلها تلقائيًا، لأنها يمكن أن تنفذ أوامر أو تعرض خوادم MCP أو تحمل +بيانات اعتماد. تُختار المصادقة بهذا الترتيب: -1. ملف تعريف مصادقة Codex صريح في OpenClaw للوكيل. -2. حساب خادم التطبيق الحالي في منزل Codex لذلك الوكيل. -3. لعمليات تشغيل خادم تطبيق stdio المحلية فقط، `CODEX_API_KEY`، ثم - `OPENAI_API_KEY`، عندما لا يكون هناك حساب خادم تطبيق وتظل مصادقة OpenAI +1. ملف مصادقة OpenClaw Codex صريح للوكيل. +2. حساب خادم التطبيق الموجود في مجلد Codex الرئيسي لذلك الوكيل. +3. لعمليات تشغيل خادم تطبيق stdio المحلية فقط، `CODEX_API_KEY` ثم + `OPENAI_API_KEY`، عندما لا يكون هناك حساب خادم تطبيق موجود وتظل مصادقة OpenAI مطلوبة. -عندما يكتشف OpenClaw ملف تعريف مصادقة Codex بنمط اشتراك ChatGPT، فإنه يزيل -`CODEX_API_KEY` و`OPENAI_API_KEY` من العملية الفرعية Codex التي يتم إنشاؤها. وهذا +عندما يرى OpenClaw ملف تعريف مصادقة Codex بأسلوب اشتراك ChatGPT، فإنه يزيل +`CODEX_API_KEY` و`OPENAI_API_KEY` من عملية Codex الفرعية التي يتم تشغيلها. وهذا يبقي مفاتيح API على مستوى Gateway متاحة للتضمينات أو نماذج OpenAI المباشرة -دون أن يجعل دورات خادم تطبيق Codex الأصلية تُفوَّتر عبر API بالخطأ. -تستخدم ملفات تعريف مفاتيح API الصريحة الخاصة بـ Codex، وآلية الرجوع المحلية لمفتاح البيئة عبر stdio، تسجيل دخول خادم التطبيق بدلا من بيئة العملية الفرعية الموروثة. لا تتلقى اتصالات خادم التطبيق عبر WebSocket آلية الرجوع لمفتاح API من بيئة Gateway؛ استخدم ملف تعريف مصادقة صريحا أو حساب خادم التطبيق البعيد نفسه. +دون أن تؤدي دورات app-server الأصلية في Codex إلى الفوترة عبر API عن طريق الخطأ. +تستخدم ملفات تعريف مفاتيح API الصريحة الخاصة بـ Codex، وآلية الرجوع المحلية إلى مفاتيح البيئة عبر stdio، تسجيل الدخول إلى app-server +بدلا من وراثة بيئة العملية الفرعية. لا تتلقى اتصالات app-server عبر WebSocket +آلية الرجوع إلى مفاتيح API من بيئة Gateway؛ استخدم ملف تعريف مصادقة صريحا أو +حساب app-server البعيد نفسه. -إذا احتاج النشر إلى عزل بيئي إضافي، فأضف تلك المتغيرات إلى +إذا كان النشر يحتاج إلى عزل إضافي للبيئة، فأضف تلك المتغيرات إلى `appServer.clearEnv`: ```json5 @@ -607,52 +600,52 @@ openclaw migrate apply codex --yes } ``` -يؤثر `appServer.clearEnv` فقط في العملية الفرعية لخادم تطبيق Codex التي يتم إنشاؤها. +لا يؤثر `appServer.clearEnv` إلا في عملية app-server الفرعية الخاصة بـ Codex التي يتم تشغيلها. -تستخدم أدوات Codex الديناميكية افتراضيا ملف التعريف `native-first`. في ذلك الوضع، +تستخدم أدوات Codex الديناميكية افتراضيا ملف التعريف `native-first`. في هذا الوضع، لا يعرّض OpenClaw الأدوات الديناميكية التي تكرر عمليات مساحة العمل الأصلية في Codex: `read`، و`write`، و`edit`، و`apply_patch`، و`exec`، و`process`، و -`update_plan`. تبقى أدوات تكامل OpenClaw مثل المراسلة، والجلسات، والوسائط، +`update_plan`. تظل أدوات تكامل OpenClaw مثل المراسلة، والجلسات، والوسائط، وcron، والمتصفح، والعقد، وgateway، و`heartbeat_respond`، و`web_search` متاحة. -حقول Plugin Codex المدعومة على المستوى الأعلى: +حقول Plugin الخاصة بـ Codex المدعومة على المستوى الأعلى: | الحقل | الافتراضي | المعنى | | -------------------------- | ---------------- | ----------------------------------------------------------------------------------------- | -| `codexDynamicToolsProfile` | `"native-first"` | استخدم `"openclaw-compat"` لعرض مجموعة أدوات OpenClaw الديناميكية الكاملة على خادم تطبيق Codex. | -| `codexDynamicToolsExclude` | `[]` | أسماء أدوات OpenClaw الديناميكية الإضافية التي يجب حذفها من دورات خادم تطبيق Codex. | +| `codexDynamicToolsProfile` | `"native-first"` | استخدم `"openclaw-compat"` لتعريض مجموعة أدوات OpenClaw الديناميكية الكاملة إلى app-server الخاص بـ Codex. | +| `codexDynamicToolsExclude` | `[]` | أسماء أدوات OpenClaw الديناميكية الإضافية التي يجب حذفها من دورات app-server الخاصة بـ Codex. | حقول `appServer` المدعومة: | الحقل | الافتراضي | المعنى | | ------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `transport` | `"stdio"` | يقوم `"stdio"` بإنشاء Codex؛ ويتصل `"websocket"` بـ `url`. | -| `command` | ملف Codex التنفيذي المُدار | الملف التنفيذي لنقل stdio. اتركه غير مضبوط لاستخدام الملف التنفيذي المُدار؛ واضبطه فقط عند وجود تجاوز صريح. | +| `transport` | `"stdio"` | يقوم `"stdio"` بتشغيل Codex؛ ويتصل `"websocket"` بـ`url`. | +| `command` | ملف Codex التنفيذي المدار | الملف التنفيذي لنقل stdio. اتركه غير مضبوط لاستخدام الملف التنفيذي المدار؛ ولا تضبطه إلا لتجاوز صريح. | | `args` | `["app-server", "--listen", "stdio://"]` | الوسائط الخاصة بنقل stdio. | -| `url` | غير مضبوط | عنوان URL لخادم التطبيق عبر WebSocket. | +| `url` | غير مضبوط | عنوان URL الخاص بـ app-server عبر WebSocket. | | `authToken` | غير مضبوط | رمز Bearer لنقل WebSocket. | | `headers` | `{}` | ترويسات WebSocket إضافية. | -| `clearEnv` | `[]` | أسماء متغيرات بيئة إضافية تُزال من عملية خادم التطبيق stdio التي يتم إنشاؤها بعد أن يبني OpenClaw بيئته الموروثة. `CODEX_HOME` و`HOME` محجوزان لعزل Codex لكل وكيل في OpenClaw عند التشغيلات المحلية. | -| `requestTimeoutMs` | `60000` | مهلة استدعاءات مستوى التحكم لخادم التطبيق. | -| `mode` | `"yolo"` | إعداد مسبق لتنفيذ YOLO أو تنفيذ يراجعه الحارس. | -| `approvalPolicy` | `"never"` | سياسة الموافقة الأصلية في Codex المرسلة إلى بدء/استئناف/دورة الخيط. | -| `sandbox` | `"danger-full-access"` | وضع صندوق الرمل الأصلي في Codex المرسل إلى بدء/استئناف الخيط. | -| `approvalsReviewer` | `"user"` | استخدم `"auto_review"` للسماح لـ Codex بمراجعة مطالبات الموافقة الأصلية. يبقى `guardian_subagent` اسما مستعارا قديما. | -| `serviceTier` | غير مضبوط | طبقة خدمة خادم تطبيق Codex الاختيارية: `"fast"` أو `"flex"` أو `null`. يتم تجاهل القيم القديمة غير الصالحة. | +| `clearEnv` | `[]` | أسماء متغيرات بيئة إضافية تُزال من عملية app-server عبر stdio التي يتم تشغيلها بعد أن يبني OpenClaw بيئته الموروثة. `CODEX_HOME` و`HOME` محجوزان لعزل Codex لكل وكيل في OpenClaw عند التشغيل المحلي. | +| `requestTimeoutMs` | `60000` | مهلة استدعاءات مستوى التحكم في app-server. | +| `mode` | `"yolo"` | إعداد مسبق لتنفيذ YOLO أو التنفيذ الخاضع لمراجعة الحارس. | +| `approvalPolicy` | `"never"` | سياسة موافقة Codex الأصلية المرسلة إلى بدء السلسلة/استئنافها/الدورة. | +| `sandbox` | `"danger-full-access"` | وضع صندوق عزل Codex الأصلي المرسل إلى بدء السلسلة/استئنافها. | +| `approvalsReviewer` | `"user"` | استخدم `"auto_review"` للسماح لـ Codex بمراجعة مطالبات الموافقة الأصلية. يظل `guardian_subagent` اسما مستعارا قديما. | +| `serviceTier` | غير مضبوط | طبقة خدمة app-server الاختيارية الخاصة بـ Codex: `"fast"` أو `"flex"` أو `null`. يتم تجاهل القيم القديمة غير الصالحة. | -تُحدّ استدعاءات الأدوات الديناميكية المملوكة لـ OpenClaw بشكل مستقل عن +يتم تقييد استدعاءات الأدوات الديناميكية المملوكة لـ OpenClaw بشكل مستقل عن `appServer.requestTimeoutMs`: يجب أن يتلقى كل طلب Codex من نوع `item/tool/call` -استجابة OpenClaw خلال 30 ثانية. عند انتهاء المهلة، يوقف OpenClaw إشارة الأداة -حيث يكون ذلك مدعوما، ويعيد استجابة أداة ديناميكية فاشلة إلى Codex كي تتمكن -الدورة من المتابعة بدلا من ترك الجلسة في حالة `processing`. +استجابة من OpenClaw خلال 30 ثانية. عند انتهاء المهلة، يجهض OpenClaw إشارة الأداة +حيثما كان ذلك مدعوما، ويعيد إلى Codex استجابة أداة ديناميكية فاشلة بحيث يمكن +للدورة أن تستمر بدلا من ترك الجلسة في `processing`. -بعد أن يستجيب OpenClaw لطلب خادم تطبيق Codex محدود بنطاق دورة، يتوقع الحزام -أيضا أن ينهي Codex الدورة الأصلية باستخدام `turn/completed`. إذا صمت -خادم التطبيق لمدة 60 ثانية بعد تلك الاستجابة، يقاطع OpenClaw دورة Codex بأفضل جهد، -ويسجل مهلة تشخيصية، ويحرر مسار جلسة OpenClaw حتى لا تصطف رسائل الدردشة اللاحقة -خلف دورة أصلية عالقة. +بعد أن يستجيب OpenClaw لطلب app-server ضمن نطاق دورة Codex، يتوقع الحزام أيضا +أن ينهي Codex الدورة الأصلية باستخدام `turn/completed`. إذا أصبح app-server +صامتا لمدة 60 ثانية بعد تلك الاستجابة، يحاول OpenClaw بأفضل جهد مقاطعة دورة +Codex، ويسجل مهلة تشخيصية، ويحرر مسار جلسة OpenClaw بحيث لا تُصف رسائل الدردشة +اللاحقة خلف دورة أصلية قديمة. -تبقى تجاوزات البيئة متاحة للاختبار المحلي: +تظل تجاوزات البيئة متاحة للاختبار المحلي: - `OPENCLAW_CODEX_APP_SERVER_BIN` - `OPENCLAW_CODEX_APP_SERVER_ARGS` @@ -660,22 +653,22 @@ openclaw migrate apply codex --yes - `OPENCLAW_CODEX_APP_SERVER_APPROVAL_POLICY` - `OPENCLAW_CODEX_APP_SERVER_SANDBOX` -يتجاوز `OPENCLAW_CODEX_APP_SERVER_BIN` الملف التنفيذي المُدار عندما يكون +يتجاوز `OPENCLAW_CODEX_APP_SERVER_BIN` الملف التنفيذي المدار عندما يكون `appServer.command` غير مضبوط. -أُزيل `OPENCLAW_CODEX_APP_SERVER_GUARDIAN=1`. استخدم بدلا منه -`plugins.entries.codex.config.appServer.mode: "guardian"`، أو -`OPENCLAW_CODEX_APP_SERVER_MODE=guardian` للاختبار المحلي لمرة واحدة. تُفضَّل -الإعدادات للنشرات القابلة للتكرار لأنها تبقي سلوك Plugin في الملف نفسه -المُراجع مع بقية إعداد حزام Codex. +تمت إزالة `OPENCLAW_CODEX_APP_SERVER_GUARDIAN=1`. استخدم +`plugins.entries.codex.config.appServer.mode: "guardian"` بدلا من ذلك، أو +`OPENCLAW_CODEX_APP_SERVER_MODE=guardian` للاختبار المحلي لمرة واحدة. يُفضّل +التكوين لعمليات النشر القابلة للتكرار لأنه يبقي سلوك Plugin في الملف نفسه +المراجع مع بقية إعداد حزام Codex. ## استخدام الكمبيوتر -استخدام الكمبيوتر مغطى في دليل إعداد مستقل: +يُغطى استخدام الكمبيوتر في دليل إعداد خاص به: [استخدام الكمبيوتر في Codex](/ar/plugins/codex-computer-use). الخلاصة: لا يضمّن OpenClaw تطبيق التحكم بسطح المكتب ولا ينفذ إجراءات سطح المكتب -بنفسه. إنه يجهز خادم تطبيق Codex، ويتحقق من توفر خادم MCP باسم +بنفسه. إنه يجهز app-server الخاص بـ Codex، ويتحقق من توفر خادم MCP `computer-use`، ثم يترك Codex يتولى استدعاءات أدوات MCP الأصلية أثناء دورات وضع Codex. @@ -684,7 +677,7 @@ openclaw migrate apply codex --yes راجع [استخدام الكمبيوتر في Codex](/ar/plugins/codex-computer-use) لمعرفة الفرق بين استخدام الكمبيوتر المملوك لـ Codex والتسجيل المباشر في MCP. -إعدادات دنيا: +الحد الأدنى للتكوين: ```json5 { @@ -718,18 +711,19 @@ openclaw migrate apply codex --yes - `/codex computer-use install --source ` - `/codex computer-use install --marketplace-path ` -استخدام الكمبيوتر خاص بـ macOS وقد يتطلب أذونات نظام تشغيل محلية قبل أن يتمكن -خادم Codex MCP من التحكم في التطبيقات. إذا كانت `computerUse.enabled` مضبوطة على true -وكان خادم MCP غير متاح، تفشل دورات وضع Codex قبل بدء الخيط بدلا من التشغيل -بصمت دون أدوات استخدام الكمبيوتر الأصلية. راجع -[استخدام الكمبيوتر في Codex](/ar/plugins/codex-computer-use) للاطلاع على خيارات السوق، +استخدام الكمبيوتر خاص بنظام macOS وقد يتطلب أذونات محلية من نظام التشغيل قبل أن +يتمكن خادم MCP الخاص بـ Codex من التحكم في التطبيقات. إذا كان +`computerUse.enabled` يساوي true وكان خادم MCP غير متاح، تفشل دورات وضع Codex +قبل بدء السلسلة بدلا من التشغيل بصمت دون أدوات استخدام الكمبيوتر الأصلية. راجع +[استخدام الكمبيوتر في Codex](/ar/plugins/codex-computer-use) لمعرفة خيارات السوق، وحدود الفهرس البعيد، وأسباب الحالة، واستكشاف الأخطاء وإصلاحها. -عندما تكون `computerUse.autoInstall` مضبوطة على true، يستطيع OpenClaw تسجيل -سوق Codex Desktop القياسي المضمّن من -`/Applications/Codex.app/Contents/Resources/plugins/openai-bundled` إذا لم يكن Codex -قد اكتشف سوقا محليا بعد. استخدم `/new` أو `/reset` بعد تغيير إعدادات وقت التشغيل -أو استخدام الكمبيوتر حتى لا تحتفظ الجلسات الحالية بربط قديم مع PI أو خيط Codex. +عندما يكون `computerUse.autoInstall` يساوي true، يمكن لـ OpenClaw تسجيل سوق +Codex Desktop القياسي المضمن من +`/Applications/Codex.app/Contents/Resources/plugins/openai-bundled` إذا لم يكن +Codex قد اكتشف سوقا محليا بعد. استخدم `/new` أو `/reset` بعد تغيير تكوين وقت +التشغيل أو استخدام الكمبيوتر حتى لا تحتفظ الجلسات الحالية بربط قديم مع PI أو +سلسلة Codex. ## وصفات شائعة @@ -747,7 +741,7 @@ Codex محلي مع نقل stdio الافتراضي: } ``` -تحقق حزام Codex فقط: +التحقق من حزام Codex فقط: ```json5 { @@ -769,7 +763,7 @@ Codex محلي مع نقل stdio الافتراضي: } ``` -موافقات Codex التي يراجعها الحارس: +موافقات Codex الخاضعة لمراجعة الحارس: ```json5 { @@ -791,7 +785,7 @@ Codex محلي مع نقل stdio الافتراضي: } ``` -خادم تطبيق بعيد مع ترويسات صريحة: +app-server بعيد مع ترويسات صريحة: ```json5 { @@ -815,146 +809,148 @@ Codex محلي مع نقل stdio الافتراضي: ``` يبقى تبديل النماذج تحت تحكم OpenClaw. عندما تكون جلسة OpenClaw مرفقة -بخيط Codex موجود، ترسل الدورة التالية نموذج OpenAI، والمزود، وسياسة الموافقة، -وصندوق الرمل، وطبقة الخدمة المحددة حاليا إلى خادم التطبيق مرة أخرى. -التبديل من `openai/gpt-5.5` إلى `openai/gpt-5.2` يحافظ على ربط الخيط -لكنه يطلب من Codex المتابعة بالنموذج المحدد حديثا. +بسلسلة Codex موجودة، ترسل الدورة التالية نموذج OpenAI المحدد حاليا، والمزود، +وسياسة الموافقة، وصندوق العزل، وطبقة الخدمة إلى app-server مرة أخرى. يحافظ +التبديل من `openai/gpt-5.5` إلى `openai/gpt-5.2` على ربط السلسلة لكنه يطلب من +Codex المتابعة بالنموذج المحدد حديثا. ## أمر Codex -يسجل Plugin المضمّن `/codex` كأمر شرطة مائلة معتمد. وهو عام ويعمل على أي قناة تدعم أوامر OpenClaw النصية. +يسجل Plugin المضمن `/codex` كأمر شرطة مائلة مصرح به. وهو عام ويعمل على أي +قناة تدعم أوامر OpenClaw النصية. -الصيغ الشائعة: +الأشكال الشائعة: -- يعرض `/codex status` اتصال خادم التطبيق المباشر، والنماذج، والحساب، وحدود المعدل، وخوادم MCP، وSkills. +- يعرض `/codex status` اتصال خادم التطبيق المباشر، والنماذج، والحساب، وحدود المعدلات، وخوادم MCP، وSkills. - يسرد `/codex models` نماذج خادم تطبيق Codex المباشرة. - يسرد `/codex threads [filter]` سلاسل Codex الحديثة. - يربط `/codex resume ` جلسة OpenClaw الحالية بسلسلة Codex موجودة. -- يطلب `/codex compact` من خادم تطبيق Codex ضغط السلسلة المرتبطة. +- يطلب `/codex compact` من خادم تطبيق Codex إجراء Compaction للسلسلة المرتبطة. - يبدأ `/codex review` مراجعة Codex الأصلية للسلسلة المرتبطة. - يطلب `/codex diagnostics [note]` التأكيد قبل إرسال ملاحظات تشخيص Codex للسلسلة المرتبطة. -- يتحقق `/codex computer-use status` من Plugin استخدام الكمبيوتر وخادم MCP المكوّنين. -- يثبّت `/codex computer-use install` Plugin استخدام الكمبيوتر المكوّن ويعيد تحميل خوادم MCP. -- يعرض `/codex account` حالة الحساب وحدود المعدل. -- يسرد `/codex mcp` حالة خادم MCP في خادم تطبيق Codex. -- يسرد `/codex skills` Skills خادم تطبيق Codex. +- يتحقق `/codex computer-use status` من Plugin‏ Computer Use وخادم MCP المضبوطين. +- يثبّت `/codex computer-use install`‏ Plugin‏ Computer Use المضبوط ويعيد تحميل خوادم MCP. +- يعرض `/codex account` حالة الحساب وحدود المعدلات. +- يسرد `/codex mcp` حالة خوادم MCP في خادم تطبيق Codex. +- يسرد `/codex skills`‏ Skills خادم تطبيق Codex. -عندما يبلغ Codex عن فشل بسبب حد الاستخدام، يضمّن OpenClaw وقت إعادة الضبط التالي -لخادم التطبيق عندما يوفّره Codex. استخدم `/codex account` في المحادثة نفسها -لفحص الحساب الحالي ونوافذ حدود المعدل. +عندما يبلّغ Codex عن فشل بسبب حدّ الاستخدام، يتضمن OpenClaw وقت إعادة ضبط +خادم التطبيق التالي عندما يوفّره Codex. استخدم `/codex account` في المحادثة نفسها +لفحص الحساب الحالي ونوافذ حدود المعدلات. -### سير عمل التصحيح الشائع +### سير عمل شائع لتصحيح الأخطاء عندما يفعل وكيل مدعوم بـ Codex شيئًا مفاجئًا في Telegram أو Discord أو Slack -أو قناة أخرى، ابدأ بالمحادثة التي حدثت فيها المشكلة: +أو قناة أخرى، ابدأ من المحادثة التي حدثت فيها المشكلة: 1. شغّل `/diagnostics bad tool choice after image upload` أو ملاحظة قصيرة أخرى تصف ما رأيته. -2. وافق على طلب التشخيص مرة واحدة. ينشئ الاعتماد ملف zip للتشخيصات المحلية في Gateway - وبما أن الجلسة تستخدم حزمة Codex، فإنه يرسل أيضًا - حزمة ملاحظات Codex ذات الصلة إلى خوادم OpenAI. -3. انسخ رد التشخيصات المكتمل إلى تقرير العلة أو سلسلة الدعم. +2. وافق على طلب التشخيص مرة واحدة. تُنشئ الموافقة ملف zip للتشخيصات المحلية في Gateway + وبما أن الجلسة تستخدم إطار Codex، فإنها ترسل أيضًا حزمة ملاحظات Codex ذات الصلة + إلى خوادم OpenAI. +3. انسخ رد التشخيصات المكتمل إلى تقرير الخطأ أو سلسلة الدعم. يتضمن مسار الحزمة المحلية، وملخص الخصوصية، ومعرّفات جلسات OpenClaw، ومعرّفات سلاسل Codex، وسطر `Inspect locally` لكل سلسلة Codex. -4. إذا أردت تصحيح التشغيل بنفسك، شغّل أمر `Inspect locally` المطبوع - في الطرفية. يبدو مثل `codex resume ` ويفتح - سلسلة Codex الأصلية بحيث يمكنك فحص المحادثة، أو متابعتها محليًا، +4. إذا أردت تصحيح التشغيل بنفسك، فشغّل أمر `Inspect locally` المطبوع + في طرفية. يبدو مثل `codex resume ` ويفتح سلسلة Codex + الأصلية حتى تتمكن من فحص المحادثة، أو متابعتها محليًا، أو سؤال Codex عن سبب اختياره أداة أو خطة معينة. استخدم `/codex diagnostics [note]` فقط عندما تريد تحديدًا رفع ملاحظات Codex -للسلسلة المرتبطة حاليًا بدون حزمة تشخيصات OpenClaw Gateway الكاملة. -بالنسبة إلى معظم تقارير الدعم، تكون `/diagnostics [note]` +للسلسلة المرتبطة حاليًا دون حزمة تشخيصات OpenClaw +Gateway الكاملة. بالنسبة إلى معظم تقارير الدعم، تكون `/diagnostics [note]` نقطة البداية الأفضل لأنها تربط حالة Gateway المحلية ومعرّفات سلاسل Codex معًا في رد واحد. راجع [تصدير التشخيصات](/ar/gateway/diagnostics) -للاطلاع على نموذج الخصوصية الكامل وسلوك دردشة المجموعات. +للاطلاع على نموذج الخصوصية الكامل وسلوك المحادثات الجماعية. -يعرض OpenClaw الأساسي أيضًا الأمر المخصص للمالكين فقط `/diagnostics [note]` -بوصفه أمر تشخيصات Gateway العام. يعرض طلب الموافقة الخاص به تمهيد البيانات الحساسة، -ويربط إلى [تصدير التشخيصات](/ar/gateway/diagnostics)، ويطلب +يعرض OpenClaw الأساسي أيضًا `/diagnostics [note]` المخصص للمالك فقط كأمر +تشخيصات Gateway العام. تعرض مطالبة الموافقة الخاصة به تمهيد البيانات الحساسة، +وروابط إلى [تصدير التشخيصات](/ar/gateway/diagnostics)، وتطلب `openclaw gateway diagnostics export --json` عبر موافقة تنفيذ صريحة في كل مرة. لا توافق على التشخيصات بقاعدة سماح شاملة. بعد الموافقة، -يرسل OpenClaw تقريرًا قابلاً للصق يتضمن مسار الحزمة المحلية وملخص البيان. -عندما تستخدم جلسة OpenClaw النشطة حزمة Codex، فإن الموافقة -نفسها تفوّض أيضًا إرسال حزم ملاحظات Codex ذات الصلة إلى -خوادم OpenAI. يوضح طلب الموافقة أن ملاحظات Codex ستُرسل، لكنه -لا يسرد معرّفات جلسات أو سلاسل Codex قبل الموافقة. +يرسل OpenClaw تقريرًا قابلًا للصق يتضمن مسار الحزمة المحلية وملخص البيان. +عندما تستخدم جلسة OpenClaw النشطة إطار Codex، فإن +الموافقة نفسها تخوّل أيضًا إرسال حزم ملاحظات Codex ذات الصلة إلى +خوادم OpenAI. تنص مطالبة الموافقة على أنه سيتم إرسال ملاحظات Codex، لكنها +لا تسرد معرّفات جلسة Codex أو سلاسله قبل الموافقة. -إذا استدعى مالك `/diagnostics` في دردشة جماعية، يحافظ OpenClaw على نظافة -القناة المشتركة: تتلقى المجموعة إشعارًا قصيرًا فقط، بينما تُرسل -تمهيدات التشخيصات وطلبات الموافقة ومعرّفات جلسات/سلاسل Codex إلى +إذا استدعى مالك `/diagnostics` في محادثة جماعية، يحافظ OpenClaw على +نظافة القناة المشتركة: تتلقى المجموعة إشعارًا قصيرًا فقط، بينما تُرسل +مقدمة التشخيصات، ومطالبات الموافقة، ومعرّفات جلسة/سلاسل Codex إلى المالك عبر مسار الموافقة الخاص. إذا لم يوجد مسار خاص للمالك، يرفض OpenClaw طلب المجموعة ويطلب من المالك تشغيله من رسالة مباشرة. -يستدعي رفع Codex المعتمد مسار `feedback/upload` في خادم تطبيق Codex ويطلب -من خادم التطبيق تضمين السجلات لكل سلسلة مدرجة وسلاسل Codex الفرعية المنشأة -عند توفرها. يمر الرفع عبر مسار ملاحظات Codex المعتاد إلى خوادم OpenAI؛ -إذا كانت ملاحظات Codex معطلة في خادم التطبيق ذلك، يعيد الأمر +يستدعي رفع Codex المعتمد نقطة `feedback/upload` في خادم تطبيق Codex ويطلب +من خادم التطبيق تضمين السجلات لكل سلسلة مدرجة وسلاسل Codex الفرعية المنبثقة +عند توفرها. يمر الرفع عبر مسار ملاحظات Codex المعتاد إلى خوادم +OpenAI؛ وإذا كانت ملاحظات Codex معطلة في خادم التطبيق ذلك، يعيد الأمر خطأ خادم التطبيق. يسرد رد التشخيصات المكتمل القنوات، -ومعرّفات جلسات OpenClaw، ومعرّفات سلاسل Codex، وأوامر -`codex resume ` المحلية للسلاسل التي أُرسلت. إذا رفضت الموافقة -أو تجاهلتها، لا يطبع OpenClaw معرّفات Codex تلك. لا يحل هذا الرفع محل -تصدير تشخيصات Gateway المحلي. +ومعرّفات جلسات OpenClaw، ومعرّفات سلاسل Codex، وأوامر `codex resume ` +المحلية للسلاسل التي أُرسلت. إذا رفضت الموافقة أو تجاهلتها، +لا يطبع OpenClaw معرّفات Codex تلك. لا يستبدل هذا الرفع تصدير +تشخيصات Gateway المحلي. -يكتب `/codex resume` ملف الربط الجانبي نفسه الذي تستخدمه الحزمة +يكتب `/codex resume` ملف الربط الجانبي نفسه الذي يستخدمه الإطار للأدوار العادية. في الرسالة التالية، يستأنف OpenClaw سلسلة Codex تلك، ويمرر -نموذج OpenClaw المحدد حاليًا إلى خادم التطبيق، ويبقي السجل الممتد -ممكّنًا. +نموذج OpenClaw المحدد حاليًا إلى خادم التطبيق، ويحافظ على +تفعيل السجل الموسّع. ### فحص سلسلة Codex من CLI -غالبًا ما تكون أسرع طريقة لفهم تشغيل Codex سيئ هي فتح سلسلة Codex الأصلية -مباشرة: +غالبًا ما تكون أسرع طريقة لفهم تشغيل Codex سيئ هي فتح سلسلة Codex +الأصلية مباشرة: ```sh codex resume ``` -استخدم هذا عندما تلاحظ علة في محادثة قناة وتريد فحص جلسة Codex -المشكلة، أو متابعتها محليًا، أو سؤال Codex عن سبب اتخاذه -اختيارًا معينًا للأداة أو الاستدلال. أسهل مسار عادة هو تشغيل -`/diagnostics [note]` أولًا: بعد موافقتك عليه، يسرد التقرير المكتمل +استخدم هذا عندما تلاحظ خطأ في محادثة قناة وتريد فحص +جلسة Codex الإشكالية، أو متابعتها محليًا، أو سؤال Codex عن سبب اتخاذه +اختيارًا معينًا للأداة أو الاستدلال. يكون المسار الأسهل عادةً تشغيل +`/diagnostics [note]` أولًا: بعد أن توافق عليه، يسرد التقرير المكتمل كل سلسلة Codex ويطبع أمر `Inspect locally`، مثل -`codex resume `. يمكنك نسخ ذلك الأمر مباشرة إلى الطرفية. +`codex resume `. يمكنك نسخ ذلك الأمر مباشرة إلى طرفية. -يمكنك أيضًا الحصول على معرّف سلسلة من `/codex binding` للدردشة الحالية أو +يمكنك أيضًا الحصول على معرّف سلسلة من `/codex binding` للمحادثة الحالية أو `/codex threads [filter]` لسلاسل خادم تطبيق Codex الحديثة، ثم تشغيل أمر `codex resume` نفسه في الصدفة. يتطلب سطح الأوامر خادم تطبيق Codex بالإصدار `0.125.0` أو أحدث. تُبلّغ -أساليب التحكم الفردية على أنها `unsupported by this Codex app-server` إذا لم -يكشف خادم تطبيق مستقبلي أو مخصص أسلوب JSON-RPC ذلك. +طرائق التحكم الفردية بصيغة `unsupported by this Codex app-server` إذا كان +خادم تطبيق مستقبلي أو مخصص لا يعرّض طريقة JSON-RPC تلك. ## حدود الخطافات -تحتوي حزمة Codex على ثلاث طبقات خطافات: +يحتوي إطار Codex على ثلاث طبقات خطافات: -| الطبقة | المالك | الغرض | +| الطبقة | المالك | الغرض | | ------------------------------------- | ------------------------ | ------------------------------------------------------------------- | -| خطافات Plugin في OpenClaw | OpenClaw | توافق المنتج/Plugin عبر حزمتَي PI وCodex. | -| وسيط إضافة خادم تطبيق Codex | Plugins المجمّعة مع OpenClaw | سلوك محوّل لكل دور حول أدوات OpenClaw الديناميكية. | -| خطافات Codex الأصلية | Codex | دورة حياة Codex منخفضة المستوى وسياسة الأدوات الأصلية من إعدادات Codex. | +| خطافات Plugin في OpenClaw | OpenClaw | توافق المنتج/Plugin عبر إطاري PI وCodex. | +| برمجية وسيطة لامتداد خادم تطبيق Codex | Plugins المضمّنة في OpenClaw | سلوك المهايئ لكل دور حول أدوات OpenClaw الديناميكية. | +| خطافات Codex الأصلية | Codex | دورة حياة Codex منخفضة المستوى وسياسة الأدوات الأصلية من إعدادات Codex. | لا يستخدم OpenClaw ملفات `hooks.json` الخاصة بالمشروع أو العامة في Codex لتوجيه سلوك Plugin في OpenClaw. بالنسبة إلى جسر الأدوات الأصلية والأذونات المدعوم، يحقن OpenClaw إعدادات Codex لكل سلسلة من أجل `PreToolUse` و`PostToolUse` و`PermissionRequest` و`Stop`. تبقى خطافات Codex الأخرى مثل `SessionStart` و -`UserPromptSubmit` عناصر تحكم على مستوى Codex؛ ولا تُعرَض بوصفها -خطافات Plugin في OpenClaw ضمن عقد v1. +`UserPromptSubmit` عناصر تحكم على مستوى Codex؛ ولا تُعرَض كخطافات +Plugin في OpenClaw ضمن عقد v1. بالنسبة إلى أدوات OpenClaw الديناميكية، ينفذ OpenClaw الأداة بعد أن يطلب Codex -الاستدعاء، لذلك يشغّل OpenClaw سلوك Plugin والوسيط الذي يملكه في -محوّل الحزمة. أما بالنسبة إلى أدوات Codex الأصلية، فيملك Codex سجل الأداة القانوني. -يمكن لـ OpenClaw عكس أحداث محددة، لكنه لا يستطيع إعادة كتابة سلسلة Codex الأصلية -ما لم يعرّض Codex تلك العملية عبر خادم التطبيق أو استدعاءات الخطافات الأصلية. +الاستدعاء، لذلك يطلق OpenClaw سلوك Plugin والبرمجية الوسيطة الذي يملكه في +مهايئ الإطار. بالنسبة إلى الأدوات الأصلية في Codex، يملك Codex سجل الأداة +المعياري. يستطيع OpenClaw عكس أحداث محددة، لكنه لا يستطيع إعادة كتابة سلسلة Codex +الأصلية إلا إذا عرّض Codex تلك العملية عبر خادم التطبيق أو استدعاءات الخطافات +الأصلية. تأتي إسقاطات Compaction ودورة حياة LLM من إشعارات خادم تطبيق Codex -وحالة محوّل OpenClaw، لا من أوامر خطافات Codex الأصلية. -أحداث `before_compaction` و`after_compaction` و`llm_input` و -`llm_output` في OpenClaw هي ملاحظات على مستوى المحوّل، وليست التقاطًا -مطابقًا بالبايت لطلب Codex الداخلي أو حمولات Compaction. +وحالة مهايئ OpenClaw، لا من أوامر خطافات Codex الأصلية. +أحداث OpenClaw‏ `before_compaction` و`after_compaction` و`llm_input` و +`llm_output` هي ملاحظات على مستوى المهايئ، وليست لقطات مطابقة بايتًا ببايت +لطلب Codex الداخلي أو حمولات Compaction. -تُسقط إشعارات خادم التطبيق الأصلية `hook/started` و`hook/completed` في Codex -كأحداث وكيل `codex_app_server.hook` من أجل المسار الزمني والتصحيح. +تُسقَط إشعارات خادم تطبيق Codex الأصلية `hook/started` و`hook/completed` +كأحداث وكيل `codex_app_server.hook` للمسار وتصحيح الأخطاء. وهي لا تستدعي خطافات Plugin في OpenClaw. ## عقد دعم V1 @@ -965,113 +961,111 @@ codex resume مدعوم في وقت تشغيل Codex v1: -| السطح | الدعم | السبب | -| --------------------------------------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| حلقة نموذج OpenAI عبر Codex | مدعوم | يملك خادم تطبيق Codex دور OpenAI، واستئناف السلسلة الأصلية، ومتابعة الأدوات الأصلية. | -| توجيه قنوات OpenClaw والتسليم | مدعوم | تبقى Telegram وDiscord وSlack وWhatsApp وiMessage والقنوات الأخرى خارج وقت تشغيل النموذج. | -| أدوات OpenClaw الديناميكية | مدعوم | يطلب Codex من OpenClaw تنفيذ هذه الأدوات، لذلك يبقى OpenClaw في مسار التنفيذ. | -| Plugins المطالبة والسياق | مدعوم | يبني OpenClaw طبقات المطالبة ويسقط السياق في دور Codex قبل بدء السلسلة أو استئنافها. | -| دورة حياة محرك السياق | مدعوم | التجميع، والإدخال أو صيانة ما بعد الدور، وتنسيق Compaction لمحرك السياق تعمل لأدوار Codex. | -| خطافات الأدوات الديناميكية | مدعوم | تعمل `before_tool_call` و`after_tool_call` ووسيط نتيجة الأداة حول الأدوات الديناميكية المملوكة لـ OpenClaw. | -| خطافات دورة الحياة | مدعوم كملاحظات محوّل | تُطلق `llm_input` و`llm_output` و`agent_end` و`before_compaction` و`after_compaction` بحمولات صادقة لوضع Codex. | -| بوابة مراجعة الإجابة النهائية | مدعوم عبر ترحيل الخطاف الأصلي | يُرحّل `Stop` في Codex إلى `before_agent_finalize`؛ ويطلب `revise` من Codex تمريرة نموذج أخرى قبل الإنهاء. | -| حظر أو ملاحظة الصدفة الأصلية والتصحيح وMCP | مدعوم عبر ترحيل الخطاف الأصلي | تُرحّل `PreToolUse` و`PostToolUse` في Codex لأسطح الأدوات الأصلية المعتمدة، بما في ذلك حمولات MCP على خادم تطبيق Codex `0.125.0` أو أحدث. الحظر مدعوم؛ أما إعادة كتابة الوسيطات فليست مدعومة. | -| سياسة الأذونات الأصلية | مدعوم عبر ترحيل الخطاف الأصلي | يمكن توجيه `PermissionRequest` في Codex عبر سياسة OpenClaw حيث يعرّضها وقت التشغيل. إذا لم يُرجع OpenClaw أي قرار، يواصل Codex عبر مسار الحارس أو موافقة المستخدم العادي. | -| التقاط مسار خادم التطبيق | مدعوم | يسجل OpenClaw الطلب الذي أرسله إلى خادم التطبيق وإشعارات خادم التطبيق التي يتلقاها. | +| السطح | الدعم | السبب | +| --------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| حلقة نموذج OpenAI عبر Codex | مدعوم | يملك خادم تطبيق Codex دور OpenAI، واستئناف السلسلة الأصلية، ومتابعة الأدوات الأصلية. | +| توجيه قنوات OpenClaw وتسليمها | مدعوم | تبقى Telegram وDiscord وSlack وWhatsApp وiMessage والقنوات الأخرى خارج وقت تشغيل النموذج. | +| أدوات OpenClaw الديناميكية | مدعوم | يطلب Codex من OpenClaw تنفيذ هذه الأدوات، لذلك يبقى OpenClaw في مسار التنفيذ. | +| Plugins المطالبة والسياق | مدعوم | يبني OpenClaw تراكبات المطالبات ويسقط السياق في دور Codex قبل بدء السلسلة أو استئنافها. | +| دورة حياة محرك السياق | مدعوم | يعمل التجميع، والاستيعاب أو الصيانة بعد الدور، وتنسيق Compaction لمحرك السياق مع أدوار Codex. | +| خطافات الأدوات الديناميكية | مدعوم | تعمل `before_tool_call` و`after_tool_call` والبرمجية الوسيطة لنتائج الأدوات حول الأدوات الديناميكية المملوكة لـ OpenClaw. | +| خطافات دورة الحياة | مدعومة كملاحظات من المهايئ | تُطلق `llm_input` و`llm_output` و`agent_end` و`before_compaction` و`after_compaction` مع حمولات صادقة لوضع Codex. | +| بوابة مراجعة الإجابة النهائية | مدعومة عبر مرحّل الخطافات الأصلية | يُرحّل `Stop` في Codex إلى `before_agent_finalize`؛ ويطلب `revise` من Codex تمريرة نموذج إضافية قبل الإنهاء. | +| حظر أو مراقبة الصدفة الأصلية والتصحيح وMCP | مدعوم عبر مرحّل الخطافات الأصلية | يُرحّل `PreToolUse` و`PostToolUse` في Codex لأسطح الأدوات الأصلية المعتمدة، بما في ذلك حمولات MCP على خادم تطبيق Codex `0.125.0` أو أحدث. الحظر مدعوم؛ أما إعادة كتابة الوسائط فليست مدعومة. | +| سياسة الأذونات الأصلية | مدعومة عبر مرحّل الخطافات الأصلية | يمكن توجيه `PermissionRequest` في Codex عبر سياسة OpenClaw عندما يعرّضه وقت التشغيل. إذا لم يُرجع OpenClaw قرارًا، يتابع Codex عبر مسار الحارس أو موافقة المستخدم المعتاد. | +| التقاط مسار خادم التطبيق | مدعوم | يسجل OpenClaw الطلب الذي أرسله إلى خادم التطبيق وإشعارات خادم التطبيق التي يتلقاها. | غير مدعوم في وقت تشغيل Codex v1: -| السطح | حدود V1 | المسار المستقبلي | +| السطح | حد V1 | المسار المستقبلي | | --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | -| تعديل وسيطات الأداة الأصلية | يمكن لخطافات Codex الأصلية قبل الأداة الحظر، لكن OpenClaw لا يعيد كتابة وسيطات أدوات Codex الأصلية. | يتطلب دعم خطاف/مخطط Codex لاستبدال مُدخلات الأداة. | -| سجل النصوص الأصلي القابل للتحرير في Codex | يملك Codex سجل السلسلة الأصلي المعتمد. يملك OpenClaw مرآة ويمكنه إسقاط السياق المستقبلي، لكن ينبغي ألا يعدّل البنى الداخلية غير المدعومة. | أضف واجهات API صريحة لخادم تطبيق Codex إذا كانت جراحة السلسلة الأصلية مطلوبة. | -| `tool_result_persist` لسجلات أدوات Codex الأصلية | يحوّل ذلك الخطاف كتابات سجل النصوص المملوكة لـ OpenClaw، وليس سجلات أدوات Codex الأصلية. | يمكن عكس السجلات المحوّلة، لكن إعادة الكتابة المعتمدة تحتاج إلى دعم Codex. | -| بيانات تعريف Compaction الأصلية الغنية | يراقب OpenClaw بدء Compaction واكتماله، لكنه لا يتلقى قائمة ثابتة بما تم الاحتفاظ به/إسقاطه، أو فرق الرموز، أو حمولة ملخص. | يحتاج إلى أحداث Compaction أغنى من Codex. | -| التدخل في Compaction | خطافات Compaction الحالية في OpenClaw على مستوى الإشعار في وضع Codex. | أضف خطافات Codex قبل/بعد Compaction إذا احتاجت plugins إلى الاعتراض أو إعادة كتابة Compaction الأصلية. | -| التقاط طلب API للنموذج بايتًا ببايت | يمكن لـ OpenClaw التقاط طلبات خادم التطبيق والإشعارات، لكن نواة Codex تبني طلب OpenAI API النهائي داخليًا. | يحتاج إلى حدث تتبع لطلب نموذج Codex أو API تصحيح أخطاء. | +| تعديل وسيطات الأدوات الأصلية | يمكن لخطافات Codex الأصلية السابقة للأداة أن تحظر، لكن OpenClaw لا يعيد كتابة وسيطات أدوات Codex الأصلية. | يتطلب دعم خطاف/مخطط Codex لاستبدال إدخال الأداة. | +| سجل نسخ Codex الأصلية القابل للتحرير | يملك Codex سجل السلسلة الأصلية المرجعي. يملك OpenClaw مرآة ويمكنه إسقاط سياق مستقبلي، لكن ينبغي ألا يعدل الأجزاء الداخلية غير المدعومة. | أضف واجهات API صريحة لخادم تطبيق Codex إذا كانت جراحة السلسلة الأصلية مطلوبة. | +| `tool_result_persist` لسجلات أدوات Codex الأصلية | يحول ذلك الخطاف كتابات النسخ التي يملكها OpenClaw، وليس سجلات أدوات Codex الأصلية. | يمكن عكس السجلات المحولة، لكن إعادة الكتابة المرجعية تحتاج إلى دعم Codex. | +| بيانات تعريف Compaction الأصلية الغنية | يلاحظ OpenClaw بدء Compaction واكتماله، لكنه لا يتلقى قائمة مستقرة بما تم الاحتفاظ به/إسقاطه، أو فرق الرموز، أو حمولة الملخص. | يحتاج إلى أحداث Compaction أغنى من Codex. | +| التدخل في Compaction | خطافات Compaction الحالية في OpenClaw على مستوى الإشعار في وضع Codex. | أضف خطافات Codex قبل/بعد Compaction إذا احتاجت plugins إلى رفض Compaction الأصلي أو إعادة كتابته. | +| التقاط طلب API للنموذج بايتًا ببايت | يمكن لـ OpenClaw التقاط طلبات وإشعارات خادم التطبيق، لكن نواة Codex تبني طلب OpenAI API النهائي داخليًا. | يحتاج إلى حدث تتبع طلب النموذج في Codex أو API تصحيح. | ## الأدوات والوسائط وCompaction -يغيّر إطار Codex منفّذ الوكيل المضمّن منخفض المستوى فقط. +يغير مسخر Codex منفذ الوكيل المضمن منخفض المستوى فقط. لا يزال OpenClaw يبني قائمة الأدوات ويتلقى نتائج الأدوات الديناميكية من -الإطار. النصوص والصور والفيديو والموسيقى وTTS والموافقات ومخرجات أدوات المراسلة -تستمر عبر مسار التسليم الطبيعي في OpenClaw. +المسخر. يستمر النص والصور والفيديو والموسيقى وTTS والموافقات ومخرجات أدوات المراسلة +عبر مسار تسليم OpenClaw العادي. -ترحيل الخطاف الأصلي عام عن قصد، لكن عقد دعم v1 +ترحيل الخطافات الأصلي عام عن قصد، لكن عقد دعم v1 محدود بمسارات أدوات Codex الأصلية والأذونات التي يختبرها OpenClaw. في -وقت تشغيل Codex، يشمل ذلك حمولات shell وpatch وMCP `PreToolUse` -و`PostToolUse` و`PermissionRequest`. لا تفترض أن كل حدث خطاف مستقبلي في -Codex هو سطح Plugin في OpenClaw حتى يسميه عقد وقت التشغيل -صراحة. +وقت تشغيل Codex، يشمل ذلك حمولات shell وpatch وMCP `PreToolUse`، +و`PostToolUse`، و`PermissionRequest`. لا تفترض أن كل حدث خطاف مستقبلي +في Codex هو سطح Plugin في OpenClaw حتى يسميه عقد وقت التشغيل. -بالنسبة إلى `PermissionRequest`، يعيد OpenClaw قرارات السماح أو الرفض الصريحة -فقط عندما تقرر السياسة. نتيجة عدم اتخاذ قرار ليست سماحًا. يتعامل معها Codex على أنها -لا تتضمن قرار خطاف ويتابع إلى مسار الحارس الخاص به أو موافقة المستخدم. +بالنسبة إلى `PermissionRequest`، لا يعيد OpenClaw سوى قرارات السماح أو الرفض الصريحة +عندما تقرر السياسة. نتيجة عدم اتخاذ قرار ليست سماحًا. يتعامل معها Codex كعدم وجود +قرار خطاف ويمررها إلى مسار الحارس الخاص به أو موافقة المستخدم. -تُوجّه طلبات استدعاء موافقة أدوات Codex MCP عبر تدفق موافقات Plugin في OpenClaw -عندما يعلّم Codex `_meta.codex_approval_kind` بالقيمة -`"mcp_tool_call"`. تُرسل مطالبات Codex `request_user_input` إلى -المحادثة الأصلية، وتجيب رسالة المتابعة التالية الموضوعة في الصف عن طلب الخادم -الأصلي ذلك بدلًا من توجيهها كسياق إضافي. لا تزال طلبات الاستدعاء الأخرى في MCP -تفشل بشكل مغلق. +تُوجَّه طلبات استدعاء موافقات أدوات Codex MCP عبر تدفق موافقات Plugin في OpenClaw +عندما يضع Codex علامة `_meta.codex_approval_kind` بالقيمة +`"mcp_tool_call"`. تُرسل مطالبات Codex `request_user_input` مرة أخرى إلى +الدردشة الأصلية، وتجيب رسالة المتابعة التالية في الطابور عن طلب الخادم الأصلي ذلك +بدلًا من توجيهها كسياق إضافي. وتظل طلبات استدعاء MCP الأخرى تفشل مغلقة. -يُطابق توجيه صف التشغيل النشط `turn/steer` في خادم تطبيق Codex. مع -الإعداد الافتراضي `messages.queue.mode: "steer"`، يجمع OpenClaw رسائل المحادثة -الموضوعة في الصف خلال نافذة الهدوء المكوّنة ويرسلها كطلب `turn/steer` واحد -بترتيب الوصول. يرسل وضع `queue` القديم طلبات `turn/steer` منفصلة. يمكن أن ترفض -مراجعة Codex ودورات Compaction اليدوية التوجيه داخل الدورة نفسها، وفي هذه الحالة -يستخدم OpenClaw صف المتابعة عندما يسمح الوضع المحدد بالرجوع الاحتياطي. راجع -[صف التوجيه](/ar/concepts/queue-steering). +يتطابق توجيه طابور التشغيل النشط مع `turn/steer` في خادم تطبيق Codex. مع +الإعداد الافتراضي `messages.queue.mode: "steer"`، يجمع OpenClaw رسائل الدردشة الموضوعة في الطابور +خلال نافذة الهدوء المكونة ويرسلها كطلب `turn/steer` واحد +بترتيب الوصول. يرسل وضع `queue` القديم طلبات `turn/steer` منفصلة. يمكن أن +ترفض دورات مراجعة Codex وCompaction اليدوي التوجيه في الدور نفسه، وفي هذه الحالة +يستخدم OpenClaw طابور المتابعة عندما يسمح الوضع المحدد بالرجوع. راجع +[طابور التوجيه](/ar/concepts/queue-steering). -عندما يستخدم النموذج المحدد إطار Codex، تُفوّض Compaction السلسلة الأصلية إلى -خادم تطبيق Codex. يحتفظ OpenClaw بمرآة لسجل النصوص من أجل سجل القناة -والبحث و`/new` و`/reset` والتبديل المستقبلي للنموذج أو الإطار. تتضمن -المرآة مطالبة المستخدم ونص المساعد النهائي وسجلات خفيفة لاستدلال Codex -أو خطته عندما يصدرها خادم التطبيق. حاليًا، يسجل OpenClaw فقط -إشارات بدء Compaction الأصلية واكتمالها. ولا يعرّض بعد -ملخص Compaction قابلًا للقراءة البشرية أو قائمة قابلة للتدقيق بالإدخالات التي احتفظ بها Codex +عندما يستخدم النموذج المحدد مسخر Codex، يُفوَّض Compaction للسلسلة الأصلية +إلى خادم تطبيق Codex. يحتفظ OpenClaw بمرآة نسخة لسجل القناة، +والبحث، و`/new`، و`/reset`، والتبديل المستقبلي للنموذج أو المسخر. تتضمن +المرآة مطالبة المستخدم، ونص المساعد النهائي، وسجلات خفيفة لاستدلال Codex +أو خطته عندما يصدرها خادم التطبيق. حاليًا، لا يسجل OpenClaw إلا +إشارات بدء Compaction الأصلي واكتماله. ولا يعرض بعد ملخص Compaction +قابلًا للقراءة البشرية أو قائمة قابلة للتدقيق بالإدخالات التي احتفظ بها Codex بعد Compaction. -لأن Codex يملك السلسلة الأصلية المعتمدة، لا يعيد `tool_result_persist` -حاليًا كتابة سجلات نتائج أدوات Codex الأصلية. ينطبق فقط عندما -يكتب OpenClaw نتيجة أداة في سجل نصوص جلسة مملوك لـ OpenClaw. +لأن Codex يملك السلسلة الأصلية المرجعية، فإن `tool_result_persist` لا +يعيد حاليًا كتابة سجلات نتائج أدوات Codex الأصلية. ولا يطبق إلا عندما +يكتب OpenClaw نتيجة أداة نسخة جلسة يملكها OpenClaw. -لا يتطلب إنشاء الوسائط PI. يستمر فهم الصور والفيديو والموسيقى وPDF وTTS والوسائط -في استخدام إعدادات الموفر/النموذج المطابقة مثل -`agents.defaults.imageGenerationModel` و`videoGenerationModel` و`pdfModel` و +لا يتطلب توليد الوسائط PI. يستمر فهم الصور والفيديو والموسيقى وPDF وTTS والوسائط +في استخدام إعدادات المزود/النموذج المطابقة مثل +`agents.defaults.imageGenerationModel`، و`videoGenerationModel`، و`pdfModel`، و `messages.tts`. ## استكشاف الأخطاء وإصلاحها -**لا يظهر Codex كموفّر `/model` عادي:** هذا متوقع في -الإعدادات الجديدة. اختر نموذج `openai/gpt-*` مع +**لا يظهر Codex كمزود `/model` عادي:** هذا متوقع في +الإعدادات الجديدة. حدد نموذج `openai/gpt-*` مع `agentRuntime.id: "codex"` (أو مرجع `codex/*` قديم)، وفعّل `plugins.entries.codex.enabled`، وتحقق مما إذا كان `plugins.allow` يستبعد `codex`. -**يستخدم OpenClaw PI بدلًا من Codex:** لا يزال بإمكان `agentRuntime.id: "auto"` استخدام PI كواجهة -توافق خلفية عندما لا يطالب أي إطار Codex بالتشغيل. عيّن +**يستخدم OpenClaw ‏PI بدلًا من Codex:** لا يزال بإمكان `agentRuntime.id: "auto"` استخدام PI باعتباره +واجهة توافق خلفية عندما لا يطالب أي مسخر Codex بالتشغيل. اضبط `agentRuntime.id: "codex"` لفرض اختيار Codex أثناء الاختبار. يفشل وقت تشغيل Codex المفروض بدلًا من الرجوع إلى PI. بمجرد اختيار خادم تطبيق Codex، تظهر إخفاقاته مباشرة. -**يتم رفض خادم التطبيق:** رقّ Codex بحيث يبلغ تفاوض خادم التطبيق -عن الإصدار `0.125.0` أو أحدث. تُرفض إصدارات ما قبل الإصدار ذات الإصدار نفسه أو +**يرفض خادم التطبيق:** رقّ Codex حتى يبلغ مصافحة خادم التطبيق +عن الإصدار `0.125.0` أو أحدث. تُرفض إصدارات ما قبل الإصدار من الإصدار نفسه أو الإصدارات ذات لاحقة البناء مثل `0.125.0-alpha.2` أو `0.125.0+custom` لأن حد بروتوكول `0.125.0` المستقر هو ما يختبره OpenClaw. -**اكتشاف النماذج بطيء:** خفّض `plugins.entries.codex.config.discovery.timeoutMs` +**اكتشاف النموذج بطيء:** خفّض `plugins.entries.codex.config.discovery.timeoutMs` أو عطّل الاكتشاف. -**يفشل نقل WebSocket فورًا:** تحقق من `appServer.url` و`authToken` +**يفشل نقل WebSocket فورًا:** تحقق من `appServer.url` و`authToken`، ومن أن خادم التطبيق البعيد يتحدث إصدار بروتوكول خادم تطبيق Codex نفسه. -**يستخدم نموذج غير Codex ‏PI:** هذا متوقع إلا إذا فرضت -`agentRuntime.id: "codex"` لذلك الوكيل أو اخترت مرجع -`codex/*` قديمًا. تبقى مراجع `openai/gpt-*` الصريحة ومراجع الموفّرين الأخرى على -مسار موفّرها الطبيعي في وضع `auto`. إذا فرضت `agentRuntime.id: "codex"`، فيجب أن تكون كل -دورة مضمّنة لذلك الوكيل نموذج OpenAI مدعومًا من Codex. +**يستخدم نموذج غير Codex ‏PI:** هذا متوقع ما لم تفرض +`agentRuntime.id: "codex"` لذلك الوكيل أو تحدد مرجع +`codex/*` قديمًا. تظل مراجع `openai/gpt-*` العادية ومراجع المزودين الآخرين على مسار +المزود الطبيعي في وضع `auto`. إذا فرضت `agentRuntime.id: "codex"`، فيجب أن يكون كل دور مضمن +لذلك الوكيل نموذج OpenAI مدعومًا من Codex. **Computer Use مثبت لكن الأدوات لا تعمل:** تحقق من `/codex computer-use status` من جلسة جديدة. إذا أبلغت أداة عن @@ -1081,11 +1075,11 @@ Gateway لمسح تسجيلات الخطافات الأصلية القديمة. ## ذو صلة -- [Plugins إطار الوكلاء](/ar/plugins/sdk-agent-harness) -- [أوقات تشغيل الوكلاء](/ar/concepts/agent-runtimes) -- [موفّرو النماذج](/ar/concepts/model-providers) -- [موفّر OpenAI](/ar/providers/openai) +- [plugins مسخر الوكيل](/ar/plugins/sdk-agent-harness) +- [أوقات تشغيل الوكيل](/ar/concepts/agent-runtimes) +- [مزودو النماذج](/ar/concepts/model-providers) +- [مزود OpenAI](/ar/providers/openai) - [الحالة](/ar/cli/status) - [خطافات Plugin](/ar/plugins/hooks) -- [مرجع الإعدادات](/ar/gateway/configuration-reference) +- [مرجع التكوين](/ar/gateway/configuration-reference) - [الاختبار](/ar/help/testing-live#live-codex-app-server-harness-smoke) diff --git a/docs/ar/plugins/dependency-resolution.md b/docs/ar/plugins/dependency-resolution.md index ec095e4af..2b430e67d 100644 --- a/docs/ar/plugins/dependency-resolution.md +++ b/docs/ar/plugins/dependency-resolution.md @@ -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 --omit=dev --ignore-scripts --no-audit --no-fund ``` -قد يرفع npm الاعتماديات المتعدية إلى `~/.openclaw/npm/node_modules` بجانب حزمة Plugin. يفحص OpenClaw جذر npm المُدار قبل الوثوق بالتثبيت، ويستخدم npm لإزالة الحزم المُدارة بواسطة npm أثناء إلغاء التثبيت، لذلك تبقى اعتماديات وقت التشغيل المرفوعة داخل حدود التنظيف المُدارة. +يستخدم `openclaw plugins install npm-pack:` جذر 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 @@ -80,26 +82,26 @@ openclaw plugins install 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/` بحيث تكون اعتماديات workspace المحلية للحزمة متاحة وتُلتقط التعديلات مباشرة. تطوير نسخة المصدر يعتمد على pnpm فقط؛ لا يُعد `npm install` العادي في جذر المستودع طريقة مدعومة لتحضير اعتماديات Plugins المضمّنة. +في نسخ المصدر، يعامل OpenClaw المستودع كمستودع pnpm monorepo. بعد `pnpm install`، تُحمّل Plugins المضمنة من `extensions/` بحيث تتوفر تبعيات مساحة العمل المحلية للحزمة ويتم التقاط التعديلات مباشرة. تطوير نسخة المصدر مخصص لـ pnpm فقط؛ لا يُعد تشغيل `npm install` عادي في جذر المستودع طريقة مدعومة لتحضير تبعيات Plugin المضمنة. -| شكل التثبيت | موقع Plugin المضمّن | مالك الاعتماديات | +| شكل التثبيت | موقع Plugin المضمنة | مالك التبعية | | -------------------------------- | ------------------------------------- | -------------------------------------------------------------------- | -| `npm install -g openclaw` | شجرة وقت التشغيل المبنية داخل الحزمة | حزمة OpenClaw وتدفقات تثبيت/تحديث/doctor الصريحة لـ Plugin | -| نسخة git مع `pnpm install` | حزم workspace في `extensions/` | workspace الخاص بـ pnpm، بما في ذلك الاعتماديات الخاصة بكل حزمة Plugin | -| `openclaw plugins install ...` | جذر Plugin مُدار عبر npm/git/ClawHub | تدفق تثبيت/تحديث Plugin | +| `npm install -g openclaw` | شجرة وقت التشغيل المبنية داخل الحزمة | حزمة OpenClaw وتدفقات تثبيت/تحديث/Doctor الصريحة لـ Plugin | +| نسخة git مع `pnpm install` | حزم مساحة العمل `extensions/` | مساحة عمل 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 معلقة. -هذه المسارات ليست إلا بقايا قديمة. يجب ألا تنشئها التثبيتات الجديدة. +هذه المسارات بقايا قديمة فقط. يجب ألا تنشئها التثبيتات الجديدة. diff --git a/docs/ar/plugins/google-meet.md b/docs/ar/plugins/google-meet.md index d9000c81b..2423b5d40 100644 --- a/docs/ar/plugins/google-meet.md +++ b/docs/ar/plugins/google-meet.md @@ -2,43 +2,43 @@ read_when: - تريد أن ينضم وكيل OpenClaw إلى مكالمة Google Meet - تريد أن ينشئ وكيل OpenClaw مكالمة Google Meet جديدة - - أنت تهيئ Chrome أو عقدة Chrome أو Twilio كناقل لـ Google Meet -summary: 'Plugin Google Meet: الانضمام إلى عناوين URL المحددة صراحةً لـ Meet عبر Chrome أو Twilio مع إعدادات ردّ الوكيل الافتراضية' + - أنت تُهيّئ Chrome أو عقدة Chrome أو Twilio كناقل لـ Google Meet +summary: 'Plugin Google Meet: الانضمام إلى عناوين URL صريحة لـ Meet عبر Chrome أو Twilio مع إعدادات الردّ الافتراضية للوكيل' title: Plugin Google Meet x-i18n: - generated_at: "2026-05-04T07:08:52Z" + generated_at: "2026-05-06T09:02:26Z" model: gpt-5.5 provider: openai - source_hash: 4268ad895bbf83d649b9571c0888c27eb982ad9710dfb408f22f7818cdc5dbcb + source_hash: 9c1de7528ddabe6411598eea362d4a21c6f95f374700046c18294b215a1333d3 source_path: plugins/google-meet.md workflow: 16 --- -دعم مشارك Google Meet في OpenClaw — إن Plugin صريح بالتصميم: +دعم مشاركي Google Meet لـ OpenClaw — يكون Plugin صريحًا حسب التصميم: - لا ينضم إلا إلى عنوان URL صريح بالشكل `https://meet.google.com/...`. - يمكنه إنشاء مساحة Meet جديدة عبر Google Meet API، ثم الانضمام إلى عنوان URL المُعاد. -- `agent` هو وضع الرد الصوتي الافتراضي: يستمع النسخ الفوري، ويجيب وكيل +- `agent` هو وضع الرد الصوتي الافتراضي: يستمع النسخ الفوري، ويرد وكيل OpenClaw المُكوَّن، ويتحدث OpenClaw TTS العادي داخل Meet. -- يظل `bidi` متاحًا كوضع احتياطي لنموذج الصوت الفوري المباشر. +- يظل `bidi` متاحًا كوضع احتياطي مباشر لنموذج الصوت الفوري. - تختار الوكلاء سلوك الانضمام باستخدام `mode`: استخدم `agent` للاستماع/الرد الصوتي المباشر، أو `bidi` للاحتياطي الصوتي الفوري المباشر، أو `transcribe` - للانضمام/التحكم بالمتصفح دون جسر الرد الصوتي. -- يبدأ التفويض بوصول Google OAuth شخصي أو ملف Chrome شخصي مسجل الدخول مسبقًا. + للانضمام/التحكم في المتصفح دون جسر الرد الصوتي. +- يبدأ المصادقة عبر Google OAuth شخصي أو ملف Chrome شخصي مسجل الدخول مسبقًا. - لا يوجد إعلان موافقة تلقائي. -- واجهة الصوت الخلفية الافتراضية في Chrome هي `BlackHole 2ch`. -- يمكن تشغيل Chrome محليًا أو على مضيف Node مقترن. -- يقبل Twilio رقم اتصال هاتفيًا بالإضافة إلى رقم PIN اختياري أو تسلسل DTMF؛ ولا - يمكنه طلب عنوان URL لـ Meet مباشرة. -- أمر CLI هو `googlemeet`؛ و`meet` محجوز لتدفقات الاجتماعات عن بُعد الأوسع - الخاصة بالوكلاء. +- واجهة الصوت الافتراضية في Chrome هي `BlackHole 2ch`. +- يمكن تشغيل Chrome محليًا أو على مضيف node مقترن. +- يقبل Twilio رقم اتصال هاتفيًا مع رقم PIN اختياري أو تسلسل DTMF؛ ولا يمكنه + طلب عنوان URL لـ Meet مباشرة. +- أمر CLI هو `googlemeet`؛ و`meet` محجوز لتدفقات مؤتمرات الوكلاء الهاتفية + الأوسع. ## البدء السريع -ثبّت تبعيات الصوت المحلية وهيّئ مزود نسخ فوريًا بالإضافة إلى OpenClaw TTS عادي. -OpenAI هو مزود النسخ الافتراضي؛ ويعمل Google Gemini Live أيضًا كاحتياطي صوتي -منفصل بنمط `bidi` مع `realtime.voiceProvider: "google"`: +ثبّت اعتماديات الصوت المحلية وهيّئ موفر نسخ فوريًا بالإضافة إلى OpenClaw TTS +العادي. OpenAI هو موفر النسخ الافتراضي؛ ويعمل Google Gemini Live أيضًا +كاحتياطي صوت `bidi` منفصل مع `realtime.voiceProvider: "google"`: ```bash brew install blackhole-2ch sox @@ -82,33 +82,32 @@ command -v sox openclaw googlemeet setup ``` -مخرجات الإعداد مصممة لتكون قابلة للقراءة من الوكيل ومدركة للوضع. وهي تبلّغ عن -ملف Chrome الشخصي، وتثبيت Node، وبالنسبة لانضمامات Chrome الفورية، جسر صوت -BlackHole/SoX وفحوصات المقدمة الفورية المؤجلة. بالنسبة لانضمامات المراقبة فقط، -تحقق من النقل نفسه باستخدام `--mode transcribe`؛ يتجاوز هذا الوضع متطلبات -الصوت الفوري المسبقة لأنه لا يستمع أو يتحدث عبر الجسر: +صُمم خرج الإعداد ليكون قابلاً للقراءة من قبل الوكيل ومدركًا للوضع. يبلّغ عن +ملف Chrome الشخصي، وتثبيت node، وبالنسبة لانضمامات Chrome الفورية، عن جسر صوت +BlackHole/SoX وفحوصات مقدمة الوقت الفعلي المؤجلة. للانضمامات المخصصة +للمراقبة فقط، تحقق من النقل نفسه باستخدام `--mode transcribe`؛ يتجاوز ذلك +الوضع متطلبات الصوت الفوري لأنه لا يستمع عبر الجسر ولا يتحدث عبره: ```bash openclaw googlemeet setup --transport chrome-node --mode transcribe ``` عند تكوين تفويض Twilio، يبلّغ الإعداد أيضًا عمّا إذا كان Plugin -`voice-call`، وبيانات اعتماد Twilio، وتعريض Webhook العام جاهزة. تعامل مع أي -فحص `ok: false` كحاجز للنقل والوضع اللذين تم فحصهما قبل أن تطلب من وكيل -الانضمام. استخدم `openclaw googlemeet setup --json` للسكربتات أو المخرجات -القابلة للقراءة آليًا. استخدم `--transport chrome` أو -`--transport chrome-node` أو `--transport twilio` لإجراء فحص مسبق لنقل محدد -قبل أن يحاول الوكيل استخدامه. +`voice-call`، وبيانات اعتماد Twilio، وإتاحة Webhook العامة جاهزة. تعامل مع أي +فحص `ok: false` كمانع للنقل والوضع المفحوصين قبل طلب الانضمام من الوكيل. +استخدم `openclaw googlemeet setup --json` للسكربتات أو للخرج القابل للقراءة +آليًا. استخدم `--transport chrome` أو `--transport chrome-node` أو +`--transport twilio` لفحص نقل محدد مسبقًا قبل أن يجربه الوكيل. -بالنسبة إلى Twilio، أجرِ دائمًا فحصًا مسبقًا صريحًا للنقل عندما يكون النقل +بالنسبة إلى Twilio، افحص النقل مسبقًا بشكل صريح دائمًا عندما يكون النقل الافتراضي هو Chrome: ```bash openclaw googlemeet setup --transport twilio ``` -يلتقط ذلك نقص توصيل `voice-call`، أو بيانات اعتماد Twilio، أو تعريض Webhook -غير القابل للوصول قبل أن يحاول الوكيل طلب الاجتماع. +يلتقط ذلك غياب ربط `voice-call` أو بيانات اعتماد Twilio أو تعذر الوصول إلى +إتاحة Webhook قبل أن يحاول الوكيل طلب الاجتماع. انضم إلى اجتماع: @@ -116,7 +115,7 @@ openclaw googlemeet setup --transport twilio openclaw googlemeet join https://meet.google.com/abc-defg-hij ``` -أو اسمح لوكيل بالانضمام عبر أداة `google_meet`: +أو دع وكيلاً ينضم عبر أداة `google_meet`: ```json { @@ -127,12 +126,12 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij } ``` -تظل أداة `google_meet` الموجهة للوكيل متاحة على مضيفات غير macOS لتدفقات +تظل أداة `google_meet` الموجهة للوكلاء متاحة على مضيفات غير macOS لتدفقات الأثر، والتقويم، والإعداد، والنسخ، وTwilio، و`chrome-node`. تُحظر إجراءات -الرد الصوتي عبر Chrome المحلي هناك لأن مسار صوت Chrome المضمّن يعتمد حاليًا على -`BlackHole 2ch` في macOS. على Linux، استخدم `mode: "transcribe"`، أو الاتصال -الهاتفي عبر Twilio، أو مضيف `chrome-node` على macOS للمشاركة بالرد الصوتي عبر -Chrome. +الرد الصوتي عبر Chrome المحلي هناك لأن مسار صوت Chrome المضمن يعتمد حاليًا +على `BlackHole 2ch` في macOS. على Linux، استخدم `mode: "transcribe"`، أو +الاتصال الهاتفي عبر Twilio، أو مضيف `chrome-node` على macOS للمشاركة برد صوتي +عبر Chrome. أنشئ اجتماعًا جديدًا وانضم إليه: @@ -140,21 +139,21 @@ Chrome. openclaw googlemeet create --transport chrome-node --mode agent ``` -بالنسبة إلى الغرف المُنشأة عبر API، استخدم Google Meet -`SpaceConfig.accessType` عندما تريد أن تكون سياسة الغرفة دون طلب إذن صريحة -بدلًا من أن تكون موروثة من افتراضيات حساب Google: +للغرف المنشأة عبر API، استخدم Google Meet `SpaceConfig.accessType` عندما تريد +أن تكون سياسة عدم الطرق الخاصة بالغرفة صريحة بدلاً من وراثتها من افتراضيات +حساب Google: ```bash openclaw googlemeet create --access-type OPEN --transport chrome-node --mode agent ``` -يسمح `OPEN` لأي شخص لديه عنوان URL لـ Meet بالانضمام دون طلب إذن. يسمح -`TRUSTED` للمستخدمين الموثوقين في مؤسسة المضيف، والمستخدمين الخارجيين المدعوين، -ومستخدمي الاتصال الهاتفي بالانضمام دون طلب إذن. يحد `RESTRICTED` الدخول دون -طلب إذن بالمدعوين. لا تنطبق هذه الإعدادات إلا على مسار الإنشاء الرسمي عبر +يسمح `OPEN` لأي شخص لديه عنوان URL لـ Meet بالانضمام دون طرق. يسمح `TRUSTED` +للمستخدمين الموثوقين في مؤسسة المضيف، والمستخدمين الخارجيين المدعوين، +ومستخدمي الاتصال الهاتفي بالانضمام دون طرق. يقيّد `RESTRICTED` الدخول دون +طرق بالمدعوين فقط. تنطبق هذه الإعدادات فقط على مسار الإنشاء الرسمي عبر Google Meet API، لذلك يجب تكوين بيانات اعتماد OAuth. -إذا كنت قد صادقت Google Meet قبل إتاحة هذا الخيار، فأعد تشغيل +إذا صادقت Google Meet قبل توفر هذا الخيار، فأعد تشغيل `openclaw googlemeet auth login --json` بعد إضافة نطاق `meetings.space.settings` إلى شاشة موافقة Google OAuth لديك. @@ -164,29 +163,30 @@ Google Meet API، لذلك يجب تكوين بيانات اعتماد OAuth. openclaw googlemeet create --no-join ``` -يحتوي `googlemeet create` على مسارين: +لدى `googlemeet create` مساران: -- إنشاء عبر API: يُستخدم عند تكوين بيانات اعتماد Google Meet OAuth. هذا هو - المسار الأكثر حتمية ولا يعتمد على حالة واجهة المتصفح. +- إنشاء API: يُستخدم عند تكوين بيانات اعتماد Google Meet OAuth. هذا هو المسار + الأكثر حتمية ولا يعتمد على حالة واجهة المتصفح. - احتياطي المتصفح: يُستخدم عند غياب بيانات اعتماد OAuth. يستخدم OpenClaw - Node Chrome المثبتة، ويفتح `https://meet.google.com/new`، وينتظر Google حتى - يعيد التوجيه إلى عنوان URL حقيقي برمز اجتماع، ثم يعيد ذلك العنوان. يتطلب هذا - المسار أن يكون ملف Chrome الشخصي الخاص بـ OpenClaw على Node مسجل الدخول إلى - Google مسبقًا. تتعامل أتمتة المتصفح مع مطالبة الميكروفون الأولى الخاصة بـ - Meet؛ ولا تُعامل تلك المطالبة كفشل في تسجيل الدخول إلى Google. + node Chrome المثبت، ويفتح `https://meet.google.com/new`، وينتظر Google حتى + تعيد التوجيه إلى عنوان URL حقيقي برمز اجتماع، ثم يعيد ذلك العنوان. يتطلب + هذا المسار أن يكون ملف Chrome الشخصي الخاص بـ OpenClaw على node مسجل الدخول + مسبقًا إلى Google. + تتعامل أتمتة المتصفح مع مطالبة الميكروفون الخاصة بالتشغيل الأول في Meet؛ + ولا تُعامل تلك المطالبة كفشل تسجيل دخول إلى Google. تحاول تدفقات الانضمام والإنشاء أيضًا إعادة استخدام تبويب Meet موجود قبل فتح - تبويب جديد. تتجاهل المطابقة سلاسل استعلام URL غير الضارة مثل `authuser`، لذا - ينبغي أن تركز إعادة محاولة الوكيل على الاجتماع المفتوح مسبقًا بدلًا من إنشاء + تبويب جديد. يتجاهل التطابق سلاسل استعلام URL غير الضارة مثل `authuser`، لذا + يجب أن تركز إعادة محاولة الوكيل على الاجتماع المفتوح مسبقًا بدلاً من إنشاء تبويب Chrome ثانٍ. -يتضمن مخرج الأمر/الأداة حقل `source` (`api` أو `browser`) حتى تتمكن الوكلاء من -شرح المسار المستخدم. ينضم `create` إلى الاجتماع الجديد افتراضيًا ويعيد -`joined: true` بالإضافة إلى جلسة الانضمام. لصك عنوان URL فقط، استخدم -`create --no-join` في CLI أو مرّر `"join": false` إلى الأداة. +يتضمن خرج الأمر/الأداة حقلاً باسم `source` (`api` أو `browser`) حتى تتمكن +الوكلاء من شرح المسار الذي استُخدم. ينضم `create` إلى الاجتماع الجديد +افتراضيًا ويعيد `joined: true` بالإضافة إلى جلسة الانضمام. لإنشاء عنوان URL +فقط، استخدم `create --no-join` في CLI أو مرر `"join": false` إلى الأداة. -أو أخبر وكيلًا: "أنشئ Google Meet، وانضم إليه بوضع الرد الصوتي الخاص بالوكيل، -وأرسل لي الرابط." ينبغي أن يستدعي الوكيل `google_meet` مع -`action: "create"` ثم يشارك `meetingUri` المُعاد. +أو أخبر وكيلاً: "أنشئ Google Meet، وانضم إليه بوضع الرد الصوتي للوكيل، وأرسل +لي الرابط." يجب أن يستدعي الوكيل `google_meet` مع `action: "create"` ثم يشارك +`meetingUri` المُعاد. ```json { @@ -196,93 +196,95 @@ openclaw googlemeet create --no-join } ``` -لانضمام مراقبة فقط/تحكم بالمتصفح، اضبط `"mode": "transcribe"`. لا يبدأ ذلك -جسر الصوت الفوري ثنائي الاتجاه، ولا يتطلب BlackHole أو SoX، ولن يرد صوتيًا داخل -الاجتماع. تتجنب انضمامات Chrome في هذا الوضع أيضًا منح إذن الميكروفون/الكاميرا -في OpenClaw وتتجنب مسار **Use microphone** في Meet. إذا عرض Meet شاشة بينية -لاختيار الصوت، تحاول الأتمتة مسار عدم استخدام الميكروفون، وإلا تبلّغ عن إجراء -يدوي بدلًا من فتح الميكروفون المحلي. في وضع النسخ، تثبّت عمليات نقل Chrome -المُدارة أيضًا مراقب تسميات Meet توضيحية بأفضل جهد. يعرض -`googlemeet status --json` و`googlemeet doctor` القيم `captioning` و -`captionsEnabledAttempted` و`transcriptLines` و`lastCaptionAt` و -`lastCaptionSpeaker` و`lastCaptionText` وذيل `recentTranscript` قصيرًا حتى -يتمكن المشغلون من معرفة ما إذا كان المتصفح قد انضم إلى المكالمة وما إذا كانت +لانضمام مخصص للمراقبة فقط/التحكم في المتصفح، عيّن `"mode": "transcribe"`. +لا يبدأ ذلك جسر الصوت الفوري المزدوج، ولا يتطلب BlackHole أو SoX، ولن يرد +صوتيًا داخل الاجتماع. تتجنب انضمامات Chrome في هذا الوضع أيضًا منح إذن +الميكروفون/الكاميرا في OpenClaw وتتجنب مسار Meet **استخدام الميكروفون**. إذا +عرض Meet شاشة اختيار صوت، تحاول الأتمتة مسار عدم استخدام الميكروفون، وإلا +تبلّغ عن إجراء يدوي بدلاً من فتح الميكروفون المحلي. في وضع النسخ، تثبّت +نقولات Chrome المُدارة أيضًا مراقب تسميات توضيحية لـ Meet بأفضل جهد. يعرض +`googlemeet status --json` و`googlemeet doctor` الحقول `captioning`، +و`captionsEnabledAttempted`، و`transcriptLines`، و`lastCaptionAt`، +و`lastCaptionSpeaker`، و`lastCaptionText`، وذيل `recentTranscript` قصيرًا حتى +يتمكن المشغّلون من معرفة ما إذا كان المتصفح قد انضم إلى المكالمة وما إذا كانت تسميات Meet التوضيحية تنتج نصًا. استخدم `openclaw googlemeet test-listen --transport chrome-node` -عندما تحتاج إلى مسبار نعم/لا: ينضم في وضع النسخ، وينتظر تسمية توضيحية حديثة أو -حركة في النص، ويعيد `listenVerified` و`listenTimedOut` وحقول الإجراء اليدوي -وأحدث حالة صحة للتسميات التوضيحية. +عندما تحتاج إلى فحص بنعم/لا: ينضم في وضع النسخ، وينتظر تسمية توضيحية حديثة +أو حركة في النص المنسوخ، ويعيد `listenVerified` و`listenTimedOut` وحقول +الإجراء اليدوي وأحدث حالة لصحة التسميات التوضيحية. أثناء الجلسات الفورية، تتضمن حالة `google_meet` صحة المتصفح وجسر الصوت مثل -`inCall` و`manualActionRequired` و`providerConnected` و`realtimeReady` و -`audioInputActive` و`audioOutputActive`، والطوابع الزمنية لآخر إدخال/إخراج، -وعدادات البايت، وحالة إغلاق الجسر. إذا ظهرت مطالبة آمنة في صفحة Meet، تتعامل -أتمتة المتصفح معها عندما تستطيع. تُبلّغ مطالبات تسجيل الدخول، وقبول المضيف، -وأذونات المتصفح/نظام التشغيل كإجراء يدوي مع سبب ورسالة لينقلها الوكيل. لا تصدر -جلسات Chrome المُدارة عبارة المقدمة أو الاختبار إلا بعد أن تبلّغ صحة المتصفح -`inCall: true`؛ وإلا تبلّغ الحالة `speechReady: false` وتُحظر محاولة الكلام -بدلًا من الادعاء بأن الوكيل تحدث داخل الاجتماع. +`inCall`، و`manualActionRequired`، و`providerConnected`، و`realtimeReady`، +و`audioInputActive`، و`audioOutputActive`، وطوابع وقت آخر إدخال/إخراج، وعدادات +البايت، وحالة إغلاق الجسر. إذا ظهرت مطالبة صفحة Meet آمنة، تتعامل معها أتمتة +المتصفح عندما تستطيع. تُبلّغ مطالبات تسجيل الدخول، وقبول المضيف، وأذونات +المتصفح/نظام التشغيل كإجراء يدوي مع سبب ورسالة ليرسلها الوكيل. لا تُصدر +جلسات Chrome المُدارة المقدمة أو عبارة الاختبار إلا بعد أن تبلّغ صحة المتصفح +عن `inCall: true`؛ وإلا تبلّغ الحالة `speechReady: false` وتُحظر محاولة +الكلام بدلاً من الادعاء بأن الوكيل تحدث داخل الاجتماع. تنضم عمليات Chrome المحلية عبر ملف متصفح OpenClaw الشخصي المسجل الدخول. يتطلب الوضع الفوري `BlackHole 2ch` لمسار الميكروفون/السماعة الذي يستخدمه OpenClaw. -للحصول على صوت ثنائي الاتجاه نظيف، استخدم أجهزة افتراضية منفصلة أو مخططًا -بأسلوب Loopback؛ جهاز BlackHole واحد يكفي لاختبار دخان أولي لكنه قد يسبب صدى. +لصوت مزدوج نظيف، استخدم أجهزة افتراضية منفصلة أو رسمًا بيانيًا بأسلوب +Loopback؛ يكفي جهاز BlackHole واحد لاختبار دخان أولي لكنه قد يسبب صدى. -### Gateway محلي + Chrome عبر Parallels +### Gateway المحلي + Parallels Chrome -لا تحتاج إلى Gateway كامل لـ OpenClaw أو مفتاح API لنموذج داخل VM بنظام macOS -فقط لجعل VM يمتلك Chrome. شغّل Gateway والوكيل محليًا، ثم شغّل مضيف Node في -VM. فعّل Plugin المضمّن على VM مرة واحدة حتى تعلن Node عن أمر Chrome: +لا تحتاج إلى OpenClaw Gateway كامل أو مفتاح API للنموذج داخل جهاز macOS +افتراضي لمجرد جعل الجهاز الافتراضي يمتلك Chrome. شغّل Gateway والوكيل محليًا، +ثم شغّل مضيف node في الجهاز الافتراضي. فعّل Plugin المضمن في الجهاز الافتراضي +مرة واحدة حتى يعلن node عن أمر Chrome: ما الذي يعمل وأين: - مضيف Gateway: OpenClaw Gateway، ومساحة عمل الوكيل، ومفاتيح النموذج/API، - ومزود الوقت الفوري، وتكوين Google Meet Plugin. -- VM بنظام Parallels macOS: OpenClaw CLI/مضيف Node، وGoogle Chrome، وSoX، - وBlackHole 2ch، وملف Chrome شخصي مسجل الدخول إلى Google. -- غير مطلوب في VM: خدمة Gateway، أو تكوين الوكيل، أو مفتاح OpenAI/GPT، أو - إعداد مزود النموذج. + وموفر الوقت الفعلي، وتكوين Google Meet Plugin. +- جهاز macOS افتراضي عبر Parallels: OpenClaw CLI/مضيف node، وGoogle Chrome، + وSoX، وBlackHole 2ch، وملف Chrome شخصي مسجل الدخول إلى Google. +- غير مطلوب في الجهاز الافتراضي: خدمة Gateway، أو تكوين الوكيل، أو مفتاح + OpenAI/GPT، أو إعداد موفر النموذج. -ثبّت تبعيات VM: +ثبّت اعتماديات الجهاز الافتراضي: ```bash brew install blackhole-2ch sox ``` -أعد تشغيل VM بعد تثبيت BlackHole حتى يعرض macOS `BlackHole 2ch`: +أعد تشغيل الجهاز الافتراضي بعد تثبيت BlackHole حتى يعرض macOS `BlackHole 2ch`: ```bash sudo reboot ``` -بعد إعادة التشغيل، تحقق من أن VM يمكنه رؤية جهاز الصوت وأوامر SoX: +بعد إعادة التشغيل، تحقق من أن الجهاز الافتراضي يمكنه رؤية جهاز الصوت وأوامر +SoX: ```bash system_profiler SPAudioDataType | grep -i BlackHole command -v sox ``` -ثبّت OpenClaw أو حدّثه في VM، ثم فعّل Plugin المضمّن هناك: +ثبّت OpenClaw أو حدّثه في الجهاز الافتراضي، ثم فعّل Plugin المضمن هناك: ```bash openclaw plugins enable google-meet ``` -ابدأ مضيف Node في VM: +ابدأ مضيف node في الجهاز الافتراضي: ```bash openclaw node run --host --port 18789 --display-name parallels-macos ``` -إذا كان `` عنوان IP على LAN ولا تستخدم TLS، فسيرفض Node -WebSocket بالنص الصريح ما لم تشترك صراحةً لتلك الشبكة الخاصة الموثوقة: +إذا كان `` عنوان IP على LAN وكنت لا تستخدم TLS، فسيرفض node +WebSocket بالنص الصريح ما لم تقبل ذلك صراحة لتلك الشبكة الخاصة الموثوقة: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host --port 18789 --display-name parallels-macos ``` -استخدم متغير البيئة نفسه عند تثبيت Node كـ LaunchAgent: +استخدم متغير البيئة نفسه عند تثبيت node كـ LaunchAgent: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ @@ -290,25 +292,25 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node restart ``` -`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` هو بيئة العملية، وليس إعداد +`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` هو بيئة عملية، وليس إعدادًا في `openclaw.json`. يخزّنه `openclaw node install` في بيئة LaunchAgent عندما يكون موجودًا في أمر التثبيت. -وافق على Node من مضيف Gateway: +وافق على node من مضيف Gateway: ```bash openclaw devices list openclaw devices approve ``` -تأكد من أن Gateway يرى Node وأنها تعلن عن كل من `googlemeet.chrome` وإمكانية +أكد أن Gateway يرى node وأنه يعلن كلاً من `googlemeet.chrome` وإمكانات المتصفح/`browser.proxy`: ```bash openclaw nodes status ``` -وجّه Meet عبر تلك Node على مضيف Gateway: +وجّه Meet عبر ذلك node على مضيف Gateway: ```json5 { @@ -338,7 +340,7 @@ openclaw nodes status } ``` -الآن انضم بشكل طبيعي من مضيف Gateway: +الآن انضم كالمعتاد من مضيف Gateway: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij @@ -346,104 +348,103 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij أو اطلب من الوكيل استخدام أداة `google_meet` مع `transport: "chrome-node"`. -لاختبار دخان بأمر واحد ينشئ جلسة أو يعيد استخدامها، ويتحدث بعبارة معروفة، -ويطبع صحة الجلسة: +لاختبار دخان بأمر واحد ينشئ جلسة أو يعيد استخدامها، وينطق عبارة معروفة، ويطبع +صحة الجلسة: ```bash openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij ``` -أثناء الانضمام في الوقت الفعلي، تملأ أتمتة متصفح OpenClaw اسم الضيف، وتنقر -على Join/Ask to join، وتقبل خيار "Use microphone" عند التشغيل الأول في Meet عندما -تظهر تلك المطالبة. أثناء الانضمام للمراقبة فقط أو إنشاء اجتماع عبر المتصفح فقط، فإنها -تتابع تجاوز المطالبة نفسها من دون ميكروفون عندما يكون ذلك الخيار متاحا. -إذا لم يكن ملف تعريف المتصفح مسجلا دخوله، أو كان Meet ينتظر قبول المضيف، -أو كان Chrome يحتاج إلى إذن الميكروفون/الكاميرا لانضمام في الوقت الفعلي، أو كان Meet عالقا -على مطالبة تعذر على الأتمتة حلها، فإن نتيجة الانضمام/اختبار الكلام تبلغ عن +أثناء الانضمام في الوقت الفعلي، تملأ أتمتة المتصفح في OpenClaw اسم الضيف، وتنقر +Join/Ask to join، وتقبل خيار "Use microphone" للتشغيل الأول في Meet عندما +تظهر تلك المطالبة. أثناء الانضمام بوضع المراقبة فقط أو إنشاء اجتماع من المتصفح فقط، فإنها +تتجاوز المطالبة نفسها بدون ميكروفون عندما يكون ذلك الخيار متاحًا. +إذا لم يكن ملف تعريف المتصفح مسجّل الدخول، أو كان Meet ينتظر قبول المضيف، +أو احتاج Chrome إلى إذن الميكروفون/الكاميرا للانضمام في الوقت الفعلي، أو علق Meet +على مطالبة لم تستطع الأتمتة حلها، فإن نتيجة الانضمام/اختبار الكلام تبلغ عن `manualActionRequired: true` مع `manualActionReason` و `manualActionMessage`. يجب على الوكلاء إيقاف إعادة محاولة الانضمام، والإبلاغ عن تلك -الرسالة نفسها إضافة إلى `browserUrl`/`browserTitle` الحاليين، وإعادة المحاولة فقط بعد -اكتمال الإجراء اليدوي في المتصفح. +الرسالة الدقيقة بالإضافة إلى `browserUrl`/`browserTitle` الحاليين، وإعادة المحاولة فقط بعد +اكتمال إجراء المتصفح اليدوي. -إذا حذفت `chromeNode.node`، فإن OpenClaw يختار تلقائيا فقط عندما تعلن عقدة واحدة -متصلة بالضبط عن كل من `googlemeet.chrome` والتحكم في المتصفح. إذا كانت عدة -عقد قادرة متصلة، فعيّن `chromeNode.node` إلى معرف العقدة أو اسم العرض أو IP البعيد. +إذا حُذف `chromeNode.node`، فإن OpenClaw يختار تلقائيًا فقط عندما يعلن Node واحد متصل +بالضبط عن كل من `googlemeet.chrome` والتحكم في المتصفح. إذا كانت عدة Nodes قادرة متصلة، +فعيّن `chromeNode.node` إلى معرّف Node، أو اسم العرض، أو عنوان IP البعيد. فحوصات الفشل الشائعة: -- `Configured Google Meet node ... is not usable: offline`: العقدة المثبتة - معروفة لدى Gateway لكنها غير متاحة. يجب على الوكلاء التعامل مع تلك العقدة كحالة - تشخيصية، لا كمضيف Chrome صالح للاستخدام، والإبلاغ عن عائق الإعداد - بدلا من الرجوع إلى نقل آخر ما لم يطلب المستخدم ذلك. -- `No connected Google Meet-capable node`: شغّل `openclaw node run` في VM، - وافق على الاقتران، وتأكد من تشغيل `openclaw plugins enable google-meet` و - `openclaw plugins enable browser` في VM. أكّد أيضا أن مضيف - Gateway يسمح بكلا أمري العقدة عبر +- `Configured Google Meet node ... is not usable: offline`: يكون Node المثبّت + معروفًا لدى Gateway لكنه غير متاح. يجب على الوكلاء التعامل مع ذلك Node على أنه + حالة تشخيصية، لا كمضيف Chrome قابل للاستخدام، والإبلاغ عن عائق الإعداد + بدلًا من الرجوع إلى نقل آخر ما لم يطلب المستخدم ذلك. +- `No connected Google Meet-capable node`: ابدأ `openclaw node run` في الـ VM، + ووافق على الاقتران، وتأكد من تشغيل `openclaw plugins enable google-meet` و + `openclaw plugins enable browser` في الـ VM. أكّد أيضًا أن مضيف + Gateway يسمح بأمري Node كليهما باستخدام `gateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"]`. - `BlackHole 2ch audio device not found`: ثبّت `blackhole-2ch` على المضيف الذي يجري فحصه وأعد التشغيل قبل استخدام صوت Chrome المحلي. - `BlackHole 2ch audio device not found on the node`: ثبّت `blackhole-2ch` - في VM وأعد تشغيل VM. -- يفتح Chrome لكنه لا يستطيع الانضمام: سجّل الدخول إلى ملف تعريف المتصفح داخل VM، أو - أبق `chrome.guestName` مضبوطا لانضمام الضيف. يستخدم الانضمام التلقائي للضيف - أتمتة متصفح OpenClaw عبر وكيل متصفح العقدة؛ تأكد من أن إعداد متصفح العقدة - يشير إلى ملف التعريف الذي تريده، على سبيل المثال - `browser.defaultProfile: "user"` أو ملف تعريف جلسة موجود مسمى. -- تبويبات Meet مكررة: اترك `chrome.reuseExistingTab: true` مفعلا. يفعّل OpenClaw - تبويبا موجودا لعنوان Meet نفسه قبل فتح تبويب جديد، كما أن إنشاء الاجتماع عبر المتصفح - يعيد استخدام تبويب `https://meet.google.com/new` قيد التقدم - أو تبويب مطالبة حساب Google قبل فتح تبويب آخر. + في الـ VM وأعد تشغيل الـ VM. +- يفتح Chrome لكنه لا يستطيع الانضمام: سجّل الدخول إلى ملف تعريف المتصفح داخل الـ VM، أو + أبقِ `chrome.guestName` معيّنًا للانضمام كضيف. يستخدم الانضمام التلقائي كضيف أتمتة + متصفح OpenClaw عبر وكيل متصفح Node؛ تأكد من أن إعدادات متصفح Node + تشير إلى ملف التعريف الذي تريده، مثل + `browser.defaultProfile: "user"` أو ملف تعريف جلسة حالية مسمى. +- علامات تبويب Meet مكررة: اترك `chrome.reuseExistingTab: true` مفعّلًا. يفعّل OpenClaw + علامة تبويب موجودة لعنوان URL نفسه في Meet قبل فتح علامة جديدة، كما أن + إنشاء اجتماع المتصفح يعيد استخدام علامة تبويب `https://meet.google.com/new` + قيد التقدم أو مطالبة حساب Google قبل فتح علامة أخرى. - لا يوجد صوت: في Meet، وجّه صوت الميكروفون/السماعة عبر مسار جهاز الصوت الافتراضي - الذي يستخدمه OpenClaw؛ استخدم أجهزة افتراضية منفصلة أو توجيها بأسلوب Loopback + الذي يستخدمه OpenClaw؛ استخدم أجهزة افتراضية منفصلة أو توجيهًا بأسلوب Loopback للحصول على صوت مزدوج نظيف. ## ملاحظات التثبيت يستخدم الإعداد الافتراضي للرد الصوتي في Chrome أداتين خارجيتين: -- `sox`: أداة صوتية لسطر الأوامر. يستخدم Plugin أوامر أجهزة CoreAudio +- `sox`: أداة صوتية لسطر الأوامر. يستخدم الـ Plugin أوامر جهاز CoreAudio صريحة لجسر الصوت الافتراضي 24 kHz PCM16. - `blackhole-2ch`: مشغل صوت افتراضي لنظام macOS. ينشئ جهاز الصوت `BlackHole 2ch` - الذي يمكن لـ Chrome/Meet التوجيه عبره. + الذي يستطيع Chrome/Meet التوجيه عبره. -لا يحزم OpenClaw أيا من الحزمتين ولا يعيد توزيعهما. تطلب الوثائق من المستخدمين -تثبيتهما كاعتماديات مضيف عبر Homebrew. SoX مرخص كـ -`LGPL-2.0-only AND GPL-2.0-only`؛ وBlackHole مرخص بموجب GPL-3.0. إذا بنيت -مثبتا أو جهازا يضم BlackHole مع OpenClaw، فراجع شروط ترخيص BlackHole +لا يضمّن OpenClaw أيًا من الحزمتين أو يعيد توزيعهما. تطلب الوثائق من المستخدمين +تثبيتهما كاعتماديات مضيف عبر Homebrew. SoX مرخّص بموجب +`LGPL-2.0-only AND GPL-2.0-only`؛ وBlackHole مرخّص بموجب GPL-3.0. إذا بنيت +مثبّتًا أو جهازًا يضمّن BlackHole مع OpenClaw، فراجع شروط ترخيص BlackHole الأصلية أو احصل على ترخيص منفصل من Existential Audio. ## وسائل النقل ### Chrome -يفتح نقل Chrome عنوان Meet عبر التحكم في متصفح OpenClaw وينضم -بملف تعريف متصفح OpenClaw المسجل دخوله. على macOS، يتحقق Plugin من وجود -`BlackHole 2ch` قبل التشغيل. إذا كان مكوّنا، فإنه يشغّل أيضا أمر صحة جسر الصوت -وأمر بدء التشغيل قبل فتح Chrome. استخدم `chrome` عندما يكون Chrome/الصوت موجودين -على مضيف Gateway؛ واستخدم `chrome-node` عندما يكون Chrome/الصوت موجودين -على عقدة مقترنة مثل Parallels macOS VM. بالنسبة إلى Chrome المحلي، اختر -ملف التعريف باستخدام `browser.defaultProfile`؛ ويتم تمرير `chrome.browserProfile` إلى -مضيفي `chrome-node`. +يفتح نقل Chrome عنوان URL الخاص بـ Meet عبر تحكم متصفح OpenClaw وينضم +بصفته ملف تعريف متصفح OpenClaw المسجّل الدخول. على macOS، يتحقق الـ Plugin من وجود +`BlackHole 2ch` قبل التشغيل. وإذا ضُبط، فإنه يشغّل أيضًا أمر فحص صحة جسر الصوت +وأمر بدء التشغيل قبل فتح Chrome. استخدم `chrome` عندما يكون Chrome/الصوت على مضيف +Gateway؛ واستخدم `chrome-node` عندما يكون Chrome/الصوت على Node مقترن مثل Parallels macOS VM. +بالنسبة إلى Chrome المحلي، اختر ملف التعريف باستخدام `browser.defaultProfile`؛ ويتم تمرير +`chrome.browserProfile` إلى مضيفي `chrome-node`. ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome-node ``` -وجّه صوت ميكروفون Chrome والسماعة عبر جسر صوت OpenClaw المحلي. -إذا لم يكن `BlackHole 2ch` مثبتا، يفشل الانضمام بخطأ إعداد -بدلا من الانضمام بصمت من دون مسار صوتي. +وجّه صوت ميكروفون وسماعة Chrome عبر جسر صوت OpenClaw المحلي. +إذا لم يكن `BlackHole 2ch` مثبتًا، يفشل الانضمام بخطأ إعداد +بدلًا من الانضمام بصمت دون مسار صوت. ### Twilio نقل Twilio هو خطة اتصال صارمة مفوضة إلى Plugin مكالمات الصوت. وهو -لا يحلل صفحات Meet بحثا عن أرقام هواتف. +لا يحلل صفحات Meet لاستخراج أرقام الهاتف. -استخدم هذا عندما لا تكون مشاركة Chrome متاحة أو تريد بديلا للاتصال الهاتفي. -يجب أن يوفّر Google Meet رقم اتصال هاتفي وPIN للاجتماع؛ -لا يكتشف OpenClaw ذلك من صفحة Meet. +استخدم هذا عندما لا تكون مشاركة Chrome متاحة أو عندما تريد خيارًا احتياطيًا للاتصال الهاتفي. +يجب أن يعرض Google Meet رقم اتصال هاتفي ورمز PIN للاجتماع؛ لا يكتشف OpenClaw +ذلك من صفحة Meet. -فعّل Plugin مكالمات الصوت على مضيف Gateway، وليس على عقدة Chrome: +فعّل Plugin مكالمات الصوت على مضيف Gateway، وليس على Chrome Node: ```json5 { @@ -484,8 +485,8 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome } ``` -وفّر بيانات اعتماد Twilio عبر البيئة أو الإعداد. تبقي البيئة -الأسرار خارج `openclaw.json`: +وفّر بيانات اعتماد Twilio عبر البيئة أو الإعدادات. تُبقي البيئة الأسرار خارج +`openclaw.json`: ```bash export TWILIO_ACCOUNT_SID=AC... @@ -494,11 +495,11 @@ export TWILIO_FROM_NUMBER=+15550001234 export GEMINI_API_KEY=... ``` -استخدم `realtime.provider: "openai"` مع Plugin مزود OpenAI و -`OPENAI_API_KEY` بدلا من ذلك إذا كان هذا هو مزود الصوت في الوقت الفعلي لديك. +استخدم `realtime.provider: "openai"` مع Plugin موفر OpenAI و +`OPENAI_API_KEY` بدلًا من ذلك إذا كان ذلك هو موفر الصوت في الوقت الفعلي لديك. -أعد تشغيل Gateway أو أعد تحميله بعد تفعيل `voice-call`؛ لا تظهر تغييرات إعداد Plugin -في عملية Gateway قيد التشغيل بالفعل حتى يعاد تحميلها. +أعد تشغيل أو أعد تحميل Gateway بعد تفعيل `voice-call`؛ لا تظهر تغييرات إعدادات الـ Plugin +في عملية Gateway قيد التشغيل بالفعل حتى يُعاد تحميلها. ثم تحقق: @@ -508,8 +509,8 @@ openclaw plugins list | grep -E 'google-meet|voice-call' openclaw googlemeet setup ``` -عندما يكون تفويض Twilio موصولا، يتضمن `googlemeet setup` فحوصات ناجحة لـ -`twilio-voice-call-plugin` و`twilio-voice-call-credentials` و +عندما يكون تفويض Twilio موصولًا، يتضمن `googlemeet setup` فحوصات ناجحة لـ +`twilio-voice-call-plugin`، و`twilio-voice-call-credentials`، و `twilio-voice-call-webhook`. ```bash @@ -528,38 +529,38 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --dtmf-sequence ww123456# ``` -## OAuth والفحص المسبق +## OAuth والفحص الأولي OAuth اختياري لإنشاء رابط Meet لأن `googlemeet create` يمكنه الرجوع -إلى أتمتة المتصفح. كوّن OAuth عندما تريد الإنشاء عبر API الرسمي، -أو حل المساحة، أو فحوصات Meet Media API المسبقة. +إلى أتمتة المتصفح. اضبط OAuth عندما تريد الإنشاء عبر API الرسمي، +أو حل المساحات، أو فحوصات Meet Media API الأولية. -يستخدم الوصول إلى Google Meet API مصادقة OAuth للمستخدم: أنشئ عميل Google Cloud OAuth، -واطلب النطاقات المطلوبة، وافوض حساب Google، ثم خزّن -رمز التحديث الناتج في إعداد Plugin Google Meet أو وفّر +يستخدم وصول Google Meet API OAuth الخاص بالمستخدم: أنشئ عميل Google Cloud OAuth، +واطلب النطاقات المطلوبة، وفوّض حساب Google، ثم خزّن +رمز التحديث الناتج في إعدادات Plugin Google Meet أو وفّر متغيرات البيئة `OPENCLAW_GOOGLE_MEET_*`. -لا يستبدل OAuth مسار الانضمام عبر Chrome. لا تزال عمليات نقل Chrome وChrome-node -تنضم عبر ملف تعريف Chrome مسجل دخوله، وBlackHole/SoX، وعقدة متصلة -عندما تستخدم مشاركة المتصفح. OAuth مخصص فقط لمسار Google Meet API الرسمي: -إنشاء مساحات الاجتماعات، وحل المساحات، وتشغيل فحوصات Meet Media API المسبقة. +لا يستبدل OAuth مسار الانضمام عبر Chrome. لا تزال وسائل نقل Chrome وChrome-node +تنضم عبر ملف تعريف Chrome مسجّل الدخول، وBlackHole/SoX، وNode متصل +عند استخدام مشاركة المتصفح. OAuth مخصص فقط لمسار Google Meet API الرسمي: +إنشاء مساحات الاجتماعات، وحل المساحات، وتشغيل فحوصات Meet Media API الأولية. ### إنشاء بيانات اعتماد Google في Google Cloud Console: -1. أنشئ مشروع Google Cloud أو اختر مشروعا موجودا. +1. أنشئ مشروع Google Cloud أو حدده. 2. فعّل **Google Meet REST API** لذلك المشروع. -3. كوّن شاشة موافقة OAuth. +3. اضبط شاشة موافقة OAuth. - **Internal** هو الأبسط لمؤسسة Google Workspace. - - **External** يعمل لإعدادات شخصية/اختبارية؛ أثناء وجود التطبيق في Testing، - أضف كل حساب Google سيفوض التطبيق كمستخدم اختبار. + - **External** يعمل للإعدادات الشخصية/الاختبارية؛ ما دام التطبيق في Testing، + أضف كل حساب Google سيفوّض التطبيق كمستخدم اختبار. 4. أضف النطاقات التي يطلبها OpenClaw: - `https://www.googleapis.com/auth/meetings.space.created` - `https://www.googleapis.com/auth/meetings.space.readonly` - `https://www.googleapis.com/auth/meetings.space.settings` - `https://www.googleapis.com/auth/meetings.conference.media.readonly` -5. أنشئ معرف عميل OAuth. +5. أنشئ معرّف عميل OAuth. - نوع التطبيق: **Web application**. - عنوان URI المعتمد لإعادة التوجيه: @@ -567,28 +568,28 @@ OAuth اختياري لإنشاء رابط Meet لأن `googlemeet create` يم http://localhost:8085/oauth2callback ``` -6. انسخ معرف العميل وسر العميل. +6. انسخ معرّف العميل وسر العميل. `meetings.space.created` مطلوب بواسطة Google Meet `spaces.create`. -يتيح `meetings.space.readonly` لـ OpenClaw حل عناوين/رموز Meet إلى مساحات. -يتيح `meetings.space.settings` لـ OpenClaw تمرير إعدادات `SpaceConfig` مثل +يسمح `meetings.space.readonly` لـ OpenClaw بحل عناوين/رموز Meet إلى مساحات. +يسمح `meetings.space.settings` لـ OpenClaw بتمرير إعدادات `SpaceConfig` مثل `accessType` أثناء إنشاء غرفة عبر API. -`meetings.conference.media.readonly` مخصص للفحص المسبق لـ Meet Media API وعمل الوسائط؛ -قد تطلب Google التسجيل في Developer Preview لاستخدام Media API فعليا. -إذا كنت تحتاج فقط إلى انضمامات Chrome المعتمدة على المتصفح، فتجاوز OAuth بالكامل. +`meetings.conference.media.readonly` مخصص لفحص Meet Media API الأولي وعمل الوسائط؛ +قد تطلب Google التسجيل في Developer Preview لاستخدام Media API فعليًا. +إذا كنت تحتاج فقط إلى انضمامات Chrome المستندة إلى المتصفح، فتجاوز OAuth بالكامل. ### إصدار رمز التحديث -كوّن `oauth.clientId` و`oauth.clientSecret` اختياريا، أو مررهما كـ +اضبط `oauth.clientId` و`oauth.clientSecret` اختياريًا، أو مررهما كـ متغيرات بيئة، ثم شغّل: ```bash openclaw googlemeet auth login --json ``` -يطبع الأمر كتلة إعداد `oauth` مع رمز تحديث. يستخدم PKCE، -واستدعاء localhost على `http://localhost:8085/oauth2callback`، وتدفق -نسخ/لصق يدوي مع `--manual`. +يطبع الأمر كتلة إعدادات `oauth` تحتوي على رمز تحديث. يستخدم PKCE، +واستدعاء localhost على `http://localhost:8085/oauth2callback`، وتدفق نسخ/لصق +يدويًا مع `--manual`. أمثلة: @@ -606,7 +607,7 @@ OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \ openclaw googlemeet auth login --json --manual ``` -يتضمن خرج JSON: +يتضمن إخراج JSON: ```json { @@ -621,7 +622,7 @@ openclaw googlemeet auth login --json --manual } ``` -خزّن كائن `oauth` ضمن إعداد Plugin Google Meet: +خزّن كائن `oauth` تحت إعدادات Plugin Google Meet: ```json5 { @@ -642,69 +643,67 @@ openclaw googlemeet auth login --json --manual } ``` -فضّل متغيرات البيئة عندما لا تريد وجود رمز التحديث في الإعداد. -إذا كانت قيم الإعداد والبيئة موجودة معا، فإن Plugin يحل الإعداد -أولا ثم يستخدم البيئة كخيار احتياطي. +فضّل متغيرات البيئة عندما لا تريد رمز التحديث في الإعدادات. +إذا كانت قيم الإعدادات والبيئة موجودة معًا، يحل الـ Plugin الإعدادات +أولًا ثم يستخدم البيئة كخيار احتياطي. -تتضمن موافقة OAuth إنشاء مساحة Meet، ووصول قراءة مساحة Meet، ووصول قراءة -وسائط مؤتمر Meet. إذا صادقت قبل وجود دعم إنشاء الاجتماعات، -فأعد تشغيل `openclaw googlemeet auth login --json` حتى يمتلك رمز التحديث -نطاق `meetings.space.created`. +تتضمن موافقة OAuth إنشاء مساحة Meet، ووصول قراءة مساحة Meet، ووصول قراءة وسائط +مؤتمر Meet. إذا أجريت المصادقة قبل وجود دعم إنشاء الاجتماعات، +فأعد تشغيل `openclaw googlemeet auth login --json` حتى يحصل رمز التحديث +على نطاق `meetings.space.created`. -### التحقق من OAuth باستخدام doctor +### تحقق من OAuth باستخدام doctor -شغّل doctor الخاص بـ OAuth عندما تريد فحص صحة سريع وغير سري: +شغّل OAuth doctor عندما تريد فحص صحة سريعًا لا يكشف أسرارًا: ```bash openclaw googlemeet doctor --oauth --json ``` -لا يحمّل هذا وقت تشغيل Chrome ولا يتطلب عقدة Chrome متصلة. إنه -يتحقق من وجود إعداد OAuth وأن رمز التحديث يمكنه إصدار رمز وصول. -يتضمن تقرير JSON حقول حالة فقط مثل `ok` و`configured` و -`tokenSource` و`expiresAt` ورسائل الفحص؛ ولا يطبع رمز الوصول -أو رمز التحديث أو سر العميل. +لا يحمّل هذا وقت تشغيل Chrome ولا يتطلب Chrome Node متصلًا. إنه +يتحقق من وجود إعدادات OAuth ومن أن رمز التحديث يستطيع إصدار رمز وصول. +يتضمن تقرير JSON حقول الحالة فقط مثل `ok`، و`configured`، +و`tokenSource`، و`expiresAt`، ورسائل الفحص؛ ولا يطبع رمز الوصول، +أو رمز التحديث، أو سر العميل. النتائج الشائعة: | الفحص | المعنى | | -------------------- | --------------------------------------------------------------------------------------- | -| `oauth-config` | يوجد `oauth.clientId` مع `oauth.refreshToken`، أو رمز وصول مخزن مؤقتا. | -| `oauth-token` | ما زال رمز الوصول المخزن مؤقتا صالحا، أو أن رمز التحديث أنشأ رمز وصول جديدا. | +| `oauth-config` | يوجد `oauth.clientId` مع `oauth.refreshToken`، أو رمز وصول مخزّن مؤقتًا. | +| `oauth-token` | لا يزال رمز الوصول المخزّن مؤقتًا صالحًا، أو أن رمز التحديث أنشأ رمز وصول جديدًا. | | `meet-spaces-get` | نجح فحص `--meeting` الاختياري في حل مساحة Meet موجودة. | | `meet-spaces-create` | أنشأ فحص `--create-space` الاختياري مساحة Meet جديدة. | -لإثبات تمكين Google Meet API ونطاق `spaces.create` أيضا، شغل فحص الإنشاء ذي -الأثر الجانبي: +لإثبات تفعيل Google Meet API ونطاق `spaces.create` أيضًا، شغّل +فحص الإنشاء ذي الأثر الجانبي: ```bash openclaw googlemeet doctor --oauth --create-space --json openclaw googlemeet create --no-join --json ``` -ينشئ `--create-space` عنوان URL مؤقتا من Meet. استخدمه عندما تحتاج إلى تأكيد -أن مشروع Google Cloud لديه Meet API ممكنا وأن الحساب المفوض لديه نطاق +ينشئ `--create-space` عنوان URL مؤقتًا من Meet. استخدمه عندما تحتاج إلى تأكيد +أن مشروع Google Cloud فعّل Meet API وأن الحساب المفوّض لديه نطاق `meetings.space.created`. -لإثبات وصول القراءة لمساحة اجتماع موجودة: +لإثبات صلاحية القراءة لمساحة اجتماع موجودة: ```bash openclaw googlemeet doctor --oauth --meeting https://meet.google.com/abc-defg-hij --json openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij ``` -يثبت `doctor --oauth --meeting` و`resolve-space` وصول القراءة إلى مساحة موجودة -يمكن لحساب Google المفوض الوصول إليها. تعني استجابة `403` من هذه الفحوصات -عادة أن Google Meet REST API معطلة، أو أن رمز التحديث الذي تمت الموافقة عليه -يفتقد النطاق المطلوب، أو أن حساب Google لا يمكنه الوصول إلى مساحة Meet تلك. -يعني خطأ رمز التحديث إعادة تشغيل `openclaw googlemeet auth login +يثبت `doctor --oauth --meeting` و`resolve-space` صلاحية القراءة لمساحة موجودة +يمكن لحساب Google المفوّض الوصول إليها. عادةً ما تعني استجابة `403` من هذه الفحوص +أن Google Meet REST API معطّل، أو أن رمز التحديث الذي مُنحت له الموافقة يفتقد النطاق المطلوب، أو أن حساب Google لا يستطيع الوصول إلى مساحة Meet تلك. يعني خطأ رمز التحديث إعادة تشغيل `openclaw googlemeet auth login --json` وتخزين كتلة `oauth` الجديدة. -لا حاجة إلى بيانات اعتماد OAuth للرجوع الاحتياطي عبر المتصفح. في ذلك الوضع، تأتي مصادقة Google -من ملف Chrome الشخصي المسجل الدخول على Node المحدد، وليس من +لا حاجة إلى بيانات اعتماد OAuth لآلية الرجوع إلى المتصفح. في هذا الوضع، تأتي مصادقة Google +من ملف تعريف Chrome المسجّل دخوله على Node المحددة، وليس من إعدادات OpenClaw. -تقبل متغيرات البيئة هذه كبدائل احتياطية: +تُقبل متغيرات البيئة هذه كبدائل رجوع: - `OPENCLAW_GOOGLE_MEET_CLIENT_ID` أو `GOOGLE_MEET_CLIENT_ID` - `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` أو `GOOGLE_MEET_CLIENT_SECRET` @@ -721,13 +720,13 @@ openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij ``` -شغل فحص ما قبل التشغيل قبل عمل الوسائط: +شغّل الفحص التمهيدي قبل العمل على الوسائط: ```bash openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij ``` -اعرض عناصر الاجتماع والحضور بعد أن ينشئ Meet سجلات المؤتمر: +اعرض عناصر الاجتماع وسجل الحضور بعد أن ينشئ Meet سجلات المؤتمر: ```bash openclaw googlemeet artifacts --meeting https://meet.google.com/abc-defg-hij @@ -736,7 +735,7 @@ openclaw googlemeet export --meeting https://meet.google.com/abc-defg-hij --outp ``` مع `--meeting`، يستخدم `artifacts` و`attendance` أحدث سجل مؤتمر -افتراضيا. مرر `--all-conference-records` عندما تريد كل سجل محتفظ به +افتراضيًا. مرّر `--all-conference-records` عندما تريد كل السجلات المحتفَظ بها لذلك الاجتماع. يمكن للبحث في التقويم حل عنوان URL للاجتماع من Google Calendar قبل قراءة @@ -749,14 +748,14 @@ openclaw googlemeet artifacts --event "Weekly sync" openclaw googlemeet attendance --today --format csv --output attendance.csv ``` -يبحث `--today` في تقويم `primary` الخاص باليوم عن حدث Calendar يحتوي على -رابط Google Meet. استخدم `--event ` للبحث في نص الحدث المطابق، و -`--calendar ` لتقويم غير أساسي. يتطلب البحث في التقويم تسجيل دخول OAuth جديدا -يتضمن نطاق قراءة أحداث Calendar فقط. -يعرض `calendar-events` معاينة لأحداث Meet المطابقة ويعلم الحدث الذي +يبحث `--today` في تقويم `primary` لليوم عن حدث Calendar يتضمن +رابط Google Meet. استخدم `--event ` للبحث في نصوص الأحداث المطابقة، و +`--calendar ` لتقويم غير أساسي. يتطلب البحث في التقويم تسجيل دخول OAuth جديدًا +يتضمن نطاق القراءة فقط لأحداث Calendar. +يعرض `calendar-events` معاينة لأحداث Meet المطابقة ويضع علامة على الحدث الذي سيختاره `latest` أو `artifacts` أو `attendance` أو `export`. -إذا كنت تعرف معرف سجل المؤتمر مسبقا، فخاطبه مباشرة: +إذا كنت تعرف بالفعل معرّف سجل المؤتمر، فخاطبه مباشرةً: ```bash openclaw googlemeet latest --meeting https://meet.google.com/abc-defg-hij @@ -764,7 +763,7 @@ openclaw googlemeet artifacts --conference-record conferenceRecords/abc123 --jso openclaw googlemeet attendance --conference-record conferenceRecords/abc123 --json ``` -أنه مؤتمرا نشطا لمساحة أنشئت عبر API عندما تريد إغلاق +أنهِ مؤتمرًا نشطًا لمساحة منشأة عبر API عندما تريد إغلاق الغرفة بعد المكالمة: ```bash @@ -772,14 +771,14 @@ openclaw googlemeet end-active-conference https://meet.google.com/abc-defg-hij ``` يستدعي هذا Google Meet `spaces.endActiveConference` ويتطلب OAuth مع نطاق -`meetings.space.created` لمساحة يمكن للحساب المفوض إدارتها. -يقبل OpenClaw إدخال عنوان URL من Meet، أو رمز اجتماع، أو `spaces/{id}` ويحلله +`meetings.space.created` لمساحة يمكن للحساب المفوّض إدارتها. +يقبل OpenClaw عنوان URL من Meet، أو رمز اجتماع، أو إدخال `spaces/{id}` ويحلّه إلى مورد مساحة API قبل إنهاء المؤتمر النشط. -هذا منفصل عن `googlemeet leave`: يوقف `leave` مشاركة OpenClaw المحلية/الجلسة، +وهو منفصل عن `googlemeet leave`: يوقف `leave` مشاركة OpenClaw المحلية/الجلسة، بينما يطلب `end-active-conference` من Google Meet إنهاء المؤتمر النشط للمساحة. -اكتب تقريرا قابلا للقراءة: +اكتب تقريرًا مقروءًا: ```bash openclaw googlemeet artifacts --conference-record conferenceRecords/abc123 \ @@ -794,34 +793,34 @@ openclaw googlemeet export --conference-record conferenceRecords/abc123 \ --include-doc-bodies --dry-run ``` -يرجع `artifacts` بيانات تعريف سجل المؤتمر إضافة إلى بيانات تعريف موارد المشاركين، -والتسجيل، والنص المكتوب، ومدخلات النص المكتوب المنظمة، والملاحظات الذكية عندما -يعرضها Google للاجتماع. استخدم `--no-transcript-entries` لتخطي -البحث عن المدخلات للاجتماعات الكبيرة. يوسع `attendance` المشاركين إلى -صفوف جلسات مشاركين مع أوقات أول/آخر ظهور، وإجمالي مدة الجلسة، -وعلامات التأخر/المغادرة المبكرة، وموارد المشاركين المكررة المدمجة حسب المستخدم -المسجل الدخول أو اسم العرض. مرر `--no-merge-duplicates` لإبقاء موارد المشاركين -الخام منفصلة، و`--late-after-minutes` لضبط اكتشاف التأخر، و +يعيد `artifacts` بيانات تعريف سجل المؤتمر إضافةً إلى بيانات تعريف موارد المشاركين والتسجيلات +والنصوص المكتوبة وإدخالات النصوص المكتوبة المنظمة والملاحظات الذكية عندما +تتيحها Google للاجتماع. استخدم `--no-transcript-entries` لتخطي +البحث عن الإدخالات في الاجتماعات الكبيرة. يوسّع `attendance` المشاركين إلى +صفوف جلسات مشاركين تتضمن أوقات أول/آخر ظهور، وإجمالي مدة الجلسة، +وأعلام التأخر/المغادرة المبكرة، ودمج موارد المشاركين المكررة حسب المستخدم +المسجّل دخوله أو اسم العرض. مرّر `--no-merge-duplicates` للإبقاء على موارد +المشاركين الخام منفصلة، و`--late-after-minutes` لضبط اكتشاف التأخر، و `--early-before-minutes` لضبط اكتشاف المغادرة المبكرة. -يكتب `export` مجلدا يحتوي على `summary.md` و`attendance.csv` و +يكتب `export` مجلدًا يحتوي على `summary.md` و`attendance.csv` و `transcript.md` و`artifacts.json` و`attendance.json` و`manifest.json`. -يسجل `manifest.json` الإدخال المختار، وخيارات التصدير، وسجلات المؤتمر، +يسجّل `manifest.json` الإدخال المختار، وخيارات التصدير، وسجلات المؤتمر، وملفات الإخراج، والأعداد، ومصدر الرمز، وحدث Calendar عند استخدامه، وأي -تحذيرات استرجاع جزئي. مرر `--zip` لكتابة أرشيف قابل للنقل أيضا بجانب -المجلد. مرر `--include-doc-bodies` لتصدير نصوص Google Docs المرتبطة للنص المكتوب -والملاحظات الذكية عبر Google Drive `files.export`؛ يتطلب ذلك -تسجيل دخول OAuth جديدا يتضمن نطاق قراءة Drive Meet فقط. بدون -`--include-doc-bodies`، تتضمن الصادرات بيانات تعريف Meet ومدخلات النص المكتوب -المنظمة فقط. إذا أعاد Google فشل عنصر جزئيا، مثل خطأ في قائمة الملاحظات الذكية، -أو مدخلات النص المكتوب، أو جسم مستند Drive، يحتفظ الملخص و -البيان بالتحذير بدلا من إفشال التصدير كله. +تحذيرات استرداد جزئية. مرّر `--zip` لكتابة أرشيف قابل للنقل أيضًا بجانب +المجلد. مرّر `--include-doc-bodies` لتصدير نصوص Google Docs المرتبطة للنصوص المكتوبة +والملاحظات الذكية عبر Google Drive `files.export`؛ ويتطلب هذا تسجيل دخول OAuth +جديدًا يتضمن نطاق القراءة فقط لـ Drive Meet. من دون +`--include-doc-bodies`، تتضمن عمليات التصدير بيانات تعريف Meet وإدخالات النصوص المكتوبة +المنظمة فقط. إذا أعادت Google فشلًا جزئيًا في عنصر، مثل خطأ في سرد الملاحظات الذكية +أو إدخال النص المكتوب أو نص مستند Drive، يحتفظ الملخص و +البيان بالتحذير بدلًا من إفشال التصدير كله. استخدم `--dry-run` لجلب بيانات العناصر/الحضور نفسها وطباعة -JSON للبيان بدون إنشاء المجلد أو ZIP. يكون ذلك مفيدا قبل كتابة -تصدير كبير أو عندما يحتاج وكيل فقط إلى الأعداد، والسجلات المحددة، و +JSON البيان من دون إنشاء المجلد أو ملف ZIP. يفيد ذلك قبل كتابة +تصدير كبير أو عندما يحتاج الوكيل فقط إلى الأعداد والسجلات المحددة و التحذيرات. -يمكن للوكلاء أيضا إنشاء الحزمة نفسها عبر أداة `google_meet`: +يمكن للوكلاء أيضًا إنشاء الحزمة نفسها عبر أداة `google_meet`: ```json { @@ -833,9 +832,9 @@ JSON للبيان بدون إنشاء المجلد أو ZIP. يكون ذلك م } ``` -اضبط `"dryRun": true` لإرجاع بيان التصدير فقط وتخطي كتابة الملفات. +اضبط `"dryRun": true` لإرجاع بيان التصدير فقط وتخطي عمليات كتابة الملفات. -يمكن للوكلاء أيضا إنشاء غرفة مدعومة بواجهة API مع سياسة وصول صريحة: +يمكن للوكلاء أيضًا إنشاء غرفة مدعومة بواجهة API مع سياسة وصول صريحة: ```json { @@ -855,7 +854,7 @@ JSON للبيان بدون إنشاء المجلد أو ZIP. يكون ذلك م } ``` -للتحقق بالاستماع أولا، يجب أن يستخدم الوكلاء `test_listen` قبل الادعاء بأن +للتحقق القائم على الاستماع أولًا، ينبغي للوكلاء استخدام `test_listen` قبل الادعاء بأن الاجتماع مفيد: ```json @@ -867,7 +866,7 @@ JSON للبيان بدون إنشاء المجلد أو ZIP. يكون ذلك م } ``` -شغل فحص الدخان الحي المحروس على اجتماع حقيقي محتفظ به: +شغّل اختبار الدخان الحي المحمي مقابل اجتماع حقيقي محتفَظ به: ```bash OPENCLAW_LIVE_TEST=1 \ @@ -875,7 +874,7 @@ OPENCLAW_GOOGLE_MEET_LIVE_MEETING=https://meet.google.com/abc-defg-hij \ pnpm test:live -- extensions/google-meet/google-meet.live.test.ts ``` -شغل مسبار المتصفح الحي للاستماع أولا على اجتماع سيتحدث فيه شخص ما +شغّل مسبار المتصفح الحي القائم على الاستماع أولًا مقابل اجتماع سيتحدث فيه شخص ما مع توفر تسميات Meet التوضيحية: ```bash @@ -883,24 +882,23 @@ openclaw googlemeet setup --transport chrome-node --mode transcribe openclaw googlemeet test-listen https://meet.google.com/abc-defg-hij --transport chrome-node --timeout-ms 30000 ``` -بيئة فحص الدخان الحي: +بيئة اختبار الدخان الحي: -- يمكّن `OPENCLAW_LIVE_TEST=1` الاختبارات الحية المحروسة. -- يشير `OPENCLAW_GOOGLE_MEET_LIVE_MEETING` إلى عنوان URL محتفظ به من Meet، أو رمز، أو +- يفعّل `OPENCLAW_LIVE_TEST=1` الاختبارات الحية المحمية. +- يشير `OPENCLAW_GOOGLE_MEET_LIVE_MEETING` إلى عنوان URL محتفَظ به من Meet، أو رمز، أو `spaces/{id}`. -- يوفر `OPENCLAW_GOOGLE_MEET_CLIENT_ID` أو `GOOGLE_MEET_CLIENT_ID` معرف عميل OAuth. -- يوفر `OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN` أو `GOOGLE_MEET_REFRESH_TOKEN` +- يوفّر `OPENCLAW_GOOGLE_MEET_CLIENT_ID` أو `GOOGLE_MEET_CLIENT_ID` معرّف عميل OAuth. +- يوفّر `OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN` أو `GOOGLE_MEET_REFRESH_TOKEN` رمز التحديث. -- اختياري: يستخدم `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET`، - و`OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN`، و - `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` أسماء البدائل الاحتياطية نفسها - بدون البادئة `OPENCLAW_`. +- اختياري: يستخدم `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` و + `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN` و + `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` أسماء الرجوع نفسها + من دون بادئة `OPENCLAW_`. -يحتاج فحص الدخان الحي الأساسي للعناصر/الحضور إلى +يحتاج اختبار الدخان الحي الأساسي للعناصر/الحضور إلى `https://www.googleapis.com/auth/meetings.space.readonly` و -`https://www.googleapis.com/auth/meetings.conference.media.readonly`. يحتاج -البحث في Calendar إلى `https://www.googleapis.com/auth/calendar.events.readonly`. يحتاج -تصدير جسم مستند Drive إلى +`https://www.googleapis.com/auth/meetings.conference.media.readonly`. يحتاج البحث في Calendar إلى `https://www.googleapis.com/auth/calendar.events.readonly`. يحتاج تصدير +نص مستند Drive إلى `https://www.googleapis.com/auth/drive.meet.readonly`. أنشئ مساحة Meet جديدة: @@ -910,12 +908,12 @@ openclaw googlemeet create ``` يطبع الأمر `meeting uri` الجديد، والمصدر، وجلسة الانضمام. مع بيانات اعتماد OAuth -يستخدم Google Meet API الرسمية. بدون بيانات اعتماد OAuth، يستخدم -ملف المتصفح الشخصي المسجل الدخول في Chrome Node المثبت كبديل احتياطي. يمكن للوكلاء +يستخدم Google Meet API الرسمي. ومن دون بيانات اعتماد OAuth +يستخدم ملف تعريف المتصفح المسجّل دخوله في Chrome Node المثبّتة كآلية رجوع. يمكن للوكلاء استخدام أداة `google_meet` مع `action: "create"` للإنشاء والانضمام في خطوة -واحدة. للإنشاء باستخدام عنوان URL فقط، مرر `"join": false`. +واحدة. للإنشاء الذي يقتصر على عنوان URL، مرّر `"join": false`. -مثال على إخراج JSON من الرجوع الاحتياطي عبر المتصفح: +مثال على مخرجات JSON من آلية الرجوع إلى المتصفح: ```json { @@ -935,9 +933,9 @@ openclaw googlemeet create } ``` -إذا واجه الرجوع الاحتياطي عبر المتصفح تسجيل دخول Google أو مانع أذونات Meet قبل أن -يتمكن من إنشاء عنوان URL، فإن طريقة Gateway ترجع استجابة فاشلة وتعيد أداة -`google_meet` تفاصيل منظمة بدلا من سلسلة نصية بسيطة: +إذا واجهت آلية الرجوع إلى المتصفح تسجيل دخول Google أو مانع أذونات Meet قبل أن +تتمكن من إنشاء عنوان URL، فتعيد طريقة Gateway استجابة فاشلة وتعيد +أداة `google_meet` تفاصيل منظمة بدلًا من سلسلة نصية عادية: ```json { @@ -955,11 +953,11 @@ openclaw googlemeet create } ``` -عندما يرى وكيل `manualActionRequired: true`، يجب أن يبلّغ عن -`manualActionMessage` مع سياق Node/علامة تبويب المتصفح ويتوقف عن فتح علامات تبويب -Meet جديدة إلى أن يكمل المشغل خطوة المتصفح. +عندما يرى الوكيل `manualActionRequired: true`، ينبغي أن يبلّغ عن +`manualActionMessage` إضافةً إلى سياق Node/علامة تبويب المتصفح، ويتوقف عن فتح +علامات تبويب Meet جديدة إلى أن يكمل المشغّل خطوة المتصفح. -مثال على إخراج JSON من إنشاء API: +مثال على مخرجات JSON من إنشاء API: ```json { @@ -980,22 +978,21 @@ Meet جديدة إلى أن يكمل المشغل خطوة المتصفح. } ``` -ينضم إنشاء اجتماع Meet افتراضيا. لا يزال نقل Chrome أو Chrome-node -يحتاج إلى ملف شخصي مسجل الدخول في Google Chrome للانضمام عبر المتصفح. إذا كان -الملف الشخصي مسجل الخروج، يبلغ OpenClaw عن `manualActionRequired: true` أو عن -خطأ رجوع احتياطي في المتصفح ويطلب من المشغل إكمال تسجيل الدخول إلى Google قبل -إعادة المحاولة. +ينضم إنشاء Meet افتراضيًا. لا يزال نقل Chrome أو Chrome-node يحتاج إلى ملف +تعريف Google Chrome مسجّل الدخول للانضمام عبر المتصفح. إذا كان ملف التعريف +مسجّل الخروج، فسيبلّغ OpenClaw عن `manualActionRequired: true` أو خطأ رجوع +للمتصفح، ويطلب من المشغّل إكمال تسجيل الدخول إلى Google قبل إعادة المحاولة. اضبط `preview.enrollmentAcknowledged: true` فقط بعد تأكيد أن مشروع Cloud -ومسؤول OAuth والمشاركين في الاجتماع مسجلون في Google -Workspace Developer Preview Program لواجهات Meet media APIs. +ومبدأ OAuth والمشاركين في الاجتماع مسجّلون في برنامج Google Workspace Developer +Preview Program لواجهات Meet media APIs. -## الإعدادات +## التكوين -لا يحتاج مسار وكيل Chrome الشائع إلا إلى تمكين Plugin، وBlackHole، وSoX، ومفتاح -مزود نسخ فوري، ومزود OpenClaw TTS مضبوط. OpenAI هو مزود النسخ الافتراضي؛ اضبط -`realtime.voiceProvider` على `"google"` و`realtime.model` لاستخدام Google Gemini Live -لوضع `bidi` من دون تغيير مزود النسخ الافتراضي لوضع الوكيل: +لا يحتاج مسار وكيل Chrome الشائع إلا إلى تفعيل Plugin وBlackHole وSoX ومفتاح +موفّر نسخ فوري وموفّر TTS مضبوط في OpenClaw. OpenAI هو موفّر النسخ الافتراضي؛ +اضبط `realtime.voiceProvider` على `"google"` و`realtime.model` لاستخدام Google +Gemini Live في وضع `bidi` من دون تغيير موفّر النسخ الافتراضي لوضع الوكيل: ```bash brew install blackhole-2ch sox @@ -1004,7 +1001,7 @@ export OPENAI_API_KEY=sk-... export GEMINI_API_KEY=... ``` -اضبط إعدادات Plugin تحت `plugins.entries.google-meet.config`: +اضبط تكوين Plugin ضمن `plugins.entries.google-meet.config`: ```json5 { @@ -1019,61 +1016,62 @@ export GEMINI_API_KEY=... } ``` -القيم الافتراضية: +الإعدادات الافتراضية: - `defaultTransport: "chrome"` -- `defaultMode: "agent"` (يُقبل `"realtime"` فقط كاسم مستعار قديم للتوافق مع - `"agent"`؛ يجب أن تقول استدعاءات الأدوات الجديدة `"agent"`) -- `chromeNode.node`: معرف/اسم/IP اختياري للعقدة لـ `chrome-node` +- `defaultMode: "agent"` (لا يُقبل `"realtime"` إلا كاسم مستعار قديم للتوافق + مع `"agent"`؛ يجب أن تذكر استدعاءات الأدوات الجديدة `"agent"`) +- `chromeNode.node`: معرّف/اسم/IP اختياري للعقدة من أجل `chrome-node` - `chrome.audioBackend: "blackhole-2ch"` - `chrome.guestName: "OpenClaw Agent"`: الاسم المستخدم على شاشة ضيف Meet غير - المسجل الدخول + المسجّل الدخول - `chrome.autoJoin: true`: ملء اسم الضيف والنقر على Join Now بأفضل جهد عبر أتمتة متصفح OpenClaw على `chrome-node` -- `chrome.reuseExistingTab: true`: تنشيط تبويب Meet موجود بدلا من فتح نسخ مكررة -- `chrome.waitForInCallMs: 20000`: الانتظار حتى يبلغ تبويب Meet بأنه داخل +- `chrome.reuseExistingTab: true`: تفعيل تبويب Meet موجود بدلًا من فتح نسخ + مكررة +- `chrome.waitForInCallMs: 20000`: الانتظار حتى يبلّغ تبويب Meet أنه داخل المكالمة قبل تشغيل مقدمة الرد الصوتي - `chrome.audioFormat: "pcm16-24khz"`: تنسيق صوت زوج الأوامر. استخدم - `"g711-ulaw-8khz"` فقط لأزواج الأوامر القديمة/المخصصة التي لا تزال تصدر صوت - الهاتف. + `"g711-ulaw-8khz"` فقط لأزواج الأوامر القديمة/المخصصة التي لا تزال تُصدر + صوتًا هاتفيًا. - `chrome.audioBufferBytes: 4096`: مخزن معالجة SoX المؤقت لأوامر صوت زوج أوامر - Chrome المولدة. هذا يساوي نصف مخزن SoX الافتراضي البالغ 8192 بايت، مما يقلل - زمن انتقال الأنبوب الافتراضي مع ترك مجال لرفعه على الأجهزة المضيفة المزدحمة. - تُقيد القيم الأقل من الحد الأدنى لـ SoX إلى 17 بايت. -- `chrome.audioInputCommand`: أمر SoX يقرأ من CoreAudio `BlackHole 2ch` - ويكتب الصوت بتنسيق `chrome.audioFormat` + Chrome المولّدة. هذا نصف مخزن SoX الافتراضي ذي 8192 بايت، ما يقلل زمن + انتقال الأنبوب الافتراضي مع ترك مجال لرفعه على المضيفين المزدحمين. تُقيّد + القيم الأقل من الحد الأدنى لـ SoX إلى 17 بايت. +- `chrome.audioInputCommand`: أمر SoX يقرأ من CoreAudio `BlackHole 2ch` ويكتب + الصوت بتنسيق `chrome.audioFormat` - `chrome.audioOutputCommand`: أمر SoX يقرأ الصوت بتنسيق `chrome.audioFormat` ويكتب إلى CoreAudio `BlackHole 2ch` - `chrome.bargeInInputCommand`: أمر ميكروفون محلي اختياري يكتب PCM أحادي القناة - موقّعا 16-بت بترتيب little-endian لاكتشاف مقاطعة البشر أثناء تشغيل صوت - المساعد. ينطبق هذا حاليا على جسر زوج الأوامر `chrome` المستضاف على Gateway. -- `chrome.bargeInRmsThreshold: 650`: مستوى RMS الذي يُحسب كمقاطعة بشرية على + موقّع 16 بت بنمط little-endian لاكتشاف مقاطعة الإنسان أثناء تشغيل رد المساعد. + ينطبق هذا حاليًا على جسر زوج أوامر `chrome` المستضاف على Gateway. +- `chrome.bargeInRmsThreshold: 650`: مستوى RMS الذي يُحتسب كمقاطعة بشرية على `chrome.bargeInInputCommand` -- `chrome.bargeInPeakThreshold: 2500`: مستوى الذروة الذي يُحسب كمقاطعة بشرية على - `chrome.bargeInInputCommand` -- `chrome.bargeInCooldownMs: 900`: الحد الأدنى للتأخير بين عمليات مسح المقاطعة +- `chrome.bargeInPeakThreshold: 2500`: مستوى الذروة الذي يُحتسب كمقاطعة بشرية + على `chrome.bargeInInputCommand` +- `chrome.bargeInCooldownMs: 900`: الحد الأدنى للتأخير بين مسحات المقاطعة البشرية المتكررة -- `mode: "agent"`: وضع الرد الصوتي الافتراضي. يُنسخ كلام المشاركين بواسطة مزود - النسخ الفوري المضبوط، ويُرسل إلى وكيل OpenClaw المضبوط في جلسة وكيل فرعي لكل - اجتماع، ويُعاد نطقه عبر وقت تشغيل OpenClaw TTS العادي. -- `mode: "bidi"`: وضع احتياطي لنموذج فوري ثنائي الاتجاه مباشر. يجيب مزود الصوت - الفوري على كلام المشاركين مباشرة ويمكنه استدعاء `openclaw_agent_consult` - للحصول على إجابات أعمق/مدعومة بالأدوات. +- `mode: "agent"`: وضع الرد الصوتي الافتراضي. يُنسخ كلام المشاركين بواسطة + موفّر النسخ الفوري المضبوط، ويُرسل إلى وكيل OpenClaw المضبوط في جلسة وكيل + فرعي لكل اجتماع، ثم يُنطق مرة أخرى عبر وقت تشغيل OpenClaw TTS العادي. +- `mode: "bidi"`: وضع نموذج فوري ثنائي الاتجاه مباشر احتياطي. يجيب موفّر الصوت + الفوري عن كلام المشاركين مباشرة وقد يستدعي `openclaw_agent_consult` للحصول + على إجابات أعمق/مدعومة بالأدوات. - `mode: "transcribe"`: وضع مراقبة فقط من دون جسر الرد الصوتي. -- `realtime.provider: "openai"`: رجوع احتياطي للتوافق يُستخدم عندما تكون حقول - المزود المحددة النطاق أدناه غير مضبوطة. -- `realtime.transcriptionProvider: "openai"`: معرف المزود الذي يستخدمه وضع +- `realtime.provider: "openai"`: رجوع توافق يُستخدم عندما لا تكون حقول الموفّر + المحددة النطاق أدناه معيّنة. +- `realtime.transcriptionProvider: "openai"`: معرّف الموفّر المستخدم بواسطة وضع `agent` للنسخ الفوري. -- `realtime.voiceProvider`: معرف المزود الذي يستخدمه وضع `bidi` للصوت الفوري - المباشر. اضبطه على `"google"` لاستخدام Gemini Live مع إبقاء نسخ وضع الوكيل - على OpenAI. +- `realtime.voiceProvider`: معرّف الموفّر المستخدم بواسطة وضع `bidi` للصوت + الفوري المباشر. اضبطه على `"google"` لاستخدام Gemini Live مع إبقاء نسخ وضع + الوكيل على OpenAI. - `realtime.toolPolicy: "safe-read-only"` - `realtime.instructions`: ردود منطوقة موجزة، مع `openclaw_agent_consult` للإجابات الأعمق - `realtime.introMessage`: فحص جاهزية منطوق قصير عند اتصال الجسر الفوري؛ اضبطه على `""` للانضمام بصمت -- `realtime.agentId`: معرف وكيل OpenClaw اختياري لـ - `openclaw_agent_consult`؛ القيمة الافتراضية هي `main` +- `realtime.agentId`: معرّف وكيل OpenClaw اختياري من أجل + `openclaw_agent_consult`؛ الافتراضي هو `main` تجاوزات اختيارية: @@ -1128,7 +1126,7 @@ export GEMINI_API_KEY=... } ``` -ElevenLabs للاستماع والتحدث في وضع الوكيل معا: +ElevenLabs للاستماع والتحدث في وضع الوكيل معًا: ```json5 { @@ -1166,13 +1164,13 @@ ElevenLabs للاستماع والتحدث في وضع الوكيل معا: ``` يأتي صوت Meet المستمر من -`messages.tts.providers.elevenlabs.voiceId`. يمكن لردود الوكيل أيضا استخدام -توجيهات لكل رد مثل `[[tts:voiceId=... model=eleven_v3]]` عندما تكون تجاوزات -نموذج TTS مفعلة، لكن الإعدادات هي الافتراضي الحتمي للاجتماعات. عند الانضمام، -يجب أن تعرض السجلات `transcriptionProvider=elevenlabs`، ويجب أن يسجل كل رد منطوق -`provider=elevenlabs model=eleven_v3 voice=`. +`messages.tts.providers.elevenlabs.voiceId`. يمكن لردود الوكيل أيضًا استخدام +توجيهات `[[tts:voiceId=... model=eleven_v3]]` لكل رد عندما تكون تجاوزات نموذج +TTS مفعّلة، لكن التكوين هو الإعداد الافتراضي الحتمي للاجتماعات. عند الانضمام، +يجب أن تعرض السجلات `transcriptionProvider=elevenlabs`، ويجب أن يسجل كل رد +منطوق `provider=elevenlabs model=eleven_v3 voice=`. -إعدادات Twilio فقط: +تكوين Twilio فقط: ```json5 { @@ -1187,11 +1185,11 @@ ElevenLabs للاستماع والتحدث في وضع الوكيل معا: } ``` -القيمة الافتراضية لـ `voiceCall.enabled` هي `true`؛ مع نقل Twilio يفوض مكالمة -PSTN الفعلية، وDTMF، وتحية المقدمة إلى Plugin مكالمات الصوت. يشغل Voice Call -تسلسل DTMF قبل فتح تدفق الوسائط الفوري، ثم يستخدم نص المقدمة المحفوظ كتحية -فورية أولية. إذا لم يكن `voice-call` مفعلا، فلا يزال بإمكان Google Meet التحقق -من خطة الاتصال وتسجيلها، لكنه لا يمكنه إجراء مكالمة Twilio. +يكون `voiceCall.enabled` افتراضيًا `true`؛ ومع نقل Twilio يفوّض مكالمة PSTN +الفعلية وDTMF وتحية المقدمة إلى Voice Call Plugin. يشغّل Voice Call تسلسل DTMF +قبل فتح دفق الوسائط الفوري، ثم يستخدم نص المقدمة المحفوظ كتحية فورية أولية. +إذا لم يكن `voice-call` مفعّلًا، فلا يزال بإمكان Google Meet التحقق من خطة +الاتصال وتسجيلها، لكنه لا يستطيع إجراء مكالمة Twilio. ## الأداة @@ -1207,42 +1205,43 @@ PSTN الفعلية، وDTMF، وتحية المقدمة إلى Plugin مكال ``` استخدم `transport: "chrome"` عندما يعمل Chrome على مضيف Gateway. استخدم -`transport: "chrome-node"` عندما يعمل Chrome على عقدة مقترنة مثل جهاز Parallels -VM. في كلتا الحالتين، تعمل مزودات النماذج و`openclaw_agent_consult` على مضيف -Gateway، لذلك تبقى بيانات اعتماد النماذج هناك. مع `mode: "agent"` الافتراضي، -يتولى مزود النسخ الفوري الاستماع، وينتج وكيل OpenClaw المضبوط الإجابة، وينطقها -OpenClaw TTS العادي داخل Meet. استخدم `mode: "bidi"` عندما تريد أن يجيب نموذج -الصوت الفوري مباشرة. يظل `mode: "realtime"` الخام مقبولا كاسم مستعار قديم -للتوافق مع `mode: "agent"`، لكنه لم يعد معلنا في مخطط أداة الوكيل. تتضمن سجلات -وضع الوكيل مزود/نموذج النسخ المحلول عند بدء الجسر، ومزود TTS، والنموذج، والصوت، -وتنسيق الإخراج، ومعدل العينات بعد كل رد مركب. +`transport: "chrome-node"` عندما يعمل Chrome على عقدة مقترنة مثل جهاز افتراضي +Parallels. في كلتا الحالتين، تعمل موفّرات النماذج و`openclaw_agent_consult` على +مضيف Gateway، لذلك تبقى بيانات اعتماد النماذج هناك. مع `mode: "agent"` +الافتراضي، يتولى موفّر النسخ الفوري الاستماع، وينتج وكيل OpenClaw المضبوط +الإجابة، وينطقها OpenClaw TTS العادي داخل Meet. استخدم `mode: "bidi"` عندما +تريد أن يجيب نموذج الصوت الفوري مباشرة. لا يزال `mode: "realtime"` الخام +مقبولًا كاسم مستعار قديم للتوافق مع `mode: "agent"`، لكنه لم يعد معلنًا في +مخطط أداة الوكيل. تتضمن سجلات وضع الوكيل موفّر/نموذج النسخ المحلول عند بدء +الجسر، وموفّر TTS والنموذج والصوت وتنسيق الإخراج ومعدل العينة بعد كل رد +مركّب. -استخدم `action: "status"` لسرد الجلسات النشطة أو فحص معرف جلسة. استخدم -`action: "speak"` مع `sessionId` و`message` لجعل الوكيل الفوري يتحدث فورا. +استخدم `action: "status"` لسرد الجلسات النشطة أو فحص معرّف جلسة. استخدم +`action: "speak"` مع `sessionId` و`message` لجعل الوكيل الفوري يتحدث فورًا. استخدم `action: "test_speech"` لإنشاء الجلسة أو إعادة استخدامها، وتشغيل عبارة -معروفة، وإرجاع صحة `inCall` عندما يستطيع مضيف Chrome الإبلاغ عنها. يفرض -`test_speech` دائما `mode: "agent"` ويفشل إذا طُلب منه العمل في -`mode: "transcribe"` لأن جلسات المراقبة فقط لا يمكنها إصدار كلام عمدا. تستند -نتيجة `speechOutputVerified` إلى زيادة بايتات إخراج الصوت الفوري أثناء استدعاء -الاختبار هذا، لذلك لا تُحسب الجلسة المعاد استخدامها ذات الصوت الأقدم كفحص كلام -ناجح جديد. استخدم `action: "leave"` لوضع علامة على الجلسة بأنها انتهت. +معروفة، وإرجاع حالة `inCall` الصحية عندما يستطيع مضيف Chrome الإبلاغ عنها. +يفرض `test_speech` دائمًا `mode: "agent"` ويفشل إذا طُلب تشغيله في +`mode: "transcribe"` لأن جلسات المراقبة فقط لا يمكنها عمدًا إصدار الكلام. تستند +نتيجة `speechOutputVerified` إلى ازدياد بايتات إخراج الصوت الفوري أثناء استدعاء +الاختبار هذا، لذلك لا تُحتسب الجلسة المعاد استخدامها ذات الصوت الأقدم كفحص +كلام ناجح جديد. استخدم `action: "leave"` لوضع علامة على انتهاء الجلسة. يتضمن `status` صحة Chrome عند توفرها: - `inCall`: يبدو أن Chrome داخل مكالمة Meet - `micMuted`: حالة ميكروفون Meet بأفضل جهد - `manualActionRequired` / `manualActionReason` / `manualActionMessage`: يحتاج - ملف المتصفح الشخصي إلى تسجيل دخول يدوي، أو قبول مضيف Meet، أو أذونات، أو - إصلاح التحكم في المتصفح قبل أن يعمل الكلام + ملف تعريف المتصفح إلى تسجيل دخول يدوي أو قبول مضيف Meet أو أذونات أو إصلاح + تحكم المتصفح قبل أن يعمل الكلام - `speechReady` / `speechBlockedReason` / `speechBlockedMessage`: ما إذا كان - كلام Chrome المُدار مسموحا الآن. تعني `speechReady: false` أن OpenClaw لم + كلام Chrome المُدار مسموحًا به الآن. يعني `speechReady: false` أن OpenClaw لم يرسل عبارة المقدمة/الاختبار إلى جسر الصوت. - `providerConnected` / `realtimeReady`: حالة جسر الصوت الفوري - `lastInputAt` / `lastOutputAt`: آخر صوت شوهد من الجسر أو أُرسل إليه - `audioOutputRouted` / `audioOutputDeviceLabel`: ما إذا كان إخراج وسائط تبويب - Meet قد وُجه بنشاط إلى جهاز BlackHole الذي يستخدمه الجسر -- `lastSuppressedInputAt` / `suppressedInputBytes`: إدخال local loopback تم - تجاهله أثناء نشاط تشغيل المساعد + Meet قد وُجّه بنشاط إلى جهاز BlackHole الذي يستخدمه الجسر +- `lastSuppressedInputAt` / `suppressedInputBytes`: إدخال local loopback + المتجاهل أثناء نشاط تشغيل المساعد ```json { @@ -1254,45 +1253,44 @@ OpenClaw TTS العادي داخل Meet. استخدم `mode: "bidi"` عندما ## أوضاع الوكيل وBidi -وضع Chrome `agent` محسّن لسلوك "وكيلي موجود في الاجتماع". يسمع مزود النسخ -الفوري صوت الاجتماع، وتُوجه نصوص المشاركين النهائية عبر وكيل OpenClaw المضبوط، -وتُنطق الإجابة عبر وقت تشغيل OpenClaw TTS العادي. اضبط `mode: "bidi"` عندما تريد -أن يجيب نموذج الصوت الفوري مباشرة. +تم تحسين وضع Chrome `agent` لسلوك "وكيلي موجود في الاجتماع". يسمع موفّر النسخ +الفوري صوت الاجتماع، وتُوجّه نصوص المشاركين النهائية عبر وكيل OpenClaw المضبوط، +وتُنطق الإجابة عبر وقت تشغيل OpenClaw TTS العادي. اضبط `mode: "bidi"` عندما +تريد أن يجيب نموذج الصوت الفوري مباشرة. تُدمج أجزاء النص النهائي القريبة قبل الاستشارة حتى لا ينتج دور منطوق واحد عدة -إجابات جزئية قديمة. ويُكبت الإدخال الفوري أيضا بينما لا يزال صوت المساعد في -قائمة الانتظار قيد التشغيل، -وتُتجاهل أصداء النصوص الحديثة الشبيهة بالمساعد قبل استشارة الوكيل حتى لا يجعل -local loopback الخاص بـ BlackHole الوكيل يجيب على كلامه نفسه. +إجابات جزئية قديمة. كما يُكبت الإدخال الفوري بينما لا يزال صوت المساعد في +الصف قيد التشغيل، وتُتجاهل أصداء النصوص الحديثة الشبيهة بالمساعد قبل استشارة +الوكيل حتى لا يجعل local loopback الخاص بـ BlackHole الوكيل يجيب عن كلامه. -| الوضع | من يقرر الإجابة | مسار إخراج الكلام | استخدمه عندما | +| الوضع | من يقرر الإجابة | مسار إخراج الكلام | استخدمه عندما | | ------- | ----------------------------- | -------------------------------------- | ----------------------------------------------------- | | `agent` | وكيل OpenClaw المضبوط | وقت تشغيل OpenClaw TTS العادي | تريد سلوك "وكيلي موجود في الاجتماع" | -| `bidi` | نموذج الصوت الفوري | استجابة صوت مزود الصوت الفوري | تريد حلقة صوت محادثية بأقل زمن انتقال | +| `bidi` | نموذج الصوت الفوري | استجابة صوت موفّر الصوت الفوري | تريد حلقة صوت محادثة بأقل زمن انتقال | -في وضع `bidi`، عندما يحتاج النموذج الفوري إلى استدلال أعمق، أو معلومات حالية، -أو أدوات OpenClaw العادية، يمكنه استدعاء `openclaw_agent_consult`. +في وضع `bidi`، عندما يحتاج النموذج الفوري إلى تفكير أعمق أو معلومات حالية أو +أدوات OpenClaw العادية، يمكنه استدعاء `openclaw_agent_consult`. -تعمل أداة الاستشارة على تشغيل وكيل OpenClaw المعتاد في الخلفية مع سياق نص الاجتماع الحديث وتعيد إجابة منطوقة موجزة. في وضع `agent`، يرسل OpenClaw تلك الإجابة مباشرة إلى وقت تشغيل TTS؛ وفي وضع `bidi`، يمكن لنموذج الصوت الآني نطق نتيجة الاستشارة مرة أخرى داخل الاجتماع. تستخدم الآلية المشتركة نفسها للاستشارة مثل Voice Call. +تُشغّل أداة الاستشارة وكيل OpenClaw العادي في الخلفية باستخدام سياق نص اجتماع حديث، وتُرجع إجابة منطوقة موجزة. في وضع `agent`، يرسل OpenClaw تلك الإجابة مباشرة إلى وقت تشغيل TTS؛ وفي وضع `bidi`، يمكن لنموذج الصوت الفوري نطق نتيجة الاستشارة مرة أخرى داخل الاجتماع. وهي تستخدم آلية الاستشارة المشتركة نفسها التي تستخدمها Voice Call. -افتراضيًا، تعمل الاستشارات ضد الوكيل `main`. اضبط `realtime.agentId` عندما ينبغي لمسار Meet أن يستشير مساحة عمل وكيل OpenClaw مخصصة، وافتراضات النموذج، وسياسة الأدوات، والذاكرة، وسجل الجلسات. +افتراضيًا، تعمل الاستشارات على الوكيل `main`. عيّن `realtime.agentId` عندما ينبغي لمسار Meet أن يستشير مساحة عمل مخصصة لوكيل OpenClaw، وإعدادات النموذج الافتراضية، وسياسة الأدوات، والذاكرة، وسجل الجلسات. -تستخدم استشارات وضع الوكيل مفتاح جلسة لكل اجتماع `agent::subagent:google-meet:` بحيث تحتفظ أسئلة المتابعة بسياق الاجتماع مع وراثة سياسة الوكيل المعتادة من الوكيل المكوَّن. +تستخدم استشارات وضع الوكيل مفتاح جلسة لكل اجتماع بصيغة `agent::subagent:google-meet:` بحيث تحتفظ أسئلة المتابعة بسياق الاجتماع مع وراثة سياسة الوكيل العادية من الوكيل المُكوَّن. يتحكم `realtime.toolPolicy` في تشغيل الاستشارة: -- `safe-read-only`: يكشف أداة الاستشارة ويقصر الوكيل المعتاد على `read` و`web_search` و`web_fetch` و`x_search` و`memory_search` و`memory_get`. -- `owner`: يكشف أداة الاستشارة ويتيح للوكيل المعتاد استخدام سياسة أدوات الوكيل العادية. -- `none`: لا يكشف أداة الاستشارة لنموذج الصوت الآني. +- `safe-read-only`: اعرض أداة الاستشارة واقصر الوكيل العادي على `read` و`web_search` و`web_fetch` و`x_search` و`memory_search` و`memory_get`. +- `owner`: اعرض أداة الاستشارة واسمح للوكيل العادي باستخدام سياسة أدوات الوكيل العادية. +- `none`: لا تعرض أداة الاستشارة لنموذج الصوت الفوري. -يكون مفتاح جلسة الاستشارة محدود النطاق لكل جلسة Meet، لذلك يمكن لاستدعاءات الاستشارة اللاحقة إعادة استخدام سياق الاستشارة السابق أثناء الاجتماع نفسه. +يكون مفتاح جلسة الاستشارة محصورًا بكل جلسة Meet، لذلك يمكن لاستدعاءات الاستشارة اللاحقة إعادة استخدام سياق الاستشارة السابق أثناء الاجتماع نفسه. -لفرض فحص جاهزية منطوق بعد أن ينضم Chrome إلى المكالمة بالكامل: +لفرض فحص جاهزية منطوق بعد أن ينضم Chrome بالكامل إلى المكالمة: ```bash openclaw googlemeet speak meet_... "Say exactly: I'm here and listening." ``` -لاختبار الدخان الكامل للانضمام والنطق: +لاختبار الانضمام والنطق الكامل: ```bash openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ @@ -1300,7 +1298,7 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ --message "Say exactly: I'm here and listening." ``` -## قائمة فحص الاختبار المباشر +## قائمة تحقق الاختبار الحي استخدم هذا التسلسل قبل تسليم اجتماع إلى وكيل غير مراقَب: @@ -1314,13 +1312,13 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ حالة Chrome-node المتوقعة: -- `googlemeet setup` كلها خضراء. -- يتضمن `googlemeet setup` الفحص `chrome-node-connected` عندما يكون Chrome-node هو وسيلة النقل الافتراضية أو عند تثبيت عقدة. -- يعرض `nodes status` العقدة المحددة متصلة. -- تعلن العقدة المحددة عن كلٍّ من `googlemeet.chrome` و`browser.proxy`. -- ينضم تبويب Meet إلى المكالمة ويعيد `test-speech` صحة Chrome مع `inCall: true`. +- يكون `googlemeet setup` كله باللون الأخضر. +- يتضمن `googlemeet setup` الفحص `chrome-node-connected` عندما يكون Chrome-node هو وسيلة النقل الافتراضية أو عندما تكون عقدة مثبتة. +- يُظهر `nodes status` أن العقدة المحددة متصلة. +- تعلن العقدة المحددة عن كل من `googlemeet.chrome` و`browser.proxy`. +- ينضم تبويب Meet إلى المكالمة ويُرجع `test-speech` صحة Chrome مع `inCall: true`. -لمضيف Chrome بعيد مثل آلة macOS افتراضية على Parallels، فهذا هو أقصر فحص آمن بعد تحديث Gateway أو الآلة الافتراضية: +بالنسبة إلى مضيف Chrome بعيد مثل Parallels macOS VM، فهذا هو أقصر فحص آمن بعد تحديث Gateway أو VM: ```bash openclaw googlemeet setup @@ -1331,9 +1329,9 @@ openclaw nodes invoke \ --params '{"action":"setup"}' ``` -يثبت ذلك أن Plugin الخاصة بـ Gateway محمّلة، وأن عقدة الآلة الافتراضية متصلة بالرمز الحالي، وأن جسر صوت Meet متاح قبل أن يفتح وكيل تبويب اجتماع حقيقيًا. +يثبت ذلك أن Plugin الخاص بـ Gateway محمّل، وأن عقدة VM متصلة بالرمز الحالي، وأن جسر صوت Meet متاح قبل أن يفتح وكيل تبويب اجتماع حقيقي. -لاختبار دخان Twilio، استخدم اجتماعًا يعرض تفاصيل الاتصال الهاتفي: +لاختبار Twilio سريع، استخدم اجتماعًا يعرض تفاصيل الاتصال الهاتفي: ```bash openclaw googlemeet setup @@ -1347,24 +1345,24 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ - يتضمن `googlemeet setup` فحوصات خضراء لـ `twilio-voice-call-plugin` و`twilio-voice-call-credentials` و`twilio-voice-call-webhook`. - يكون `voicecall` متاحًا في CLI بعد إعادة تحميل Gateway. -- تحتوي الجلسة المعادة على `transport: "twilio"` و`twilio.voiceCallId`. -- يعرض `openclaw logs --follow` تقديم DTMF TwiML قبل TwiML الآني، ثم جسرًا آنيًا مع وضع التحية الأولية في قائمة الانتظار. +- تحتوي الجلسة المُرجعة على `transport: "twilio"` و`twilio.voiceCallId`. +- يُظهر `openclaw logs --follow` تقديم DTMF TwiML قبل TwiML الفوري، ثم جسرًا فوريًا مع تحية أولية في قائمة الانتظار. - يؤدي `googlemeet leave ` إلى إنهاء مكالمة الصوت المفوضة. ## استكشاف الأخطاء وإصلاحها -### لا يستطيع الوكيل رؤية أداة Google Meet +### الوكيل لا يمكنه رؤية أداة Google Meet -تأكد من تمكين Plugin في إعدادات Gateway وأعد تحميل Gateway: +تأكد من أن Plugin ممكّن في إعدادات Gateway وأعد تحميل Gateway: ```bash openclaw plugins list | grep google-meet openclaw googlemeet setup ``` -إذا كنت قد عدّلت للتو `plugins.entries.google-meet`، فأعد تشغيل Gateway أو أعد تحميله. يرى الوكيل قيد التشغيل فقط أدوات Plugin المسجلة بواسطة عملية Gateway الحالية. +إذا كنت قد حررت للتو `plugins.entries.google-meet`، فأعد تشغيل Gateway أو أعد تحميله. يرى الوكيل العامل فقط أدوات Plugin المسجلة بواسطة عملية Gateway الحالية. -على مضيفي Gateway غير macOS، تظل أداة `google_meet` الموجهة للوكيل مرئية، لكن إجراءات الرد الصوتي في Chrome المحلي تُحظر قبل وصولها إلى جسر الصوت. يعتمد صوت الرد في Chrome المحلي حاليًا على `BlackHole 2ch` في macOS، لذلك ينبغي لوكلاء Linux استخدام `mode: "transcribe"`، أو الاتصال الهاتفي عبر Twilio، أو مضيف `chrome-node` على macOS بدل مسار وكيل Chrome المحلي الافتراضي. +على مضيفي Gateway غير macOS، تظل أداة `google_meet` الموجهة إلى الوكيل مرئية، لكن إجراءات الرد الصوتي المحلي عبر Chrome تُحظر قبل أن تصل إلى جسر الصوت. يعتمد صوت الرد المحلي عبر Chrome حاليًا على `BlackHole 2ch` في macOS، لذلك ينبغي لوكلاء Linux استخدام `mode: "transcribe"` أو اتصال Twilio الهاتفي أو مضيف `chrome-node` على macOS بدل مسار وكيل Chrome المحلي الافتراضي. ### لا توجد عقدة متصلة قادرة على Google Meet @@ -1385,7 +1383,8 @@ openclaw devices approve openclaw nodes status ``` -يجب أن تكون العقدة متصلة وأن تعرض `googlemeet.chrome` بالإضافة إلى `browser.proxy`. يجب أن تسمح إعدادات Gateway بأوامر العقد هذه: +يجب أن تكون العقدة متصلة وأن تسرد `googlemeet.chrome` بالإضافة إلى `browser.proxy`. +يجب أن تسمح إعدادات Gateway بأوامر العقدة هذه: ```json5 { @@ -1397,7 +1396,7 @@ openclaw nodes status } ``` -إذا فشل `googlemeet setup` في `chrome-node-connected` أو أبلغ سجل Gateway عن `gateway token mismatch`، فأعد تثبيت العقدة أو أعد تشغيلها باستخدام رمز Gateway الحالي. بالنسبة إلى Gateway على LAN، يعني هذا عادةً: +إذا فشل `googlemeet setup` في `chrome-node-connected` أو أبلغ سجل Gateway عن `gateway token mismatch`، فأعد تثبيت العقدة أو أعد تشغيلها باستخدام رمز Gateway الحالي. بالنسبة إلى Gateway على LAN، يعني ذلك عادةً: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ @@ -1417,65 +1416,65 @@ openclaw nodes status --connected ### يفتح المتصفح لكن الوكيل لا يستطيع الانضمام -شغّل `googlemeet test-listen` للانضمام بالمراقبة فقط أو `googlemeet test-speech` للانضمام الآني، ثم افحص صحة Chrome المعادة. إذا أبلغ أي من المجسين عن `manualActionRequired: true`، فأظهر `manualActionMessage` للمشغّل وتوقف عن إعادة المحاولة حتى يكتمل إجراء المتصفح. +شغّل `googlemeet test-listen` لانضمامات المراقبة فقط أو `googlemeet test-speech` للانضمامات الفورية، ثم افحص صحة Chrome المُرجعة. إذا أبلغ أي من الفحصين عن `manualActionRequired: true`، فاعرض `manualActionMessage` للمشغّل وتوقف عن إعادة المحاولة حتى يكتمل إجراء المتصفح. -الإجراءات اليدوية الشائعة: +إجراءات يدوية شائعة: - سجّل الدخول إلى ملف Chrome الشخصي. -- اقبل الضيف من حساب مضيف Meet. -- امنح Chrome أذونات الميكروفون/الكاميرا عندما تظهر مطالبة الأذونات الأصلية في Chrome. +- اسمح للضيف من حساب مضيف Meet. +- امنح أذونات الميكروفون/الكاميرا في Chrome عندما تظهر مطالبة الأذونات الأصلية في Chrome. - أغلق مربع حوار أذونات Meet العالق أو أصلحه. -لا تبلّغ عن "not signed in" لمجرد أن Meet يعرض "Do you want people to hear you in the meeting?" فهذا حاجز اختيار الصوت في Meet؛ ينقر OpenClaw على **Use microphone** عبر أتمتة المتصفح عندما يكون ذلك متاحًا ويستمر في انتظار حالة الاجتماع الحقيقية. بالنسبة إلى تراجع المتصفح للإنشاء فقط، قد ينقر OpenClaw على **Continue without microphone** لأن إنشاء عنوان URL لا يحتاج إلى مسار الصوت الآني. +لا تبلّغ عن "not signed in" لمجرد أن Meet يعرض "Do you want people to hear you in the meeting?" فهذا فاصل اختيار الصوت في Meet؛ ينقر OpenClaw على **Use microphone** عبر أتمتة المتصفح عند توفرها ويواصل انتظار حالة الاجتماع الحقيقية. بالنسبة إلى الرجوع الاحتياطي للمتصفح المخصص للإنشاء فقط، قد ينقر OpenClaw على **Continue without microphone** لأن إنشاء URL لا يحتاج إلى مسار الصوت الفوري. ### فشل إنشاء الاجتماع -يستخدم `googlemeet create` أولًا نقطة نهاية Google Meet API `spaces.create` عندما تكون بيانات اعتماد OAuth مكوّنة. ومن دون بيانات اعتماد OAuth، يتراجع إلى متصفح عقدة Chrome المثبتة. تأكد مما يلي: +يستخدم `googlemeet create` أولًا نقطة نهاية Google Meet API `spaces.create` عندما تكون بيانات اعتماد OAuth مكوّنة. من دون بيانات اعتماد OAuth، يعود إلى متصفح عقدة Chrome المثبتة. تأكد مما يلي: -- للإنشاء عبر API: تم تكوين `oauth.clientId` و`oauth.refreshToken`، أو توجد متغيرات البيئة المطابقة `OPENCLAW_GOOGLE_MEET_*`. -- للإنشاء عبر API: تم إصدار رمز التحديث بعد إضافة دعم الإنشاء. قد تفتقد الرموز الأقدم نطاق `meetings.space.created`؛ أعد تشغيل `openclaw googlemeet auth login --json` وحدّث إعدادات Plugin. -- لتراجع المتصفح: يشير `defaultTransport: "chrome-node"` و`chromeNode.node` إلى عقدة متصلة تحتوي على `browser.proxy` و`googlemeet.chrome`. -- لتراجع المتصفح: ملف OpenClaw الشخصي في Chrome على تلك العقدة مسجّل الدخول إلى Google ويمكنه فتح `https://meet.google.com/new`. -- لتراجع المتصفح: تعيد المحاولات استخدام تبويب `https://meet.google.com/new` موجود أو تبويب مطالبة حساب Google قبل فتح تبويب جديد. إذا انتهت مهلة وكيل، فأعد محاولة استدعاء الأداة بدل فتح تبويب Meet آخر يدويًا. -- لتراجع المتصفح: إذا أعادت الأداة `manualActionRequired: true`، فاستخدم `browser.nodeId` و`browser.targetId` و`browserUrl` و`manualActionMessage` المعادة لتوجيه المشغّل. لا تعد المحاولة في حلقة حتى يكتمل ذلك الإجراء. -- لتراجع المتصفح: إذا عرض Meet "Do you want people to hear you in the meeting?"، فاترك التبويب مفتوحًا. ينبغي لـ OpenClaw النقر على **Use microphone** أو، في تراجع الإنشاء فقط، **Continue without microphone** عبر أتمتة المتصفح ومتابعة انتظار عنوان URL المنشأ لـ Meet. إذا تعذر ذلك، ينبغي أن يذكر الخطأ `meet-audio-choice-required`، وليس `google-login-required`. +- بالنسبة إلى الإنشاء عبر API: تكون `oauth.clientId` و`oauth.refreshToken` مكوّنتين، أو تكون متغيرات البيئة المطابقة `OPENCLAW_GOOGLE_MEET_*` موجودة. +- بالنسبة إلى الإنشاء عبر API: يكون رمز التحديث قد أُصدر بعد إضافة دعم الإنشاء. قد تفتقد الرموز الأقدم نطاق `meetings.space.created`؛ أعد تشغيل `openclaw googlemeet auth login --json` وحدّث إعدادات Plugin. +- بالنسبة إلى الرجوع الاحتياطي للمتصفح: يشير `defaultTransport: "chrome-node"` و`chromeNode.node` إلى عقدة متصلة تحتوي على `browser.proxy` و`googlemeet.chrome`. +- بالنسبة إلى الرجوع الاحتياطي للمتصفح: يكون ملف Chrome الشخصي الخاص بـ OpenClaw على تلك العقدة مسجّل الدخول إلى Google ويمكنه فتح `https://meet.google.com/new`. +- بالنسبة إلى الرجوع الاحتياطي للمتصفح: تعيد المحاولات استخدام تبويب `https://meet.google.com/new` موجود أو تبويب مطالبة حساب Google قبل فتح تبويب جديد. إذا انتهت مهلة وكيل، فأعد محاولة استدعاء الأداة بدل فتح تبويب Meet آخر يدويًا. +- بالنسبة إلى الرجوع الاحتياطي للمتصفح: إذا أعادت الأداة `manualActionRequired: true`، فاستخدم `browser.nodeId` و`browser.targetId` و`browserUrl` و`manualActionMessage` المُرجعة لإرشاد المشغّل. لا تعاود المحاولة في حلقة حتى يكتمل ذلك الإجراء. +- بالنسبة إلى الرجوع الاحتياطي للمتصفح: إذا عرض Meet "Do you want people to hear you in the meeting?"، فاترك التبويب مفتوحًا. ينبغي أن ينقر OpenClaw على **Use microphone** أو، في الرجوع الاحتياطي المخصص للإنشاء فقط، **Continue without microphone** عبر أتمتة المتصفح وأن يواصل انتظار URL الذي ينشئه Meet. إذا تعذر ذلك، فينبغي أن يذكر الخطأ `meet-audio-choice-required`، وليس `google-login-required`. ### ينضم الوكيل لكنه لا يتحدث -تحقق من المسار الآني: +تحقق من المسار الفوري: ```bash openclaw googlemeet setup openclaw googlemeet doctor ``` -استخدم `mode: "agent"` لمسار الرد الصوتي العادي STT -> وكيل OpenClaw -> TTS، أو `mode: "bidi"` للتراجع الصوتي الآني المباشر. لا يبدأ `mode: "transcribe"` جسر الرد الصوتي عمدًا. لتصحيح الأخطاء بالمراقبة فقط، شغّل `openclaw googlemeet status --json ` بعد أن يتحدث المشاركون وتحقق من `captioning` و`transcriptLines` و`lastCaptionText`. إذا كانت `inCall` تساوي true لكن `transcriptLines` تبقى عند `0`، فقد تكون التسميات التوضيحية في Meet معطّلة، أو لم يتحدث أحد منذ تثبيت المراقب، أو تغيرت واجهة Meet، أو أن التسميات التوضيحية المباشرة غير متاحة للغة/حساب الاجتماع. +استخدم `mode: "agent"` لمسار STT -> وكيل OpenClaw -> TTS العادي للرد الصوتي، أو `mode: "bidi"` للرجوع الاحتياطي الصوتي الفوري المباشر. لا يبدأ `mode: "transcribe"` جسر الرد الصوتي عمدًا. لتصحيح المراقبة فقط، شغّل `openclaw googlemeet status --json ` بعد أن يتحدث المشاركون وتحقق من `captioning` و`transcriptLines` و`lastCaptionText`. إذا كانت `inCall` تساوي true لكن `transcriptLines` تبقى عند `0`، فقد تكون تسميات Meet التوضيحية معطلة، أو لم يتحدث أحد منذ تثبيت المراقب، أو تغيّرت واجهة Meet، أو أن التسميات التوضيحية الحية غير متاحة للغة/حساب الاجتماع. -يتحقق `googlemeet test-speech` دائمًا من المسار الآني ويبلّغ عما إذا لوحظت بايتات خرج الجسر لذلك الاستدعاء. إذا كانت `speechOutputVerified` تساوي false و`speechOutputTimedOut` تساوي true، فقد يكون مزود الوقت الآني قد قبل النطق لكن OpenClaw لم يرَ بايتات خرج جديدة تصل إلى جسر صوت Chrome. +يتحقق `googlemeet test-speech` دائمًا من المسار الفوري ويبلغ عما إذا تمت ملاحظة بايتات إخراج الجسر لذلك الاستدعاء. إذا كانت `speechOutputVerified` تساوي false و`speechOutputTimedOut` تساوي true، فربما قبل مزود الخدمة الفورية النطق لكن OpenClaw لم ير بايتات إخراج جديدة تصل إلى جسر صوت Chrome. تحقق أيضًا مما يلي: -- يتوفر مفتاح مزود آني على مضيف Gateway، مثل `OPENAI_API_KEY` أو `GEMINI_API_KEY`. +- يتوفر مفتاح مزود خدمة فورية على مضيف Gateway، مثل `OPENAI_API_KEY` أو `GEMINI_API_KEY`. - يظهر `BlackHole 2ch` على مضيف Chrome. - يوجد `sox` على مضيف Chrome. -- يتم توجيه ميكروفون Meet ومكبر الصوت عبر مسار الصوت الافتراضي الذي يستخدمه OpenClaw. ينبغي أن يعرض `doctor` القيمة `meet output routed: yes` لانضمامات Chrome المحلية الآنية. +- يتم توجيه ميكروفون Meet ومكبر الصوت عبر مسار الصوت الافتراضي الذي يستخدمه OpenClaw. ينبغي أن يعرض `doctor` القيمة `meet output routed: yes` لانضمامات Chrome المحلية الفورية. -يطبع `googlemeet doctor [session-id]` الجلسة، والعقدة، وحالة داخل المكالمة، وسبب الإجراء اليدوي، واتصال مزود الوقت الآني، و`realtimeReady`، ونشاط إدخال/إخراج الصوت، وآخر طوابع زمنية للصوت، وعدادات البايت، وعنوان URL للمتصفح. استخدم `googlemeet status [session-id] --json` عندما تحتاج إلى JSON الخام. استخدم `googlemeet doctor --oauth` عندما تحتاج إلى التحقق من تحديث Google Meet OAuth من دون كشف الرموز؛ وأضف `--meeting` أو `--create-space` عندما تحتاج كذلك إلى إثبات Google Meet API. +يطبع `googlemeet doctor [session-id]` الجلسة، والعقدة، وحالة داخل المكالمة، وسبب الإجراء اليدوي، واتصال مزود الخدمة الفورية، و`realtimeReady`، ونشاط إدخال/إخراج الصوت، وآخر طوابع زمنية للصوت، وعدادات البايت، وURL المتصفح. استخدم `googlemeet status [session-id] --json` عندما تحتاج إلى JSON الخام. استخدم `googlemeet doctor --oauth` عندما تحتاج إلى التحقق من تحديث OAuth الخاص بـ Google Meet من دون كشف الرموز؛ أضف `--meeting` أو `--create-space` عندما تحتاج أيضًا إلى إثبات Google Meet API. -إذا انتهت مهلة وكيل ويمكنك رؤية تبويب Meet مفتوحًا بالفعل، فافحص ذلك التبويب من دون فتح تبويب آخر: +إذا انتهت مهلة وكيل ويمكنك رؤية تبويب Meet مفتوح بالفعل، فافحص ذلك التبويب من دون فتح تبويب آخر: ```bash openclaw googlemeet recover-tab openclaw googlemeet recover-tab https://meet.google.com/abc-defg-hij ``` -إجراء الأداة المكافئ هو `recover_current_tab`. يركز ويفحص تبويب Meet موجودًا لوسيلة النقل المحددة. مع `chrome`، يستخدم تحكم المتصفح المحلي عبر Gateway؛ ومع `chrome-node`، يستخدم عقدة Chrome المكوّنة. لا يفتح تبويبًا جديدًا ولا ينشئ جلسة جديدة؛ بل يبلّغ عن العائق الحالي، مثل تسجيل الدخول أو القبول أو الأذونات أو حالة اختيار الصوت. يتواصل أمر CLI مع Gateway المكوّن، لذلك يجب أن يكون Gateway قيد التشغيل؛ ويتطلب `chrome-node` أيضًا أن تكون عقدة Chrome متصلة. +إجراء الأداة المكافئ هو `recover_current_tab`. وهو يركز ويفحص تبويب Meet موجودًا لوسيلة النقل المحددة. مع `chrome`، يستخدم التحكم المحلي في المتصفح عبر Gateway؛ ومع `chrome-node`، يستخدم عقدة Chrome المكوّنة. لا يفتح تبويبًا جديدًا ولا ينشئ جلسة جديدة؛ بل يبلّغ عن العائق الحالي، مثل تسجيل الدخول أو القبول أو الأذونات أو حالة اختيار الصوت. يتحدث أمر CLI إلى Gateway المكوّن، لذلك يجب أن يكون Gateway قيد التشغيل؛ ويتطلب `chrome-node` أيضًا أن تكون عقدة Chrome متصلة. ### فشل فحوصات إعداد Twilio -يفشل `twilio-voice-call-plugin` عندما لا يكون `voice-call` مسموحًا به أو غير ممكّن. أضفه إلى `plugins.allow`، ومكّن `plugins.entries.voice-call`، وأعد تحميل Gateway. +يفشل `twilio-voice-call-plugin` عندما لا يكون `voice-call` مسموحًا به أو ممكّنًا. أضفه إلى `plugins.allow`، ومكّن `plugins.entries.voice-call`، وأعد تحميل Gateway. -يفشل `twilio-voice-call-credentials` عندما تفتقد واجهة Twilio الخلفية SID الحساب أو رمز المصادقة أو رقم المتصل. اضبط هذه على مضيف Gateway: +يفشل `twilio-voice-call-credentials` عندما تفتقد خلفية Twilio معرّف الحساب SID، أو رمز المصادقة، أو رقم المتصل. عيّن هذه على مضيف Gateway: ```bash export TWILIO_ACCOUNT_SID=AC... @@ -1483,11 +1482,12 @@ export TWILIO_AUTH_TOKEN=... export TWILIO_FROM_NUMBER=+15550001234 ``` -يفشل `twilio-voice-call-webhook` عندما لا يمتلك `voice-call` تعريض Webhook عامًا، أو عندما يشير `publicUrl` إلى local loopback أو مساحة شبكة خاصة. اضبط `plugins.entries.voice-call.config.publicUrl` إلى عنوان URL العام للمزود أو كوّن تعريض نفق/‏Tailscale لـ `voice-call`. +يفشل `twilio-voice-call-webhook` عندما لا يملك `voice-call` تعرض Webhook عامًا، أو عندما يشير `publicUrl` إلى local loopback أو مساحة شبكة خاصة. +عيّن `plugins.entries.voice-call.config.publicUrl` إلى URL العام للمزود أو كوّن نفقًا/تعرض Tailscale لـ `voice-call`. -عناوين URL الخاصة بـ loopback والشبكات الخاصة غير صالحة لاستدعاءات شركات الاتصالات. لا تستخدم `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`. +ليست عناوين URL الخاصة بـ local loopback والخاصة صالحة لاستدعاءات شركات الاتصالات. لا تستخدم `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`. -للحصول على عنوان URL عام مستقر: +للحصول على URL عام مستقر: ```json5 { @@ -1524,7 +1524,7 @@ export TWILIO_FROM_NUMBER=+15550001234 } ``` -ثم أعد تشغيل Gateway أو أعد تحميله وشغّل: +ثم أعد تشغيل أو إعادة تحميل Gateway وشغّل: ```bash openclaw googlemeet setup --transport twilio @@ -1532,13 +1532,13 @@ openclaw voicecall setup openclaw voicecall smoke ``` -يكون `voicecall smoke` مخصصًا لفحص الجاهزية فقط افتراضيًا. لإجراء تشغيل تجريبي لرقم محدد: +يكون `voicecall smoke` للتحقق من الجاهزية فقط افتراضيًا. لإجراء تشغيل تجريبي لرقم محدد: ```bash openclaw voicecall smoke --to "+15555550123" ``` -لا تُضِف `--yes` إلا عندما تريد عمدًا إجراء مكالمة إشعار صادرة مباشرة: +أضف `--yes` فقط عندما تريد عمدًا إجراء مكالمة إشعار صادرة حية: ```bash openclaw voicecall smoke --to "+15555550123" --yes @@ -1546,7 +1546,7 @@ openclaw voicecall smoke --to "+15555550123" --yes ### تبدأ مكالمة Twilio لكنها لا تدخل الاجتماع أبدًا -تأكد من أن حدث Meet يعرض تفاصيل الاتصال الهاتفي. مرّر رقم الاتصال الهاتفي ورقم PIN الدقيقين أو تسلسل DTMF مخصصًا: +تأكد من أن حدث Meet يعرض تفاصيل الاتصال الهاتفي. مرّر رقم الاتصال الهاتفي ورمز PIN الدقيقين أو تسلسل DTMF مخصصًا: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij \ @@ -1555,40 +1555,40 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --dtmf-sequence ww123456# ``` -استخدم `w` بادئة أو فواصل في `--dtmf-sequence` إذا كان المزوّد يحتاج إلى توقف مؤقت قبل إدخال رقم PIN. +استخدم `w` بادئة أو فواصل في `--dtmf-sequence` إذا كان المزوّد يحتاج إلى توقف مؤقت قبل إدخال رمز PIN. -إذا تم إنشاء المكالمة الهاتفية لكن قائمة حضور Meet لا تُظهر مشارك الاتصال الهاتفي أبدًا: +إذا أُنشئت المكالمة الهاتفية لكن قائمة Meet لا تعرض مطلقًا مشارك الاتصال الهاتفي: -- شغّل `openclaw googlemeet doctor ` للتأكد من معرّف مكالمة Twilio المفوّضة، وما إذا كان DTMF قد وُضع في قائمة الانتظار، وما إذا كانت تحية المقدمة قد طُلبت. +- شغّل `openclaw googlemeet doctor ` لتأكيد معرّف مكالمة Twilio المفوّضة، وما إذا وُضع DTMF في قائمة الانتظار، وما إذا طُلبت التحية الافتتاحية. - شغّل `openclaw voicecall status --call-id ` وتأكد من أن المكالمة لا تزال نشطة. -- شغّل `openclaw voicecall tail` وتحقق من وصول Webhook الخاصة بـ Twilio إلى Gateway. -- شغّل `openclaw logs --follow` وابحث عن تسلسل Twilio Meet: يفوّض Google Meet الانضمام، وتبدأ Voice Call طرف الهاتف، وينتظر Google Meet مدة `voiceCall.dtmfDelayMs`، ويرسل DTMF باستخدام `voicecall.dtmf`، وينتظر مدة `voiceCall.postDtmfSpeechDelayMs`، ثم يطلب نطق المقدمة باستخدام `voicecall.speak`. -- أعد تشغيل `openclaw googlemeet setup --transport twilio`؛ يلزم نجاح فحص الإعداد، لكنه لا يثبت أن تسلسل رقم PIN للاجتماع صحيح. -- تأكد من أن رقم الاتصال الهاتفي ينتمي إلى دعوة Meet والمنطقة نفسهما مثل رقم PIN. -- زِد `voiceCall.dtmfDelayMs` إذا كان Meet يجيب ببطء أو كان نص المكالمة لا يزال يُظهر مطالبة تطلب رقم PIN بعد إرسال DTMF. -- إذا انضم المشارك لكنك لا تسمع التحية، فتحقق من `openclaw logs --follow` بحثًا عن طلب `voicecall.speak` بعد DTMF وعن تشغيل TTS عبر تدفق الوسائط أو بديل Twilio ``. إذا كان نص المكالمة لا يزال يحتوي على "enter the meeting PIN"، فهذا يعني أن طرف الهاتف لم ينضم بعد إلى غرفة Meet، لذلك لن يسمع المشاركون في الاجتماع الكلام. +- شغّل `openclaw voicecall tail` وتحقق من وصول Webhooks الخاصة بـ Twilio إلى Gateway. +- شغّل `openclaw logs --follow` وابحث عن تسلسل Twilio Meet: يفوّض Google Meet الانضمام، ويخزّن Voice Call ويقدّم TwiML الخاص بـ DTMF قبل الاتصال، ويقدّم Voice Call TwiML فوريًا لمكالمة Twilio، ثم يطلب Google Meet نطق المقدمة باستخدام `voicecall.speak`. +- أعد تشغيل `openclaw googlemeet setup --transport twilio`؛ يلزم اجتياز فحص الإعداد، لكنه لا يثبت أن تسلسل رمز PIN للاجتماع صحيح. +- تأكد من أن رقم الاتصال الهاتفي ينتمي إلى دعوة Meet نفسها والمنطقة نفسها مثل رمز PIN. +- زد `voiceCall.dtmfDelayMs` عن القيمة الافتراضية البالغة 12 ثانية إذا كان Meet يجيب ببطء أو كان نص المكالمة لا يزال يعرض مطالبة تطلب رمز PIN بعد إرسال DTMF قبل الاتصال. +- إذا انضم المشارك لكنك لا تسمع التحية، فتحقق من `openclaw logs --follow` بحثًا عن طلب `voicecall.speak` بعد DTMF، وعن تشغيل TTS عبر تدفق الوسائط أو بديل Twilio ``. إذا كان نص المكالمة لا يزال يحتوي على "enter the meeting PIN"، فهذا يعني أن ساق الهاتف لم تنضم بعد إلى غرفة Meet، لذلك لن يسمع مشاركو الاجتماع الكلام. -إذا لم تصل Webhook، فابدأ بتصحيح Plugin Voice Call أولًا: يجب أن يتمكن المزوّد من الوصول إلى `plugins.entries.voice-call.config.publicUrl` أو النفق المكوّن. راجع [استكشاف أخطاء المكالمات الصوتية وإصلاحها](/ar/plugins/voice-call#troubleshooting). +إذا لم تصل Webhooks، فاستكشف أخطاء Plugin Voice Call أولًا: يجب أن يتمكن المزوّد من الوصول إلى `plugins.entries.voice-call.config.publicUrl` أو النفق المكوّن. راجع [استكشاف أخطاء المكالمة الصوتية وإصلاحها](/ar/plugins/voice-call#troubleshooting). ## ملاحظات -واجهة API الرسمية للوسائط في Google Meet موجهة للاستقبال، لذلك لا يزال التحدث في مكالمة Meet يحتاج إلى مسار مشارك. يُبقي هذا Plugin ذلك الحد واضحًا: يتولى Chrome المشاركة عبر المتصفح وتوجيه الصوت المحلي؛ وتتولى Twilio المشاركة عبر الاتصال الهاتفي. +واجهة API الرسمية للوسائط في Google Meet موجهة للاستقبال، لذلك لا يزال التحدث داخل مكالمة Meet يحتاج إلى مسار مشارك. يُبقي هذا Plugin ذلك الحد واضحًا: يتولى Chrome مشاركة المتصفح وتوجيه الصوت المحلي؛ وتتولى Twilio المشاركة عبر الاتصال الهاتفي. تحتاج أوضاع الرد الصوتي في Chrome إلى `BlackHole 2ch` بالإضافة إلى أحد الخيارين: -- `chrome.audioInputCommand` مع `chrome.audioOutputCommand`: يمتلك OpenClaw الجسر ويمرر الصوت بصيغة `chrome.audioFormat` بين تلك الأوامر والمزوّد المحدد. يستخدم وضع الوكيل النسخ في الوقت الفعلي بالإضافة إلى TTS عادي؛ ويستخدم وضع bidi مزوّد الصوت في الوقت الفعلي. مسار Chrome الافتراضي هو PCM16 بتردد 24 كيلوهرتز مع `chrome.audioBufferBytes: 4096`؛ وتظل G.711 mu-law بتردد 8 كيلوهرتز متاحة لأزواج الأوامر القديمة. -- `chrome.audioBridgeCommand`: يمتلك أمر جسر خارجي مسار الصوت المحلي كاملًا ويجب أن يخرج بعد بدء أو التحقق من الخادم الخفي الخاص به. هذا صالح فقط لـ `bidi` لأن وضع `agent` يحتاج إلى وصول مباشر إلى زوج الأوامر من أجل TTS. +- `chrome.audioInputCommand` مع `chrome.audioOutputCommand`: يمتلك OpenClaw الجسر ويوصل الصوت بتنسيق `chrome.audioFormat` بين هذين الأمرين والمزوّد المحدد. يستخدم وضع الوكيل النسخ الفوري مع TTS عادي؛ ويستخدم وضع bidi مزوّد الصوت الفوري. مسار Chrome الافتراضي هو PCM16 بتردد 24 kHz مع `chrome.audioBufferBytes: 4096`؛ ويظل G.711 mu-law بتردد 8 kHz متاحًا لأزواج الأوامر القديمة. +- `chrome.audioBridgeCommand`: يمتلك أمر جسر خارجي مسار الصوت المحلي بالكامل ويجب أن يخرج بعد بدء البرنامج الخفي أو التحقق منه. هذا صالح فقط لـ `bidi` لأن وضع `agent` يحتاج إلى وصول مباشر إلى زوج الأوامر من أجل TTS. -عندما يستدعي وكيل أداة `google_meet` في وضع الوكيل، تتفرع جلسة مستشار الاجتماع من نص المتصل الحالي قبل الرد على كلام المشاركين. تظل جلسة Meet منفصلة (`agent::subagent:google-meet:`) حتى لا تعدّل متابعات الاجتماع نص المتصل مباشرة. +عندما يستدعي وكيل أداة `google_meet` في وضع الوكيل، تنسخ جلسة مستشار الاجتماع نص المتصل الحالي قبل الرد على كلام المشاركين. تبقى جلسة Meet منفصلة (`agent::subagent:google-meet:`) حتى لا تعدّل متابعات الاجتماع نص المتصل مباشرة. -للحصول على صوت مزدوج نظيف، وجّه مخرج Meet وميكروفون Meet عبر أجهزة افتراضية منفصلة أو مخطط جهاز افتراضي بنمط Loopback. يمكن لجهاز BlackHole مشترك واحد أن يعيد صدى المشاركين الآخرين إلى المكالمة. +للحصول على صوت مزدوج الاتجاه نظيف، وجّه خرج Meet وميكروفون Meet عبر أجهزة افتراضية منفصلة أو مخطط أجهزة افتراضية بأسلوب Loopback. يمكن لجهاز BlackHole مشترك واحد أن يعيد صدى المشاركين الآخرين إلى المكالمة. -مع جسر Chrome ذي زوج الأوامر، يمكن لـ `chrome.bargeInInputCommand` الاستماع إلى ميكروفون محلي منفصل ومسح تشغيل المساعد عندما يبدأ الإنسان بالكلام. هذا يُبقي كلام الإنسان متقدمًا على خرج المساعد حتى عندما يكون دخل BlackHole loopback المشترك مكبوتًا مؤقتًا أثناء تشغيل المساعد. ومثل `chrome.audioInputCommand` و`chrome.audioOutputCommand`، فهو أمر محلي يكوّنه المشغّل. استخدم مسار أمر موثوقًا صريحًا أو قائمة وسائط، ولا توجهه إلى نصوص برمجية من مواقع غير موثوقة. +مع جسر Chrome ذي زوج الأوامر، يمكن لـ `chrome.bargeInInputCommand` الاستماع إلى ميكروفون محلي منفصل ومسح تشغيل المساعد عندما يبدأ الإنسان بالكلام. يُبقي هذا كلام الإنسان متقدمًا على خرج المساعد حتى عندما يكون إدخال local loopback المشترك من BlackHole مكبوتًا مؤقتًا أثناء تشغيل المساعد. مثل `chrome.audioInputCommand` و`chrome.audioOutputCommand`، فهو أمر محلي يكوّنه المشغّل. استخدم مسار أمر موثوقًا صريحًا أو قائمة وسائط، ولا توجهه إلى سكربتات من مواقع غير موثوقة. -يشغّل `googlemeet speak` جسر صوت الرد الصوتي النشط لجلسة Chrome. يوقف `googlemeet leave` ذلك الجسر. بالنسبة إلى جلسات Twilio المفوّضة عبر Plugin Voice Call، يؤدي `leave` أيضًا إلى إنهاء مكالمة الصوت الأساسية. استخدم `googlemeet end-active-conference` عندما تريد أيضًا إغلاق مؤتمر Google Meet النشط لمساحة مُدارة عبر API. +يشغّل `googlemeet speak` جسر صوت الرد النشط لجلسة Chrome. يوقف `googlemeet leave` ذلك الجسر. بالنسبة إلى جلسات Twilio المفوّضة عبر Plugin Voice Call، يؤدي `leave` أيضًا إلى إنهاء المكالمة الصوتية الأساسية. استخدم `googlemeet end-active-conference` عندما تريد أيضًا إغلاق مؤتمر Google Meet النشط لمساحة مُدارة عبر API. -## ذو صلة +## ذات صلة -- [Plugin المكالمات الصوتية](/ar/plugins/voice-call) +- [Plugin المكالمة الصوتية](/ar/plugins/voice-call) - [وضع التحدث](/ar/nodes/talk) - [بناء Plugins](/ar/plugins/building-plugins) diff --git a/docs/ar/plugins/voice-call.md b/docs/ar/plugins/voice-call.md index 01060e230..710fb4339 100644 --- a/docs/ar/plugins/voice-call.md +++ b/docs/ar/plugins/voice-call.md @@ -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` (تطوير/بلا شبكة). -يعمل Voice Call plugin **داخل عملية Gateway**. إذا كنت تستخدم Gateway -بعيدًا، فثبّت plugin واضبطه على الجهاز الذي يشغّل +يعمل Plugin المكالمات الصوتية **داخل عملية Gateway**. إذا كنت تستخدم +Gateway بعيدة، فثبّت Plugin واضبطه على الجهاز الذي يشغّل Gateway، ثم أعد تشغيل Gateway لتحميله. ## البدء السريع - + - + ```bash openclaw plugins install @openclaw/voice-call ``` - + ```bash PLUGIN_SRC=./path/to/local/voice-call-plugin openclaw plugins install "$PLUGIN_SRC" @@ -48,37 +48,37 @@ Gateway، ثم أعد تشغيل Gateway لتحميله. - استخدم الحزمة العارية لمتابعة وسم الإصدار الرسمي الحالي. ثبّت - إصدارًا دقيقًا فقط عندما تحتاج إلى تثبيت قابل لإعادة الإنتاج. + استخدم الحزمة المجردة لمتابعة وسم الإصدار الرسمي الحالي. ثبّت + إصدارًا محددًا بدقة فقط عندما تحتاج إلى تثبيت قابل لإعادة الإنتاج. - أعد تشغيل Gateway بعد ذلك لكي يتم تحميل plugin. + أعد تشغيل Gateway بعد ذلك حتى يتم تحميل Plugin. - + اضبط الإعدادات ضمن `plugins.entries.voice-call.config` (راجع - [التكوين](#configuration) أدناه للاطلاع على الشكل الكامل). كحد أدنى: - `provider`، وبيانات اعتماد المزوّد، و`fromNumber`، وعنوان webhook URL - يمكن الوصول إليه علنًا. + [الإعداد](#configuration) أدناه للشكل الكامل). الحد الأدنى: + `provider`، واعتمادات المزوّد، و`fromNumber`، وWebhook URL يمكن الوصول إليه + علنًا. - + ```bash openclaw voicecall setup ``` - يكون الخرج الافتراضي مقروءًا في سجلات الدردشة والطرفيات. يتحقق من - تمكين plugin، وبيانات اعتماد المزوّد، وانكشاف webhook، وأن وضعًا صوتيًا - واحدًا فقط (`streaming` أو `realtime`) نشط. استخدم - `--json` للبرامج النصية. + المخرج الافتراضي قابل للقراءة في سجلات الدردشة والطرفيات. يتحقق من + تفعيل Plugin، واعتمادات المزوّد، وتعرّض Webhook، ومن أن + وضع صوت واحد فقط (`streaming` أو `realtime`) نشط. استخدم + `--json` للسكربتات. - + ```bash openclaw voicecall smoke openclaw voicecall smoke --to "+15555550123" ``` - كلاهما تشغيل جاف افتراضيًا. أضف `--yes` لإجراء مكالمة إشعار صادرة - قصيرة فعليًا: + كلاهما تشغيلان تجريبيان افتراضيًا. أضف `--yes` لإجراء مكالمة إشعار + صادرة قصيرة فعليًا: ```bash openclaw voicecall smoke --to "+15555550123" --yes @@ -88,21 +88,21 @@ Gateway، ثم أعد تشغيل Gateway لتحميله. -بالنسبة إلى Twilio وTelnyx وPlivo، يجب أن ينتهي الإعداد إلى **عنوان webhook URL عام**. -إذا انتهى `publicUrl`، أو عنوان URL للنفق، أو عنوان URL لـ Tailscale، أو بديل -التقديم إلى local loopback أو مساحة شبكة خاصة، فسيفشل الإعداد بدلًا من -تشغيل مزوّد لا يستطيع تلقي webhooks من شركات الاتصالات. +بالنسبة إلى Twilio وTelnyx وPlivo، يجب أن يفضي الإعداد إلى **Webhook URL عام**. +إذا تم حل `publicUrl`، أو عنوان URL للنفق، أو عنوان URL لـ Tailscale، أو بديل الخدمة +إلى local loopback أو مساحة شبكة خاصة، فسيفشل الإعداد بدلًا من +بدء مزوّد لا يمكنه استقبال Webhookات شركات الاتصالات. -## التكوين +## الإعداد -إذا كان `enabled: true` لكن المزوّد المحدد يفتقد بيانات الاعتماد، -تسجل عملية بدء Gateway تحذيرًا بأن الإعداد غير مكتمل مع المفاتيح الناقصة -وتتخطى تشغيل وقت التشغيل. لا تزال الأوامر واستدعاءات RPC وأدوات الوكيل -تعيد تكوين المزوّد الناقص بدقة عند استخدامها. +إذا كان `enabled: true` لكن المزوّد المحدد يفتقد الاعتمادات، +فسيسجل بدء تشغيل Gateway تحذيرًا بأن الإعداد غير مكتمل مع المفاتيح الناقصة +ويتجاوز بدء وقت التشغيل. لا تزال الأوامر، واستدعاءات RPC، وأدوات الوكيل +تعيد إعداد المزوّد الناقص بدقة عند استخدامها. -تقبل بيانات اعتماد 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). ```json5 @@ -175,30 +175,31 @@ Gateway، ثم أعد تشغيل Gateway لتحميله. ``` - - - تتطلب 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. + + - تتطلب 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. - + - يغلق `streaming.preStartTimeoutMs` المقابس التي لا ترسل أبدًا إطار `start` صالحًا. - - يحد `streaming.maxPendingConnections` إجمالي مقابس ما قبل البدء غير المصادقة. - - يحد `streaming.maxPendingConnectionsPerIp` مقابس ما قبل البدء غير المصادقة لكل عنوان IP مصدر. + - يحد `streaming.maxPendingConnections` إجمالي مقابس ما قبل البدء غير المصادق عليها. + - يحد `streaming.maxPendingConnectionsPerIp` مقابس ما قبل البدء غير المصادق عليها لكل عنوان IP مصدر. - يحد `streaming.maxConnections` إجمالي مقابس تدفق الوسائط المفتوحة (المعلقة + النشطة). - - يعيد `openclaw doctor --fix` كتابة التكوينات الأقدم التي تستخدم `provider: "log"`، أو `twilio.from`، أو مفاتيح - OpenAI القديمة ضمن `streaming.*`. لا يزال بديل وقت التشغيل يقبل مفاتيح voice-call القديمة في الوقت الحالي، لكن - مسار إعادة الكتابة هو `openclaw doctor --fix` وطبقة التوافق المؤقتة + + تتم إعادة كتابة الإعدادات الأقدم التي تستخدم `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`، الذي يوجّه الصوت فقط إلى +مزوّدي التفريغ النصي الفوري. لا يمكن دمج `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.`. -- يكشف Voice Call أداة `openclaw_agent_consult` الفورية المشتركة افتراضيًا. يمكن للنموذج الفوري استدعاؤها عندما يطلب المتصل تفكيرًا أعمق، أو معلومات حالية، أو أدوات OpenClaw العادية. +- يتم دعم `realtime.enabled` لتدفقات وسائط Twilio. +- `realtime.provider` اختياري. إذا لم يتم ضبطه، تستخدم المكالمات الصوتية أول مزوّد صوت فوري مسجل. +- مزوّدو الصوت الفوري المضمنون: Google Gemini Live (`google`) وOpenAI (`openai`)، ويتم تسجيلهم بواسطة Plugins المزوّدين الخاصة بهم. +- يوجد الإعداد الخام المملوك للمزوّد ضمن `realtime.providers.`. +- تعرض المكالمات الصوتية أداة `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 المضبوط دون دفع تكلفة رحلة ذهاب وعودة ك } ``` -### أمثلة مزوّدي الوقت الفعلي +### أمثلة موفّري الوقت الحقيقي - القيم الافتراضية: مفتاح 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 المضبوط دون دفع تكلفة رحلة ذهاب وعودة ك -راجع [مزوّد 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.`. -- بعد أن يرسل 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.`. +- بعد أن يرسل Twilio رسالة `start` لبث مقبول، يسجّل Voice Call البث فورًا، ويضع الوسائط الواردة في قائمة انتظار عبر موفّر النسخ أثناء اتصال الموفّر، ولا يبدأ التحية الأولية إلا بعد أن يصبح النسخ في الوقت الحقيقي جاهزًا. +- إذا أشار `streaming.provider` إلى موفّر غير مسجّل، أو لم يكن أي موفّر مسجّلًا، يسجّل Voice Call تحذيرًا ويتخطى بث الوسائط بدلًا من إفشال Plugin بالكامل. -### أمثلة مزوّدي البث +### أمثلة موفّري البث @@ -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 المضبوط دون دفع تكلفة رحلة ذهاب وعودة ك ``` -**يتم تجاهل Microsoft speech للمكالمات الصوتية.** يحتاج صوت الاتصالات الهاتفية إلى PCM؛ -ولا يكشف نقل Microsoft الحالي عن إخراج PCM للاتصالات الهاتفية. +**يُتجاهل كلام Microsoft في مكالمات الصوت.** يحتاج صوت الاتصالات الهاتفية إلى PCM؛ +ولا يوفّر نقل Microsoft الحالي مخرج PCM للاتصالات الهاتفية. ملاحظات السلوك: -- يتم إصلاح مفاتيح `tts.` القديمة داخل تهيئة Plugin (`openai` و`elevenlabs` و`microsoft` و`edge`) بواسطة `openclaw doctor --fix`؛ يجب أن تستخدم التهيئة الملتزم بها `tts.providers.`. -- يتم استخدام TTS الأساسي عند تفعيل بث وسائط Twilio؛ وإلا تعود المكالمات إلى الأصوات الأصلية لدى المزوّد. -- إذا كان بث وسائط Twilio نشطاً بالفعل، لا يعود Voice Call إلى TwiML ``. إذا كان TTS للاتصالات الهاتفية غير متاح في تلك الحالة، يفشل طلب التشغيل بدلاً من مزج مساري تشغيل. -- عندما يعود TTS للاتصالات الهاتفية إلى مزوّد ثانوي، يسجل Voice Call تحذيراً مع سلسلة المزوّدين (`from` و`to` و`attempts`) للتصحيح. -- عندما يؤدي اقتحام Twilio أو تفكيك البث إلى مسح قائمة انتظار TTS المعلقة، تستقر طلبات التشغيل الموضوعة في قائمة الانتظار بدلاً من إبقاء المتصلين عالقين بانتظار اكتمال التشغيل. +- تُصلح `openclaw doctor --fix` مفاتيح `tts.` القديمة داخل إعداد Plugin (`openai` و`elevenlabs` و`microsoft` و`edge`)؛ يجب أن يستخدم الإعداد الملتزم به `tts.providers.`. +- يُستخدم TTS الأساسي عند تفعيل بث وسائط Twilio؛ وإلا تعود المكالمات إلى أصوات الموفّر الأصلية. +- إذا كان بث وسائط Twilio نشطًا بالفعل، لا يعود Voice Call إلى TwiML ``. إذا كان TTS الهاتفي غير متاح في تلك الحالة، يفشل طلب التشغيل بدلًا من خلط مساري تشغيل. +- عندما يعود TTS الهاتفي إلى موفّر ثانوي، يسجّل Voice Call تحذيرًا يتضمن سلسلة الموفّرين (`from` و`to` و`attempts`) للتصحيح. +- عندما يمسح الاقتحام الصوتي في Twilio أو تفكيك البث قائمة انتظار TTS المعلّقة، تُسوّى طلبات التشغيل المنتظرة بدلًا من إبقاء المتصلين عالقين في انتظار اكتمال التشغيل. ### أمثلة TTS @@ -548,7 +549,7 @@ OpenClaw المضبوط دون دفع تكلفة رحلة ذهاب وعودة ك ## المكالمات الواردة -القيمة الافتراضية لسياسة الوارد هي `disabled`. لتفعيل المكالمات الواردة، اضبط: +تكون سياسة الوارد افتراضيًا `disabled`. لتفعيل المكالمات الواردة، عيّن: ```json5 { @@ -559,33 +560,32 @@ OpenClaw المضبوط دون دفع تكلفة رحلة ذهاب وعودة ك ``` -`inboundPolicy: "allowlist"` هي شاشة معرف متصل منخفضة الضمان. يقوم -Plugin بتطبيع قيمة `From` المقدمة من المزوّد ويقارنها مع -`allowFrom`. تتحقق مصادقة Webhook من تسليم المزوّد وسلامة -الحمولة، لكنها **لا** تثبت ملكية رقم المتصل عبر PSTN/VoIP. -تعامل مع `allowFrom` كترشيح لمعرف المتصل، وليس كهوية متصل -قوية. +`inboundPolicy: "allowlist"` هو فحص منخفض الضمان لمعرّف المتصل. يقوم +Plugin بتطبيع قيمة `From` التي يوفّرها الموفّر ومقارنتها مع +`allowFrom`. يتحقق Webhook من أصالة تسليم الموفّر +وسلامة الحمولة، لكنه **لا** يثبت ملكية رقم المتصل عبر PSTN/VoIP. +تعامل مع `allowFrom` كترشيح لمعرّف المتصل، وليس كهوية قوية للمتصل. تستخدم الردود التلقائية نظام الوكيل. اضبطها باستخدام `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 `` قديماً لتلك الرسالة الأولية، لذلك تبقى جلسات `` الصادرة متصلة. +- يبدأ التشغيل الأولي لبث Twilio عند اتصال البث من دون تأخير إضافي. +- يوقف الاقتحام الصوتي التشغيل النشط ويمسح إدخالات Twilio TTS الموضوعة في قائمة الانتظار والتي لم يبدأ تشغيلها بعد. تُحل الإدخالات الممسوحة كمتخطاة، بحيث يمكن لمنطق الرد اللاحق أن يستمر من دون انتظار صوت لن يُشغّل أبدًا. +- تستخدم محادثات الصوت في الوقت الحقيقي الدور الافتتاحي الخاص ببث الوقت الحقيقي. لا ينشر Voice Call تحديث TwiML قديمًا من نوع `` لتلك الرسالة الأولية، لذلك تبقى جلسات `` الصادرة متصلة. -### مهلة سماح انقطاع بث Twilio +### مهلة فصل بث Twilio -عندما ينقطع بث وسائط Twilio، ينتظر Voice Call مدة **2000 ms** قبل -إنهاء المكالمة تلقائياً: +عند انقطاع بث وسائط Twilio، ينتظر Voice Call **2000 ms** قبل +إنهاء المكالمة تلقائيًا: -- إذا أعاد البث الاتصال خلال تلك النافذة، يتم إلغاء الإنهاء التلقائي. -- إذا لم تتم إعادة تسجيل أي بث بعد فترة السماح، يتم إنهاء المكالمة لمنع بقاء مكالمات نشطة عالقة. +- إذا أعاد البث الاتصال خلال تلك النافذة، يُلغى الإنهاء التلقائي. +- إذا لم يُسجّل أي بث من جديد بعد فترة المهلة، تُنهى المكالمة لمنع بقاء مكالمات نشطة عالقة. ## حاصد المكالمات القديمة -استخدم `staleCallReaperSeconds` لإنهاء المكالمات التي لا تتلقى أبداً Webhook -نهائياً (على سبيل المثال، مكالمات وضع الإشعار التي لا تكتمل أبداً). القيمة الافتراضية +استخدم `staleCallReaperSeconds` لإنهاء المكالمات التي لا تتلقى أبدًا Webhook +نهائيًا (على سبيل المثال، مكالمات وضع الإشعار التي لا تكتمل أبدًا). القيمة الافتراضية هي `0` (معطّل). النطاقات الموصى بها: -- **الإنتاج:** من `120` إلى `300` ثانية للتدفقات بنمط الإشعار. -- أبقِ هذه القيمة **أعلى من `maxDurationSeconds`** حتى تتمكن الاستدعاءات العادية من الاكتمال. نقطة بداية جيدة هي `maxDurationSeconds + 30–60` ثانية. +- **الإنتاج:** من `120` إلى `300` ثانية لتدفقات نمط الإشعار. +- اجعل هذه القيمة **أعلى من `maxDurationSeconds`** حتى تكتمل الاستدعاءات العادية. نقطة بداية جيدة هي `maxDurationSeconds + 30–60` ثانية. ```json5 { @@ -686,28 +686,28 @@ Plugin بتطبيع قيمة `From` المقدمة من المزوّد ويقا ## أمان Webhook -عندما يكون Proxy أو نفق أمام Gateway، يعيد Plugin +عندما يكون proxy أو tunnel أمام Gateway، يعيد Plugin بناء عنوان URL العام للتحقق من التوقيع. تتحكم هذه الخيارات -في رؤوس التوجيه التي يتم الوثوق بها: +في رؤوس إعادة التوجيه الموثوقة: - السماح بالمضيفين من رؤوس التوجيه. + قائمة سماح للمضيفين من رؤوس إعادة التوجيه. - الوثوق بالرؤوس المعاد توجيهها دون قائمة سماح. + الوثوق برؤوس إعادة التوجيه من دون قائمة سماح. - الوثوق بالرؤوس المعاد توجيهها فقط عندما يطابق عنوان IP البعيد للطلب القائمة. + لا تثق برؤوس إعادة التوجيه إلا عندما يطابق عنوان IP البعيد للطلب القائمة. حمايات إضافية: -- تم تفعيل **الحماية من إعادة تشغيل Webhook** لـ Twilio وPlivo. يتم الإقرار بطلبات Webhook الصالحة المعاد تشغيلها، لكن يتم تخطي آثارها الجانبية. -- تتضمن أدوار محادثة Twilio رمزًا لكل دور في عمليات رد نداء ``، لذلك لا يمكن لردود نداء الكلام القديمة أو المعاد تشغيلها تلبية دور نص منسوخ معلّق أحدث. -- يتم رفض طلبات Webhook غير المصادق عليها قبل قراءة الجسم عندما تكون رؤوس التوقيع المطلوبة من المزوّد مفقودة. -- يستخدم Webhook الخاص بالمكالمات الصوتية ملف تعريف الجسم المشترك قبل المصادقة (64 كيلوبايت / 5 ثوانٍ) بالإضافة إلى حد للطلبات قيد التنفيذ لكل عنوان IP قبل التحقق من التوقيع. +- يتم تفعيل **الحماية من إعادة تشغيل Webhook** لـ Twilio وPlivo. يتم الإقرار بطلبات Webhook الصالحة المعاد تشغيلها، لكن يتم تخطي آثارها الجانبية. +- تتضمن منعطفات محادثة Twilio رمزًا مميزًا لكل منعطف في استدعاءات ``، لذلك لا يمكن لاستدعاءات الكلام القديمة/المعاد تشغيلها إرضاء منعطف نص معلق أحدث. +- يتم رفض طلبات 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 ` للإشارة إلى سجل مختلف و`--last ` لحصر -التحليل في آخر N سجلًا (الافتراضي 200). يتضمن الإخراج p50/p90/p99 -لكمون الدور وأوقات انتظار الاستماع. +استخدم `--file ` للإشارة إلى سجل مختلف و`--last ` لقصر +التحليل على آخر 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 الأولي الخاص بـ `` مباشرة في -طلب إنشاء المكالمة، لذلك لا تعتمد أول رسالة منطوقة على جلب Twilio -لـ Webhook TwiML. يبقى Webhook عام مطلوبًا لردود نداء الحالة، -ومكالمات المحادثة، وDTMF قبل الاتصال، والبث في الوقت الحقيقي، والتحكم في المكالمة +ترسل مكالمات Twilio الصادرة بنمط الإشعار TwiML الأولي لـ `` مباشرة في +طلب إنشاء المكالمة، لذلك لا تعتمد الرسالة المنطوقة الأولى على جلب 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) diff --git a/docs/ar/providers/openai.md b/docs/ar/providers/openai.md index 23465b61d..79704f2ec 100644 --- a/docs/ar/providers/openai.md +++ b/docs/ar/providers/openai.md @@ -1,95 +1,103 @@ --- read_when: - تريد استخدام نماذج OpenAI في OpenClaw - - تريد مصادقة اشتراك Codex بدلًا من مفاتيح API + - تريد استخدام مصادقة اشتراك Codex بدلاً من مفاتيح API - تحتاج إلى سلوك تنفيذ أكثر صرامة لوكيل GPT-5 summary: استخدم OpenAI عبر مفاتيح API أو اشتراك Codex في OpenClaw title: OpenAI x-i18n: - generated_at: "2026-05-03T07:39:00Z" + generated_at: "2026-05-06T09:03:27Z" model: gpt-5.5 provider: openai - source_hash: cdffcdf53d9b17a19450c2ce47103db116e54a71a8dd432d981f5ece81cc38b3 + source_hash: b5606cafb8dfec888b922874202aa0fdcad8cbd4fec1a1e15a9074ad14bc5486 source_path: providers/openai.md workflow: 16 --- -توفر OpenAI واجهات API للمطورين لنماذج GPT، كما يتوفر Codex أيضًا بصفته عامل برمجة ضمن خطة ChatGPT عبر عملاء Codex من OpenAI. يبقي OpenClaw هذه الأسطح منفصلة حتى تظل الإعدادات قابلة للتنبؤ. +توفر OpenAI واجهات API للمطورين لنماذج GPT، ويتوفر Codex أيضا كعامل برمجة ضمن خطة +ChatGPT عبر عملاء Codex من OpenAI. يحافظ OpenClaw على فصل هذه +الأسطح لكي يبقى الإعداد قابلا للتنبؤ. -يدعم OpenClaw ثلاثة مسارات من عائلة OpenAI. ينبغي لمعظم مشتركي ChatGPT/Codex الذين يريدون سلوك Codex استخدام وقت تشغيل خادم تطبيق Codex الأصلي. تحدد بادئة النموذج اسم الموفر/النموذج؛ ويحدد إعداد وقت تشغيل منفصل من ينفذ حلقة العامل المضمنة: +يدعم OpenClaw ثلاثة مسارات من عائلة OpenAI. ينبغي لمعظم مشتركي ChatGPT/Codex +الذين يريدون سلوك Codex استخدام وقت تشغيل خادم تطبيق Codex الأصلي. تحدد +بادئة النموذج اسم المزود/النموذج؛ ويحدد إعداد وقت تشغيل منفصل +من ينفذ حلقة العامل المضمنة: - **مفتاح API** - وصول مباشر إلى OpenAI Platform مع فوترة حسب الاستخدام (نماذج `openai/*`) - **اشتراك Codex مع وقت تشغيل Codex الأصلي** - تسجيل دخول ChatGPT/Codex بالإضافة إلى تنفيذ خادم تطبيق Codex (نماذج `openai/*` بالإضافة إلى `agents.defaults.agentRuntime.id: "codex"`) -- **اشتراك Codex عبر PI** - تسجيل دخول ChatGPT/Codex مع مشغّل OpenClaw PI العادي (نماذج `openai-codex/*`) +- **اشتراك Codex عبر PI** - تسجيل دخول ChatGPT/Codex مع مشغل OpenClaw PI العادي (نماذج `openai-codex/*`) -تدعم OpenAI صراحة استخدام OAuth الخاص بالاشتراكات في الأدوات وسير العمل الخارجية مثل OpenClaw. +تدعم OpenAI صراحة استخدام OAuth للاشتراكات في الأدوات الخارجية وسير العمل مثل OpenClaw. -الموفر والنموذج ووقت التشغيل والقناة طبقات منفصلة. إذا كانت هذه التسميات تختلط معًا، فاقرأ [أوقات تشغيل العامل](/ar/concepts/agent-runtimes) قبل تغيير الإعدادات. +المزود والنموذج ووقت التشغيل والقناة طبقات منفصلة. إذا كانت هذه التسميات +تختلط مع بعضها، فاقرأ [أوقات تشغيل العامل](/ar/concepts/agent-runtimes) قبل +تغيير الإعداد. -## الاختيار السريع +## اختيار سريع -| الهدف | استخدم | ملاحظات | +| الهدف | الاستخدام | الملاحظات | | ---------------------------------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------- | -| اشتراك ChatGPT/Codex مع وقت تشغيل Codex الأصلي | `openai/gpt-5.5` بالإضافة إلى `agentRuntime.id: "codex"` | إعداد Codex الموصى به لمعظم المستخدمين. سجّل الدخول بمصادقة `openai-codex`. | -| فوترة مباشرة بمفتاح API | `openai/gpt-5.5` | عيّن `OPENAI_API_KEY` أو شغّل إعداد OpenAI بمفتاح API. | -| مصادقة اشتراك ChatGPT/Codex عبر PI | `openai-codex/gpt-5.5` | استخدمه فقط عندما تريد عمدًا مشغّل PI العادي. | -| توليد الصور أو تحريرها | `openai/gpt-image-2` | يعمل مع `OPENAI_API_KEY` أو OpenAI Codex OAuth. | +| اشتراك ChatGPT/Codex مع وقت تشغيل Codex الأصلي | `openai/gpt-5.5` بالإضافة إلى `agentRuntime.id: "codex"` | إعداد Codex الموصى به لمعظم المستخدمين. سجّل الدخول باستخدام مصادقة `openai-codex`. | +| فوترة مباشرة بمفتاح API | `openai/gpt-5.5` | عيّن `OPENAI_API_KEY` أو شغّل تهيئة مفتاح API الخاص بـ OpenAI. | +| مصادقة اشتراك ChatGPT/Codex عبر PI | `openai-codex/gpt-5.5` | استخدمه فقط عندما تريد عمدا مشغل PI العادي. | +| إنشاء الصور أو تحريرها | `openai/gpt-image-2` | يعمل مع `OPENAI_API_KEY` أو OpenAI Codex OAuth. | | صور بخلفية شفافة | `openai/gpt-image-1.5` | استخدم `outputFormat=png` أو `webp` و`openai.background=transparent`. | -## خريطة التسميات +## خريطة التسمية الأسماء متشابهة لكنها غير قابلة للتبادل: | الاسم الذي تراه | الطبقة | المعنى | | ---------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------- | -| `openai` | بادئة الموفر | مسار API مباشر إلى OpenAI Platform. | -| `openai-codex` | بادئة الموفر | مسار OpenAI Codex OAuth/الاشتراك عبر مشغّل OpenClaw PI العادي. | -| `codex` plugin | Plugin | Plugin مضمن في OpenClaw يوفر وقت تشغيل خادم تطبيق Codex الأصلي وعناصر تحكم المحادثة `/codex`. | -| `agentRuntime.id: codex` | وقت تشغيل العامل | فرض حاوية خادم تطبيق Codex الأصلية للدورات المضمنة. | -| `/codex ...` | مجموعة أوامر المحادثة | ربط/التحكم في سلاسل خادم تطبيق Codex من محادثة. | +| `openai` | بادئة المزود | مسار API مباشر إلى OpenAI Platform. | +| `openai-codex` | بادئة المزود | مسار OpenAI Codex OAuth/الاشتراك عبر مشغل OpenClaw PI العادي. | +| Plugin `codex` | Plugin | Plugin مدمج في OpenClaw يوفر وقت تشغيل خادم تطبيق Codex الأصلي وعناصر تحكم دردشة `/codex`. | +| `agentRuntime.id: codex` | وقت تشغيل العامل | فرض حاضنة خادم تطبيق Codex الأصلية للدورات المضمنة. | +| `/codex ...` | مجموعة أوامر الدردشة | ربط/التحكم في سلاسل خادم تطبيق Codex من محادثة. | | `runtime: "acp", agentId: "codex"` | مسار جلسة ACP | مسار احتياطي صريح يشغّل Codex عبر ACP/acpx. | -يعني هذا أن الإعداد يمكن أن يحتوي عمدًا على كل من `openai-codex/*` وPlugin -`codex`. هذا صالح عندما تريد Codex OAuth عبر PI وتريد أيضًا إتاحة عناصر تحكم المحادثة `/codex` الأصلية. يحذّر `openclaw doctor` من هذا -التركيب حتى تتمكن من تأكيد أنه مقصود؛ ولا يعيد كتابته. +يعني هذا أن الإعداد يمكن أن يحتوي عمدا على كل من `openai-codex/*` وPlugin +`codex`. يكون ذلك صالحا عندما تريد Codex OAuth عبر PI وتريد أيضا +إتاحة عناصر تحكم دردشة `/codex` الأصلية. يحذر `openclaw doctor` من هذا +المزيج لكي تتمكن من تأكيد أنه مقصود؛ ولا يعيد كتابته. -يتوفر GPT-5.5 عبر كل من الوصول المباشر بمفتاح API إلى OpenAI Platform -ومسارات الاشتراك/OAuth. لاشتراك ChatGPT/Codex بالإضافة إلى تنفيذ Codex +يتوفر GPT-5.5 من خلال الوصول المباشر بمفتاح API إلى OpenAI Platform +ومن خلال مسارات الاشتراك/OAuth أيضا. لاشتراك ChatGPT/Codex بالإضافة إلى تنفيذ Codex الأصلي، استخدم `openai/gpt-5.5` مع `agentRuntime.id: "codex"`. استخدم -`openai-codex/gpt-5.5` فقط من أجل Codex OAuth عبر PI، أو `openai/gpt-5.5` -من دون تجاوز وقت تشغيل Codex لحركة مرور `OPENAI_API_KEY` المباشرة. +`openai-codex/gpt-5.5` فقط لـ Codex OAuth عبر PI، أو `openai/gpt-5.5` +من دون تجاوز وقت تشغيل Codex لحركة `OPENAI_API_KEY` المباشرة. -تمكين Plugin OpenAI، أو اختيار نموذج `openai-codex/*`، لا يمكّن -Plugin خادم تطبيق Codex المضمن. يمكّن OpenClaw ذلك Plugin فقط -عندما تختار صراحة حاوية Codex الأصلية باستخدام -`agentRuntime.id: "codex"` أو تستخدم مرجع نموذج `codex/*` قديمًا. -إذا كان Plugin `codex` المضمن مفعّلًا لكن `openai-codex/*` ما زال يُحل -عبر PI، فإن `openclaw doctor` يحذّر ويترك المسار بلا تغيير. +تمكين Plugin الخاص بـ OpenAI، أو اختيار نموذج `openai-codex/*`، لا +يمكّن Plugin خادم تطبيق Codex المدمج. يمكّن OpenClaw ذلك Plugin فقط +عندما تختار صراحة حاضنة Codex الأصلية باستخدام +`agentRuntime.id: "codex"` أو تستخدم مرجع نموذج قديم `codex/*`. +إذا كان Plugin `codex` المدمج مفعلا لكن `openai-codex/*` لا يزال يحل +عبر PI، يحذر `openclaw doctor` ويترك المسار دون تغيير. ## تغطية ميزات OpenClaw | قدرة OpenAI | سطح OpenClaw | الحالة | | ------------------------- | ---------------------------------------------------------- | ------------------------------------------------------ | -| المحادثة / الاستجابات | موفر النموذج `openai/` | نعم | -| نماذج اشتراك Codex | `openai-codex/` مع OAuth الخاص بـ`openai-codex` | نعم | -| حاوية خادم تطبيق Codex | `openai/` مع `agentRuntime.id: codex` | نعم | -| البحث على الويب من جانب الخادم | أداة OpenAI Responses الأصلية | نعم، عندما يكون البحث على الويب مفعّلًا ولا يوجد موفر مثبت | +| الدردشة / الاستجابات | مزود نموذج `openai/` | نعم | +| نماذج اشتراك Codex | `openai-codex/` مع `openai-codex` OAuth | نعم | +| حاضنة خادم تطبيق Codex | `openai/` مع `agentRuntime.id: codex` | نعم | +| البحث في الويب من جانب الخادم | أداة OpenAI Responses الأصلية | نعم، عند تمكين البحث في الويب وعدم تثبيت مزود | | الصور | `image_generate` | نعم | -| الفيديوهات | `video_generate` | نعم | +| مقاطع الفيديو | `video_generate` | نعم | | تحويل النص إلى كلام | `messages.tts.provider: "openai"` / `tts` | نعم | -| تحويل الكلام إلى نص على دفعات | `tools.media.audio` / فهم الوسائط | نعم | -| تحويل الكلام إلى نص بالبث | مكالمة صوتية `streaming.provider: "openai"` | نعم | -| الصوت في الوقت الحقيقي | مكالمة صوتية `realtime.provider: "openai"` / حديث Control UI | نعم | -| التضمينات | موفر تضمين الذاكرة | نعم | +| تحويل الكلام إلى نص بالدفعات | `tools.media.audio` / فهم الوسائط | نعم | +| تحويل الكلام إلى نص بالتدفق | Voice Call `streaming.provider: "openai"` | نعم | +| الصوت في الوقت الفعلي | Voice Call `realtime.provider: "openai"` / Control UI Talk | نعم | +| Embeddings | مزود embedding للذاكرة | نعم | -## تضمينات الذاكرة +## Embeddings الذاكرة -يمكن لـ OpenClaw استخدام OpenAI، أو نقطة نهاية تضمين متوافقة مع OpenAI، لفهرسة -`memory_search` وتضمينات الاستعلام: +يمكن لـ OpenClaw استخدام OpenAI، أو نقطة نهاية embedding متوافقة مع OpenAI، من أجل +فهرسة `memory_search` وembeddings الاستعلام: ```json5 { @@ -104,9 +112,9 @@ Plugin خادم تطبيق Codex المضمن. يمكّن OpenClaw ذلك Plugin } ``` -بالنسبة إلى نقاط النهاية المتوافقة مع OpenAI التي تتطلب تسميات تضمين غير متماثلة، عيّن +بالنسبة إلى نقاط النهاية المتوافقة مع OpenAI التي تتطلب تسميات embedding غير متناظرة، عيّن `queryInputType` و`documentInputType` ضمن `memorySearch`. يمرر OpenClaw -هذه كحقول طلب `input_type` خاصة بالموفر: تستخدم تضمينات الاستعلام +هذه القيم كحقول طلب `input_type` خاصة بالمزود: تستخدم embeddings الاستعلام `queryInputType`؛ وتستخدم مقاطع الذاكرة المفهرسة والفهرسة الدفعية `documentInputType`. راجع [مرجع إعداد الذاكرة](/ar/reference/memory-config#provider-specific-config) للاطلاع على المثال الكامل. @@ -115,25 +123,25 @@ Plugin خادم تطبيق Codex المضمن. يمكّن OpenClaw ذلك Plugin اختر طريقة المصادقة المفضلة لديك واتبع خطوات الإعداد. - - **الأفضل من أجل:** الوصول المباشر إلى API والفوترة حسب الاستخدام. + + **الأفضل لـ:** الوصول المباشر إلى API والفوترة حسب الاستخدام. - + أنشئ أو انسخ مفتاح API من [لوحة تحكم OpenAI Platform](https://platform.openai.com/api-keys). - + ```bash openclaw onboard --auth-choice openai-api-key ``` - أو مرّر المفتاح مباشرة: + أو مرر المفتاح مباشرة: ```bash openclaw onboard --openai-api-key "$OPENAI_API_KEY" ``` - + ```bash openclaw models list --provider openai ``` @@ -146,12 +154,12 @@ Plugin خادم تطبيق Codex المضمن. يمكّن OpenClaw ذلك Plugin | ---------------------- | -------------------------- | --------------------------- | ---------------- | | `openai/gpt-5.5` | محذوف / `agentRuntime.id: "pi"` | API مباشر إلى OpenAI Platform | `OPENAI_API_KEY` | | `openai/gpt-5.4-mini` | محذوف / `agentRuntime.id: "pi"` | API مباشر إلى OpenAI Platform | `OPENAI_API_KEY` | - | `openai/gpt-5.5` | `agentRuntime.id: "codex"` | حاوية خادم تطبيق Codex | خادم تطبيق Codex | + | `openai/gpt-5.5` | `agentRuntime.id: "codex"` | حاضنة خادم تطبيق Codex | خادم تطبيق Codex | - `openai/*` هو مسار OpenAI بمفتاح API مباشر ما لم تفرض صراحة - حاوية خادم تطبيق Codex. استخدم `openai-codex/*` من أجل Codex OAuth عبر - مشغّل PI الافتراضي، أو استخدم `openai/gpt-5.5` مع + `openai/*` هو مسار مفتاح API المباشر الخاص بـ OpenAI ما لم تفرض صراحة + حاضنة خادم تطبيق Codex. استخدم `openai-codex/*` لـ Codex OAuth عبر + مشغل PI الافتراضي، أو استخدم `openai/gpt-5.5` مع `agentRuntime.id: "codex"` لتنفيذ خادم تطبيق Codex الأصلي. @@ -165,16 +173,16 @@ Plugin خادم تطبيق Codex المضمن. يمكّن OpenClaw ذلك Plugin ``` - لا يعرّض OpenClaw النموذج `openai/gpt-5.3-codex-spark`. ترفض طلبات OpenAI API الحية ذلك النموذج، كما أن كتالوج Codex الحالي لا يعرّضه أيضًا. + لا يعرّض OpenClaw النموذج `openai/gpt-5.3-codex-spark`. ترفض طلبات OpenAI API المباشرة ذلك النموذج، ولا يعرّضه كتالوج Codex الحالي أيضا. - - **الأفضل من أجل:** استخدام اشتراك ChatGPT/Codex الخاص بك مع تنفيذ خادم تطبيق Codex الأصلي بدلًا من مفتاح API منفصل. تتطلب سحابة Codex تسجيل الدخول إلى ChatGPT. + + **الأفضل لـ:** استخدام اشتراك ChatGPT/Codex مع تنفيذ خادم تطبيق Codex الأصلي بدلا من مفتاح API منفصل. تتطلب سحابة Codex تسجيل الدخول إلى ChatGPT. - + ```bash openclaw onboard --auth-choice openai-codex ``` @@ -185,26 +193,26 @@ Plugin خادم تطبيق Codex المضمن. يمكّن OpenClaw ذلك Plugin openclaw models auth login --provider openai-codex ``` - بالنسبة إلى الإعدادات بلا واجهة أو التي لا تناسبها ردود الاستدعاء، أضف `--device-code` لتسجيل الدخول باستخدام تدفق رمز جهاز ChatGPT بدلًا من رد استدعاء متصفح localhost: + للإعدادات دون واجهة أو التي لا تناسبها callbacks، أضف `--device-code` لتسجيل الدخول باستخدام تدفق رمز جهاز ChatGPT بدلا من callback متصفح localhost: ```bash openclaw models auth login --provider openai-codex --device-code ``` - + ```bash openclaw config set plugins.entries.codex '{"enabled":true}' --strict-json --merge openclaw config set agents.defaults.model.primary openai/gpt-5.5 openclaw config set agents.defaults.agentRuntime '{"id":"codex"}' --strict-json ``` - + ```bash openclaw models list --provider openai-codex ``` بعد تشغيل Gateway، أرسل `/codex status` أو `/codex models` - في المحادثة للتحقق من وقت تشغيل خادم التطبيق الأصلي. + في الدردشة للتحقق من وقت تشغيل خادم التطبيق الأصلي. @@ -212,21 +220,29 @@ Plugin خادم تطبيق Codex المضمن. يمكّن OpenClaw ذلك Plugin | مرجع النموذج | إعداد وقت التشغيل | المسار | المصادقة | |-----------|----------------|-------|------| - | `openai/gpt-5.5` | `agentRuntime.id: "codex"` | حاوية خادم تطبيق Codex الأصلية | تسجيل دخول Codex أو ملف تعريف `openai-codex` المحدد | - | `openai-codex/gpt-5.5` | محذوف / `runtime: "pi"` | OAuth الخاص بـChatGPT/Codex عبر PI | تسجيل دخول Codex | - | `openai-codex/gpt-5.4-mini` | محذوف / `runtime: "pi"` | OAuth الخاص بـChatGPT/Codex عبر PI | تسجيل دخول Codex | - | `openai-codex/gpt-5.5` | `runtime: "auto"` | يظل PI ما لم يطالب Plugin صراحة بـ`openai-codex` | تسجيل دخول Codex | + | `openai/gpt-5.5` | `agentRuntime.id: "codex"` | حاضنة خادم تطبيق Codex الأصلية | تسجيل دخول Codex أو ملف تعريف `openai-codex` المحدد | + | `openai-codex/gpt-5.5` | محذوف / `runtime: "pi"` | ChatGPT/Codex OAuth عبر PI | تسجيل دخول Codex | + | `openai-codex/gpt-5.4-mini` | محذوف / `runtime: "pi"` | ChatGPT/Codex OAuth عبر PI | تسجيل دخول Codex | + | `openai-codex/gpt-5.5` | `runtime: "auto"` | يبقى PI ما لم يطالب Plugin صراحة بـ `openai-codex` | تسجيل دخول Codex | + + + لا تضبط مراجع نماذج `openai-codex/gpt-5.1*` أو `openai-codex/gpt-5.2*` أو + `openai-codex/gpt-5.3*` الأقدم. ترفض حسابات ChatGPT/Codex OAuth الآن + تلك النماذج. استخدم `openai-codex/gpt-5.5` لمسار PI OAuth، أو + `openai/gpt-5.5` مع `agentRuntime.id: "codex"` لتنفيذ وقت تشغيل Codex + الأصلي. + - واصل استخدام معرّف مزوّد `openai-codex` لأوامر المصادقة/الملف الشخصي. بادئة - نموذج `openai-codex/*` هي أيضًا مسار PI الصريح لـ Codex OAuth. - ولا تحدد أو تفعّل تلقائيًا حزمة مشغّل خادم تطبيق Codex المضمنة. بالنسبة إلى - إعداد الاشتراك الشائع مع بيئة التشغيل الأصلية، سجّل الدخول باستخدام - `openai-codex` لكن أبقِ مرجع النموذج كـ `openai/gpt-5.5` واضبط + استمر في استخدام معرّف المزوّد `openai-codex` لأوامر المصادقة/الملف الشخصي. بادئة + النموذج `openai-codex/*` هي أيضًا مسار PI الصريح لـ Codex OAuth. + إنها لا تختار أو تفعّل تلقائيًا حزمة تشغيل خادم التطبيق Codex المضمّنة. لإعداد + الاشتراك الشائع مع وقت التشغيل الأصلي، سجّل الدخول باستخدام + `openai-codex` لكن أبقِ مرجع النموذج `openai/gpt-5.5` وعيّن `agentRuntime.id: "codex"`. - ### مثال الإعداد + ### مثال إعدادات ```json5 { @@ -241,39 +257,39 @@ Plugin خادم تطبيق Codex المضمن. يمكّن OpenClaw ذلك Plugin ``` لإبقاء Codex OAuth على مشغّل PI العادي بدلًا من ذلك، استخدم - `openai-codex/gpt-5.5` واحذف تجاوز بيئة تشغيل Codex. + `openai-codex/gpt-5.5` واحذف تجاوز وقت تشغيل Codex. - لم يعد الإعداد الأولي يستورد مواد OAuth من `~/.codex`. سجّل الدخول باستخدام OAuth عبر المتصفح (الافتراضي) أو تدفق رمز الجهاز أعلاه — يدير OpenClaw بيانات الاعتماد الناتجة في مخزن مصادقة الوكيل الخاص به. + لم تعد عملية التهيئة تستورد مواد OAuth من `~/.codex`. سجّل الدخول باستخدام OAuth عبر المتصفح (الافتراضي) أو تدفق رمز الجهاز أعلاه — يدير OpenClaw بيانات الاعتماد الناتجة في مخزن مصادقة الوكلاء الخاص به. ### مؤشر الحالة - تعرض دردشة `/status` بيئة تشغيل النموذج النشطة للجلسة الحالية. - يظهر مشغّل PI الافتراضي كـ `Runtime: OpenClaw Pi Default`. عندما يتم تحديد - مشغّل خادم تطبيق Codex المضمن، تعرض `/status` - `Runtime: OpenAI Codex`. تحتفظ الجلسات الحالية بمعرّف المشغّل المسجل لديها، لذا استخدم - `/new` أو `/reset` بعد تغيير `agentRuntime` إذا أردت أن تعكس `/status` + يعرض دردشة `/status` وقت تشغيل النموذج النشط للجلسة الحالية. + تظهر حزمة PI الافتراضية كـ `Runtime: OpenClaw Pi Default`. عند اختيار + حزمة تشغيل خادم التطبيق Codex المضمّنة، يعرض `/status` + `Runtime: OpenAI Codex`. تحتفظ الجلسات الموجودة بمعرّف الحزمة المسجّل لديها، لذا استخدم + `/new` أو `/reset` بعد تغيير `agentRuntime` إذا أردت أن يعكس `/status` اختيار PI/Codex جديدًا. - ### تحذير الطبيب + ### تحذير Doctor - إذا كان Plugin `codex` المضمن مفعّلًا أثناء تحديد مسار `openai-codex/*`، - يحذّر `openclaw doctor` من أن النموذج لا يزال يُحل عبر PI. - أبقِ الإعداد دون تغيير فقط عندما يكون مسار مصادقة الاشتراك عبر PI + إذا كان Plugin `codex` المضمّن مفعّلًا بينما يكون مسار `openai-codex/*` + محددًا، فسيحذّر `openclaw doctor` من أن النموذج ما زال يُحل عبر PI. + أبقِ الإعدادات دون تغيير فقط عندما يكون مسار مصادقة الاشتراك عبر PI هذا مقصودًا. انتقل إلى `openai/` مع `agentRuntime.id: "codex"` عندما تريد تنفيذ خادم تطبيق Codex الأصلي. ### حد نافذة السياق - يتعامل OpenClaw مع بيانات تعريف النموذج وحد سياق بيئة التشغيل كقيم منفصلة. + يتعامل OpenClaw مع بيانات تعريف النموذج وحد سياق وقت التشغيل كقيمتين منفصلتين. بالنسبة إلى `openai-codex/gpt-5.5` عبر Codex OAuth: - `contextWindow` الأصلي: `1000000` - - حد `contextTokens` الافتراضي لبيئة التشغيل: `272000` + - حد `contextTokens` الافتراضي لوقت التشغيل: `272000` - يملك الحد الافتراضي الأصغر خصائص زمن استجابة وجودة أفضل عمليًا. تجاوزه باستخدام `contextTokens`: + يوفّر الحد الافتراضي الأصغر خصائص أفضل من حيث زمن الاستجابة والجودة عمليًا. تجاوزه باستخدام `contextTokens`: ```json5 { @@ -288,15 +304,15 @@ Plugin خادم تطبيق Codex المضمن. يمكّن OpenClaw ذلك Plugin ``` - استخدم `contextWindow` للإعلان عن بيانات تعريف النموذج الأصلية. استخدم `contextTokens` للحد من ميزانية سياق بيئة التشغيل. + استخدم `contextWindow` للإعلان عن بيانات تعريف النموذج الأصلية. استخدم `contextTokens` لتقييد ميزانية سياق وقت التشغيل. ### استرداد الكتالوج - يستخدم OpenClaw بيانات تعريف كتالوج Codex الأصلية لـ `gpt-5.5` عند - وجودها. إذا أغفل اكتشاف Codex المباشر صف `openai-codex/gpt-5.5` بينما - يكون الحساب مصادقًا، ينشئ OpenClaw ذلك صف نموذج OAuth حتى - لا تفشل عمليات cron والوكيل الفرعي والنموذج الافتراضي المضبوط بسبب + يستخدم OpenClaw بيانات تعريف كتالوج Codex من المصدر الأعلى لـ `gpt-5.5` عندما تكون + موجودة. إذا أغفل اكتشاف Codex المباشر صف `openai-codex/gpt-5.5` بينما + يكون الحساب مصادقًا، ينشئ OpenClaw صف نموذج OAuth هذا حتى لا تفشل + عمليات cron والوكيل الفرعي والنموذج الافتراضي المكوّن مع `Unknown model`. @@ -304,39 +320,39 @@ Plugin خادم تطبيق Codex المضمن. يمكّن OpenClaw ذلك Plugin ## مصادقة خادم تطبيق Codex الأصلي -يستخدم مشغّل خادم تطبيق Codex الأصلي مراجع نماذج `openai/*` مع -`agentRuntime.id: "codex"`، لكن مصادقته لا تزال قائمة على الحساب. يختار OpenClaw +تستخدم حزمة خادم تطبيق Codex الأصلية مراجع نماذج `openai/*` مع +`agentRuntime.id: "codex"`، لكن مصادقتها ما زالت قائمة على الحساب. يختار OpenClaw المصادقة بهذا الترتيب: -1. ملف مصادقة OpenClaw صريح من نوع `openai-codex` مرتبط بالوكيل. -2. الحساب الموجود لدى خادم التطبيق، مثل تسجيل دخول ChatGPT محلي عبر Codex CLI. +1. ملف مصادقة OpenClaw `openai-codex` صريح مرتبط بالوكيل. +2. حساب خادم التطبيق الموجود، مثل تسجيل دخول ChatGPT محلي عبر Codex CLI. 3. لعمليات تشغيل خادم التطبيق المحلي عبر stdio فقط، `CODEX_API_KEY`، ثم - `OPENAI_API_KEY`، عندما يبلّغ خادم التطبيق عن عدم وجود حساب ولا يزال يتطلب + `OPENAI_API_KEY`، عندما يبلّغ خادم التطبيق عن عدم وجود حساب وما زال يتطلب مصادقة OpenAI. -هذا يعني أن تسجيل دخول اشتراك ChatGPT/Codex محلي لا يُستبدل لمجرد -أن عملية Gateway لديها أيضًا `OPENAI_API_KEY` لنماذج OpenAI المباشرة +يعني ذلك أن تسجيل دخول اشتراك ChatGPT/Codex المحلي لا يُستبدل لمجرد أن +عملية Gateway لديها أيضًا `OPENAI_API_KEY` لنماذج OpenAI المباشرة أو التضمينات. الرجوع الاحتياطي إلى مفتاح API من البيئة هو فقط لمسار stdio المحلي بلا حساب؛ ولا -يُرسل إلى اتصالات خادم التطبيق عبر WebSocket. عندما يتم تحديد ملف Codex +يُرسل إلى اتصالات خادم التطبيق عبر WebSocket. عند اختيار ملف Codex بنمط الاشتراك، يُبقي OpenClaw أيضًا `CODEX_API_KEY` و`OPENAI_API_KEY` -خارج عملية خادم التطبيق الفرعية عبر stdio ويرسل بيانات الاعتماد المحددة -من خلال app-server login RPC. +خارج العملية الفرعية لخادم تطبيق stdio المُنشأة، ويرسل بيانات الاعتماد المحددة +عبر RPC تسجيل دخول خادم التطبيق. -## إنشاء الصور +## توليد الصور -يسجّل Plugin `openai` المضمن إنشاء الصور عبر أداة `image_generate`. -وهو يدعم إنشاء الصور باستخدام مفتاح API من OpenAI وإنشاء الصور عبر Codex OAuth +يسجّل Plugin `openai` المضمّن توليد الصور عبر أداة `image_generate`. +وهو يدعم توليد الصور بمفتاح OpenAI API وتوليد الصور عبر Codex OAuth من خلال مرجع النموذج نفسه `openai/gpt-image-2`. -| القدرة | مفتاح API من OpenAI | Codex OAuth | +| الإمكانية | مفتاح OpenAI API | Codex OAuth | | ------------------------- | ---------------------------------- | ------------------------------------ | -| مرجع النموذج | `openai/gpt-image-2` | `openai/gpt-image-2` | -| المصادقة | `OPENAI_API_KEY` | تسجيل دخول OpenAI Codex OAuth | -| النقل | OpenAI Images API | واجهة Codex Responses الخلفية | -| الحد الأقصى للصور في الطلب | 4 | 4 | -| وضع التحرير | مفعّل (حتى 5 صور مرجعية) | مفعّل (حتى 5 صور مرجعية) | -| تجاوزات الحجم | مدعومة، بما في ذلك أحجام 2K/4K | مدعومة، بما في ذلك أحجام 2K/4K | -| نسبة العرض إلى الارتفاع / الدقة | لا تُمرر إلى OpenAI Images API | تُطابق مع حجم مدعوم عندما يكون ذلك آمنًا | +| مرجع النموذج | `openai/gpt-image-2` | `openai/gpt-image-2` | +| المصادقة | `OPENAI_API_KEY` | تسجيل دخول OpenAI Codex OAuth | +| النقل | OpenAI Images API | خلفية Codex Responses | +| الحد الأقصى للصور في الطلب | 4 | 4 | +| وضع التحرير | مفعّل (حتى 5 صور مرجعية) | مفعّل (حتى 5 صور مرجعية) | +| تجاوزات الحجم | مدعومة، بما في ذلك أحجام 2K/4K | مدعومة، بما في ذلك أحجام 2K/4K | +| نسبة العرض إلى الارتفاع / الدقة | لا تُمرّر إلى OpenAI Images API | تُطابق مع حجم مدعوم عندما يكون ذلك آمنًا | ```json5 { @@ -349,24 +365,24 @@ Plugin خادم تطبيق Codex المضمن. يمكّن OpenClaw ذلك Plugin ``` -راجع [إنشاء الصور](/ar/tools/image-generation) لمعلمات الأداة المشتركة، واختيار المزوّد، وسلوك تجاوز الفشل. +راجع [توليد الصور](/ar/tools/image-generation) لمعلمات الأداة المشتركة، واختيار المزوّد، وسلوك تجاوز الفشل. -`gpt-image-2` هو الافتراضي لكل من إنشاء النص إلى صورة في OpenAI وتحرير الصور. -وتبقى `gpt-image-1.5` و`gpt-image-1` و`gpt-image-1-mini` قابلة للاستخدام +`gpt-image-2` هو الافتراضي لكل من توليد الصور من النص في OpenAI وتحرير الصور. +تبقى `gpt-image-1.5` و`gpt-image-1` و`gpt-image-1-mini` قابلة للاستخدام كتجاوزات نموذج صريحة. استخدم `openai/gpt-image-1.5` لمخرجات -PNG/WebP بخلفية شفافة؛ إذ ترفض واجهة API الحالية لـ `gpt-image-2` +PNG/WebP بخلفية شفافة؛ ترفض API الحالية لـ `gpt-image-2` `background: "transparent"`. -لطلب خلفية شفافة، يجب أن تستدعي الوكلاء `image_generate` مع +لطلب بخلفية شفافة، يجب أن يستدعي الوكلاء `image_generate` مع `model: "openai/gpt-image-1.5"` و`outputFormat: "png"` أو `"webp"` و -`background: "transparent"`؛ ولا يزال خيار المزوّد الأقدم `openai.background` +`background: "transparent"`؛ وما زال خيار المزوّد الأقدم `openai.background` مقبولًا. يحمي OpenClaw أيضًا مسارات OpenAI العامة و -OpenAI Codex OAuth من خلال إعادة كتابة طلبات الشفافية الافتراضية -`openai/gpt-image-2` إلى `gpt-image-1.5`؛ بينما تحتفظ نقاط نهاية Azure -ونقاط النهاية المخصصة المتوافقة مع OpenAI بأسماء النشر/النماذج المضبوطة لديها. +OpenAI Codex OAuth بإعادة كتابة طلبات الشفافية الافتراضية `openai/gpt-image-2` +إلى `gpt-image-1.5`؛ بينما تحتفظ نقاط نهاية Azure ونقاط النهاية المخصصة المتوافقة مع OpenAI +بأسماء النشر/النموذج المكوّنة لديها. -يتوفر الإعداد نفسه لتشغيل CLI دون واجهة: +يتوفر الإعداد نفسه لعمليات CLI بلا واجهة: ```bash openclaw infer image generate \ @@ -379,27 +395,27 @@ openclaw infer image generate \ استخدم علامتي `--output-format` و`--background` نفسيهما مع `openclaw infer image edit` عند البدء من ملف إدخال. -تظل `--openai-background` متاحة كاسم بديل خاص بـ OpenAI. +تبقى `--openai-background` متاحة كاسم مستعار خاص بـ OpenAI. -بالنسبة إلى تثبيتات Codex OAuth، أبقِ المرجع نفسه `openai/gpt-image-2`. عند -ضبط ملف OAuth من نوع `openai-codex`، يحل OpenClaw رمز وصول OAuth -المخزن ويرسل طلبات الصور عبر واجهة Codex Responses الخلفية. وهو -لا يحاول أولًا استخدام `OPENAI_API_KEY` ولا يرجع بصمت إلى مفتاح API لذلك -الطلب. اضبط `models.providers.openai` صراحةً باستخدام مفتاح API، +بالنسبة إلى تثبيتات Codex OAuth، أبقِ مرجع `openai/gpt-image-2` نفسه. عند +تكوين ملف OAuth `openai-codex`، يحل OpenClaw رمز وصول OAuth المخزّن +ويرسل طلبات الصور عبر خلفية Codex Responses. ولا يحاول أولًا استخدام +`OPENAI_API_KEY` أو الرجوع بصمت إلى مفتاح API لذلك +الطلب. كوّن `models.providers.openai` صراحةً بمفتاح API، أو عنوان URL أساسي مخصص، أو نقطة نهاية Azure عندما تريد مسار OpenAI Images API المباشر بدلًا من ذلك. -إذا كانت نقطة نهاية الصور المخصصة تلك على شبكة LAN/عنوان خاص موثوق، فاضبط أيضًا -`browser.ssrfPolicy.dangerouslyAllowPrivateNetwork: true`؛ إذ يبقي OpenClaw +إذا كانت نقطة نهاية الصور المخصصة هذه على LAN/عنوان خاص موثوق، فعيّن أيضًا +`browser.ssrfPolicy.dangerouslyAllowPrivateNetwork: true`؛ يبقي OpenClaw نقاط نهاية الصور الخاصة/الداخلية المتوافقة مع OpenAI محظورة ما لم يكن هذا الاشتراك موجودًا. -إنشاء: +توليد: ``` /tool image_generate model=openai/gpt-image-2 prompt="A polished launch poster for OpenClaw on macOS" size=3840x2160 count=1 ``` -إنشاء PNG شفاف: +توليد PNG شفاف: ``` /tool image_generate model=openai/gpt-image-1.5 prompt="A simple red circle sticker on a transparent background" outputFormat=png background=transparent @@ -411,17 +427,17 @@ openclaw infer image generate \ /tool image_generate model=openai/gpt-image-2 prompt="Preserve the object shape, change the material to translucent glass" image=/path/to/reference.png size=1024x1536 ``` -## إنشاء الفيديو +## توليد الفيديو -يسجّل Plugin `openai` المضمن إنشاء الفيديو عبر أداة `video_generate`. +يسجّل Plugin `openai` المضمّن توليد الفيديو عبر أداة `video_generate`. -| القدرة | القيمة | +| الإمكانية | القيمة | | ---------------- | --------------------------------------------------------------------------------- | -| النموذج الافتراضي | `openai/sora-2` | -| الأوضاع | نص إلى فيديو، صورة إلى فيديو، تحرير فيديو واحد | -| المدخلات المرجعية | صورة واحدة أو فيديو واحد | -| تجاوزات الحجم | مدعومة | -| تجاوزات أخرى | يتم تجاهل `aspectRatio` و`resolution` و`audio` و`watermark` مع تحذير من الأداة | +| النموذج الافتراضي | `openai/sora-2` | +| الأوضاع | من نص إلى فيديو، من صورة إلى فيديو، تحرير فيديو واحد | +| مدخلات مرجعية | صورة واحدة أو فيديو واحد | +| تجاوزات الحجم | مدعومة | +| تجاوزات أخرى | يتم تجاهل `aspectRatio` و`resolution` و`audio` و`watermark` مع تحذير من الأداة | ```json5 { @@ -434,25 +450,25 @@ openclaw infer image generate \ ``` -راجع [إنشاء الفيديو](/ar/tools/video-generation) لمعلمات الأداة المشتركة، واختيار المزوّد، وسلوك تجاوز الفشل. +راجع [توليد الفيديو](/ar/tools/video-generation) لمعلمات الأداة المشتركة، واختيار المزوّد، وسلوك تجاوز الفشل. -## مساهمة موجّه GPT-5 +## مساهمة موجه GPT-5 -يضيف OpenClaw مساهمة موجّه GPT-5 مشتركة لتشغيلات عائلة GPT-5 عبر المزوّدين. تُطبق حسب معرّف النموذج، لذا تتلقى `openai-codex/gpt-5.5` و`openai/gpt-5.5` و`openrouter/openai/gpt-5.5` و`opencode/gpt-5.5` ومراجع GPT-5 المتوافقة الأخرى التراكب نفسه. لا تنطبق على نماذج GPT-4.x الأقدم. +يضيف OpenClaw مساهمة موجه GPT-5 مشتركة لعمليات عائلة GPT-5 عبر المزوّدين. تنطبق حسب معرّف النموذج، لذا تتلقى `openai-codex/gpt-5.5` و`openai/gpt-5.5` و`openrouter/openai/gpt-5.5` و`opencode/gpt-5.5` ومراجع GPT-5 المتوافقة الأخرى الطبقة نفسها. لا تنطبق على نماذج GPT-4.x الأقدم. -يستخدم مشغّل Codex الأصلي المضمن سلوك GPT-5 نفسه وتراكب Heartbeat عبر تعليمات مطوّر خادم تطبيق Codex، لذا تحافظ جلسات `openai/gpt-5.x` المفروضة عبر `agentRuntime.id: "codex"` على إرشادات المتابعة وHeartbeat الاستباقية نفسها رغم أن Codex يملك بقية موجّه المشغّل. +تستخدم حزمة Codex الأصلية المضمّنة سلوك GPT-5 نفسه وطبقة Heartbeat عبر تعليمات مطوّر خادم تطبيق Codex، لذا تحتفظ جلسات `openai/gpt-5.x` المفروضة عبر `agentRuntime.id: "codex"` بالإرشادات نفسها الخاصة بالمتابعة وHeartbeat الاستباقي، رغم أن Codex يملك بقية موجه الحزمة. -تضيف مساهمة GPT-5 عقد سلوك موسومًا لاستمرارية الشخصية، وسلامة التنفيذ، وانضباط الأدوات، وشكل المخرجات، وفحوص الإكمال، والتحقق. يبقى سلوك الرد الخاص بالقناة والرسائل الصامتة في موجّه نظام OpenClaw المشترك وسياسة التسليم الصادر. تكون إرشادات GPT-5 مفعّلة دائمًا للنماذج المطابقة. طبقة أسلوب التفاعل الودود منفصلة وقابلة للضبط. +تضيف مساهمة GPT-5 عقد سلوك موسومًا لثبات الشخصية، وسلامة التنفيذ، وانضباط الأدوات، وشكل المخرجات، وفحوصات الإكمال، والتحقق. يبقى سلوك الرد حسب القناة والرسائل الصامتة في موجه نظام OpenClaw المشترك وسياسة التسليم الصادر. تكون إرشادات GPT-5 مفعّلة دائمًا للنماذج المطابقة. طبقة أسلوب التفاعل الودية منفصلة وقابلة للتكوين. -| القيمة | التأثير | -| ---------------------- | ------------------------------------------- | -| `"friendly"` (افتراضي) | تفعيل طبقة أسلوب التفاعل الودود | -| `"on"` | اسم بديل لـ `"friendly"` | -| `"off"` | تعطيل طبقة الأسلوب الودود فقط | +| القيمة | التأثير | +| ---------------------- | ---------------------------------------- | +| `"friendly"` (افتراضي) | تفعيل طبقة أسلوب التفاعل الودية | +| `"on"` | اسم مستعار لـ `"friendly"` | +| `"off"` | تعطيل طبقة الأسلوب الودية فقط | - + ```json5 { agents: { @@ -473,33 +489,33 @@ openclaw infer image generate \ -القيم غير حساسة لحالة الأحرف وقت التشغيل، لذا فإن `"Off"` و`"off"` كلتيهما تعطلان طبقة الأسلوب الودود. +القيم غير حساسة لحالة الأحرف في وقت التشغيل، لذا يعطّل كل من `"Off"` و`"off"` طبقة الأسلوب الودية. -لا يزال `plugins.entries.openai.config.personality` القديم يُقرأ كرجوع احتياطي للتوافق عندما لا يكون إعداد `agents.defaults.promptOverlays.gpt5.personality` المشترك مضبوطًا. +ما زال `plugins.entries.openai.config.personality` القديم يُقرأ كرجوع احتياطي للتوافق عندما لا يكون إعداد `agents.defaults.promptOverlays.gpt5.personality` المشترك معيّنًا. ## الصوت والكلام - - يسجّل Plugin `openai` المضمن تركيب الكلام لسطح `messages.tts`. + + يسجّل Plugin `openai` المضمّن توليف الكلام لسطح `messages.tts`. - | الإعداد | مسار الإعداد | الافتراضي | + | الإعداد | مسار التهيئة | الافتراضي | |---------|------------|---------| | النموذج | `messages.tts.providers.openai.model` | `gpt-4o-mini-tts` | | الصوت | `messages.tts.providers.openai.voice` | `coral` | - | السرعة | `messages.tts.providers.openai.speed` | (غير معيّن) | - | التعليمات | `messages.tts.providers.openai.instructions` | (غير معيّن، `gpt-4o-mini-tts` فقط) | + | السرعة | `messages.tts.providers.openai.speed` | (غير مضبوط) | + | التعليمات | `messages.tts.providers.openai.instructions` | (غير مضبوط، `gpt-4o-mini-tts` فقط) | | التنسيق | `messages.tts.providers.openai.responseFormat` | `opus` للملاحظات الصوتية، و`mp3` للملفات | | مفتاح API | `messages.tts.providers.openai.apiKey` | يعود إلى `OPENAI_API_KEY` | | عنوان URL الأساسي | `messages.tts.providers.openai.baseUrl` | `https://api.openai.com/v1` | - | متن إضافي | `messages.tts.providers.openai.extraBody` / `extra_body` | (غير معيّن) | + | النص الإضافي للطلب | `messages.tts.providers.openai.extraBody` / `extra_body` | (غير مضبوط) | النماذج المتاحة: `gpt-4o-mini-tts`، `tts-1`، `tts-1-hd`. الأصوات المتاحة: `alloy`، `ash`، `ballad`، `cedar`، `coral`، `echo`، `fable`، `juniper`، `marin`، `onyx`، `nova`، `sage`، `shimmer`، `verse`. - يتم دمج `extraBody` في JSON طلب `/audio/speech` بعد الحقول التي يولدها OpenClaw، لذا استخدمه لنقاط النهاية المتوافقة مع OpenAI التي تتطلب مفاتيح إضافية مثل `lang`. يتم تجاهل مفاتيح النماذج الأولية. + يتم دمج `extraBody` في JSON طلب `/audio/speech` بعد الحقول التي أنشأها OpenClaw، لذا استخدمه لنقاط النهاية المتوافقة مع OpenAI التي تتطلب مفاتيح إضافية مثل `lang`. يتم تجاهل مفاتيح النماذج الأولية. ```json5 { @@ -514,21 +530,21 @@ openclaw infer image generate \ ``` - عيّن `OPENAI_TTS_BASE_URL` لتجاوز عنوان URL الأساسي لـ TTS من دون التأثير في نقطة نهاية API الخاصة بالدردشة. + اضبط `OPENAI_TTS_BASE_URL` لتجاوز عنوان URL الأساسي لـ TTS دون التأثير في نقطة نهاية API المحادثة. - يسجل Plugin `openai` المضمن تحويل الكلام إلى نص بالدفعات عبر + يسجل Plugin `openai` المضمن تحويل الكلام إلى نص على دفعات من خلال سطح نسخ فهم الوسائط في OpenClaw. - النموذج الافتراضي: `gpt-4o-transcribe` - نقطة النهاية: OpenAI REST `/v1/audio/transcriptions` - مسار الإدخال: تحميل ملف صوتي متعدد الأجزاء - - مدعوم من OpenClaw حيثما يستخدم نسخ الصوت الوارد - `tools.media.audio`، بما في ذلك مقاطع القنوات الصوتية في Discord ومرفقات - الصوت في القنوات + - مدعوم بواسطة OpenClaw في كل موضع يستخدم فيه نسخ الصوت الوارد + `tools.media.audio`، بما في ذلك مقاطع قناة الصوت في Discord ومرفقات الصوت + في القنوات لفرض استخدام OpenAI لنسخ الصوت الوارد: @@ -550,33 +566,33 @@ openclaw infer image generate \ } ``` - تُمرر تلميحات اللغة والموجه إلى OpenAI عند توفيرها من خلال - إعداد وسائط الصوت المشترك أو طلب النسخ لكل استدعاء. + تتم إعادة توجيه تلميحات اللغة والمطالبة إلى OpenAI عند توفيرها من خلال + تهيئة وسائط الصوت المشتركة أو طلب النسخ لكل استدعاء. - يسجل Plugin `openai` المضمن النسخ في الوقت الفعلي لـ Plugin Voice Call. + يسجل Plugin `openai` المضمن النسخ في الوقت الفعلي لـ Plugin المكالمات الصوتية. - | الإعداد | مسار الإعداد | الافتراضي | + | الإعداد | مسار التهيئة | الافتراضي | |---------|------------|---------| | النموذج | `plugins.entries.voice-call.config.streaming.providers.openai.model` | `gpt-4o-transcribe` | - | اللغة | `...openai.language` | (غير معيّن) | - | الموجه | `...openai.prompt` | (غير معيّن) | + | اللغة | `...openai.language` | (غير مضبوط) | + | المطالبة | `...openai.prompt` | (غير مضبوط) | | مدة الصمت | `...openai.silenceDurationMs` | `800` | | عتبة VAD | `...openai.vadThreshold` | `0.5` | | مفتاح API | `...openai.apiKey` | يعود إلى `OPENAI_API_KEY` | - يستخدم اتصال WebSocket بـ `wss://api.openai.com/v1/realtime` مع صوت G.711 u-law (`g711_ulaw` / `audio/pcmu`). موفر البث هذا مخصص لمسار النسخ في الوقت الفعلي في Voice Call؛ يسجل Discord voice حاليًا مقاطع قصيرة ويستخدم بدلًا من ذلك مسار نسخ الدفعات `tools.media.audio`. + يستخدم اتصال WebSocket مع `wss://api.openai.com/v1/realtime` بصوت G.711 u-law (`g711_ulaw` / `audio/pcmu`). موفر البث هذا مخصص لمسار النسخ في الوقت الفعلي لـ Voice Call؛ يسجل صوت Discord حاليًا مقاطع قصيرة ويستخدم بدلًا من ذلك مسار النسخ الدفعي `tools.media.audio`. - يسجل Plugin `openai` المضمن الصوت في الوقت الفعلي لـ Plugin Voice Call. + يسجل Plugin `openai` المضمن الصوت في الوقت الفعلي لـ Plugin المكالمات الصوتية. - | الإعداد | مسار الإعداد | الافتراضي | + | الإعداد | مسار التهيئة | الافتراضي | |---------|------------|---------| | النموذج | `plugins.entries.voice-call.config.realtime.providers.openai.model` | `gpt-realtime-1.5` | | الصوت | `...openai.voice` | `alloy` | @@ -586,17 +602,17 @@ openclaw infer image generate \ | مفتاح API | `...openai.apiKey` | يعود إلى `OPENAI_API_KEY` | - يدعم Azure OpenAI عبر مفتاحي الإعداد `azureEndpoint` و`azureDeployment` لجسور الوقت الفعلي في الخلفية. يدعم استدعاء الأدوات ثنائي الاتجاه. يستخدم تنسيق صوت G.711 u-law. + يدعم Azure OpenAI عبر مفتاحي التهيئة `azureEndpoint` و`azureDeployment` لجسور الخلفية في الوقت الفعلي. يدعم استدعاء الأدوات ثنائي الاتجاه. يستخدم تنسيق صوت G.711 u-law. - يستخدم Control UI Talk جلسات OpenAI في الوقت الفعلي عبر المتصفح مع سر عميل مؤقت - يصدره Gateway وتبادل WebRTC SDP مباشر من المتصفح مقابل + يستخدم حديث واجهة التحكم جلسات OpenAI في الوقت الفعلي داخل المتصفح مع سر عميل مؤقت + صادر عن Gateway وتبادل WebRTC SDP مباشر من المتصفح مع OpenAI Realtime API. يتوفر التحقق الحي للمشرفين باستخدام - `OPENAI_API_KEY=... GEMINI_API_KEY=... node --import tsx scripts/dev/realtime-talk-live-smoke.ts`؛ - ينشئ جزء OpenAI سر عميل في Node، وينشئ عرض SDP من المتصفح - مع وسائط ميكروفون مزيفة، وينشره إلى OpenAI، ويطبق إجابة SDP - من دون تسجيل الأسرار. + `OPENAI_API_KEY=... GEMINI_API_KEY=... node --import tsx scripts/dev/realtime-talk-live-smoke.ts`; + ينشئ طرف OpenAI سر عميل في Node، وينشئ عرض SDP في المتصفح + باستخدام وسائط ميكروفون وهمية، وينشره إلى OpenAI، ويطبق إجابة SDP + دون تسجيل الأسرار. @@ -605,27 +621,27 @@ openclaw infer image generate \ ## نقاط نهاية Azure OpenAI يمكن لموفر `openai` المضمن استهداف مورد Azure OpenAI لتوليد الصور -عن طريق تجاوز عنوان URL الأساسي. في مسار توليد الصور، يكتشف OpenClaw +عبر تجاوز عنوان URL الأساسي. في مسار توليد الصور، يكتشف OpenClaw أسماء مضيفي Azure على `models.providers.openai.baseUrl` ويتحول إلى شكل طلب Azure تلقائيًا. -يستخدم الصوت في الوقت الفعلي مسار إعداد منفصلًا +يستخدم الصوت في الوقت الفعلي مسار تهيئة منفصلًا (`plugins.entries.voice-call.config.realtime.providers.openai.azureEndpoint`) ولا يتأثر بـ `models.providers.openai.baseUrl`. راجع أكورديون **الصوت في الوقت الفعلي** -ضمن [الصوت والكلام](#voice-and-speech) لمعرفة إعدادات Azure الخاصة به. +ضمن [الصوت والكلام](#voice-and-speech) لإعدادات Azure الخاصة به. استخدم Azure OpenAI عندما: -- يكون لديك بالفعل اشتراك Azure OpenAI أو حصة استخدام أو اتفاقية مؤسسية -- تحتاج إلى إقامة بيانات إقليمية أو ضوابط امتثال يوفرها Azure -- تريد إبقاء الحركة داخل مستأجر Azure موجود +- لديك بالفعل اشتراك Azure OpenAI أو حصة أو اتفاقية مؤسسية +- تحتاج إلى إقامة بيانات إقليمية أو ضوابط امتثال توفرها Azure +- تريد إبقاء حركة البيانات داخل مستأجر Azure موجود -### الإعداد +### التهيئة لتوليد الصور عبر Azure من خلال موفر `openai` المضمن، وجّه -`models.providers.openai.baseUrl` إلى مورد Azure الخاص بك وعيّن `apiKey` إلى +`models.providers.openai.baseUrl` إلى مورد Azure الخاص بك واضبط `apiKey` على مفتاح Azure OpenAI (وليس مفتاح OpenAI Platform): ```json5 @@ -641,48 +657,46 @@ openclaw infer image generate \ } ``` -يتعرف OpenClaw على لواحق مضيف Azure التالية لمسار توليد الصور -في Azure: +يتعرف OpenClaw على لواحق مضيف Azure التالية لمسار توليد الصور في Azure: - `*.openai.azure.com` - `*.services.ai.azure.com` - `*.cognitiveservices.azure.com` -بالنسبة إلى طلبات توليد الصور على مضيف Azure معروف، يقوم OpenClaw بما يلي: +بالنسبة لطلبات توليد الصور على مضيف Azure معروف، يقوم OpenClaw بما يلي: - يرسل ترويسة `api-key` بدلًا من `Authorization: Bearer` -- يستخدم مسارات محصورة بالنشر (`/openai/deployments/{deployment}/...`) +- يستخدم مسارات محددة بنطاق النشر (`/openai/deployments/{deployment}/...`) - يضيف `?api-version=...` إلى كل طلب - يستخدم مهلة طلب افتراضية قدرها 600 ثانية لاستدعاءات توليد الصور في Azure. - تظل قيم `timeoutMs` لكل استدعاء تتجاوز هذا الافتراضي. + لا تزال قيم `timeoutMs` لكل استدعاء تتجاوز هذا الافتراضي. -تحتفظ عناوين URL الأساسية الأخرى (OpenAI العام، والوكلاء المتوافقون مع OpenAI) بشكل -طلب الصور القياسي في OpenAI. +تحافظ عناوين URL الأساسية الأخرى (OpenAI العام، والوكلاء المتوافقون مع OpenAI) على +شكل طلب الصور القياسي في OpenAI. يتطلب توجيه Azure لمسار توليد الصور في موفر `openai` -OpenClaw 2026.4.22 أو أحدث. تتعامل الإصدارات الأقدم مع أي -`openai.baseUrl` مخصص مثل نقطة نهاية OpenAI العامة وستفشل أمام عمليات نشر -الصور في Azure. +OpenClaw 2026.4.22 أو أحدث. تتعامل الإصدارات السابقة مع أي +`openai.baseUrl` مخصص مثل نقطة نهاية OpenAI العامة وستفشل مع عمليات نشر الصور +في Azure. ### إصدار API -عيّن `AZURE_OPENAI_API_VERSION` لتثبيت إصدار Azure preview أو GA محدد +اضبط `AZURE_OPENAI_API_VERSION` لتثبيت إصدار Azure معاينة أو GA محدد لمسار توليد الصور في Azure: ```bash export AZURE_OPENAI_API_VERSION="2024-12-01-preview" ``` -الافتراضي هو `2024-12-01-preview` عندما يكون المتغير غير معيّن. +القيمة الافتراضية هي `2024-12-01-preview` عندما لا يكون المتغير مضبوطًا. ### أسماء النماذج هي أسماء النشر -يربط Azure OpenAI النماذج بعمليات النشر. بالنسبة إلى طلبات توليد الصور في Azure +يربط Azure OpenAI النماذج بعمليات النشر. بالنسبة لطلبات توليد الصور في Azure الموجهة عبر موفر `openai` المضمن، يجب أن يكون حقل `model` في OpenClaw -هو **اسم نشر Azure** الذي أعددته في بوابة Azure، وليس -معرّف نموذج OpenAI العام. +هو **اسم نشر Azure** الذي هيأته في بوابة Azure، وليس معرف نموذج OpenAI العام. إذا أنشأت نشرًا باسم `gpt-image-2-prod` يخدم `gpt-image-2`: @@ -697,46 +711,44 @@ export AZURE_OPENAI_API_VERSION="2024-12-01-preview" يتوفر توليد الصور في Azure حاليًا في مجموعة فرعية فقط من المناطق (على سبيل المثال `eastus2`، و`swedencentral`، و`polandcentral`، و`westus3`، -و`uaenorth`). تحقق من قائمة المناطق الحالية من Microsoft قبل إنشاء -نشر، وأكد أن النموذج المحدد متاح في منطقتك. +و`uaenorth`). تحقق من قائمة المناطق الحالية لدى Microsoft قبل إنشاء +نشر، وتأكد من أن النموذج المحدد متاح في منطقتك. ### اختلافات المعلمات لا يقبل Azure OpenAI وOpenAI العام دائمًا معلمات الصور نفسها. -قد يرفض Azure خيارات يسمح بها OpenAI العام (على سبيل المثال قيم -`background` معينة في `gpt-image-2`) أو يكشفها فقط في إصدارات نماذج -محددة. تأتي هذه الاختلافات من Azure والنموذج الأساسي، وليس من -OpenClaw. إذا فشل طلب Azure مع خطأ تحقق، فتحقق من -مجموعة المعلمات التي يدعمها النشر وإصدار API المحددان لديك في -بوابة Azure. +قد يرفض Azure خيارات يسمح بها OpenAI العام (على سبيل المثال بعض قيم +`background` على `gpt-image-2`) أو يتيحها فقط في إصدارات نماذج محددة. +تأتي هذه الاختلافات من Azure والنموذج الأساسي، وليس من OpenClaw. +إذا فشل طلب Azure بخطأ تحقق، فتحقق من مجموعة المعلمات التي يدعمها +النشر وإصدار API المحددان لديك في بوابة Azure. -يستخدم Azure OpenAI النقل الأصلي وسلوك التوافق لكنه لا يتلقى -ترويسات الإسناد المخفية الخاصة بـ OpenClaw — راجع أكورديون **المسارات الأصلية مقابل المسارات المتوافقة مع OpenAI** -ضمن [الإعداد المتقدم](#advanced-configuration). +يستخدم Azure OpenAI النقل الأصلي وسلوك التوافق ولكنه لا يتلقى +ترويسات النسبة المخفية الخاصة بـ OpenClaw — راجع أكورديون **المسارات الأصلية مقابل المسارات المتوافقة مع OpenAI** +ضمن [التهيئة المتقدمة](#advanced-configuration). -بالنسبة إلى حركة الدردشة أو Responses على Azure (إلى جانب توليد الصور)، استخدم -تدفق الإعداد الأولي أو إعداد موفر Azure مخصصًا — لا يكفي `openai.baseUrl` وحده -لاستخدام شكل API/المصادقة الخاص بـ Azure. يوجد موفر منفصل -`azure-openai-responses/*`؛ راجع -أكورديون الضغط من جهة الخادم أدناه. +بالنسبة لحركة المحادثة أو Responses على Azure (بخلاف توليد الصور)، استخدم +تدفق الإعداد أو تهيئة موفر Azure مخصصة — لا يكفي `openai.baseUrl` وحده +لالتقاط شكل API/المصادقة في Azure. يوجد موفر منفصل +`azure-openai-responses/*`؛ راجع أكورديون Compaction من جانب الخادم أدناه. -## الإعداد المتقدم +## التهيئة المتقدمة - يستخدم OpenClaw أسلوب WebSocket أولًا مع الرجوع الاحتياطي إلى SSE (`"auto"`) لكل من `openai/*` و`openai-codex/*`. + يستخدم OpenClaw نهج WebSocket أولًا مع رجوع احتياطي إلى SSE (`"auto"`) لكل من `openai/*` و`openai-codex/*`. في وضع `"auto"`، يقوم OpenClaw بما يلي: - يعيد محاولة فشل WebSocket مبكر واحد قبل الرجوع إلى SSE - - بعد الفشل، يضع علامة على WebSocket باعتباره متدهورًا لمدة تقارب 60 ثانية ويستخدم SSE أثناء فترة التهدئة - - يرفق ترويسات ثابتة لهوية الجلسة والدور لإعادة المحاولات وإعادة الاتصال + - بعد الفشل، يوسم WebSocket بأنه متدهور لمدة تقارب 60 ثانية ويستخدم SSE أثناء فترة التهدئة + - يرفق ترويسات مستقرة لهوية الجلسة والدوران لعمليات إعادة المحاولة وإعادة الاتصال - يطبع عدادات الاستخدام (`input_tokens` / `prompt_tokens`) عبر متغيرات النقل | القيمة | السلوك | |-------|----------| - | `"auto"` (افتراضي) | WebSocket أولًا، مع الرجوع الاحتياطي إلى SSE | + | `"auto"` (افتراضي) | WebSocket أولًا، مع رجوع احتياطي إلى SSE | | `"sse"` | فرض SSE فقط | | `"websocket"` | فرض WebSocket فقط | @@ -757,17 +769,17 @@ OpenClaw. إذا فشل طلب Azure مع خطأ تحقق، فتحقق من } ``` - مستندات OpenAI ذات الصلة: - - [Realtime API باستخدام WebSocket](https://platform.openai.com/docs/guides/realtime-websocket) - - [استجابات API المتدفقة (SSE)](https://platform.openai.com/docs/guides/streaming-responses) + وثائق OpenAI ذات الصلة: + - [Realtime API مع WebSocket](https://platform.openai.com/docs/guides/realtime-websocket) + - [استجابات Streaming API (SSE)](https://platform.openai.com/docs/guides/streaming-responses) - يفعّل OpenClaw إحماء WebSocket افتراضيًا لـ `openai/*` و`openai-codex/*` لتقليل زمن الاستجابة في الدور الأول. + يفعّل OpenClaw إحماء WebSocket افتراضيًا لـ `openai/*` و`openai-codex/*` لتقليل زمن استجابة الدوران الأول. ```json5 - // تعطيل الإحماء + // Disable warm-up { agents: { defaults: { @@ -784,12 +796,12 @@ OpenClaw. إذا فشل طلب Azure مع خطأ تحقق، فتحقق من - يكشف OpenClaw عن مفتاح تبديل مشترك للوضع السريع لـ `openai/*` و`openai-codex/*`: + يعرض OpenClaw مفتاح تبديل مشترك للوضع السريع لـ `openai/*` و`openai-codex/*`: - - **الدردشة/واجهة المستخدم:** `/fast status|on|off` - - **الإعداد:** `agents.defaults.models["/"].params.fastMode` + - **المحادثة/واجهة المستخدم:** `/fast status|on|off` + - **التهيئة:** `agents.defaults.models["/"].params.fastMode` - عند تفعيله، يربط OpenClaw الوضع السريع بمعالجة الأولوية في OpenAI (`service_tier = "priority"`). يتم الحفاظ على قيم `service_tier` الموجودة، ولا يعيد الوضع السريع كتابة `reasoning` أو `text.verbosity`. + عند التفعيل، يربط OpenClaw الوضع السريع بمعالجة الأولوية في OpenAI (`service_tier = "priority"`). يتم الحفاظ على قيم `service_tier` الموجودة، ولا يعيد الوضع السريع كتابة `reasoning` أو `text.verbosity`. ```json5 { @@ -804,13 +816,13 @@ OpenClaw. إذا فشل طلب Azure مع خطأ تحقق، فتحقق من ``` - تتغلب تجاوزات الجلسة على الإعداد. يؤدي مسح تجاوز الجلسة في واجهة جلسات المستخدم إلى إعادة الجلسة إلى الافتراضي المكوّن. + تتغلب تجاوزات الجلسة على التهيئة. يؤدي مسح تجاوز الجلسة في واجهة جلسات المستخدم إلى إعادة الجلسة إلى الافتراضي المهيأ. - تكشف API الخاصة بـ OpenAI عن معالجة الأولوية عبر `service_tier`. عيّنها لكل نموذج في OpenClaw: + تعرض API الخاصة بـ OpenAI معالجة الأولوية عبر `service_tier`. اضبطها لكل نموذج في OpenClaw: ```json5 { @@ -827,19 +839,19 @@ OpenClaw. إذا فشل طلب Azure مع خطأ تحقق، فتحقق من القيم المدعومة: `auto`، `default`، `flex`، `priority`. - لا يُمرَّر `serviceTier` إلا إلى نقاط نهاية OpenAI الأصلية (`api.openai.com`) ونقاط نهاية Codex الأصلية (`chatgpt.com/backend-api`). إذا وجّهت أيًّا من المزوّدين عبر وكيل، يترك OpenClaw `service_tier` كما هو دون تغيير. + لا يُمرَّر `serviceTier` إلا إلى نقاط نهاية OpenAI الأصلية (`api.openai.com`) ونقاط نهاية Codex الأصلية (`chatgpt.com/backend-api`). إذا وجّهت أيًّا من المزوّدين عبر وسيط، يترك OpenClaw قيمة `service_tier` كما هي. - - بالنسبة إلى نماذج OpenAI Responses المباشرة (`openai/*` على `api.openai.com`)، يفعّل غلاف تدفق Pi-harness الخاص بـ Plugin OpenAI ميزة Compaction من جهة الخادم تلقائيًا: + + لنماذج OpenAI Responses المباشرة (`openai/*` على `api.openai.com`)، يفعّل غلاف تدفق Pi-harness الخاص بـ Plugin OpenAI ميزة Compaction من جانب الخادم تلقائيًا: - يفرض `store: true` (ما لم يضبط توافق النموذج `supportsStore: false`) - يحقن `context_management: [{ type: "compaction", compact_threshold: ... }]` - قيمة `compact_threshold` الافتراضية: 70% من `contextWindow` (أو `80000` عند عدم توفرها) - ينطبق هذا على مسار Pi harness المضمّن وعلى خطافات مزوّد OpenAI المستخدمة في عمليات التشغيل المضمّنة. يدير harness خادم تطبيق Codex الأصلي سياقه الخاص عبر Codex ويُضبط بشكل منفصل باستخدام `agents.defaults.agentRuntime.id`. + ينطبق هذا على مسار Pi harness المضمّن وعلى خطافات مزوّد OpenAI المستخدمة بواسطة عمليات التشغيل المضمنة. يدير مسار Codex app-server harness الأصلي سياقه الخاص عبر Codex ويتم تكوينه بشكل منفصل باستخدام `agents.defaults.agentRuntime.id`. @@ -859,7 +871,7 @@ OpenClaw. إذا فشل طلب Azure مع خطأ تحقق، فتحقق من } ``` - + ```json5 { agents: { @@ -900,8 +912,8 @@ OpenClaw. إذا فشل طلب Azure مع خطأ تحقق، فتحقق من - - بالنسبة إلى عمليات تشغيل عائلة GPT-5 على `openai/*`، يمكن لـ OpenClaw استخدام عقد تنفيذ مضمّن أكثر صرامة: + + لعمليات تشغيل عائلة GPT-5 على `openai/*`، يمكن لـ OpenClaw استخدام عقد تنفيذ مضمّن أكثر صرامة: ```json5 { @@ -914,35 +926,35 @@ OpenClaw. إذا فشل طلب Azure مع خطأ تحقق، فتحقق من ``` مع `strict-agentic`، يقوم OpenClaw بما يلي: - - لم يعد يتعامل مع دور يقتصر على الخطة فقط على أنه تقدّم ناجح عندما يكون إجراء أداة متاحًا - - يعيد محاولة الدور بتوجيه للتصرّف الآن + - لم يعد يتعامل مع دورة تقتصر على الخطة فقط كتقدم ناجح عندما يكون إجراء أداة متاحًا + - يعيد محاولة الدورة بتوجيه للتصرف الآن - يفعّل `update_plan` تلقائيًا للأعمال الكبيرة - يعرض حالة حظر صريحة إذا استمر النموذج في التخطيط دون تنفيذ - يقتصر ذلك على عمليات تشغيل عائلة GPT-5 في OpenAI وCodex فقط. يحتفظ المزوّدون الآخرون وعائلات النماذج الأقدم بالسلوك الافتراضي. + يقتصر النطاق على عمليات تشغيل عائلة GPT-5 الخاصة بـ OpenAI وCodex فقط. يحتفظ المزوّدون الآخرون وعائلات النماذج الأقدم بالسلوك الافتراضي. - يتعامل OpenClaw مع نقاط نهاية OpenAI المباشرة وCodex وAzure OpenAI بشكل مختلف عن وكلاء `/v1` العامة المتوافقة مع OpenAI: + يتعامل OpenClaw مع نقاط نهاية OpenAI المباشرة وCodex وAzure OpenAI بشكل مختلف عن وسطاء `/v1` العامة المتوافقة مع OpenAI: **المسارات الأصلية** (`openai/*`، Azure OpenAI): - - تحتفظ بـ `reasoning: { effort: "none" }` فقط للنماذج التي تدعم جهد OpenAI `none` - - تحذف التعليل المعطّل للنماذج أو الوكلاء الذين يرفضون `reasoning.effort: "none"` - - تضبط مخططات الأدوات افتراضيًا على الوضع الصارم - - ترفق ترويسات إسناد مخفية على المضيفين الأصليين المتحقق منهم فقط - - تحتفظ بتشكيل طلبات OpenAI فقط (`service_tier`، `store`، توافق التعليل، تلميحات ذاكرة التخزين المؤقت للمطالبات) + - يحتفظ بـ `reasoning: { effort: "none" }` فقط للنماذج التي تدعم جهد OpenAI `none` + - يحذف الاستدلال المعطّل للنماذج أو الوسطاء الذين يرفضون `reasoning.effort: "none"` + - يضبط مخططات الأدوات افتراضيًا على الوضع الصارم + - يرفق ترويسات إسناد مخفية على المضيفين الأصليين المتحقق منهم فقط + - يحتفظ بتشكيل الطلبات الخاص بـ OpenAI فقط (`service_tier`، `store`، توافق الاستدلال، تلميحات ذاكرة التخزين المؤقت للموجه) - **مسارات الوكيل/المتوافقة:** + **مسارات الوسيط/المتوافقة:** - تستخدم سلوك توافق أكثر مرونة - - تزيل Completions `store` من حمولات `openai-completions` غير الأصلية - - تقبل تمرير JSON المتقدم عبر `params.extra_body`/`params.extraBody` لوكلاء Completions المتوافقين مع OpenAI - - تقبل `params.chat_template_kwargs` لوكلاء Completions المتوافقين مع OpenAI مثل vLLM - - لا تفرض مخططات أدوات صارمة أو ترويسات مخصّصة للمسارات الأصلية فقط + - تزيل `store` الخاصة بـ Completions من حمولات `openai-completions` غير الأصلية + - تقبل تمرير JSON المتقدم `params.extra_body`/`params.extraBody` لوسطاء Completions المتوافقين مع OpenAI + - تقبل `params.chat_template_kwargs` لوسطاء Completions المتوافقين مع OpenAI مثل vLLM + - لا تفرض مخططات الأدوات الصارمة أو الترويسات الأصلية فقط - يستخدم Azure OpenAI النقل الأصلي وسلوك التوافق، لكنه لا يتلقى ترويسات الإسناد المخفية. + يستخدم Azure OpenAI نقلًا أصليًا وسلوك توافق، لكنه لا يتلقى ترويسات الإسناد المخفية. @@ -953,11 +965,11 @@ OpenClaw. إذا فشل طلب Azure مع خطأ تحقق، فتحقق من اختيار المزوّدين ومراجع النماذج وسلوك تجاوز الفشل. - - معاملات أداة الصور المشتركة واختيار المزوّد. + + معلمات أداة الصور المشتركة واختيار المزوّد. - - معاملات أداة الفيديو المشتركة واختيار المزوّد. + + معلمات أداة الفيديو المشتركة واختيار المزوّد. تفاصيل المصادقة وقواعد إعادة استخدام بيانات الاعتماد. diff --git a/docs/ar/tools/plugin.md b/docs/ar/tools/plugin.md index bbecb3f52..dee505fb9 100644 --- a/docs/ar/tools/plugin.md +++ b/docs/ar/tools/plugin.md @@ -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). - + ```bash openclaw plugins list ``` - + ```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: - + ```bash openclaw gateway restart ``` @@ -65,17 +66,17 @@ x-i18n: - - في Gateway قيد التشغيل، يؤدي الأمران المخصصان للمالك فقط `/plugins enable` و`/plugins disable` - إلى تشغيل معيد تحميل إعدادات Gateway. يعيد Gateway تحميل أسطح وقت تشغيل Plugin - داخل العملية، وتعيد دورات الوكيل الجديدة بناء قائمة أدواتها من السجل - المحدّث. يغيّر `/plugins install` شيفرة مصدر Plugin، لذلك يطلب - Gateway إعادة تشغيل بدلًا من التظاهر بأن العملية الحالية يمكنها - إعادة تحميل الوحدات المستوردة مسبقًا بأمان. + + في Gateway قيد التشغيل، تؤدي أوامر المالك فقط `/plugins enable` و`/plugins disable` + إلى تشغيل معيد تحميل إعدادات Gateway. يعيد Gateway تحميل أسطح تشغيل Plugin + داخل العملية، وتعيد أدوار الوكيل الجديدة بناء قائمة أدواتها من السجل + المحدّث. يغيّر `/plugins install` الشيفرة المصدرية لـ Plugin، لذلك يطلب + Gateway إعادة التشغيل بدلًا من الادعاء بأن العملية الحالية يمكنها إعادة + تحميل الوحدات التي سبق استيرادها بأمان. - + ```bash openclaw plugins inspect --runtime --json @@ -83,14 +84,14 @@ x-i18n: openclaw --help ``` - استخدم `--runtime` عندما تحتاج إلى إثبات الأدوات المسجلة، أو الخدمات، أو طرق Gateway، - أو الخطافات، أو أوامر CLI المملوكة لـ Plugin. أما `inspect` العادي فهو فحص بارد - للبيان/السجل ويتجنب عمدًا استيراد وقت تشغيل Plugin. + استخدم `--runtime` عندما تحتاج إلى إثبات الأدوات أو الخدمات أو أساليب Gateway + أو الخطافات أو أوامر CLI المملوكة لـ Plugin والمسجلة. أما `inspect` العادي + فهو فحص بارد للبيان/السجل، ويتجنب عمدًا استيراد وقت تشغيل Plugin. -إذا كنت تفضّل التحكم الأصلي عبر المحادثة، فعّل `commands.plugins: true` واستخدم: +إذا كنت تفضّل التحكم المدمج في المحادثة، فعّل `commands.plugins: true` واستخدم: ```text /plugin install clawhub: @@ -98,114 +99,116 @@ x-i18n: /plugin enable ``` -يستخدم مسار التثبيت محلّل المصدر نفسه الذي تستخدمه CLI: مسار/أرشيف محلي، أو -`clawhub:` صريح، أو `npm:` صريح، أو `git:` صريح، أو مواصفة حزمة -مجردة عبر npm. +يستخدم مسار التثبيت محلل المصادر نفسه الذي يستخدمه CLI: مسار/أرشيف محلي، +أو `clawhub:` صريح، أو `npm:` صريح، أو `npm-pack:` صريح، +أو `git:` صريح، أو مواصفة حزمة مجردة عبر 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/` بحيث تُستخدم التعديلات والتبعيات المحلية للحزمة مباشرة. -تثبيتات جذر npm العادية مخصصة لـ OpenClaw المحزّم، وليس لتطوير مستودع المصدر. +عمليات سحب المصدر هي مساحات عمل pnpm. إذا نسخت OpenClaw لتعديل Plugins المضمّنة، +شغّل `pnpm install`؛ بعدها يحمّل OpenClaw Plugins المضمّنة من `extensions/` +لكي تُستخدم التعديلات والتبعيات المحلية للحزمة مباشرة. تثبيتات جذر 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) - + `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` - + - `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، وحدود الاستدعاء، واستكشاف المشكلات وإصلاحها. - + `elevenlabs`, `microsoft` - - - `browser` - Plugin المتصفح المضمّن لأداة المتصفح وCLI `openclaw browser` وطريقة Gateway `browser.request` ووقت تشغيل المتصفح وخدمة التحكم الافتراضية في المتصفح (ممكّن افتراضيًا؛ عطّله قبل استبداله) - - `copilot-proxy` - جسر VS Code Copilot Proxy (معطّل افتراضيًا) + + - `browser` - Plugin المتصفح المضمّن لأداة المتصفح، وCLI `openclaw browser`، وطريقة Gateway `browser.request`، ووقت تشغيل المتصفح، وخدمة التحكم الافتراضية في المتصفح (ممكّن افتراضياً؛ عطّله قبل استبداله) + - `copilot-proxy` - جسر VS Code Copilot Proxy (معطّل افتراضياً) -تبحث عن 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.\` | مفاتيح تبديل + تكوين لكل Plugin | +| `slots` | محددات الخانات الحصرية (مثل `memory` و`contextEngine`) | +| `entries.\` | مفاتيح تفعيل + تكوين لكل 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 قيد التشغيل عندما يبلّغ التحميل عن فشل. - - - **معطّل**: يوجد Plugin لكن قواعد التفعيل أوقفته. يُحفظ التكوين. - - **مفقود**: يشير التكوين إلى معرّف Plugin لم يعثر عليه الاكتشاف. - - **غير صالح**: يوجد Plugin لكن تكوينه لا يطابق المخطط المعلن. يتجاوز بدء تشغيل Gateway ذلك Plugin فقط؛ يمكن لـ `openclaw doctor --fix` عزل الإدخال غير الصالح عبر تعطيله وإزالة حمولة تكوينه. + + - **معطّل**: يوجد Plugin لكن قواعد التفعيل أوقفته. يُحافَظ على التكوين. + - **مفقود**: يشير التكوين إلى معرّف Plugin لم يجده الاكتشاف. + - **غير صالح**: يوجد Plugin لكن تكوينه لا يطابق المخطط المعلن. يتخطى بدء تشغيل Gateway هذا الـ Plugin فقط؛ يستطيع `openclaw doctor --fix` عزل الإدخال غير الصالح عبر تعطيله وإزالة حمولة تكوينه. -## الاكتشاف والأولوية +## الاكتشاف والأسبقية -يفحص OpenClaw بحثًا عن Plugins بهذا الترتيب (أول تطابق يفوز): +يفحص OpenClaw بحثاً عن Plugins بهذا الترتيب (أول تطابق هو الفائز): - + `plugins.load.paths` - مسارات ملفات أو أدلة صريحة. يتم تجاهل المسارات التي تشير - عائدةً إلى أدلة Plugins المضمّنة والمعبأة الخاصة بـ OpenClaw؛ + مرة أخرى إلى أدلة Plugins المضمّنة والمعبأة الخاصة بـ OpenClaw؛ شغّل `openclaw doctor --fix` لإزالة تلك الأسماء المستعارة القديمة. - - `\/.openclaw//*.ts` و`\/.openclaw//*/index.ts`. + + `\/.openclaw//*.ts` و `\/.openclaw//*/index.ts`. - - `~/.openclaw//*.ts` و`~/.openclaw//*/index.ts`. + + `~/.openclaw//*.ts` و `~/.openclaw//*/index.ts`. - - تُشحن مع OpenClaw. كثير منها ممكّن افتراضيًا (موفرو النماذج والكلام). - ويتطلب غيرها تمكينًا صريحًا. + + تُشحن مع OpenClaw. كثير منها ممكّن افتراضياً (مزوّدو النماذج، الكلام). + ويتطلب غيرها تفعيلاً صريحاً. عادةً ما تحل التثبيتات المعبأة وصور 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.\.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.\.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 --runtime --json` لتأكيد تسجيلات الخطافات و - التشخيصات. تحتاج خطافات المحادثة غير المضمّنة مثل `llm_input` و - `llm_output` و`before_agent_finalize` و`agent_end` إلى +- استخدم `openclaw plugins inspect --runtime --json` لتأكيد تسجيلات الخطاطيف و + التشخيصات. تحتاج خطاطيف المحادثة غير المضمّنة مثل `llm_input`، + و`llm_output`، و`before_agent_finalize`، و`agent_end` إلى `plugins.entries..hooks.allowConversationAccess=true`. - لتبديل النماذج، فضّل `before_model_resolve`. يعمل قبل حل النموذج - لدورات الوكيل؛ لا يعمل `llm_output` إلا بعد أن تنتج محاولة نموذج + لجولات الوكيل؛ يعمل `llm_output` فقط بعد أن تنتج محاولة نموذج مخرجات المساعد. - لإثبات نموذج الجلسة الفعّال، استخدم `openclaw sessions` أو أسطح - جلسة/حالة Gateway، وعند تصحيح حمولات الموفرين، ابدأ - Gateway باستخدام `--raw-stream --raw-stream-path `. + جلسة/حالة Gateway، وعند تصحيح حمولات المزوّد، ابدأ + Gateway مع `--raw-stream --raw-stream-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 --runtime --json ``` -ثم حدّث ذلك Plugin أو أعد تثبيته أو عطّله. ينبغي لمؤلفي Plugins نقل -تحميل التبعيات المكلف إلى ما وراء مسار تنفيذ الأداة بدلًا من القيام به +ثم حدّث ذلك الـ Plugin أو أعد تثبيته أو عطّله. ينبغي لمؤلفي Plugin نقل +تحميل التبعيات المكلف إلى خلف مسار تنفيذ الأداة بدلاً من القيام به داخل مصنع الأداة. -### ملكية قناة أو أداة مكررة +### تكرار ملكية القناة أو الأداة الأعراض: @@ -459,33 +460,32 @@ openclaw plugins inspect --runtime --json - `channel setup already registered: ()` - `plugin tool name conflict (): ` -تعني هذه أن أكثر من Plugin ممكّن يحاول امتلاك القناة نفسها -أو تدفق الإعداد أو اسم الأداة. السبب الأكثر شيوعًا هو تثبيت Plugin قناة خارجي -بجانب Plugin مضمّن يوفر الآن معرّف القناة نفسه. +تعني هذه أن أكثر من Plugin ممكّن يحاول امتلاك نفس القناة، +أو تدفق الإعداد، أو اسم الأداة. السبب الأكثر شيوعاً هو تثبيت Plugin قناة خارجي +بجانب Plugin مضمّن يوفر الآن نفس معرّف القناة. خطوات التصحيح: - شغّل `openclaw plugins list --enabled --verbose` لرؤية كل Plugin ممكّن - ومصدره. + ومنشئه. - شغّل `openclaw plugins inspect --runtime --json` لكل Plugin مشتبه به و - قارن `channels` و`channelConfigs` و`tools` والتشخيصات. -- شغّل `openclaw plugins registry --refresh` بعد تثبيت حزم Plugins أو إزالتها - حتى تعكس البيانات الوصفية المحفوظة التثبيت الحالي. + قارن `channels`، و`channelConfigs`، و`tools`، والتشخيصات. +- شغّل `openclaw plugins registry --refresh` بعد تثبيت حزم Plugin أو إزالتها + حتى تعكس البيانات الوصفية الدائمة التثبيت الحالي. - أعد تشغيل Gateway بعد تغييرات التثبيت أو السجل أو التكوين. خيارات الإصلاح: -- إذا كان أحد Plugins يستبدل آخر عمدًا لمعرّف القناة نفسه، فينبغي أن يعلن - Plugin المفضّل `channelConfigs..preferOver` مع - معرّف Plugin ذي الأولوية الأدنى. راجع [/plugins/manifest#replacing-another-channel-plugin](/ar/plugins/manifest#replacing-another-channel-plugin). -- إذا كان التكرار عرضيًا، فعطّل أحد الجانبين باستخدام - `plugins.entries..enabled: false` أو أزل تثبيت Plugin - القديم. -- إذا مكّنت كلا Plugins صراحةً، يحتفظ OpenClaw بذلك الطلب و - يبلغ عن التعارض. اختر مالكًا واحدًا للقناة أو أعد تسمية الأدوات المملوكة لـ Plugin - حتى يكون سطح وقت التشغيل غير ملتبس. +- إذا كان Plugin واحد يستبدل آخر عمداً لنفس معرّف القناة، فينبغي أن يعلن + الـ Plugin المفضّل `channelConfigs..preferOver` مع + معرّف Plugin الأقل أولوية. راجع [/plugins/manifest#replacing-another-channel-plugin](/ar/plugins/manifest#replacing-another-channel-plugin). +- إذا كان التكرار عرضياً، فعطّل أحد الجانبين باستخدام + `plugins.entries..enabled: false` أو أزل تثبيت Plugin القديم. +- إذا فعّلت كلا الـ Plugins صراحة، يحافظ OpenClaw على ذلك الطلب و + يبلّغ عن التعارض. اختر مالكاً واحداً للقناة أو أعد تسمية الأدوات المملوكة + لـ Plugin حتى يكون سطح وقت التشغيل غير ملتبس. -## فتحات Plugin (فئات حصرية) +## خانات Plugin (فئات حصرية) بعض الفئات حصرية (واحدة نشطة فقط في كل مرة): @@ -500,9 +500,9 @@ openclaw plugins inspect --runtime --json } ``` -| الفتحة | ما تتحكم به | الافتراضي | +| الخانة | ما تتحكم به | الافتراضي | | --------------- | --------------------- | ------------------- | -| `memory` | Plugin الذاكرة النشط | `memory-core` | +| `memory` | Active Memory Plugin | `memory-core` | | `contextEngine` | محرك السياق النشط | `legacy` (مدمج) | ## مرجع CLI @@ -553,82 +553,79 @@ openclaw plugins enable openclaw plugins disable ``` -تُشحن Plugins المضمّنة مع OpenClaw. يكون كثير منها مفعّلاً افتراضياً (على سبيل المثال -مزودو النماذج المضمّنون، ومزودو الكلام المضمّنون، وPlugin المتصفح -المضمّن). ما زالت Plugins المضمّنة الأخرى تحتاج إلى `openclaw plugins enable `. +تُشحن Plugins المضمّنة مع OpenClaw. كثير منها مفعّل افتراضيًا (على سبيل المثال +مزوّدو النماذج المضمّنون، ومزوّدو الكلام المضمّنون، وPlugin المتصفح المضمّن). +لا تزال Plugins مضمنة أخرى تحتاج إلى `openclaw plugins enable `. -يستبدل `--force` أي Plugin أو حزمة خطافات مثبّتة موجودة في مكانها. استخدم -`openclaw plugins update ` للترقيات الروتينية لـ Plugins npm -المتتبَّعة. هذا غير مدعوم مع `--link`، الذي يعيد استخدام مسار المصدر بدلاً +يستبدل `--force` أي Plugin أو حزمة hooks مثبّتة موجودة في مكانها. استخدم +`openclaw plugins update ` للترقيات الروتينية لـ 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 ` على التثبيتات المتتبَّعة. يؤدي -تمرير مواصفة حزمة 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 ` على التثبيتات المتتبَّعة. تمرير +مواصفة حزمة 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 ` لتطلب من ClawHub -فحصه مرة أخرى. يؤثر `--dangerously-force-unsafe-install` فقط في التثبيتات -على جهازك؛ ولا يطلب من ClawHub إعادة فحص Plugin أو جعل إصدار محظور عاماً. +إذا كان Plugin نشرته على ClawHub مخفيًا أو محظورًا بسبب فحص، فافتح لوحة تحكم +ClawHub أو شغّل `clawhub package rescan ` لطلب إعادة فحصه من 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 ` أيضاً قدرات الحزمة المكتشفة إضافة إلى -إدخالات خادم MCP وLSP المدعومة أو غير المدعومة لـ Plugins المدعومة بالحزم. +يعرض `openclaw plugins inspect ` أيضًا قدرات الحزمة المكتشفة بالإضافة إلى +إدخالات خواديم 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) - قوائم الأطراف الخارجية