diff --git a/docs/ar/ci.md b/docs/ar/ci.md index 8a784083f..c6ba99e9d 100644 --- a/docs/ar/ci.md +++ b/docs/ar/ci.md @@ -1,81 +1,82 @@ --- read_when: - تحتاج إلى فهم سبب تشغيل مهمة CI أو عدم تشغيلها - - أنت تقوم بتصحيح أخطاء فحوصات GitHub Actions الفاشلة -summary: مخطط مهام CI، وبوابات النطاق، وما يعادلها من الأوامر المحلية + - أنت تُصحّح أخطاء فحوصات GitHub Actions الفاشلة +summary: رسم مهام CI البياني، وبوابات النطاق، وما يعادلها من الأوامر المحلية title: مسار CI x-i18n: - generated_at: "2026-04-22T04:21:43Z" + generated_at: "2026-04-22T07:17:53Z" model: gpt-5.4 provider: openai - source_hash: ae08bad6cbd0f2eced6c88a792a11bc1c2b1a2bfb003a56f70ff328a2739d3fc + source_hash: fc7ec59123aee65634736320dbf1cf5cdfb08786a78cca82ce9596fedc68b3cc source_path: ci.md workflow: 15 --- # مسار CI -يعمل CI عند كل push إلى `main` وعند كل pull request. ويستخدم تحديد نطاق ذكيًا لتخطي المهام المكلفة عندما تتغير مناطق غير مرتبطة فقط. +يعمل CI عند كل دفع إلى `main` وعند كل طلب سحب. ويستخدم تحديد نطاق ذكيًا لتخطي المهام المكلفة عندما تكون التغييرات محصورة في أجزاء غير ذات صلة. ## نظرة عامة على المهام -| المهمة | الغرض | وقت التشغيل | -| -------------------------------- | ---------------------------------------------------------------------------------------------- | ----------------------------------- | -| `preflight` | اكتشاف التغييرات الخاصة بالوثائق فقط، والنطاقات المتغيرة، وPlugins المتغيرة، وبناء بيان CI | دائمًا في push وPR غير المسودين | -| `security-scm-fast` | اكتشاف المفاتيح الخاصة وتدقيق workflow عبر `zizmor` | دائمًا في push وPR غير المسودين | -| `security-dependency-audit` | تدقيق lockfile الإنتاجي بدون تبعيات مقابل تنبيهات npm | دائمًا في push وPR غير المسودين | -| `security-fast` | مجمّع مطلوب لمهام الأمان السريعة | دائمًا في push وPR غير المسودين | -| `build-artifacts` | بناء `dist/` وواجهة Control UI مرة واحدة، ورفع artifacts قابلة لإعادة الاستخدام للمهام التابعة | تغييرات ذات صلة بـ Node | -| `checks-fast-core` | مسارات صحة Linux السريعة مثل فحوصات bundled/plugin-contract/protocol | تغييرات ذات صلة بـ Node | -| `checks-fast-contracts-channels` | فحوصات عقود القنوات المجزأة مع نتيجة فحص مجمعة مستقرة | تغييرات ذات صلة بـ Node | -| `checks-node-extensions` | شظايا اختبارات Plugin المضمّنة الكاملة عبر مجموعة extension | تغييرات ذات صلة بـ Node | -| `checks-node-core-test` | شظايا اختبارات Node الأساسية، باستثناء مسارات القنوات وbundled والعقود وextension | تغييرات ذات صلة بـ Node | -| `extension-fast` | اختبارات مركزة فقط لـ Plugins المضمّنة التي تغيّرت | عند اكتشاف تغييرات في extension | -| `check` | ما يعادل البوابة المحلية الرئيسية المجزأة: أنواع الإنتاج وlint وguards وأنواع الاختبار وsmoke الصارم | تغييرات ذات صلة بـ Node | -| `check-additional` | شظايا architecture وboundary وextension-surface guards وpackage-boundary وgateway-watch | تغييرات ذات صلة بـ Node | -| `build-smoke` | اختبارات smoke لـ CLI المبني وsmoke ذاكرة بدء التشغيل | تغييرات ذات صلة بـ Node | -| `checks` | مسارات Linux Node المتبقية: اختبارات القنوات وتوافق Node 22 الخاص بـ push فقط | تغييرات ذات صلة بـ Node | -| `check-docs` | تنسيق الوثائق وlint وفحوصات الروابط المعطلة | عند تغير الوثائق | -| `skills-python` | Ruff + pytest للـ Skills المعتمدة على Python | تغييرات ذات صلة بـ Python Skills | -| `checks-windows` | مسارات الاختبار الخاصة بـ Windows | تغييرات ذات صلة بـ Windows | -| `macos-node` | مسار اختبارات TypeScript على macOS باستخدام artifacts المبنية المشتركة | تغييرات ذات صلة بـ macOS | -| `macos-swift` | lint وبناء واختبارات Swift لتطبيق macOS | تغييرات ذات صلة بـ macOS | -| `android` | مصفوفة بناء Android واختباره | تغييرات ذات صلة بـ Android | +| المهمة | الغرض | وقت التشغيل | +| ----------------------------------- | ------------------------------------------------------------------------------------------ | ---------------------------------- | +| `preflight` | اكتشاف التغييرات الخاصة بالوثائق فقط، والنطاقات المتغيرة، وPlugins المتغيرة، وبناء بيان CI | دائمًا في عمليات الدفع وطلبات السحب غير المسودة | +| `security-scm-fast` | اكتشاف المفاتيح الخاصة وتدقيق سير العمل عبر `zizmor` | دائمًا في عمليات الدفع وطلبات السحب غير المسودة | +| `security-dependency-audit` | تدقيق ملف قفل الإنتاج بدون تبعيات مقابل تنبيهات npm | دائمًا في عمليات الدفع وطلبات السحب غير المسودة | +| `security-fast` | التجميع المطلوب لمهام الأمان السريعة | دائمًا في عمليات الدفع وطلبات السحب غير المسودة | +| `build-artifacts` | بناء `dist/` وواجهة Control UI مرة واحدة، ورفع المخرجات القابلة لإعادة الاستخدام للمهام اللاحقة | التغييرات ذات الصلة بـ Node | +| `checks-fast-core` | مسارات صحة Linux السريعة مثل فحوصات bundled/plugin-contract/protocol | التغييرات ذات الصلة بـ Node | +| `checks-fast-contracts-channels` | فحوصات عقود القنوات المجزأة مع نتيجة فحص تجميعية مستقرة | التغييرات ذات الصلة بـ Node | +| `checks-node-extensions` | تجزئات اختبارات bundled-plugin الكاملة عبر مجموعة الامتدادات | التغييرات ذات الصلة بـ Node | +| `checks-node-core-test` | تجزئات اختبارات Node الأساسية، باستثناء مسارات القنوات وbundled والعقود والامتدادات | التغييرات ذات الصلة بـ Node | +| `extension-fast` | اختبارات مركزة على bundled plugins المتغيرة فقط | عند اكتشاف تغييرات في الامتدادات | +| `check` | المعادل الرئيسي المحلي المجزأ: أنواع الإنتاج، وlint، والحواجز، وأنواع الاختبار، وstrict smoke | التغييرات ذات الصلة بـ Node | +| `check-additional` | حواجز البنية والحدود وأسطح الامتدادات وحدود الحزم وتجزيئات gateway-watch | التغييرات ذات الصلة بـ Node | +| `build-smoke` | اختبارات smoke للـ CLI المبني وsmoke لذاكرة بدء التشغيل | التغييرات ذات الصلة بـ Node | +| `checks` | مسارات Linux Node المتبقية: اختبارات القنوات وتوافق Node 22 للدفع فقط | التغييرات ذات الصلة بـ Node | +| `check-docs` | تنسيق الوثائق وlint وفحوصات الروابط المعطلة | عند تغير الوثائق | +| `skills-python` | `Ruff` + `pytest` للـ Skills المعتمدة على Python | التغييرات ذات الصلة بـ Skills في Python | +| `checks-windows` | مسارات اختبار خاصة بـ Windows | التغييرات ذات الصلة بـ Windows | +| `macos-node` | مسار اختبار TypeScript على macOS باستخدام مخرجات البناء المشتركة | التغييرات ذات الصلة بـ macOS | +| `macos-swift` | lint وبناء واختبارات Swift لتطبيق macOS | التغييرات ذات الصلة بـ macOS | +| `android` | مصفوفة بناء واختبار Android | التغييرات ذات الصلة بـ Android | ## ترتيب الإخفاق السريع -تُرتَّب المهام بحيث تفشل الفحوصات الرخيصة قبل تشغيل المهام المكلفة: +تُرتَّب المهام بحيث تفشل الفحوصات الرخيصة قبل تشغيل الفحوصات المكلفة: -1. يحدد `preflight` أي المسارات موجودة أصلًا. ومنطق `docs-scope` و`changed-scope` هو خطوات داخل هذه المهمة، وليس مهام مستقلة. -2. تفشل `security-scm-fast` و`security-dependency-audit` و`security-fast` و`check` و`check-additional` و`check-docs` و`skills-python` بسرعة دون انتظار مهام artifact ومصفوفات المنصات الأثقل. -3. يتداخل `build-artifacts` مع مسارات Linux السريعة حتى يتمكن المستهلكون التابعون من البدء بمجرد جاهزية البناء المشترك. -4. بعد ذلك تتفرع مسارات المنصات وبيئات التشغيل الأثقل: `checks-fast-core` و`checks-fast-contracts-channels` و`checks-node-extensions` و`checks-node-core-test` و`extension-fast` و`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-extensions` و`checks-node-core-test` و`extension-fast` و`checks` و`checks-windows` و`macos-node` و`macos-swift` و`android`. -يوجد منطق النطاق في `scripts/ci-changed-scope.mjs` وتغطيه اختبارات وحدة في `src/scripts/ci-changed-scope.test.ts`. -ويعيد workflow المنفصل `install-smoke` استخدام سكربت النطاق نفسه عبر مهمة `preflight` الخاصة به. إذ يحسب `run_install_smoke` من إشارة changed-smoke الأضيق، لذلك لا يعمل Docker/install smoke إلا عند التغييرات ذات الصلة بالتثبيت والتغليف والحاويات. +يوجد منطق النطاق في `scripts/ci-changed-scope.mjs` وتغطيه اختبارات وحدات في `src/scripts/ci-changed-scope.test.ts`. +ويعيد سير العمل المنفصل `install-smoke` استخدام سكربت النطاق نفسه عبر مهمة `preflight` الخاصة به. إذ يحسب `run_install_smoke` انطلاقًا من إشارة changed-smoke الأضيق، لذلك لا يعمل Docker/install smoke إلا مع التغييرات ذات الصلة بالتثبيت والتغليف والحاويات. -يوجد منطق المسارات المتغيرة المحلية في `scripts/changed-lanes.mjs` ويُنفَّذ بواسطة `scripts/check-changed.mjs`. وهذه البوابة المحلية أكثر صرامة بشأن حدود architecture من نطاق منصة CI الواسع: فتغييرات الإنتاج الأساسية تشغّل typecheck للإنتاج الأساسي بالإضافة إلى اختبارات الأساس، وتغييرات اختبارات الأساس فقط تشغّل typecheck/اختبارات الأساس فقط، وتغييرات إنتاج extension تشغّل typecheck لإنتاج extension بالإضافة إلى اختبارات extension، وتغييرات اختبارات extension فقط تشغّل typecheck/اختبارات extension فقط. أما تغييرات Plugin SDK العامة أو plugin-contract فتوسّع التحقق ليشمل extension لأن extension تعتمد على هذه العقود الأساسية. وتُشغّل زيادات الإصدار التي تقتصر على بيانات الإصدار الوصفية فحوصات مستهدفة للإصدار/التهيئة/تبعيات الجذر. أما تغييرات الجذر/التهيئة غير المعروفة فتميل احتياطيًا إلى جميع المسارات. +يوجد منطق المسارات المحلية المتغيرة في `scripts/changed-lanes.mjs` ويُنفَّذ بواسطة `scripts/check-changed.mjs`. وهذه البوابة المحلية أكثر صرامة فيما يتعلق بحدود البنية من نطاق منصة CI العام: تغييرات الإنتاج الأساسية تشغّل typecheck للإنتاج الأساسي بالإضافة إلى الاختبارات الأساسية، وتغييرات الاختبارات الأساسية فقط تشغّل typecheck للاختبارات الأساسية واختباراتها فقط، وتغييرات إنتاج الامتدادات تشغّل typecheck لإنتاج الامتدادات بالإضافة إلى اختبارات الامتدادات، وتغييرات اختبارات الامتدادات فقط تشغّل typecheck لاختبارات الامتدادات واختباراتها فقط. وتوسّع تغييرات Plugin SDK العامة أو plugin-contract التحقق ليشمل الامتدادات لأن الامتدادات تعتمد على هذه العقود الأساسية. أما زيادات الإصدار التي تقتصر على بيانات الإصدار الوصفية فتشغّل فحوصات مستهدفة للإصدار/الإعداد/تبعية الجذر. والتغييرات غير المعروفة في الجذر/الإعداد تنتقل احتياطيًا إلى جميع المسارات. -عند push، تضيف مصفوفة `checks` مسار `compat-node22` الخاص بـ push فقط. أما في pull requests، فيتم تخطي هذا المسار وتبقى المصفوفة مركزة على مسارات الاختبار/القنوات العادية. +عند عمليات الدفع، تضيف مصفوفة `checks` مسار `compat-node22` الخاص بالدفع فقط. أما في طلبات السحب، فيُتخطى هذا المسار وتبقى المصفوفة مركزة على مسارات الاختبار/القنوات المعتادة. -تنقسم أبطأ عائلات اختبارات Node إلى شظايا include-file بحيث تبقى كل مهمة صغيرة: تقسم عقود القنوات تغطية registry والأساس إلى ثماني شظايا موزونة لكل منهما، وتنقسم اختبارات auto-reply reply command إلى أربع شظايا include-pattern، وتنقسم مجموعات auto-reply reply prefix الكبيرة الأخرى إلى شظيتين لكل منها. كما يفصل `check-additional` أيضًا بين أعمال package-boundary compile/canary وبين أعمال runtime topology الخاصة بـ gateway/architecture. +تنقسم أبطأ عائلات اختبارات Node إلى تجزئات تعتمد على include-file حتى تبقى كل مهمة صغيرة: تنقسم عقود القنوات إلى تغطية registry وcore في ثمانية تجزئات موزونة لكل منهما، وتنقسم اختبارات أوامر الرد لاختبارات auto-reply إلى أربع تجزئات بأنماط include، بينما تنقسم مجموعات بادئات الرد الكبيرة الأخرى في auto-reply إلى تجزئتين لكل مجموعة. كما يفصل `check-additional` بين أعمال compile/canary الخاصة بحدود الحزم وبين أعمال topology الخاصة بوقت التشغيل gateway/architecture. -قد يضع GitHub علامة `cancelled` على المهام المستبدلة عندما يصل push أحدث إلى PR نفسه أو مرجع `main`. تعامل مع ذلك على أنه ضوضاء CI ما لم يكن التشغيل الأحدث للمرجع نفسه يفشل أيضًا. وتشير فحوصات الشظايا المجمعة صراحةً إلى حالة الإلغاء هذه بحيث يسهل تمييزها عن فشل الاختبار. +قد يضع GitHub علامة `cancelled` على المهام المستبدلة عندما يصل دفع أحدث إلى المرجع نفسه في PR أو `main`. اعتبر ذلك ضجيجًا من CI ما لم يكن أحدث تشغيل للمرجع نفسه فاشلًا أيضًا. وتوضح فحوصات التجميع الخاصة بالتجزئات هذه الحالة الملغاة صراحةً حتى يسهل تمييزها عن فشل الاختبار. ## المشغلات -| المشغّل | المهام | -| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `blacksmith-16vcpu-ubuntu-2404` | `preflight` و`security-scm-fast` و`security-dependency-audit` و`security-fast` و`build-artifacts` وفحوصات Linux وفحوصات الوثائق وPython Skills و`android` | -| `blacksmith-32vcpu-windows-2025` | `checks-windows` | -| `blacksmith-12vcpu-macos-latest` | `macos-node` و`macos-swift` على `openclaw/openclaw`؛ أما forks فتعود إلى `macos-latest` | +| المشغل | المهام | +| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | +| `ubuntu-24.04` | `preflight`؛ كما يستخدم preflight الخاص بـ install-smoke أيضًا Ubuntu مستضافًا من GitHub حتى تتمكن مصفوفة Blacksmith من الاصطفاف مبكرًا | +| `blacksmith-16vcpu-ubuntu-2404` | `security-scm-fast` و`security-dependency-audit` و`security-fast` و`build-artifacts` وفحوصات Linux وفحوصات الوثائق وSkills Python و`android` | +| `blacksmith-32vcpu-windows-2025` | `checks-windows` | +| `blacksmith-12vcpu-macos-latest` | `macos-node` و`macos-swift` على `openclaw/openclaw`؛ أما الـ forks فتعود إلى `macos-latest` | -## المكافئات المحلية +## المعادلات المحلية ```bash -pnpm changed:lanes # فحص مصنف المسارات المتغيرة المحلي لـ origin/main...HEAD -pnpm check:changed # البوابة المحلية الذكية: typecheck/lint/tests المتغيرة حسب مسار الحدود -pnpm check # البوابة المحلية السريعة: tsgo للإنتاج + lint مجزأ + fast guards متوازية +pnpm changed:lanes # فحص مصنف المسارات المحلية المتغيرة لـ origin/main...HEAD +pnpm check:changed # البوابة المحلية الذكية: typecheck/lint/اختبارات متغيرة حسب مسار الحدود +pnpm check # البوابة المحلية السريعة: production tsgo + lint مجزأ + حواجز سريعة متوازية pnpm check:test-types pnpm check:timed # البوابة نفسها مع توقيتات لكل مرحلة pnpm build:strict-smoke @@ -85,5 +86,5 @@ pnpm test # اختبارات vitest pnpm test:channels pnpm test:contracts:channels pnpm check:docs # تنسيق الوثائق + lint + الروابط المعطلة -pnpm build # بناء dist عندما تكون مسارات CI artifact/build-smoke مهمة +pnpm build # بناء dist عندما تكون مسارات CI الخاصة بالمخرجات/‏build-smoke مهمة ``` diff --git a/docs/ar/concepts/typing-indicators.md b/docs/ar/concepts/typing-indicators.md index 3b6f3b023..dea0585d9 100644 --- a/docs/ar/concepts/typing-indicators.md +++ b/docs/ar/concepts/typing-indicators.md @@ -1,13 +1,13 @@ --- read_when: - - تغيير سلوك مؤشرات الكتابة أو القيم الافتراضية + - تغيير سلوك مؤشرات الكتابة أو الإعدادات الافتراضية لها summary: متى يعرض OpenClaw مؤشرات الكتابة وكيفية ضبطها title: مؤشرات الكتابة x-i18n: - generated_at: "2026-04-05T12:41:44Z" + generated_at: "2026-04-22T07:17:58Z" model: gpt-5.4 provider: openai - source_hash: 28c8c395a135fc0745181aab66a93582177e6acd0b3496debcbb98159a4f11dc + source_hash: 2e7e8ca448b6706b6f53fcb6a582be6d4a84715c82dfde3d53abe4268af3ae0d source_path: concepts/typing-indicators.md workflow: 15 --- @@ -15,34 +15,35 @@ x-i18n: # مؤشرات الكتابة تُرسل مؤشرات الكتابة إلى قناة الدردشة أثناء نشاط التشغيل. استخدم -`agents.defaults.typingMode` للتحكم في **وقت** بدء الكتابة، واستخدم `typingIntervalSeconds` -للتحكم في **مدى تكرار** تحديثها. +`agents.defaults.typingMode` للتحكم في **متى** تبدأ الكتابة و`typingIntervalSeconds` +للتحكم في **عدد المرات** التي يتم فيها تحديثها. -## القيم الافتراضية +## الإعدادات الافتراضية -عندما تكون `agents.defaults.typingMode` **غير معيّنة**، يحتفظ OpenClaw بالسلوك القديم: +عندما يكون `agents.defaults.typingMode` **غير مضبوط**، يحافظ OpenClaw على السلوك القديم: - **الدردشات المباشرة**: تبدأ الكتابة فورًا بمجرد بدء حلقة النموذج. - **الدردشات الجماعية مع إشارة**: تبدأ الكتابة فورًا. -- **الدردشات الجماعية من دون إشارة**: تبدأ الكتابة فقط عندما يبدأ بث نص الرسالة. -- **تشغيلات heartbeat**: تكون الكتابة معطلة. +- **الدردشات الجماعية بدون إشارة**: تبدأ الكتابة فقط عندما يبدأ تدفق نص الرسالة. +- **عمليات Heartbeat**: تبدأ الكتابة عند بدء تشغيل Heartbeat إذا كان + هدف Heartbeat المحسوم دردشة تدعم الكتابة ولم تكن الكتابة معطلة. ## الأوضاع اضبط `agents.defaults.typingMode` على أحد القيم التالية: -- `never` — لا يوجد مؤشر كتابة مطلقًا. -- `instant` — ابدأ الكتابة **بمجرد بدء حلقة النموذج**، حتى لو أعاد التشغيل - لاحقًا رمز الرد الصامت فقط. -- `thinking` — ابدأ الكتابة عند **أول delta للاستدلال** (يتطلب - `reasoningLevel: "stream"` لذلك التشغيل). -- `message` — ابدأ الكتابة عند **أول delta نصي غير صامت** (ويتجاهل - رمز الصمت `NO_REPLY`). +- `never` — لا توجد أي إشارة كتابة إطلاقًا. +- `instant` — ابدأ الكتابة **بمجرد بدء حلقة النموذج**، حتى إذا كان التشغيل + سيُرجع لاحقًا رمز الرد الصامت فقط. +- `thinking` — ابدأ الكتابة عند **أول دلتا استدلال** (يتطلب + `reasoningLevel: "stream"` لهذا التشغيل). +- `message` — ابدأ الكتابة عند **أول دلتا نصية غير صامتة** (ويتجاهل + الرمز الصامت `NO_REPLY`). -ترتيب "مدى سرعة تشغيله": -`never` ← `message` ← `thinking` ← `instant` +ترتيب “مدى سرعة التشغيل”: +`never` → `message` → `thinking` → `instant` -## التكوين +## الإعداد ```json5 { @@ -53,7 +54,7 @@ x-i18n: } ``` -يمكنك تجاوز الوضع أو الوتيرة لكل جلسة: +يمكنك تجاوز الوضع أو وتيرة التحديث لكل جلسة: ```json5 { @@ -66,11 +67,16 @@ x-i18n: ## ملاحظات -- لا يعرض وضع `message` الكتابة للردود الصامتة فقط عندما تكون الحمولة - بالكامل هي رمز الصمت الدقيق (مثل `NO_REPLY` / `no_reply`، +- وضع `message` لن يعرض الكتابة للردود الصامتة فقط عندما تكون + الحمولة بالكامل هي الرمز الصامت المطابق تمامًا (على سبيل المثال `NO_REPLY` / `no_reply`، مع مطابقة غير حساسة لحالة الأحرف). - لا يعمل `thinking` إلا إذا كان التشغيل يبث الاستدلال (`reasoningLevel: "stream"`). - وإذا لم يصدر النموذج deltas للاستدلال، فلن تبدأ الكتابة. -- لا تعرض heartbeat الكتابة أبدًا، بغض النظر عن الوضع. + إذا لم يصدر النموذج دلتا للاستدلال، فلن تبدأ الكتابة. +- كتابة Heartbeat هي إشارة حيوية لهدف التسليم المحسوم. وهي + تبدأ عند بدء تشغيل Heartbeat بدلًا من اتباع توقيت تدفق `message` أو `thinking`. + اضبط `typingMode: "never"` لتعطيلها. +- لا تعرض Heartbeats الكتابة عندما يكون `target: "none"`، أو عندما يتعذر + حسم الهدف، أو عندما يكون تسليم الدردشة معطلًا لـ Heartbeat، أو عندما + لا تدعم القناة الكتابة. - يتحكم `typingIntervalSeconds` في **وتيرة التحديث**، وليس وقت البدء. - والقيمة الافتراضية هي 6 ثوانٍ. + القيمة الافتراضية هي 6 ثوانٍ. diff --git a/docs/ar/gateway/configuration-reference.md b/docs/ar/gateway/configuration-reference.md index 45f4e4f9e..7ffc0c2ba 100644 --- a/docs/ar/gateway/configuration-reference.md +++ b/docs/ar/gateway/configuration-reference.md @@ -1,70 +1,70 @@ --- read_when: - - تحتاج إلى دلالات التكوين الدقيقة على مستوى الحقول أو القيم الافتراضية - - أنت تتحقق من كتل تكوين القنوات أو النماذج أو Gateway أو الأدوات -summary: مرجع تكوين Gateway لمفاتيح OpenClaw الأساسية، والقيم الافتراضية، وروابط إلى مراجع الأنظمة الفرعية المخصصة -title: مرجع التكوين + - أنت بحاجة إلى دلالات إعدادات دقيقة على مستوى الحقول أو إلى القيم الافتراضية. + - أنت تتحقق من كتل إعدادات القناة أو النموذج أو Gateway أو الأداة. +summary: مرجع إعدادات Gateway لمفاتيح OpenClaw الأساسية، والقيم الافتراضية، وروابط إلى مراجع الأنظمة الفرعية المخصصة +title: مرجع الإعدادات x-i18n: - generated_at: "2026-04-22T04:22:47Z" + generated_at: "2026-04-22T07:17:55Z" model: gpt-5.4 provider: openai - source_hash: 0313f47079536b93385b4e9c7680a896098ac05dce4e368d389a33e31b4649ac + source_hash: f0d6fc076f54e84bef5beefbcc42d8f172cc79792c716f76103894303e3042ac source_path: gateway/configuration-reference.md workflow: 15 --- -# مرجع التكوين +# مرجع الإعدادات -مرجع التكوين الأساسي لـ `~/.openclaw/openclaw.json`. للحصول على نظرة عامة موجهة للمهام، راجع [التكوين](/ar/gateway/configuration). +مرجع الإعدادات الأساسية لملف `~/.openclaw/openclaw.json`. للحصول على نظرة عامة موجّهة حسب المهام، راجع [الإعدادات](/ar/gateway/configuration). -تغطي هذه الصفحة أسطح تكوين OpenClaw الرئيسية وتضع روابط خارجية عندما يكون لدى نظام فرعي مرجع أعمق خاص به. وهي **لا** تحاول تضمين كل فهرس أوامر تملكه القنوات/Plugin أو كل إعداد عميق للذاكرة/QMD في صفحة واحدة. +تغطي هذه الصفحة أسطح إعدادات OpenClaw الرئيسية وتربط إلى الخارج عندما يكون لأحد الأنظمة الفرعية مرجع أعمق خاص به. وهي **لا** تحاول تضمين كل فهرس أوامر مملوك للقنوات/Plugin أو كل إعداد تفصيلي عميق للذاكرة/QMD في صفحة واحدة. مصدر الحقيقة في الشيفرة: -- يطبع `openclaw config schema` مخطط JSON Schema الحي المستخدم للتحقق وواجهة Control UI، مع دمج بيانات التعريف الخاصة بالـ plugin/channel المضمّنة والمتاحة عند توفرها -- يعيد `config.schema.lookup` عقدة schema واحدة محددة بالمسار لأدوات التعمق -- يتحقق `pnpm config:docs:check` / `pnpm config:docs:gen` من تجزئة خط الأساس لوثائق التكوين مقابل سطح schema الحالي +- يعرض `openclaw config schema` مخطط JSON Schema الفعلي المستخدم للتحقق وواجهة Control UI، مع دمج بيانات التعريف الخاصة بالعناصر المجمّعة/Plugin/القنوات عند توفرها +- يعيد `config.schema.lookup` عقدة مخطط واحدة مقيّدة بالمسار لأدوات الاستكشاف التفصيلي +- يتحقق `pnpm config:docs:check` / `pnpm config:docs:gen` من تجزئة خط الأساس لوثائق الإعدادات مقابل سطح المخطط الحالي -مراجع عميقة مخصصة: +المراجع العميقة المخصصة: -- [مرجع تكوين الذاكرة](/ar/reference/memory-config) لـ `agents.defaults.memorySearch.*` و`memory.qmd.*` و`memory.citations` وتكوين Dreaming تحت `plugins.entries.memory-core.config.dreaming` -- [أوامر الشرطة المائلة](/ar/tools/slash-commands) لفهرس الأوامر المضمّن + المجمّع الحالي -- صفحات القناة/Plugin المالكة لأسطح الأوامر الخاصة بالقنوات +- [مرجع إعدادات الذاكرة](/ar/reference/memory-config) لـ `agents.defaults.memorySearch.*` و`memory.qmd.*` و`memory.citations` وإعدادات Dreaming ضمن `plugins.entries.memory-core.config.dreaming` +- [أوامر الشرطة المائلة](/ar/tools/slash-commands) لفهرس الأوامر الحالي المضمّن + المجمّع +- صفحات القنوات/Plugin المالكة لأسطح الأوامر الخاصة بكل قناة -صيغة التكوين هي **JSON5** (يُسمح بالتعليقات والفواصل اللاحقة). جميع الحقول اختيارية — يستخدم OpenClaw قيمًا افتراضية آمنة عند حذفها. +تنسيق الإعدادات هو **JSON5** (يُسمح بالتعليقات + الفواصل اللاحقة). جميع الحقول اختيارية — يستخدم OpenClaw قيماً افتراضية آمنة عند حذفها. --- ## القنوات -تبدأ كل قناة تلقائيًا عندما يوجد قسم تكوينها (ما لم يكن `enabled: false`). +تبدأ كل قناة تلقائياً عند وجود قسم إعداداتها (ما لم يكن `enabled: false`). -### الوصول إلى الرسائل المباشرة والمجموعات +### الوصول إلى الرسائل الخاصة والمجموعات -تدعم جميع القنوات سياسات الرسائل المباشرة وسياسات المجموعات: +تدعم جميع القنوات سياسات الرسائل الخاصة وسياسات المجموعات: -| سياسة الرسائل المباشرة | السلوك | -| ------------------- | --------------------------------------------------------------- | +| سياسة الرسائل الخاصة | السلوك | +| -------------------- | ------ | | `pairing` (الافتراضي) | يحصل المرسلون غير المعروفين على رمز اقتران لمرة واحدة؛ ويجب على المالك الموافقة | -| `allowlist` | فقط المرسلون الموجودون في `allowFrom` (أو مخزن السماح المقترن) | -| `open` | السماح بجميع الرسائل المباشرة الواردة (يتطلب `allowFrom: ["*"]`) | -| `disabled` | تجاهل جميع الرسائل المباشرة الواردة | +| `allowlist` | فقط المرسلون الموجودون في `allowFrom` (أو في مخزن السماح المقترن) | +| `open` | السماح بكل الرسائل الخاصة الواردة (يتطلب `allowFrom: ["*"]`) | +| `disabled` | تجاهل كل الرسائل الخاصة الواردة | -| سياسة المجموعة | السلوك | -| --------------------- | ------------------------------------------------------ | -| `allowlist` (الافتراضي) | فقط المجموعات المطابقة لقائمة السماح المكوّنة | -| `open` | تجاوز قوائم سماح المجموعات (مع بقاء بوابة الإشارة مطبقة) | -| `disabled` | حظر جميع رسائل المجموعات/الغرف | +| سياسة المجموعة | السلوك | +| -------------- | ------ | +| `allowlist` (الافتراضي) | فقط المجموعات المطابقة لقائمة السماح المكوّنة | +| `open` | تجاوز قوائم السماح للمجموعات (مع استمرار تطبيق التقييد بالذكر) | +| `disabled` | حظر كل رسائل المجموعات/الغرف | -يضبط `channels.defaults.groupPolicy` السياسة الافتراضية عندما لا تكون `groupPolicy` الخاصة بالموفر معيّنة. -تنتهي صلاحية رموز الاقتران بعد ساعة واحدة. ويكون الحد الأقصى لطلبات اقتران الرسائل المباشرة المعلقة **3 لكل قناة**. -إذا كانت كتلة الموفر مفقودة بالكامل (`channels.` غير موجودة)، فإن سياسة مجموعات runtime تعود إلى `allowlist` (إخفاق مغلق) مع تحذير عند بدء التشغيل. +يضبط `channels.defaults.groupPolicy` القيمة الافتراضية عندما تكون `groupPolicy` الخاصة بالمزوّد غير مضبوطة. +تنتهي صلاحية رموز الاقتران بعد ساعة واحدة. ويُحدَّد الحد الأقصى لطلبات اقتران الرسائل الخاصة المعلّقة عند **3 لكل قناة**. +إذا كانت كتلة المزوّد مفقودة بالكامل (غياب `channels.`)، تعود سياسة المجموعة في وقت التشغيل إلى `allowlist` (فشل مغلق) مع تحذير عند بدء التشغيل. ### تجاوزات نموذج القناة -استخدم `channels.modelByChannel` لتثبيت معرّفات قنوات محددة على نموذج معيّن. تقبل القيم `provider/model` أو الأسماء المستعارة للنماذج المكوّنة. يُطبَّق تعيين القناة عندما لا تحتوي الجلسة بالفعل على تجاوز للنموذج (على سبيل المثال، تم تعيينه عبر `/model`). +استخدم `channels.modelByChannel` لتثبيت معرّفات قنوات محددة على نموذج معيّن. تقبل القيم `provider/model` أو الأسماء المستعارة للنماذج المكوّنة. يُطبَّق تعيين القناة عندما لا تكون للجلسة بالفعل قيمة تجاوز للنموذج (على سبيل المثال، مضبوطة عبر `/model`). ```json5 { @@ -87,7 +87,7 @@ x-i18n: ### القيم الافتراضية للقنوات وHeartbeat -استخدم `channels.defaults` للسلوك المشترك لسياسات المجموعات وHeartbeat عبر الموفرات: +استخدم `channels.defaults` لسلوك سياسة المجموعات وHeartbeat المشترك عبر المزوّدات: ```json5 { @@ -105,15 +105,15 @@ x-i18n: } ``` -- `channels.defaults.groupPolicy`: سياسة المجموعات الاحتياطية عندما لا تكون `groupPolicy` على مستوى الموفر معيّنة. -- `channels.defaults.contextVisibility`: وضع الرؤية الافتراضي للسياق التكميلي لجميع القنوات. القيم: `all` (الافتراضي، يتضمن كل سياق الاقتباس/الخيط/السجل)، و`allowlist` (يتضمن فقط السياق من المرسلين الموجودين في قائمة السماح)، و`allowlist_quote` (مثل allowlist لكن مع الاحتفاظ بسياق الاقتباس/الرد الصريح). تجاوز لكل قناة: `channels..contextVisibility`. +- `channels.defaults.groupPolicy`: سياسة المجموعة الاحتياطية عندما تكون `groupPolicy` على مستوى المزوّد غير مضبوطة. +- `channels.defaults.contextVisibility`: وضع إظهار السياق الإضافي الافتراضي لجميع القنوات. القيم: `all` (الافتراضي، تضمين كل سياق الاقتباس/المحادثة المتفرعة/السجل)، و`allowlist` (تضمين السياق فقط من المرسلين الموجودين في قائمة السماح)، و`allowlist_quote` (مثل allowlist ولكن مع الإبقاء على سياق الاقتباس/الرد الصريح). التجاوز لكل قناة: `channels..contextVisibility`. - `channels.defaults.heartbeat.showOk`: تضمين حالات القنوات السليمة في مخرجات Heartbeat. -- `channels.defaults.heartbeat.showAlerts`: تضمين الحالات المتدهورة/الخاطئة في مخرجات Heartbeat. -- `channels.defaults.heartbeat.useIndicator`: عرض مخرجات Heartbeat مضغوطة بنمط المؤشر. +- `channels.defaults.heartbeat.showAlerts`: تضمين الحالات المتدهورة/حالات الخطأ في مخرجات Heartbeat. +- `channels.defaults.heartbeat.useIndicator`: عرض مخرجات Heartbeat مدمجة بنمط المؤشر. ### WhatsApp -يعمل WhatsApp عبر قناة الويب في Gateway ‏(Baileys Web). ويبدأ تلقائيًا عند وجود جلسة مرتبطة. +يعمل WhatsApp عبر قناة الويب في Gateway ‏(Baileys Web). ويبدأ تلقائياً عند وجود جلسة مرتبطة. ```json5 { @@ -124,7 +124,7 @@ x-i18n: textChunkLimit: 4000, chunkMode: "length", // length | newline mediaMaxMb: 50, - sendReadReceipts: true, // علامات القراءة الزرقاء (false في وضع الدردشة الذاتية) + sendReadReceipts: true, // blue ticks (false in self-chat mode) groups: { "*": { requireMention: true }, }, @@ -164,10 +164,10 @@ x-i18n: } ``` -- تستخدم الأوامر الصادرة الحساب `default` افتراضيًا إذا كان موجودًا؛ وإلا فمعرّف الحساب الأول المكوَّن (بعد الفرز). -- يتجاوز `channels.whatsapp.defaultAccount` الاختياري هذا الاختيار الاحتياطي للحساب الافتراضي عندما يطابق معرّف حساب مكوّنًا. -- يتم ترحيل دليل مصادقة Baileys القديم أحادي الحساب بواسطة `openclaw doctor` إلى `whatsapp/default`. -- تجاوزات لكل حساب: `channels.whatsapp.accounts..sendReadReceipts` و`channels.whatsapp.accounts..dmPolicy` و`channels.whatsapp.accounts..allowFrom`. +- تستخدم الأوامر الصادرة الحساب `default` افتراضياً إذا كان موجوداً؛ وإلا يُستخدم أول معرّف حساب مُكوَّن (بعد الترتيب). +- يجاوز `channels.whatsapp.defaultAccount` الاختياري اختيار الحساب الافتراضي الاحتياطي هذا عندما يطابق معرّف حساب مُكوَّناً. +- يُرحَّل دليل مصادقة Baileys القديم أحادي الحساب بواسطة `openclaw doctor` إلى `whatsapp/default`. +- التجاوزات لكل حساب: `channels.whatsapp.accounts..sendReadReceipts` و`channels.whatsapp.accounts..dmPolicy` و`channels.whatsapp.accounts..allowFrom`. @@ -225,12 +225,12 @@ x-i18n: } ``` -- رمز bot: ‏`channels.telegram.botToken` أو `channels.telegram.tokenFile` (ملف عادي فقط؛ يتم رفض الروابط الرمزية)، مع `TELEGRAM_BOT_TOKEN` كقيمة احتياطية للحساب الافتراضي. -- يتجاوز `channels.telegram.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مكوّنًا. -- في إعدادات الحسابات المتعددة (معرّفا حسابين أو أكثر)، اضبط قيمة افتراضية صريحة (`channels.telegram.defaultAccount` أو `channels.telegram.accounts.default`) لتجنب التوجيه الاحتياطي؛ ويحذر `openclaw doctor` عندما يكون ذلك مفقودًا أو غير صالح. -- يمنع `configWrites: false` عمليات كتابة التكوين التي يطلقها Telegram ‏(ترحيلات معرفات supergroup، و`/config set|unset`). -- تقوم إدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` بتكوين ارتباطات ACP مستمرة لموضوعات المنتدى (استخدم `chatId:topic:topicId` القياسي في `match.peer.id`). وتُشترك دلالات الحقول في [وكلاء ACP](/ar/tools/acp-agents#channel-specific-settings). -- تستخدم معاينات التدفق في Telegram ‏`sendMessage` + `editMessageText` (وتعمل في الدردشات المباشرة والجماعية). +- رمز البوت: `channels.telegram.botToken` أو `channels.telegram.tokenFile` (ملف عادي فقط؛ تُرفَض الروابط الرمزية)، مع `TELEGRAM_BOT_TOKEN` كقيمة احتياطية للحساب الافتراضي. +- يجاوز `channels.telegram.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُكوَّناً. +- في إعدادات الحسابات المتعددة (معرّفا حساب أو أكثر)، اضبط افتراضياً صريحاً (`channels.telegram.defaultAccount` أو `channels.telegram.accounts.default`) لتجنب التوجيه الاحتياطي؛ ويحذّر `openclaw doctor` عند غياب هذا أو عدم صحته. +- يمنع `configWrites: false` عمليات كتابة الإعدادات المُبادَر بها من Telegram ‏(ترحيل معرّفات المجموعات الفائقة، و`/config set|unset`). +- تضبط إدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` ربط ACP دائماً لموضوعات المنتدى (استخدم الصيغة القياسية `chatId:topic:topicId` في `match.peer.id`). تتم مشاركة دلالات الحقول في [وكلاء ACP](/ar/tools/acp-agents#channel-specific-settings). +- تستخدم معاينات البث في Telegram ‏`sendMessage` + `editMessageText` (وتعمل في الدردشات المباشرة والجماعية). - سياسة إعادة المحاولة: راجع [سياسة إعادة المحاولة](/ar/concepts/retry). ### Discord @@ -297,7 +297,7 @@ x-i18n: enabled: true, idleHours: 24, maxAgeHours: 0, - spawnSubagentSessions: false, // اشتراك اختياري لـ sessions_spawn({ thread: true }) + spawnSubagentSessions: false, // opt-in for sessions_spawn({ thread: true }) }, voice: { enabled: true, @@ -333,36 +333,36 @@ x-i18n: } ``` -- الرمز: `channels.discord.token`، مع `DISCORD_BOT_TOKEN` كقيمة احتياطية للحساب الافتراضي. -- تستخدم الاستدعاءات الصادرة المباشرة التي توفر `token` صريحًا لـ Discord هذا الرمز في الاستدعاء؛ بينما تظل إعدادات إعادة المحاولة/السياسة الخاصة بالحساب تأتي من الحساب المحدد في لقطة runtime النشطة. -- يتجاوز `channels.discord.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مكوّنًا. -- استخدم `user:` ‏(DM) أو `channel:` ‏(قناة guild) لأهداف التسليم؛ ويتم رفض المعرّفات الرقمية المجردة. -- تكون slugs الخاصة بـ guild بأحرف صغيرة مع استبدال المسافات بـ `-`؛ وتستخدم مفاتيح القنوات الاسم المُحوّل إلى slug ‏(من دون `#`). ويفضل استخدام معرّفات guild. -- يتم تجاهل الرسائل التي أنشأها bot افتراضيًا. يفعّل `allowBots: true` قبولها؛ واستخدم `allowBots: "mentions"` لقبول رسائل bot التي تذكر bot فقط (مع استمرار تصفية الرسائل الخاصة به نفسه). -- يقوم `channels.discord.guilds..ignoreOtherMentions` ‏(وتجاوزات القناة) بإسقاط الرسائل التي تذكر مستخدمًا أو دورًا آخر ولكن لا تذكر bot (باستثناء ‎@everyone/‎@here). -- يقوم `maxLinesPerMessage` ‏(الافتراضي 17) بتقسيم الرسائل الطويلة رأسيًا حتى عند بقائها دون 2000 حرف. -- يتحكم `channels.discord.threadBindings` في التوجيه المرتبط بسلاسل Discord: - - `enabled`: تجاوز Discord لميزات الجلسات المرتبطة بالسلاسل (`/focus` و`/unfocus` و`/agents` و`/session idle` و`/session max-age` والتسليم/التوجيه المرتبط) - - `idleHours`: تجاوز Discord لإلغاء التركيز التلقائي بعد عدم النشاط بالساعات (`0` يعطّل) - - `maxAgeHours`: تجاوز Discord للحد الأقصى الصارم للعمر بالساعات (`0` يعطّل) - - `spawnSubagentSessions`: مفتاح اشتراك اختياري لإنشاء/ربط السلاسل تلقائيًا في `sessions_spawn({ thread: true })` -- تقوم إدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` بتكوين ارتباطات ACP مستمرة للقنوات والسلاسل (استخدم معرّف القناة/السلسلة في `match.peer.id`). وتُشترك دلالات الحقول في [وكلاء ACP](/ar/tools/acp-agents#channel-specific-settings). +- الرمز المميز: `channels.discord.token`، مع `DISCORD_BOT_TOKEN` كقيمة احتياطية للحساب الافتراضي. +- تستخدم الاستدعاءات الصادرة المباشرة التي توفّر `token` خاصاً بـ Discord ذلك الرمز المميز للاستدعاء؛ بينما تظل إعدادات إعادة المحاولة/السياسة الخاصة بالحساب مأخوذة من الحساب المحدد في اللقطة النشطة لوقت التشغيل. +- يجاوز `channels.discord.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُكوَّناً. +- استخدم `user:` (رسالة خاصة) أو `channel:` (قناة guild) لأهداف التسليم؛ تُرفَض المعرّفات الرقمية المجردة. +- تكون الأسماء المختصرة لـ guilds بأحرف صغيرة مع استبدال المسافات بـ `-`؛ وتستخدم مفاتيح القنوات الاسم المختصر (من دون `#`). يُفضَّل استخدام معرّفات guild. +- تُتجاهل الرسائل التي يكتبها البوت افتراضياً. يفعّل `allowBots: true` قبولها؛ واستخدم `allowBots: "mentions"` لقبول رسائل البوت التي تذكر البوت فقط (مع استمرار تصفية رسائله الذاتية). +- تقوم `channels.discord.guilds..ignoreOtherMentions` (وتجاوزات القنوات) بإسقاط الرسائل التي تذكر مستخدماً آخر أو دوراً آخر لكن لا تذكر البوت (باستثناء @everyone/@here). +- يقوم `maxLinesPerMessage` (الافتراضي 17) بتقسيم الرسائل الطويلة عمودياً حتى عندما تكون أقل من 2000 حرف. +- تتحكم `channels.discord.threadBindings` في التوجيه المرتبط بسلاسل Discord: + - `enabled`: تجاوز Discord لميزات الجلسات المرتبطة بالسلاسل (`/focus` و`/unfocus` و`/agents` و`/session idle` و`/session max-age`، والتسليم/التوجيه المرتبط) + - `idleHours`: تجاوز Discord لإلغاء التركيز التلقائي بعد عدم النشاط بالساعات (`0` يعطّل ذلك) + - `maxAgeHours`: تجاوز Discord للحد الأقصى الصارم للعمر بالساعات (`0` يعطّل ذلك) + - `spawnSubagentSessions`: مفتاح اشتراك اختياري لإنشاء/ربط السلاسل تلقائياً لـ `sessions_spawn({ thread: true })` +- تضبط إدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` ربط ACP دائماً للقنوات والسلاسل (استخدم معرّف القناة/السلسلة في `match.peer.id`). تتم مشاركة دلالات الحقول في [وكلاء ACP](/ar/tools/acp-agents#channel-specific-settings). - يضبط `channels.discord.ui.components.accentColor` لون التمييز لحاويات Discord components v2. -- يفعّل `channels.discord.voice` محادثات قنوات Discord الصوتية مع تجاوزات اختيارية للانضمام التلقائي + TTS. -- يتم تمرير `channels.discord.voice.daveEncryption` و`channels.discord.voice.decryptionFailureTolerance` إلى خيارات DAVE في `@discordjs/voice` (القيم الافتراضية `true` و`24`). -- يحاول OpenClaw أيضًا استعادة استقبال الصوت عبر مغادرة جلسة صوتية ثم إعادة الانضمام إليها بعد تكرار حالات فشل فك التشفير. -- يُعد `channels.discord.streaming` مفتاح وضع التدفق القياسي. ويتم ترحيل `streamMode` القديم وقيم `streaming` المنطقية تلقائيًا. -- يربط `channels.discord.autoPresence` الإتاحة في runtime بحالة حضور bot ‏(سليم => online، متدهور => idle، منهك => dnd) ويسمح بتجاوزات اختيارية لنص الحالة. -- يعيد `channels.discord.dangerouslyAllowNameMatching` تمكين المطابقة القابلة للتغيير حسب الاسم/الوسم (وضع توافق طارئ). -- `channels.discord.execApprovals`: تسليم موافقات exec الأصلية في Discord وتفويض المعتمدين. - - `enabled`: ‏`true` أو `false` أو `"auto"` ‏(الافتراضي). في وضع auto، تُفعَّل موافقات exec عندما يمكن حل المعتمدين من `approvers` أو `commands.ownerAllowFrom`. - - `approvers`: معرّفات مستخدمي Discord المسموح لهم بالموافقة على طلبات exec. ويعود إلى `commands.ownerAllowFrom` عند حذفه. +- يفعّل `channels.discord.voice` محادثات القنوات الصوتية في Discord مع تجاوزات اختيارية للانضمام التلقائي وTTS. +- يمرّر `channels.discord.voice.daveEncryption` و`channels.discord.voice.decryptionFailureTolerance` إلى خيارات DAVE في `@discordjs/voice` (القيم الافتراضية `true` و`24`). +- يحاول OpenClaw أيضاً استعادة استقبال الصوت عبر مغادرة جلسة الصوت وإعادة الانضمام إليها بعد تكرار حالات فشل فك التشفير. +- إن `channels.discord.streaming` هو مفتاح وضع البث القياسي. وتتم ترحيل القيم القديمة `streamMode` والقيم المنطقية `streaming` تلقائياً. +- يربط `channels.discord.autoPresence` إتاحة وقت التشغيل بحالة حضور البوت (سليم => online، متدهور => idle، مستنزف => dnd) ويسمح بتجاوزات اختيارية لنص الحالة. +- يعيد `channels.discord.dangerouslyAllowNameMatching` تمكين المطابقة بالاسم/الوسم القابل للتغيير (وضع توافق طارئ). +- `channels.discord.execApprovals`: تسليم موافقات exec الأصلية لـ Discord وتفويض الموافقين. + - `enabled`: ‏`true` أو `false` أو `"auto"` (الافتراضي). في الوضع التلقائي، تتفعّل موافقات exec عندما يمكن حل الموافقين من `approvers` أو `commands.ownerAllowFrom`. + - `approvers`: معرّفات مستخدمي Discord المسموح لهم بالموافقة على طلبات exec. يعود إلى `commands.ownerAllowFrom` عند الحذف. - `agentFilter`: قائمة سماح اختيارية لمعرّفات الوكلاء. احذفها لتمرير الموافقات لجميع الوكلاء. - - `sessionFilter`: أنماط مفاتيح جلسات اختيارية (substring أو regex). - - `target`: مكان إرسال مطالبات الموافقة. يرسل `"dm"` ‏(الافتراضي) إلى الرسائل المباشرة للمعتمدين، ويرسل `"channel"` إلى القناة الأصلية، ويرسل `"both"` إلى الاثنين. وعندما يتضمن الهدف `"channel"`، لا تكون الأزرار قابلة للاستخدام إلا من قبل المعتمدين الذين تم حلّهم. - - `cleanupAfterResolve`: عند ضبطه على `true`، يحذف الرسائل المباشرة للموافقة بعد الموافقة أو الرفض أو انتهاء المهلة. + - `sessionFilter`: أنماط مفاتيح جلسات اختيارية (سلسلة جزئية أو regex). + - `target`: مكان إرسال مطالبات الموافقة. ترسل `"dm"` (الافتراضي) إلى الرسائل الخاصة للموافقين، وترسل `"channel"` إلى القناة الأصلية، وترسل `"both"` إلى الاثنين. عندما يتضمن الهدف `"channel"`، لا تكون الأزرار قابلة للاستخدام إلا من قبل الموافقين الذين تم حلهم. + - `cleanupAfterResolve`: عند ضبطه على `true`، يحذف رسائل الموافقة الخاصة بعد الموافقة أو الرفض أو انتهاء المهلة. -**أوضاع إشعارات التفاعل:** ‏`off` ‏(لا شيء)، و`own` ‏(رسائل bot، الافتراضي)، و`all` ‏(جميع الرسائل)، و`allowlist` ‏(من `guilds..users` على جميع الرسائل). +**أوضاع إشعارات التفاعلات:** `off` (لا شيء)، و`own` (رسائل البوت، الافتراضي)، و`all` (كل الرسائل)، و`allowlist` (من `guilds..users` على جميع الرسائل). ### Google Chat @@ -393,11 +393,11 @@ x-i18n: } ``` -- JSON لحساب الخدمة: مضمّن (`serviceAccount`) أو مستند إلى ملف (`serviceAccountFile`). -- كما أن SecretRef لحساب الخدمة مدعوم أيضًا (`serviceAccountRef`). -- القيم الاحتياطية لمتغيرات البيئة: `GOOGLE_CHAT_SERVICE_ACCOUNT` أو `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. +- JSON الخاص بحساب الخدمة: مضمن (`serviceAccount`) أو قائم على ملف (`serviceAccountFile`). +- كما يتم دعم SecretRef الخاص بحساب الخدمة (`serviceAccountRef`). +- القيم الاحتياطية من البيئة: `GOOGLE_CHAT_SERVICE_ACCOUNT` أو `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. - استخدم `spaces/` أو `users/` لأهداف التسليم. -- يعيد `channels.googlechat.dangerouslyAllowNameMatching` تمكين مطابقة email principal القابلة للتغيير (وضع توافق طارئ). +- يعيد `channels.googlechat.dangerouslyAllowNameMatching` تمكين مطابقة principal البريد الإلكتروني القابلة للتغيير (وضع توافق طارئ). ### Slack @@ -464,35 +464,30 @@ x-i18n: } ``` -- يتطلب **Socket mode** كلاً من `botToken` و`appToken` ‏(`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` كقيمة احتياطية من متغيرات البيئة للحساب الافتراضي). -- يتطلب **HTTP mode** ‏`botToken` بالإضافة إلى `signingSecret` ‏(في الجذر أو لكل حساب). -- تقبل `botToken` و`appToken` و`signingSecret` و`userToken` سلاسل - نصية عادية أو كائنات SecretRef. -- تكشف لقطات حساب Slack عن حقول المصدر/الحالة لكل بيانات اعتماد مثل - `botTokenSource` و`botTokenStatus` و`appTokenStatus`، وفي وضع HTTP، - `signingSecretStatus`. ويعني `configured_unavailable` أن الحساب - مكوّن عبر SecretRef ولكن مسار الأمر/runtime الحالي لم يتمكن - من حل قيمة السر. -- يمنع `configWrites: false` عمليات كتابة التكوين التي يطلقها Slack. -- يتجاوز `channels.slack.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مكوّنًا. -- يُعد `channels.slack.streaming.mode` مفتاح وضع تدفق Slack القياسي. ويتحكم `channels.slack.streaming.nativeTransport` في نقل التدفق الأصلي في Slack. ويتم ترحيل `streamMode` القديم وقيم `streaming` المنطقية و`nativeStreaming` تلقائيًا. -- استخدم `user:` ‏(DM) أو `channel:` لأهداف التسليم. +- يتطلب **Socket mode** كلاً من `botToken` و`appToken` (مع `SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` كقيمة احتياطية من البيئة للحساب الافتراضي). +- يتطلب **HTTP mode** القيمة `botToken` مع `signingSecret` (في الجذر أو لكل حساب). +- تقبل `botToken` و`appToken` و`signingSecret` و`userToken` سلاسل نصية صريحة أو كائنات SecretRef. +- تكشف لقطات حساب Slack عن حقول المصدر/الحالة لكل اعتماد، مثل `botTokenSource` و`botTokenStatus` و`appTokenStatus` و، في HTTP mode، `signingSecretStatus`. تعني `configured_unavailable` أن الحساب مُكوَّن عبر SecretRef لكن مسار الأمر/وقت التشغيل الحالي لم يتمكن من حل قيمة السر. +- يمنع `configWrites: false` عمليات كتابة الإعدادات المُبادَر بها من Slack. +- يجاوز `channels.slack.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُكوَّناً. +- إن `channels.slack.streaming.mode` هو مفتاح وضع البث القياسي لـ Slack. وتتحكم `channels.slack.streaming.nativeTransport` في ناقل البث الأصلي لـ Slack. وتتم ترحيل القيم القديمة `streamMode` والقيم المنطقية `streaming` و`nativeStreaming` تلقائياً. +- استخدم `user:` (رسالة خاصة) أو `channel:` لأهداف التسليم. -**أوضاع إشعارات التفاعل:** ‏`off`، و`own` ‏(الافتراضي)، و`all`، و`allowlist` ‏(من `reactionAllowlist`). +**أوضاع إشعارات التفاعلات:** `off` و`own` (الافتراضي) و`all` و`allowlist` (من `reactionAllowlist`). -**عزل جلسات السلاسل:** يكون `thread.historyScope` لكل سلسلة ‏(الافتراضي) أو مشتركًا عبر القناة. ويقوم `thread.inheritParent` بنسخ سجل القناة الأصلية إلى السلاسل الجديدة. +**عزل جلسات السلاسل:** تكون `thread.historyScope` لكل سلسلة (الافتراضي) أو مشتركة عبر القناة. وتقوم `thread.inheritParent` بنسخ سجل القناة الأصل إلى السلاسل الجديدة. -- يتطلب التدفق الأصلي في Slack بالإضافة إلى حالة السلسلة بنمط "is typing..." الخاصة بمساعد Slack هدف سلسلة رد. وتبقى الرسائل المباشرة ذات المستوى الأعلى خارج السلسلة افتراضيًا، لذا تستخدم `typingReaction` أو التسليم العادي بدلًا من المعاينة بنمط السلسلة. -- تضيف `typingReaction` تفاعلًا مؤقتًا إلى رسالة Slack الواردة أثناء تشغيل الرد، ثم تزيله عند الاكتمال. استخدم shortcode لرمز Slack التعبيري مثل `"hourglass_flowing_sand"`. -- `channels.slack.execApprovals`: تسليم موافقات exec الأصلية في Slack وتفويض المعتمدين. المخطط نفسه كما في Discord: ‏`enabled` ‏(`true`/`false`/`"auto"`)، و`approvers` ‏(معرّفات مستخدمي Slack)، و`agentFilter`، و`sessionFilter`، و`target` ‏(`"dm"` أو `"channel"` أو `"both"`). +- يتطلب البث الأصلي لـ Slack مع حالة السلسلة على نمط مساعد Slack "is typing..." هدف سلسلة رد. وتبقى الرسائل الخاصة ذات المستوى الأعلى خارج السلاسل افتراضياً، لذا تستخدم `typingReaction` أو التسليم العادي بدلاً من المعاينة على نمط السلسلة. +- تضيف `typingReaction` تفاعلاً مؤقتاً إلى رسالة Slack الواردة أثناء تشغيل الرد، ثم تزيله عند الاكتمال. استخدم رمز Slack emoji مختصراً مثل `"hourglass_flowing_sand"`. +- `channels.slack.execApprovals`: تسليم موافقات exec الأصلية لـ Slack وتفويض الموافقين. نفس مخطط Discord: ‏`enabled` (`true`/`false`/`"auto"`)، و`approvers` (معرّفات مستخدمي Slack)، و`agentFilter`، و`sessionFilter`، و`target` (`"dm"` أو `"channel"` أو `"both"`). -| مجموعة الإجراء | الافتراضي | ملاحظات | -| ------------ | ------- | ---------------------- | -| reactions | مفعّل | التفاعل + سرد التفاعلات | -| messages | مفعّل | القراءة/الإرسال/التحرير/الحذف | -| pins | مفعّل | التثبيت/إلغاء التثبيت/السرد | -| memberInfo | مفعّل | معلومات العضو | -| emojiList | مفعّل | قائمة emoji المخصصة | +| مجموعة الإجراءات | الافتراضي | ملاحظات | +| ---------------- | --------- | ------- | +| reactions | مفعّل | التفاعل + سرد التفاعلات | +| messages | مفعّل | قراءة/إرسال/تحرير/حذف | +| pins | مفعّل | تثبيت/إلغاء تثبيت/سرد | +| memberInfo | مفعّل | معلومات العضو | +| emojiList | مفعّل | قائمة emoji المخصصة | ### Mattermost @@ -526,23 +521,21 @@ x-i18n: } ``` -أوضاع الدردشة: `oncall` ‏(الرد عند @-mention، الافتراضي)، و`onmessage` ‏(كل رسالة)، و`onchar` ‏(الرسائل التي تبدأ ببادئة تشغيل). +أوضاع الدردشة: `oncall` (الرد عند @-mention، وهو الافتراضي)، و`onmessage` (كل رسالة)، و`onchar` (الرسائل التي تبدأ ببادئة تشغيل). -عند تمكين الأوامر الأصلية في Mattermost: +عند تفعيل أوامر Mattermost الأصلية: -- يجب أن يكون `commands.callbackPath` مسارًا (على سبيل المثال `/api/channels/mattermost/command`)، وليس عنوان URL كاملًا. -- يجب أن يشير `commands.callbackUrl` إلى نقطة نهاية Gateway الخاصة بـ OpenClaw وأن يكون قابلًا للوصول من خادم Mattermost. -- تتم مصادقة استدعاءات slash الأصلية باستخدام الرموز الخاصة بكل أمر التي يعيدها - Mattermost أثناء تسجيل أوامر الشرطة المائلة. وإذا فشل التسجيل أو لم يتم - تنشيط أي أوامر، فسيرفض OpenClaw الاستدعاءات بالرسالة +- يجب أن يكون `commands.callbackPath` مساراً (على سبيل المثال `/api/channels/mattermost/command`) وليس عنوان URL كاملاً. +- يجب أن يُحلّ `commands.callbackUrl` إلى نقطة نهاية Gateway الخاصة بـ OpenClaw وأن يكون قابلاً للوصول من خادم Mattermost. +- تتم مصادقة عمليات رد نداء slash الأصلية باستخدام الرموز المميزة لكل أمر التي يعيدها Mattermost أثناء تسجيل أوامر slash. إذا فشل التسجيل أو لم يتم تفعيل أي أوامر، يرفض OpenClaw عمليات الرد الندائي برسالة `Unauthorized: invalid command token.` -- بالنسبة إلى مضيفي الاستدعاء الخاصين/الداخليين/‏tailnet، قد يتطلب Mattermost - أن تتضمن `ServiceSettings.AllowedUntrustedInternalConnections` المضيف/النطاق الخاص بالاستدعاء. +- بالنسبة إلى مستضيفي الرد الندائي الخاصين/على tailnet/الداخليين، قد يتطلب Mattermost أن تتضمن + `ServiceSettings.AllowedUntrustedInternalConnections` مضيف/نطاق الرد الندائي. استخدم قيم المضيف/النطاق، وليس عناوين URL كاملة. -- `channels.mattermost.configWrites`: السماح أو المنع لعمليات كتابة التكوين التي يطلقها Mattermost. -- `channels.mattermost.requireMention`: اشتراط `@mention` قبل الرد في القنوات. -- `channels.mattermost.groups..requireMention`: تجاوز بوابة الإشارة لكل قناة (`"*"` للافتراضي). -- يتجاوز `channels.mattermost.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مكوّنًا. +- `channels.mattermost.configWrites`: السماح بعمليات كتابة الإعدادات المُبادَر بها من Mattermost أو رفضها. +- `channels.mattermost.requireMention`: يتطلب `@mention` قبل الرد في القنوات. +- `channels.mattermost.groups..requireMention`: تجاوز تقييد الذكر لكل قناة (`"*"` للقيمة الافتراضية). +- يجاوز `channels.mattermost.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُكوَّناً. ### Signal @@ -551,7 +544,7 @@ x-i18n: channels: { signal: { enabled: true, - account: "+15555550123", // ربط اختياري للحساب + account: "+15555550123", // optional account binding dmPolicy: "pairing", allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"], configWrites: true, @@ -563,15 +556,15 @@ x-i18n: } ``` -**أوضاع إشعارات التفاعل:** ‏`off`، و`own` ‏(الافتراضي)، و`all`، و`allowlist` ‏(من `reactionAllowlist`). +**أوضاع إشعارات التفاعلات:** `off` و`own` (الافتراضي) و`all` و`allowlist` (من `reactionAllowlist`). - `channels.signal.account`: تثبيت بدء تشغيل القناة على هوية حساب Signal محددة. -- `channels.signal.configWrites`: السماح أو المنع لعمليات كتابة التكوين التي يطلقها Signal. -- يتجاوز `channels.signal.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مكوّنًا. +- `channels.signal.configWrites`: السماح بعمليات كتابة الإعدادات المُبادَر بها من Signal أو رفضها. +- يجاوز `channels.signal.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُكوَّناً. ### BlueBubbles -يُعد BlueBubbles المسار الموصى به لـ iMessage ‏(مدعومًا عبر Plugin، ومكوّنًا تحت `channels.bluebubbles`). +يُعد BlueBubbles المسار الموصى به لـ iMessage ‏(مدعوماً عبر Plugin، ويُضبط ضمن `channels.bluebubbles`). ```json5 { @@ -587,9 +580,9 @@ x-i18n: ``` - مسارات المفاتيح الأساسية المغطاة هنا: `channels.bluebubbles` و`channels.bluebubbles.dmPolicy`. -- يتجاوز `channels.bluebubbles.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مكوّنًا. -- يمكن لإدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` ربط محادثات BlueBubbles بجلسات ACP مستمرة. استخدم مقبض BlueBubbles أو سلسلة هدف (`chat_id:*` أو `chat_guid:*` أو `chat_identifier:*`) في `match.peer.id`. دلالات الحقول المشتركة: [وكلاء ACP](/ar/tools/acp-agents#channel-specific-settings). -- تم توثيق تكوين قناة BlueBubbles الكامل في [BlueBubbles](/ar/channels/bluebubbles). +- يجاوز `channels.bluebubbles.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُكوَّناً. +- يمكن لإدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` ربط محادثات BlueBubbles بجلسات ACP دائمة. استخدم مقبض BlueBubbles أو سلسلة الهدف (`chat_id:*` أو `chat_guid:*` أو `chat_identifier:*`) في `match.peer.id`. دلالات الحقول المشتركة: [وكلاء ACP](/ar/tools/acp-agents#channel-specific-settings). +- تم توثيق إعدادات قناة BlueBubbles الكاملة في [BlueBubbles](/ar/channels/bluebubbles). ### iMessage @@ -617,15 +610,15 @@ x-i18n: } ``` -- يتجاوز `channels.imessage.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مكوّنًا. +- يجاوز `channels.imessage.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُكوَّناً. - يتطلب Full Disk Access إلى قاعدة بيانات Messages. -- يفضل استخدام أهداف `chat_id:`. استخدم `imsg chats --limit 20` لسرد المحادثات. -- يمكن أن يشير `cliPath` إلى غلاف SSH؛ واضبط `remoteHost` ‏(`host` أو `user@host`) لجلب المرفقات عبر SCP. -- يقيّد `attachmentRoots` و`remoteAttachmentRoots` مسارات المرفقات الواردة (الافتراضي: `/Users/*/Library/Messages/Attachments`). -- يستخدم SCP تحققًا صارمًا من مفتاح المضيف، لذا تأكد من أن مفتاح مضيف relay موجود بالفعل في `~/.ssh/known_hosts`. -- `channels.imessage.configWrites`: السماح أو المنع لعمليات كتابة التكوين التي يطلقها iMessage. -- يمكن لإدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` ربط محادثات iMessage بجلسات ACP مستمرة. استخدم مقبضًا مُطبّعًا أو هدف دردشة صريحًا (`chat_id:*` أو `chat_guid:*` أو `chat_identifier:*`) في `match.peer.id`. دلالات الحقول المشتركة: [وكلاء ACP](/ar/tools/acp-agents#channel-specific-settings). +- يُفضّل استخدام أهداف `chat_id:`. استخدم `imsg chats --limit 20` لسرد المحادثات. +- يمكن أن يشير `cliPath` إلى غلاف SSH؛ واضبط `remoteHost` (`host` أو `user@host`) لجلب المرفقات عبر SCP. +- تقيد `attachmentRoots` و`remoteAttachmentRoots` مسارات المرفقات الواردة (الافتراضي: `/Users/*/Library/Messages/Attachments`). +- يستخدم SCP تحققاً صارماً من مفتاح المضيف، لذا تأكد من أن مفتاح مضيف relay موجود مسبقاً في `~/.ssh/known_hosts`. +- `channels.imessage.configWrites`: السماح بعمليات كتابة الإعدادات المُبادَر بها من iMessage أو رفضها. +- يمكن لإدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` ربط محادثات iMessage بجلسات ACP دائمة. استخدم مقبضاً مُطبَّعاً أو هدف دردشة صريحاً (`chat_id:*` أو `chat_guid:*` أو `chat_identifier:*`) في `match.peer.id`. دلالات الحقول المشتركة: [وكلاء ACP](/ar/tools/acp-agents#channel-specific-settings). @@ -638,7 +631,7 @@ exec ssh -T gateway-host imsg "$@" ### Matrix -Matrix مدعوم عبر Plugin ويتم تكوينه تحت `channels.matrix`. +تتم إدارة Matrix عبر Plugin وتُضبط ضمن `channels.matrix`. ```json5 { @@ -668,25 +661,25 @@ Matrix مدعوم عبر Plugin ويتم تكوينه تحت `channels.matrix`. } ``` -- تستخدم مصادقة الرمز `accessToken`؛ وتستخدم مصادقة كلمة المرور `userId` + `password`. -- يقوم `channels.matrix.proxy` بتوجيه حركة HTTP الخاصة بـ Matrix عبر proxy ‏HTTP(S) صريح. ويمكن للحسابات المسماة تجاوزه باستخدام `channels.matrix.accounts..proxy`. -- يسمح `channels.matrix.network.dangerouslyAllowPrivateNetwork` بخوادم homeserver الخاصة/الداخلية. ويُعد `proxy` وخيار الشبكة هذا عنصرَي تحكم مستقلين. -- يحدد `channels.matrix.defaultAccount` الحساب المفضل في إعدادات الحسابات المتعددة. -- تكون القيمة الافتراضية لـ `channels.matrix.autoJoin` هي `off`، لذا يتم تجاهل الغرف المدعو إليها ودعوات الرسائل المباشرة الجديدة حتى تضبط `autoJoin: "allowlist"` مع `autoJoinAllowlist` أو `autoJoin: "always"`. -- `channels.matrix.execApprovals`: تسليم موافقات exec الأصلية في Matrix وتفويض المعتمدين. - - `enabled`: ‏`true` أو `false` أو `"auto"` ‏(الافتراضي). في وضع auto، تُفعَّل موافقات exec عندما يمكن حل المعتمدين من `approvers` أو `commands.ownerAllowFrom`. +- تستخدم مصادقة الرمز المميز `accessToken`؛ وتستخدم مصادقة كلمة المرور `userId` + `password`. +- يوجّه `channels.matrix.proxy` حركة HTTP الخاصة بـ Matrix عبر وكيل HTTP(S) صريح. ويمكن للحسابات المسماة تجاوزه عبر `channels.matrix.accounts..proxy`. +- يسمح `channels.matrix.network.dangerouslyAllowPrivateNetwork` بخوادم homeserver الخاصة/الداخلية. ويُعد `proxy` وهذا الاشتراك الاختياري للشبكة عنصرَي تحكم مستقلين. +- يحدد `channels.matrix.defaultAccount` الحساب المفضّل في إعدادات الحسابات المتعددة. +- تكون القيمة الافتراضية لـ `channels.matrix.autoJoin` هي `off`، لذا يتم تجاهل الغرف المدعوّة ودعوات الرسائل الخاصة الجديدة إلى أن تضبط `autoJoin: "allowlist"` مع `autoJoinAllowlist` أو `autoJoin: "always"`. +- `channels.matrix.execApprovals`: تسليم موافقات exec الأصلية لـ Matrix وتفويض الموافقين. + - `enabled`: ‏`true` أو `false` أو `"auto"` (الافتراضي). في الوضع التلقائي، تتفعّل موافقات exec عندما يمكن حل الموافقين من `approvers` أو `commands.ownerAllowFrom`. - `approvers`: معرّفات مستخدمي Matrix ‏(مثل `@owner:example.org`) المسموح لهم بالموافقة على طلبات exec. - `agentFilter`: قائمة سماح اختيارية لمعرّفات الوكلاء. احذفها لتمرير الموافقات لجميع الوكلاء. - - `sessionFilter`: أنماط مفاتيح جلسات اختيارية (substring أو regex). - - `target`: مكان إرسال مطالبات الموافقة. `"dm"` ‏(الافتراضي)، أو `"channel"` ‏(الغرفة الأصلية)، أو `"both"`. - - تجاوزات لكل حساب: `channels.matrix.accounts..execApprovals`. -- يتحكم `channels.matrix.dm.sessionScope` في كيفية تجميع الرسائل المباشرة في Matrix إلى جلسات: يشارك `per-user` ‏(الافتراضي) حسب النظير الموجّه، بينما يعزل `per-room` كل غرفة رسائل مباشرة. -- تستخدم فحوصات حالة Matrix وعمليات البحث في الدليل الحية سياسة proxy نفسها المستخدمة في حركة runtime. -- تم توثيق تكوين Matrix الكامل، وقواعد الاستهداف، وأمثلة الإعداد في [Matrix](/ar/channels/matrix). + - `sessionFilter`: أنماط مفاتيح جلسات اختيارية (سلسلة جزئية أو regex). + - `target`: مكان إرسال مطالبات الموافقة. `"dm"` (الافتراضي)، أو `"channel"` (الغرفة الأصلية)، أو `"both"`. + - التجاوزات لكل حساب: `channels.matrix.accounts..execApprovals`. +- تتحكم `channels.matrix.dm.sessionScope` في كيفية تجميع الرسائل الخاصة في Matrix ضمن جلسات: ‏`per-user` (الافتراضي) يشارك حسب النظير الموجّه إليه، بينما يعزل `per-room` كل غرفة رسائل خاصة. +- تستخدم فحوصات الحالة في Matrix وعمليات البحث المباشر في الدليل سياسة الوكيل نفسها المستخدمة في حركة وقت التشغيل. +- تم توثيق إعدادات Matrix الكاملة وقواعد الاستهداف وأمثلة الإعداد في [Matrix](/ar/channels/matrix). ### Microsoft Teams -Microsoft Teams مدعوم عبر Plugin ويتم تكوينه تحت `channels.msteams`. +تتم إدارة Microsoft Teams عبر Plugin وتُضبط ضمن `channels.msteams`. ```json5 { @@ -702,11 +695,11 @@ Microsoft Teams مدعوم عبر Plugin ويتم تكوينه تحت `channels. ``` - مسارات المفاتيح الأساسية المغطاة هنا: `channels.msteams` و`channels.msteams.configWrites`. -- تم توثيق تكوين Teams الكامل (بيانات الاعتماد، وWebhook، وسياسة الرسائل المباشرة/المجموعات، وتجاوزات كل فريق/كل قناة) في [Microsoft Teams](/ar/channels/msteams). +- تم توثيق إعدادات Teams الكاملة (بيانات الاعتماد، وWebhook، وسياسة الرسائل الخاصة/المجموعات، والتجاوزات لكل فريق/لكل قناة) في [Microsoft Teams](/ar/channels/msteams). ### IRC -IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. +تتم إدارة IRC عبر Plugin وتُضبط ضمن `channels.irc`. ```json5 { @@ -728,10 +721,10 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. ``` - مسارات المفاتيح الأساسية المغطاة هنا: `channels.irc` و`channels.irc.dmPolicy` و`channels.irc.configWrites` و`channels.irc.nickserv.*`. -- يتجاوز `channels.irc.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مكوّنًا. -- تم توثيق تكوين قناة IRC الكامل (المضيف/المنفذ/TLS/القنوات/قوائم السماح/بوابة الإشارة) في [IRC](/ar/channels/irc). +- يجاوز `channels.irc.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُكوَّناً. +- تم توثيق إعدادات قناة IRC الكاملة (المضيف/المنفذ/TLS/القنوات/قوائم السماح/تقييد الذكر) في [IRC](/ar/channels/irc). -### حسابات متعددة (جميع القنوات) +### تعدد الحسابات (جميع القنوات) شغّل عدة حسابات لكل قناة (لكل منها `accountId` خاص بها): @@ -754,28 +747,28 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. } ``` -- يُستخدم `default` عند حذف `accountId` ‏(في CLI + التوجيه). -- لا تنطبق رموز متغيرات البيئة إلا على الحساب **default**. +- يُستخدم `default` عند حذف `accountId` ‏(CLI + التوجيه). +- لا تنطبق رموز البيئة إلا على الحساب **default**. - تنطبق إعدادات القناة الأساسية على جميع الحسابات ما لم يتم تجاوزها لكل حساب. - استخدم `bindings[].match.accountId` لتوجيه كل حساب إلى وكيل مختلف. -- إذا أضفت حسابًا غير افتراضي عبر `openclaw channels add` ‏(أو الإعداد الأولي للقناة) بينما لا تزال على تكوين قناة أحادي الحساب من المستوى الأعلى، فسيقوم OpenClaw أولًا بترقية قيم الحساب الأحادي ذات المستوى الأعلى والمحددة بنطاق الحساب إلى خريطة حسابات القناة حتى يستمر الحساب الأصلي في العمل. وتنقل معظم القنوات هذه القيم إلى `channels..accounts.default`؛ بينما يمكن لـ Matrix بدلًا من ذلك الحفاظ على هدف مسمى/افتراضي مطابق موجود. -- تستمر ارتباطات القناة فقط الحالية (من دون `accountId`) في مطابقة الحساب الافتراضي؛ وتبقى الارتباطات المحددة بنطاق الحساب اختيارية. -- يصلح `openclaw doctor --fix` أيضًا الأشكال المختلطة عبر نقل قيم الحساب الأحادي ذات المستوى الأعلى والمحددة بنطاق الحساب إلى الحساب المُرقّى المختار لتلك القناة. تستخدم معظم القنوات `accounts.default`؛ بينما يمكن لـ Matrix الحفاظ على هدف مسمى/افتراضي مطابق موجود بدلًا من ذلك. +- إذا أضفت حساباً غير افتراضي عبر `openclaw channels add` ‏(أو عبر إعداد القناة) بينما ما زلت تستخدم إعداد قناة أحادي الحساب على المستوى الأعلى، يقوم OpenClaw أولاً بترقية القيم أحادية الحساب ذات المستوى الأعلى والمقيّدة بالحساب إلى خريطة حسابات القناة حتى يستمر الحساب الأصلي في العمل. تنقل معظم القنوات هذه القيم إلى `channels..accounts.default`؛ ويمكن لـ Matrix بدلاً من ذلك الاحتفاظ بهدف مسمّى/افتراضي موجود ومطابق. +- تستمر الروابط الحالية الخاصة بالقناة فقط (من دون `accountId`) في مطابقة الحساب الافتراضي؛ وتظل الروابط المقيّدة بالحساب اختيارية. +- يقوم `openclaw doctor --fix` أيضاً بإصلاح الأشكال المختلطة عبر نقل القيم أحادية الحساب ذات المستوى الأعلى والمقيّدة بالحساب إلى الحساب المُرقّى المختار لتلك القناة. تستخدم معظم القنوات `accounts.default`؛ ويمكن لـ Matrix بدلاً من ذلك الاحتفاظ بهدف مسمّى/افتراضي موجود ومطابق. ### قنوات Plugin الأخرى -يتم تكوين العديد من قنوات Plugin على أنها `channels.` ويتم توثيقها في صفحات القنوات المخصصة لها (على سبيل المثال Feishu، وMatrix، وLINE، وNostr، وZalo، وNextcloud Talk، وSynology Chat، وTwitch). +تُضبط العديد من قنوات Plugin على شكل `channels.` ويتم توثيقها في صفحات القنوات المخصصة لها (على سبيل المثال Feishu وMatrix وLINE وNostr وZalo وNextcloud Talk وSynology Chat وTwitch). راجع فهرس القنوات الكامل: [القنوات](/ar/channels). -### بوابة الإشارة في الدردشة الجماعية +### تقييد الذكر في الدردشات الجماعية -تتطلب الرسائل الجماعية افتراضيًا **وجود إشارة** (إشارة metadata أو أنماط regex آمنة). وينطبق ذلك على WhatsApp وTelegram وDiscord وGoogle Chat ودردشات المجموعات في iMessage. +تكون رسائل المجموعات افتراضياً **تتطلب الذكر** (ذكر في البيانات الوصفية أو أنماط regex آمنة). ينطبق ذلك على دردشات مجموعات WhatsApp وTelegram وDiscord وGoogle Chat وiMessage. -**أنواع الإشارة:** +**أنواع الذكر:** -- **إشارات metadata**: إشارات @ الأصلية في المنصة. ويتم تجاهلها في وضع الدردشة الذاتية لـ WhatsApp. -- **أنماط النص**: أنماط regex آمنة في `agents.list[].groupChat.mentionPatterns`. ويتم تجاهل الأنماط غير الصالحة والتكرار المتداخل غير الآمن. -- يتم فرض بوابة الإشارة فقط عندما يكون الاكتشاف ممكنًا (إشارات أصلية أو نمط واحد على الأقل). +- **الذكر في البيانات الوصفية**: إشارات @ الأصلية للمنصة. يتم تجاهلها في وضع الدردشة الذاتية في WhatsApp. +- **أنماط النص**: أنماط regex آمنة في `agents.list[].groupChat.mentionPatterns`. يتم تجاهل الأنماط غير الصالحة والتكرار المتداخل غير الآمن. +- لا يُفرض تقييد الذكر إلا عندما يكون الاكتشاف ممكناً (إشارات أصلية أو وجود نمط واحد على الأقل). ```json5 { @@ -788,9 +781,9 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. } ``` -يضبط `messages.groupChat.historyLimit` القيمة الافتراضية العامة. ويمكن للقنوات تجاوزها باستخدام `channels..historyLimit` ‏(أو لكل حساب). اضبط القيمة `0` للتعطيل. +يضبط `messages.groupChat.historyLimit` القيمة الافتراضية العامة. ويمكن للقنوات تجاوزها عبر `channels..historyLimit` ‏(أو لكل حساب). اضبطها على `0` للتعطيل. -#### حدود سجل الرسائل المباشرة +#### حدود سجل الرسائل الخاصة ```json5 { @@ -805,13 +798,13 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. } ``` -آلية الحل: تجاوز لكل رسالة مباشرة → افتراضي الموفر → بلا حد (يتم الاحتفاظ بالجميع). +آلية الحل: تجاوز لكل رسالة خاصة → افتراضي المزوّد → بلا حد (الاحتفاظ بالجميع). -مدعوم في: `telegram` و`whatsapp` و`discord` و`slack` و`signal` و`imessage` و`msteams`. +المدعوم: `telegram` و`whatsapp` و`discord` و`slack` و`signal` و`imessage` و`msteams`. #### وضع الدردشة الذاتية -أدرج رقمك الخاص في `allowFrom` لتمكين وضع الدردشة الذاتية (يتجاهل إشارات @ الأصلية، ولا يستجيب إلا لأنماط النص): +أدرج رقمك الخاص في `allowFrom` لتمكين وضع الدردشة الذاتية (يتجاهل إشارات @ الأصلية، ويستجيب فقط لأنماط النص): ```json5 { @@ -861,38 +854,38 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. -- تقوم هذه الكتلة بتكوين أسطح الأوامر. للحصول على فهرس الأوامر المضمّن + المجمّع الحالي، راجع [أوامر الشرطة المائلة](/ar/tools/slash-commands). -- هذه الصفحة هي **مرجع لمفاتيح التكوين**، وليست فهرس الأوامر الكامل. يتم توثيق الأوامر التي تملكها القنوات/Plugin مثل `/bot-ping` و`/bot-help` و`/bot-logs` الخاصة بـ QQ Bot، و`/card` الخاصة بـ LINE، و`/pair` الخاصة بـ device-pair، و`/dreaming` الخاصة بالذاكرة، و`/phone` الخاصة بـ phone-control، و`/voice` الخاصة بـ Talk في صفحات القنوات/Plugin الخاصة بها بالإضافة إلى [أوامر الشرطة المائلة](/ar/tools/slash-commands). -- يجب أن تكون الأوامر النصية رسائل **مستقلة** تبدأ بـ `/`. -- يقوم `native: "auto"` بتفعيل الأوامر الأصلية لـ Discord/Telegram، ويُبقي Slack معطّلًا. -- يقوم `nativeSkills: "auto"` بتفعيل أوامر Skills الأصلية لـ Discord/Telegram، ويُبقي Slack معطّلًا. -- تجاوز لكل قناة: `channels.discord.commands.native` ‏(قيمة منطقية أو `"auto"`). تؤدي القيمة `false` إلى مسح الأوامر المسجلة سابقًا. +- تضبط هذه الكتلة أسطح الأوامر. للاطلاع على فهرس الأوامر الحالي المضمّن + المجمّع، راجع [أوامر الشرطة المائلة](/ar/tools/slash-commands). +- هذه الصفحة هي **مرجع لمفاتيح الإعدادات**، وليست فهرس الأوامر الكامل. الأوامر المملوكة للقنوات/Plugin مثل `/bot-ping` و`/bot-help` و`/bot-logs` الخاصة بـ QQ Bot، و`/card` الخاصة بـ LINE، و`/pair` الخاصة بـ device-pair، و`/dreaming` الخاصة بالذاكرة، و`/phone` الخاصة بـ phone-control، و`/voice` الخاصة بـ Talk موثقة في صفحات القنوات/Plugin الخاصة بها بالإضافة إلى [أوامر الشرطة المائلة](/ar/tools/slash-commands). +- يجب أن تكون الأوامر النصية رسائل **مستقلة** مع `/` في البداية. +- يقوم `native: "auto"` بتشغيل الأوامر الأصلية لـ Discord/Telegram، ويترك Slack معطلاً. +- يقوم `nativeSkills: "auto"` بتشغيل أوامر Skills الأصلية لـ Discord/Telegram، ويترك Slack معطلاً. +- تجاوز لكل قناة: `channels.discord.commands.native` ‏(قيمة منطقية أو `"auto"`). تقوم `false` بمسح الأوامر المسجلة مسبقاً. - تجاوز تسجيل Skills الأصلية لكل قناة باستخدام `channels..commands.nativeSkills`. -- يضيف `channels.telegram.customCommands` إدخالات إضافية إلى قائمة bot في Telegram. -- يؤدي `bash: true` إلى تفعيل `! ` لصدفة المضيف. ويتطلب `tools.elevated.enabled` وأن يكون المرسل ضمن `tools.elevated.allowFrom.`. -- يؤدي `config: true` إلى تفعيل `/config` ‏(لقراءة/كتابة `openclaw.json`). وبالنسبة إلى عملاء `chat.send` في Gateway، تتطلب عمليات الكتابة الدائمة لـ `/config set|unset` أيضًا `operator.admin`؛ بينما يظل `/config show` للقراءة فقط متاحًا لعملاء operator العاديين ذوي نطاق الكتابة. -- يؤدي `mcp: true` إلى تفعيل `/mcp` لتكوين خادم MCP الذي يديره OpenClaw تحت `mcp.servers`. -- يؤدي `plugins: true` إلى تفعيل `/plugins` لاكتشاف Plugin وتثبيته والتحكم في تمكينه/تعطيله. -- يتحكم `channels..configWrites` في طفرات التكوين لكل قناة (الافتراضي: true). -- بالنسبة إلى القنوات متعددة الحسابات، يتحكم `channels..accounts..configWrites` أيضًا في عمليات الكتابة التي تستهدف ذلك الحساب (على سبيل المثال `/allowlist --config --account ` أو `/config set channels..accounts....`). -- يؤدي `restart: false` إلى تعطيل `/restart` وإجراءات أداة إعادة تشغيل Gateway. القيمة الافتراضية: `true`. -- `ownerAllowFrom` هي قائمة السماح الصريحة للمالك للأوامر/الأدوات الخاصة بالمالك فقط. وهي منفصلة عن `allowFrom`. -- يقوم `ownerDisplay: "hash"` بتجزئة معرّفات المالك في system prompt. اضبط `ownerDisplaySecret` للتحكم في التجزئة. -- `allowFrom` يكون لكل provider. وعند ضبطه، يصبح **مصدر التفويض الوحيد** (ويتم تجاهل قوائم سماح القنوات/الاقتران و`useAccessGroups`). -- يتيح `useAccessGroups: false` للأوامر تجاوز سياسات مجموعات الوصول عندما لا يكون `allowFrom` مضبوطًا. +- تضيف `channels.telegram.customCommands` إدخالات إضافية إلى قائمة بوت Telegram. +- يفعّل `bash: true` الأمر `! ` لواجهة shell الخاصة بالمضيف. ويتطلب `tools.elevated.enabled` وأن يكون المرسل ضمن `tools.elevated.allowFrom.`. +- يفعّل `config: true` الأمر `/config` ‏(قراءة/كتابة `openclaw.json`). بالنسبة إلى عملاء `chat.send` في Gateway، تتطلب أيضاً عمليات الكتابة الدائمة عبر `/config set|unset` الصلاحية `operator.admin`؛ بينما يبقى `/config show` للقراءة فقط متاحاً لعملاء المشغّل العاديين ذوي نطاق الكتابة. +- يفعّل `mcp: true` الأمر `/mcp` لإعدادات خادم MCP المُدار من OpenClaw ضمن `mcp.servers`. +- يفعّل `plugins: true` الأمر `/plugins` لاكتشاف Plugin وتثبيته والتحكم في تمكينه/تعطيله. +- تتحكم `channels..configWrites` في تعديلات الإعدادات لكل قناة (الافتراضي: true). +- بالنسبة إلى القنوات متعددة الحسابات، تتحكم أيضاً `channels..accounts..configWrites` في عمليات الكتابة التي تستهدف ذلك الحساب (على سبيل المثال `/allowlist --config --account ` أو `/config set channels..accounts....`). +- يعطّل `restart: false` الأمر `/restart` وإجراءات أداة إعادة تشغيل Gateway. الافتراضي: `true`. +- تمثل `ownerAllowFrom` قائمة السماح الصريحة للمالك للأوامر/الأدوات الخاصة بالمالك فقط. وهي منفصلة عن `allowFrom`. +- تقوم `ownerDisplay: "hash"` بتجزئة معرّفات المالك في system prompt. اضبط `ownerDisplaySecret` للتحكم في التجزئة. +- تكون `allowFrom` لكل مزوّد. وعند ضبطها، تصبح مصدر التفويض **الوحيد** (ويتم تجاهل قوائم السماح/الاقتران الخاصة بالقنوات و`useAccessGroups`). +- يسمح `useAccessGroups: false` للأوامر بتجاوز سياسات مجموعات الوصول عندما لا تكون `allowFrom` مضبوطة. - خريطة وثائق الأوامر: - الفهرس المضمّن + المجمّع: [أوامر الشرطة المائلة](/ar/tools/slash-commands) - أسطح الأوامر الخاصة بالقنوات: [القنوات](/ar/channels) - أوامر QQ Bot: ‏[QQ Bot](/ar/channels/qqbot) - أوامر الاقتران: [الاقتران](/ar/channels/pairing) - - أمر البطاقات في LINE: ‏[LINE](/ar/channels/line) - - Dreaming الخاص بالذاكرة: [Dreaming](/ar/concepts/dreaming) + - أمر بطاقة LINE: ‏[LINE](/ar/channels/line) + - dreaming الخاصة بالذاكرة: [Dreaming](/ar/concepts/dreaming) --- -## القيم الافتراضية للوكلاء +## الإعدادات الافتراضية للوكيل ### `agents.defaults.workspace` @@ -906,7 +899,7 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. ### `agents.defaults.repoRoot` -جذر مستودع اختياري يظهر في سطر Runtime داخل system prompt. وإذا لم يتم ضبطه، يقوم OpenClaw باكتشافه تلقائيًا عبر الصعود من workspace. +جذر مستودع اختياري يظهر في سطر Runtime ضمن system prompt. إذا لم يكن مضبوطاً، يكتشفه OpenClaw تلقائياً عبر الصعود من مساحة العمل إلى الأعلى. ```json5 { @@ -924,23 +917,23 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. agents: { defaults: { skills: ["github", "weather"] }, list: [ - { id: "writer" }, // يرث github وweather - { id: "docs", skills: ["docs-search"] }, // يستبدل القيم الافتراضية - { id: "locked-down", skills: [] }, // بدون Skills + { id: "writer" }, // inherits github, weather + { id: "docs", skills: ["docs-search"] }, // replaces defaults + { id: "locked-down", skills: [] }, // no skills ], }, } ``` -- احذف `agents.defaults.skills` للحصول على Skills غير مقيّدة افتراضيًا. +- احذف `agents.defaults.skills` للحصول على Skills غير مقيّدة افتراضياً. - احذف `agents.list[].skills` لوراثة القيم الافتراضية. - اضبط `agents.list[].skills: []` لعدم استخدام أي Skills. -- تكون قائمة `agents.list[].skills` غير الفارغة هي المجموعة النهائية لذلك الوكيل؛ - ولا تندمج مع القيم الافتراضية. +- تمثل القائمة غير الفارغة `agents.list[].skills` المجموعة النهائية لذلك الوكيل؛ + ولا تُدمَج مع القيم الافتراضية. ### `agents.defaults.skipBootstrap` -يعطّل الإنشاء التلقائي لملفات bootstrap الخاصة بـ workspace ‏(`AGENTS.md` و`SOUL.md` و`TOOLS.md` و`IDENTITY.md` و`USER.md` و`HEARTBEAT.md` و`BOOTSTRAP.md`). +يعطّل الإنشاء التلقائي لملفات bootstrap الخاصة بمساحة العمل (`AGENTS.md` و`SOUL.md` و`TOOLS.md` و`IDENTITY.md` و`USER.md` و`HEARTBEAT.md` و`BOOTSTRAP.md`). ```json5 { @@ -950,9 +943,9 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. ### `agents.defaults.contextInjection` -يتحكم في وقت حقن ملفات bootstrap الخاصة بـ workspace في system prompt. القيمة الافتراضية: `"always"`. +يتحكم في توقيت حقن ملفات bootstrap الخاصة بمساحة العمل في system prompt. القيمة الافتراضية: `"always"`. -- `"continuation-skip"`: تتخطى دورات المتابعة الآمنة (بعد اكتمال رد المساعد) إعادة حقن bootstrap الخاص بـ workspace، مما يقلل حجم prompt. وتستمر عمليات Heartbeat وإعادات المحاولة بعد Compaction في إعادة بناء السياق. +- `"continuation-skip"`: في أدوار المتابعة الآمنة (بعد اكتمال رد من المساعد)، يتم تخطي إعادة حقن bootstrap الخاص بمساحة العمل، مما يقلل حجم prompt. وتستمر عمليات Heartbeat وإعادة المحاولة بعد Compaction في إعادة بناء السياق. ```json5 { @@ -962,7 +955,7 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. ### `agents.defaults.bootstrapMaxChars` -الحد الأقصى للأحرف لكل ملف bootstrap في workspace قبل الاقتطاع. القيمة الافتراضية: `12000`. +الحد الأقصى لعدد الأحرف في كل ملف bootstrap لمساحة العمل قبل الاقتطاع. الافتراضي: `12000`. ```json5 { @@ -972,7 +965,7 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. ### `agents.defaults.bootstrapTotalMaxChars` -الحد الأقصى الإجمالي للأحرف المحقونة عبر جميع ملفات bootstrap الخاصة بـ workspace. القيمة الافتراضية: `60000`. +الحد الأقصى الإجمالي للأحرف المحقونة عبر جميع ملفات bootstrap الخاصة بمساحة العمل. الافتراضي: `60000`. ```json5 { @@ -983,11 +976,11 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. ### `agents.defaults.bootstrapPromptTruncationWarning` يتحكم في نص التحذير المرئي للوكيل عندما يتم اقتطاع سياق bootstrap. -القيمة الافتراضية: `"once"`. +الافتراضي: `"once"`. -- `"off"`: لا يحقن نص تحذير مطلقًا في system prompt. -- `"once"`: يحقن التحذير مرة واحدة لكل توقيع اقتطاع فريد (موصى به). -- `"always"`: يحقن التحذير في كل تشغيل عند وجود اقتطاع. +- `"off"`: لا يتم حقن نص تحذير في system prompt أبداً. +- `"once"`: يتم حقن التحذير مرة واحدة لكل بصمة اقتطاع فريدة (موصى به). +- `"always"`: يتم حقن التحذير في كل تشغيل عندما يوجد اقتطاع. ```json5 { @@ -997,22 +990,22 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. ### خريطة ملكية ميزانية السياق -يمتلك OpenClaw عدة ميزانيات كبيرة الحجم للـ prompt/السياق، وهي -مقسّمة عمدًا حسب النظام الفرعي بدلًا من تمريرها جميعًا عبر -مفتاح عام واحد. +يحتوي OpenClaw على عدة ميزانيات كبيرة الحجم للـ prompt/السياق، وهي +مقسّمة عمداً حسب النظام الفرعي بدلاً من تمريرها كلها عبر +مفتاح تحكم عام واحد. - `agents.defaults.bootstrapMaxChars` / `agents.defaults.bootstrapTotalMaxChars`: - حقن bootstrap العادي الخاص بـ workspace. + حقن bootstrap العادي لمساحة العمل. - `agents.defaults.startupContext.*`: - تمهيد بدء تشغيل لمرة واحدة مع `/new` و`/reset`، بما في ذلك ملفات - `memory/*.md` اليومية الحديثة. + تمهيد بدء تشغيل لمرة واحدة لأوامر `/new` و`/reset`، بما في ذلك + ملفات `memory/*.md` اليومية الحديثة. - `skills.limits.*`: - قائمة Skills المضغوطة المحقونة في system prompt. + قائمة Skills المدمجة المحقونة في system prompt. - `agents.defaults.contextLimits.*`: - مقتطفات runtime المحدودة والكتل المملوكة لـ runtime والمحقونة. + مقتطفات وقت تشغيل محدودة وكتل مملوكة لوقت التشغيل يتم حقنها. - `memory.qmd.limits.*`: - أحجام مقتطفات البحث في الذاكرة المفهرسة وحقنها. + حجم مقتطفات البحث في الذاكرة المفهرسة وحقنها. استخدم التجاوز المطابق لكل وكيل فقط عندما يحتاج وكيل واحد إلى ميزانية مختلفة: @@ -1022,8 +1015,8 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. #### `agents.defaults.startupContext` -يتحكم في تمهيد البدء الأول المحقون عند تشغيلات `/new` و`/reset` -العارية. +يتحكم في تمهيد بدء التشغيل لأول دور، والذي يُحقن في عمليات +`/new` و`/reset` المجردة. ```json5 { @@ -1044,7 +1037,7 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. #### `agents.defaults.contextLimits` -القيم الافتراضية المشتركة لأسطح سياق runtime المحدودة. +إعدادات افتراضية مشتركة لأسطح سياق وقت التشغيل المحدودة. ```json5 { @@ -1062,17 +1055,17 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. ``` - `memoryGetMaxChars`: الحد الافتراضي لمقتطف `memory_get` قبل إضافة - بيانات وصفية للاقتطاع وإشعار بالمتابعة. -- `memoryGetDefaultLines`: نافذة الأسطر الافتراضية لـ `memory_get` عند + بيانات الاقتطاع الوصفية وإشعار المتابعة. +- `memoryGetDefaultLines`: نافذة الأسطر الافتراضية لـ `memory_get` عندما يتم حذف `lines`. -- `toolResultMaxChars`: حد نتائج الأدوات الحي المستخدم للنتائج المستمرة - واستعادة الفائض. +- `toolResultMaxChars`: الحد الحي لنتائج الأدوات والمستخدم للنتائج المحفوظة + واسترداد الفائض. - `postCompactionMaxChars`: حد مقتطف `AGENTS.md` المستخدم أثناء حقن التحديث بعد Compaction. #### `agents.list[].contextLimits` -تجاوز لكل وكيل لمفاتيح `contextLimits` المشتركة. وترث الحقول المحذوفة +تجاوز لكل وكيل لمفاتيح `contextLimits` المشتركة. ترث الحقول المحذوفة من `agents.defaults.contextLimits`. ```json5 @@ -1099,7 +1092,7 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. #### `skills.limits.maxSkillsPromptChars` -الحد العام لقائمة Skills المضغوطة المحقونة في system prompt. هذا +حد عام لقائمة Skills المدمجة المحقونة في system prompt. وهذا لا يؤثر في قراءة ملفات `SKILL.md` عند الطلب. ```json5 @@ -1133,11 +1126,11 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. ### `agents.defaults.imageMaxDimensionPx` -الحد الأقصى لحجم البكسل لأطول ضلع في الصورة داخل كتل الصور في transcript/tool قبل استدعاءات provider. -القيمة الافتراضية: `1200`. +أقصى حجم بالبكسل لأطول ضلع في الصورة داخل كتل الصور في السجل/الأدوات قبل استدعاءات المزوّد. +الافتراضي: `1200`. -تؤدي القيم الأقل عادةً إلى تقليل استخدام vision-token وحجم حمولة الطلبات في التشغيلات كثيرة لقطات الشاشة. -أما القيم الأعلى فتحافظ على مزيد من التفاصيل البصرية. +تؤدي القيم المنخفضة عادةً إلى تقليل استخدام رموز الرؤية وحجم حمولة الطلب في العمليات التي تكثر فيها لقطات الشاشة. +وتحافظ القيم الأعلى على مزيد من التفاصيل البصرية. ```json5 { @@ -1157,7 +1150,7 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. ### `agents.defaults.timeFormat` -تنسيق الوقت في system prompt. القيمة الافتراضية: `auto` ‏(تفضيل نظام التشغيل). +تنسيق الوقت في system prompt. الافتراضي: `auto` (تفضيل نظام التشغيل). ```json5 { @@ -1195,7 +1188,7 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. primary: "anthropic/claude-opus-4-6", fallbacks: ["openai/gpt-5.4-mini"], }, - params: { cacheRetention: "long" }, // معلمات provider الافتراضية العامة + params: { cacheRetention: "long" }, // global default provider params embeddedHarness: { runtime: "auto", // auto | pi | registered harness id, e.g. codex fallback: "pi", // pi | none @@ -1214,49 +1207,49 @@ IRC مدعوم عبر Plugin ويتم تكوينه تحت `channels.irc`. } ``` -- `model`: يقبل إما سلسلة نصية (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). - - تضبط صيغة السلسلة النموذج الأساسي فقط. - - تضبط صيغة الكائن النموذج الأساسي بالإضافة إلى نماذج التحويل عند الفشل بترتيب محدد. -- `imageModel`: يقبل إما سلسلة نصية (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). - - يُستخدم بواسطة مسار أداة `image` بوصفه تكوين نموذج الرؤية الخاص بها. - - ويُستخدم أيضًا كتوجيه احتياطي عندما لا يستطيع النموذج المحدد/الافتراضي قبول إدخال الصور. -- `imageGenerationModel`: يقبل إما سلسلة نصية (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). - - يُستخدم بواسطة قدرة إنشاء الصور المشتركة وأي سطح أداة/Plugin مستقبلي ينشئ صورًا. +- يقبل `model` إما سلسلة (`"provider/model"`) أو كائناً (`{ primary, fallbacks }`). + - يضبط شكل السلسلة النموذج الأساسي فقط. + - يضبط شكل الكائن النموذج الأساسي بالإضافة إلى نماذج التحويل الاحتياطي المرتبة. +- يقبل `imageModel` إما سلسلة (`"provider/model"`) أو كائناً (`{ primary, fallbacks }`). + - يُستخدم بواسطة مسار أداة `image` بوصفه إعداد نموذج الرؤية الخاص بها. + - ويُستخدم أيضاً كتوجيه احتياطي عندما لا يستطيع النموذج المحدد/الافتراضي قبول إدخال الصور. +- يقبل `imageGenerationModel` إما سلسلة (`"provider/model"`) أو كائناً (`{ primary, fallbacks }`). + - يُستخدم بواسطة قدرة إنشاء الصور المشتركة وأي سطح أداة/Plugin مستقبلي ينشئ صوراً. - القيم المعتادة: `google/gemini-3.1-flash-image-preview` لإنشاء الصور الأصلي في Gemini، أو `fal/fal-ai/flux/dev` لـ fal، أو `openai/gpt-image-2` لـ OpenAI Images. - - إذا اخترت provider/model مباشرة، فقم أيضًا بتكوين مصادقة/API key الخاصة بالـ provider المطابق (على سبيل المثال `GEMINI_API_KEY` أو `GOOGLE_API_KEY` لـ `google/*`، أو `OPENAI_API_KEY` لـ `openai/*`، أو `FAL_KEY` لـ `fal/*`). - - إذا تم حذفه، فلا يزال بإمكان `image_generate` استنتاج قيمة افتراضية لموفر مدعوم بالمصادقة. وهو يجرّب أولًا provider الافتراضي الحالي، ثم باقي موفري إنشاء الصور المسجلين بترتيب معرّف provider. -- `musicGenerationModel`: يقبل إما سلسلة نصية (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). - - يُستخدم بواسطة قدرة إنشاء الموسيقى المشتركة وأداة `music_generate` المضمنة. + - إذا اخترت مزوّداً/نموذجاً مباشرةً، فاضبط أيضاً مصادقة المزوّد/مفتاح API المطابق (على سبيل المثال `GEMINI_API_KEY` أو `GOOGLE_API_KEY` لـ `google/*`، و`OPENAI_API_KEY` لـ `openai/*`، و`FAL_KEY` لـ `fal/*`). + - إذا تم حذفه، فلا يزال بإمكان `image_generate` استنتاج قيمة افتراضية لمزوّد مدعوم بالمصادقة. إذ يحاول أولاً المزوّد الافتراضي الحالي، ثم بقية مزوّدي إنشاء الصور المسجلين بترتيب معرّف المزوّد. +- يقبل `musicGenerationModel` إما سلسلة (`"provider/model"`) أو كائناً (`{ primary, fallbacks }`). + - يُستخدم بواسطة قدرة إنشاء الموسيقى المشتركة وأداة `music_generate` المضمّنة. - القيم المعتادة: `google/lyria-3-clip-preview` أو `google/lyria-3-pro-preview` أو `minimax/music-2.5+`. - - إذا تم حذفه، فلا يزال بإمكان `music_generate` استنتاج قيمة افتراضية لموفر مدعوم بالمصادقة. وهو يجرّب أولًا provider الافتراضي الحالي، ثم باقي موفري إنشاء الموسيقى المسجلين بترتيب معرّف provider. - - إذا اخترت provider/model مباشرة، فقم أيضًا بتكوين مصادقة/API key الخاصة بالـ provider المطابق. -- `videoGenerationModel`: يقبل إما سلسلة نصية (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). - - يُستخدم بواسطة قدرة إنشاء الفيديو المشتركة وأداة `video_generate` المضمنة. + - إذا تم حذفه، فلا يزال بإمكان `music_generate` استنتاج قيمة افتراضية لمزوّد مدعوم بالمصادقة. إذ يحاول أولاً المزوّد الافتراضي الحالي، ثم بقية مزوّدي إنشاء الموسيقى المسجلين بترتيب معرّف المزوّد. + - إذا اخترت مزوّداً/نموذجاً مباشرةً، فاضبط أيضاً مصادقة المزوّد/مفتاح API المطابق. +- يقبل `videoGenerationModel` إما سلسلة (`"provider/model"`) أو كائناً (`{ primary, fallbacks }`). + - يُستخدم بواسطة قدرة إنشاء الفيديو المشتركة وأداة `video_generate` المضمّنة. - القيم المعتادة: `qwen/wan2.6-t2v` أو `qwen/wan2.6-i2v` أو `qwen/wan2.6-r2v` أو `qwen/wan2.6-r2v-flash` أو `qwen/wan2.7-r2v`. - - إذا تم حذفه، فلا يزال بإمكان `video_generate` استنتاج قيمة افتراضية لموفر مدعوم بالمصادقة. وهو يجرّب أولًا provider الافتراضي الحالي، ثم باقي موفري إنشاء الفيديو المسجلين بترتيب معرّف provider. - - إذا اخترت provider/model مباشرة، فقم أيضًا بتكوين مصادقة/API key الخاصة بالـ provider المطابق. - - يدعم موفر إنشاء الفيديو Qwen المضمّن حتى 1 فيديو ناتج، و1 صورة إدخال، و4 فيديوهات إدخال، ومدة 10 ثوانٍ، وخيارات `size` و`aspectRatio` و`resolution` و`audio` و`watermark` على مستوى provider. -- `pdfModel`: يقبل إما سلسلة نصية (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). + - إذا تم حذفه، فلا يزال بإمكان `video_generate` استنتاج قيمة افتراضية لمزوّد مدعوم بالمصادقة. إذ يحاول أولاً المزوّد الافتراضي الحالي، ثم بقية مزوّدي إنشاء الفيديو المسجلين بترتيب معرّف المزوّد. + - إذا اخترت مزوّداً/نموذجاً مباشرةً، فاضبط أيضاً مصادقة المزوّد/مفتاح API المطابق. + - يدعم مزوّد إنشاء الفيديو Qwen المجمّع حتى 1 فيديو خرج، و1 صورة دخل، و4 فيديوهات دخل، ومدة 10 ثوانٍ، وخيارات على مستوى المزوّد مثل `size` و`aspectRatio` و`resolution` و`audio` و`watermark`. +- يقبل `pdfModel` إما سلسلة (`"provider/model"`) أو كائناً (`{ primary, fallbacks }`). - يُستخدم بواسطة أداة `pdf` لتوجيه النموذج. - إذا تم حذفه، تعود أداة PDF إلى `imageModel`، ثم إلى النموذج المحلول للجلسة/الافتراضي. -- `pdfMaxBytesMb`: حد حجم PDF الافتراضي لأداة `pdf` عندما لا يتم تمرير `maxBytesMb` وقت الاستدعاء. -- `pdfMaxPages`: الحد الأقصى الافتراضي للصفحات التي يأخذها وضع الاستخراج الاحتياطي في أداة `pdf` في الاعتبار. -- `verboseDefault`: مستوى verbose الافتراضي للوكلاء. القيم: `"off"` و`"on"` و`"full"`. الافتراضي: `"off"`. -- `elevatedDefault`: مستوى المخرجات المرتفعة الافتراضي للوكلاء. القيم: `"off"` و`"on"` و`"ask"` و`"full"`. الافتراضي: `"on"`. -- `model.primary`: الصيغة `provider/model` ‏(مثل `openai/gpt-5.4`). إذا حذفت provider، فسيحاول OpenClaw أولًا اسمًا مستعارًا، ثم مطابقة فريدة لموفر مكوّن لذلك المعرّف الدقيق للنموذج، وبعد ذلك فقط يعود إلى provider الافتراضي المكوَّن (سلوك توافق قديم، لذا يُفضّل استخدام `provider/model` الصريح). وإذا لم يعد ذلك provider يوفّر النموذج الافتراضي المكوّن، فسيعود OpenClaw إلى أول provider/model مكوّن بدلًا من إظهار قيمة افتراضية قديمة لموفر تمت إزالته. -- `models`: فهرس النماذج المكوّن وقائمة السماح لـ `/model`. يمكن أن يتضمن كل إدخال `alias` ‏(اختصار) و`params` ‏(خاصة بالـ provider، مثل `temperature` و`maxTokens` و`cacheRetention` و`context1m`). -- `params`: معلمات provider الافتراضية العامة المطبقة على جميع النماذج. تُضبط في `agents.defaults.params` ‏(مثل `{ cacheRetention: "long" }`). -- أسبقية دمج `params` ‏(في التكوين): يتم تجاوز `agents.defaults.params` ‏(الأساس العام) بواسطة `agents.defaults.models["provider/model"].params` ‏(لكل نموذج)، ثم يتجاوز `agents.list[].params` ‏(المطابق لمعرّف الوكيل) حسب المفتاح. راجع [Prompt Caching](/ar/reference/prompt-caching) للتفاصيل. -- `embeddedHarness`: سياسة runtime منخفضة المستوى الافتراضية للوكلاء المضمّنين. استخدم `runtime: "auto"` للسماح لـ plugin harnesses المسجلة بالمطالبة بالنماذج المدعومة، أو `runtime: "pi"` لفرض harness المضمّن PI، أو معرّف harness مسجل مثل `runtime: "codex"`. اضبط `fallback: "none"` لتعطيل الرجوع التلقائي إلى PI. -- كتابات التكوين التي تغيّر هذه الحقول (على سبيل المثال `/models set` و`/models set-image` وأوامر add/remove الخاصة بالتحويل عند الفشل) تحفظ الصيغة الكائنية القياسية وتحافظ على قوائم التحويل عند الفشل الموجودة عندما يكون ذلك ممكنًا. -- `maxConcurrent`: الحد الأقصى لتشغيلات الوكلاء المتوازية عبر الجلسات (مع بقاء كل جلسة متسلسلة). الافتراضي: 4. +- يمثّل `pdfMaxBytesMb` الحد الافتراضي لحجم PDF لأداة `pdf` عندما لا يتم تمرير `maxBytesMb` وقت الاستدعاء. +- يمثّل `pdfMaxPages` الحد الأقصى الافتراضي للصفحات التي تؤخذ في الاعتبار بواسطة وضع الاستخراج الاحتياطي في أداة `pdf`. +- يمثّل `verboseDefault` مستوى verbose الافتراضي للوكلاء. القيم: `"off"` و`"on"` و`"full"`. الافتراضي: `"off"`. +- يمثّل `elevatedDefault` مستوى المخرجات المرتفعة الافتراضي للوكلاء. القيم: `"off"` و`"on"` و`"ask"` و`"full"`. الافتراضي: `"on"`. +- `model.primary`: بالتنسيق `provider/model` (مثل `openai/gpt-5.4`). إذا حذفت المزوّد، فسيحاول OpenClaw أولاً اسماً مستعاراً، ثم مطابقة فريدة لمزوّد مُكوَّن لذلك المعرّف الدقيق للنموذج، وبعد ذلك فقط يعود إلى المزوّد الافتراضي المُكوَّن (سلوك توافق قديم مُهمل، لذا يُفضَّل استخدام `provider/model` صريح). وإذا لم يعد ذلك المزوّد يوفّر النموذج الافتراضي المُكوَّن، يعود OpenClaw إلى أول مزوّد/نموذج مُكوَّن بدلاً من إظهار افتراضي قديم لمزوّد تمت إزالته. +- `models`: فهرس النماذج المُكوَّن وقائمة السماح الخاصة بـ `/model`. ويمكن أن يتضمن كل إدخال `alias` (اختصار) و`params` (خاصة بالمزوّد، مثل `temperature` و`maxTokens` و`cacheRetention` و`context1m`). +- `params`: معلمات المزوّد الافتراضية العامة المطبقة على جميع النماذج. تُضبط في `agents.defaults.params` (مثل `{ cacheRetention: "long" }`). +- أسبقية دمج `params` (الإعدادات): يتم تجاوز `agents.defaults.params` (الأساس العام) بواسطة `agents.defaults.models["provider/model"].params` (لكل نموذج)، ثم تقوم `agents.list[].params` (معرّف الوكيل المطابق) بالتجاوز حسب المفتاح. راجع [Prompt Caching](/ar/reference/prompt-caching) للتفاصيل. +- `embeddedHarness`: سياسة وقت التشغيل الافتراضية منخفضة المستوى للوكلاء المضمّنين. استخدم `runtime: "auto"` للسماح لـ Plugin harnesses المسجلة بالمطالبة بالنماذج المدعومة، أو `runtime: "pi"` لفرض PI harness المضمّن، أو معرّف harness مسجل مثل `runtime: "codex"`. اضبط `fallback: "none"` لتعطيل الرجوع التلقائي إلى PI. +- تقوم كُتّاب الإعدادات الذين يغيّرون هذه الحقول (على سبيل المثال `/models set` و`/models set-image` وأوامر إضافة/إزالة الاحتياطي) بحفظ الشكل الكائني القياسي والحفاظ على قوائم الاحتياطي الموجودة عند الإمكان. +- `maxConcurrent`: الحد الأقصى للتشغيلات المتوازية للوكلاء عبر الجلسات (مع بقاء كل جلسة متسلسلة). الافتراضي: 4. ### `agents.defaults.embeddedHarness` -يتحكم `embeddedHarness` في المنفذ منخفض المستوى الذي يشغّل أدوار الوكلاء المضمّنين. -وينبغي لمعظم البيئات الاحتفاظ بالقيمة الافتراضية `{ runtime: "auto", fallback: "pi" }`. -استخدمه عندما يوفّر Plugin موثوق harness أصليًا، مثل -Codex app-server harness المضمّن. +يتحكم `embeddedHarness` في أي منفّذ منخفض المستوى يشغّل أدوار الوكيل المضمّن. +يجب أن تُبقي معظم البيئات على القيمة الافتراضية `{ runtime: "auto", fallback: "pi" }`. +استخدمه عندما يوفّر Plugin موثوق native harness، مثل +Codex app-server harness المجمّع. ```json5 { @@ -1272,34 +1265,34 @@ Codex app-server harness المضمّن. } ``` -- `runtime`: ‏`"auto"` أو `"pi"` أو معرّف harness plugin مسجل. ويسجّل Plugin Codex المضمّن المعرف `codex`. -- `fallback`: ‏`"pi"` أو `"none"`. تُبقي `"pi"` على harness المضمّن PI كرجوع للتوافق. وتجعل `"none"` اختيار harness plugin المفقود أو غير المدعوم يفشل بدلًا من استخدام PI بصمت. -- تجاوزات البيئة: يتجاوز `OPENCLAW_AGENT_RUNTIME=` قيمة `runtime`؛ ويعطّل `OPENCLAW_AGENT_HARNESS_FALLBACK=none` الرجوع إلى PI لتلك العملية. -- لعمليات النشر الخاصة بـ Codex فقط، اضبط `model: "codex/gpt-5.4"` و`embeddedHarness.runtime: "codex"` و`embeddedHarness.fallback: "none"`. -- يتحكم هذا في chat harness المضمّن فقط. ولا تزال قدرات إنشاء الوسائط والرؤية وPDF والموسيقى والفيديو وTTS تستخدم إعدادات provider/model الخاصة بها. +- `runtime`: ‏`"auto"` أو `"pi"` أو معرّف Plugin harness مسجل. يقوم Plugin ‏Codex المجمّع بتسجيل `codex`. +- `fallback`: ‏`"pi"` أو `"none"`. يبقي `"pi"` على PI harness المضمّن بوصفه الرجوع الاحتياطي للتوافق عندما لا يتم اختيار Plugin harness. أما `"none"` فيجعل اختيار Plugin harness المفقود أو غير المدعوم يفشل بدلاً من استخدام PI بصمت. وتظهر حالات فشل Plugin harness المحدد دائماً مباشرةً. +- تجاوزات البيئة: يقوم `OPENCLAW_AGENT_RUNTIME=` بتجاوز `runtime`؛ ويعطّل `OPENCLAW_AGENT_HARNESS_FALLBACK=none` الرجوع الاحتياطي إلى PI لتلك العملية. +- بالنسبة إلى البيئات المعتمدة على Codex فقط، اضبط `model: "codex/gpt-5.4"` و`embeddedHarness.runtime: "codex"` و`embeddedHarness.fallback: "none"`. +- يتحكم هذا في chat harness المضمّن فقط. أما إنشاء الوسائط، والرؤية، وPDF، والموسيقى، والفيديو، وTTS فتظل تستخدم إعدادات المزوّد/النموذج الخاصة بها. -**اختصارات alias المضمّنة** (لا تنطبق إلا عندما يكون النموذج موجودًا في `agents.defaults.models`): +**اختصارات الأسماء المستعارة المضمّنة** (لا تنطبق إلا عندما يكون النموذج ضمن `agents.defaults.models`): -| Alias | النموذج | -| ------------------- | -------------------------------------- | -| `opus` | `anthropic/claude-opus-4-6` | -| `sonnet` | `anthropic/claude-sonnet-4-6` | -| `gpt` | `openai/gpt-5.4` | -| `gpt-mini` | `openai/gpt-5.4-mini` | -| `gpt-nano` | `openai/gpt-5.4-nano` | -| `gemini` | `google/gemini-3.1-pro-preview` | -| `gemini-flash` | `google/gemini-3-flash-preview` | +| الاسم المستعار | النموذج | +| -------------- | ------- | +| `opus` | `anthropic/claude-opus-4-6` | +| `sonnet` | `anthropic/claude-sonnet-4-6` | +| `gpt` | `openai/gpt-5.4` | +| `gpt-mini` | `openai/gpt-5.4-mini` | +| `gpt-nano` | `openai/gpt-5.4-nano` | +| `gemini` | `google/gemini-3.1-pro-preview` | +| `gemini-flash` | `google/gemini-3-flash-preview` | | `gemini-flash-lite` | `google/gemini-3.1-flash-lite-preview` | -تتغلب الأسماء المستعارة التي تكوّنها دائمًا على القيم الافتراضية. +تفوز أسماؤك المستعارة المكوّنة دائماً على القيم الافتراضية. -تفعّل نماذج Z.AI GLM-4.x وضع thinking تلقائيًا ما لم تضبط `--thinking off` أو تعرّف `agents.defaults.models["zai/"].params.thinking` بنفسك. -وتفعّل نماذج Z.AI قيمة `tool_stream` افتراضيًا لتدفق استدعاءات الأدوات. اضبط `agents.defaults.models["zai/"].params.tool_stream` إلى `false` لتعطيله. -وتستخدم نماذج Anthropic Claude 4.6 قيمة `adaptive` افتراضيًا في thinking عندما لا يتم تعيين مستوى thinking صريح. +تفعّل نماذج Z.AI GLM-4.x وضع التفكير تلقائياً ما لم تضبط `--thinking off` أو تعرّف `agents.defaults.models["zai/"].params.thinking` بنفسك. +وتفعّل نماذج Z.AI القيمة `tool_stream` افتراضياً لبث استدعاءات الأدوات. اضبط `agents.defaults.models["zai/"].params.tool_stream` على `false` لتعطيلها. +وتستخدم نماذج Anthropic Claude 4.6 افتراضياً التفكير `adaptive` عندما لا يكون هناك مستوى تفكير صريح مضبوط. ### `agents.defaults.cliBackends` -واجهات CLI خلفية اختيارية لتشغيلات الرجوع النصية فقط (من دون استدعاءات أدوات). وهي مفيدة كنسخة احتياطية عند فشل موفري API. +واجهات CLI خلفية اختيارية لتشغيلات الرجوع الاحتياطي النصية فقط (من دون استدعاءات أدوات). وهي مفيدة كنسخة احتياطية عند فشل مزوّدي API. ```json5 { @@ -1327,13 +1320,13 @@ Codex app-server harness المضمّن. } ``` -- تكون الواجهات الخلفية لـ CLI نصية أولًا؛ ويتم دائمًا تعطيل الأدوات. -- تكون الجلسات مدعومة عندما يتم ضبط `sessionArg`. -- يكون تمرير الصور مدعومًا عندما يقبل `imageArg` مسارات الملفات. +- واجهات CLI الخلفية نصية أولاً؛ ويتم دائماً تعطيل الأدوات. +- يتم دعم الجلسات عند ضبط `sessionArg`. +- يتم دعم تمرير الصور عندما يقبل `imageArg` مسارات الملفات. ### `agents.defaults.systemPromptOverride` -استبدل system prompt الكامل الذي يجمعه OpenClaw بسلسلة ثابتة. ويُضبط على المستوى الافتراضي (`agents.defaults.systemPromptOverride`) أو لكل وكيل (`agents.list[].systemPromptOverride`). وتكون القيم لكل وكيل ذات أسبقية أعلى؛ ويتم تجاهل القيمة الفارغة أو التي تحتوي على مسافات فقط. وهو مفيد لتجارب prompt المضبوطة. +استبدال system prompt الكامل الذي يجمعه OpenClaw بسلسلة ثابتة. يُضبط على المستوى الافتراضي (`agents.defaults.systemPromptOverride`) أو لكل وكيل (`agents.list[].systemPromptOverride`). تكون القيم لكل وكيل ذات أولوية أعلى؛ ويتم تجاهل القيمة الفارغة أو المؤلفة من مسافات فقط. وهو مفيد لتجارب prompt المضبوطة. ```json5 { @@ -1354,16 +1347,16 @@ Codex app-server harness المضمّن. agents: { defaults: { heartbeat: { - every: "30m", // 0m يعطّل + every: "30m", // 0m disables model: "openai/gpt-5.4-mini", includeReasoning: false, - includeSystemPromptSection: true, // الافتراضي: true؛ false يحذف قسم Heartbeat من system prompt - lightContext: false, // الافتراضي: false؛ true يُبقي فقط HEARTBEAT.md من ملفات bootstrap الخاصة بـ workspace - isolatedSession: false, // الافتراضي: false؛ true يشغّل كل Heartbeat في جلسة جديدة (بلا سجل محادثة) + includeSystemPromptSection: true, // default: true; false omits the Heartbeat section from the system prompt + lightContext: false, // default: false; true keeps only HEARTBEAT.md from workspace bootstrap files + isolatedSession: false, // default: false; true runs each heartbeat in a fresh session (no conversation history) session: "main", to: "+15555550123", - directPolicy: "allow", // allow (الافتراضي) | block - target: "none", // الافتراضي: none | الخيارات: last | whatsapp | telegram | discord | ... + directPolicy: "allow", // allow (default) | block + target: "none", // default: none | options: last | whatsapp | telegram | discord | ... prompt: "Read HEARTBEAT.md if it exists...", ackMaxChars: 300, suppressToolErrorWarnings: false, @@ -1374,15 +1367,15 @@ Codex app-server harness المضمّن. } ``` -- `every`: سلسلة مدة (`ms`/`s`/`m`/`h`). الافتراضي: `30m` ‏(مصادقة API-key) أو `1h` ‏(مصادقة OAuth). اضبطها على `0m` للتعطيل. -- `includeSystemPromptSection`: عندما تكون false، تحذف قسم Heartbeat من system prompt وتتخطى حقن `HEARTBEAT.md` في سياق bootstrap. الافتراضي: `true`. -- `suppressToolErrorWarnings`: عندما تكون true، تمنع حمولات تحذير أخطاء الأدوات أثناء تشغيلات Heartbeat. -- `timeoutSeconds`: الحد الأقصى للوقت بالثواني المسموح به لدور وكيل Heartbeat قبل إلغائه. اتركه غير مضبوط لاستخدام `agents.defaults.timeoutSeconds`. -- `directPolicy`: سياسة التسليم المباشر/DM. تسمح `allow` ‏(الافتراضي) بالتسليم إلى الأهداف المباشرة. وتمنع `block` التسليم إلى الأهداف المباشرة وتصدر `reason=dm-blocked`. -- `lightContext`: عندما تكون true، تستخدم تشغيلات Heartbeat سياق bootstrap خفيف الوزن وتحتفظ فقط بـ `HEARTBEAT.md` من ملفات bootstrap الخاصة بـ workspace. -- `isolatedSession`: عندما تكون true، يعمل كل Heartbeat في جلسة جديدة بلا سجل محادثة سابق. وهو نمط العزل نفسه المستخدم في Cron ‏`sessionTarget: "isolated"`. ويقلل كلفة الرموز لكل Heartbeat من نحو 100K إلى نحو 2-5K رمز. +- `every`: سلسلة مدة (`ms/s/m/h`). الافتراضي: `30m` (مصادقة API-key) أو `1h` (مصادقة OAuth). اضبطها على `0m` للتعطيل. +- `includeSystemPromptSection`: عند ضبطها على false، تحذف قسم Heartbeat من system prompt وتتخطى حقن `HEARTBEAT.md` في سياق bootstrap. الافتراضي: `true`. +- `suppressToolErrorWarnings`: عند ضبطها على true، يتم كبت حمولات تحذير أخطاء الأدوات أثناء تشغيلات Heartbeat. +- `timeoutSeconds`: الحد الأقصى للوقت بالثواني المسموح لدور وكيل Heartbeat قبل إيقافه. اتركه غير مضبوط لاستخدام `agents.defaults.timeoutSeconds`. +- `directPolicy`: سياسة التسليم المباشر/الرسائل الخاصة. تسمح `allow` (الافتراضي) بالتسليم إلى الهدف المباشر. وتمنع `block` التسليم إلى الهدف المباشر وتنتج `reason=dm-blocked`. +- `lightContext`: عند ضبطها على true، تستخدم تشغيلات Heartbeat سياق bootstrap خفيفاً وتحتفظ فقط بـ `HEARTBEAT.md` من ملفات bootstrap الخاصة بمساحة العمل. +- `isolatedSession`: عند ضبطها على true، يعمل كل Heartbeat في جلسة جديدة من دون أي سجل محادثة سابق. وهو نمط العزل نفسه الخاص بـ Cron ‏`sessionTarget: "isolated"`. ويقلل تكلفة الرموز لكل Heartbeat من نحو 100K إلى نحو 2-5K رمز. - لكل وكيل: اضبط `agents.list[].heartbeat`. عندما يعرّف أي وكيل `heartbeat`، **يعمل Heartbeat لهؤلاء الوكلاء فقط**. -- تشغّل Heartbeats أدوار وكيل كاملة — والفواصل الزمنية الأقصر تستهلك مزيدًا من الرموز. +- تشغّل Heartbeats أدوار وكلاء كاملة — والفواصل الأقصر تستهلك مزيداً من الرموز. ### `agents.defaults.compaction` @@ -1392,14 +1385,14 @@ Codex app-server harness المضمّن. defaults: { compaction: { mode: "safeguard", // default | safeguard - provider: "my-provider", // معرّف Plugin موفر Compaction مسجل (اختياري) + provider: "my-provider", // id of a registered compaction provider plugin (optional) timeoutSeconds: 900, reserveTokensFloor: 24000, identifierPolicy: "strict", // strict | off | custom - identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // يُستخدم عندما يكون identifierPolicy=custom - postCompactionSections: ["Session Startup", "Red Lines"], // [] يعطّل إعادة الحقن - model: "openrouter/anthropic/claude-sonnet-4-6", // تجاوز اختياري للنموذج خاص بـ Compaction فقط - notifyUser: true, // إرسال إشعارات مختصرة عند بدء Compaction واكتماله (الافتراضي: false) + identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // used when identifierPolicy=custom + postCompactionSections: ["Session Startup", "Red Lines"], // [] disables reinjection + model: "openrouter/anthropic/claude-sonnet-4-6", // optional compaction-only model override + notifyUser: true, // send brief notices when compaction starts and completes (default: false) memoryFlush: { enabled: true, softThresholdTokens: 6000, @@ -1412,19 +1405,19 @@ Codex app-server harness المضمّن. } ``` -- `mode`: ‏`default` أو `safeguard` ‏(تلخيص مقسّم إلى أجزاء للسجلات الطويلة). راجع [Compaction](/ar/concepts/compaction). -- `provider`: معرّف Plugin موفر Compaction مسجل. عند ضبطه، يتم استدعاء `summarize()` الخاص بالموفر بدلًا من التلخيص المضمن بواسطة LLM. ويعود إلى السلوك المضمن عند الفشل. يؤدي ضبط موفر إلى فرض `mode: "safeguard"`. راجع [Compaction](/ar/concepts/compaction). -- `timeoutSeconds`: الحد الأقصى للثواني المسموح بها لعملية Compaction واحدة قبل أن يقوم OpenClaw بإلغائها. الافتراضي: `900`. -- `identifierPolicy`: ‏`strict` ‏(الافتراضي)، أو `off`، أو `custom`. تضيف القيمة `strict` إرشادات مضمّنة للاحتفاظ بالمعرّفات المعتمة أثناء تلخيص Compaction. -- `identifierInstructions`: نص اختياري مخصص للحفاظ على المعرّفات يُستخدم عندما يكون `identifierPolicy=custom`. -- `postCompactionSections`: أسماء أقسام H2/H3 اختيارية من `AGENTS.md` لإعادة حقنها بعد Compaction. القيمة الافتراضية هي `["Session Startup", "Red Lines"]`؛ اضبطها على `[]` لتعطيل إعادة الحقن. وعند تركها غير مضبوطة أو ضبطها صراحةً على هذا الزوج الافتراضي، يتم أيضًا قبول عناوين `Every Session`/`Safety` الأقدم كرجوع قديم. -- `model`: تجاوز اختياري لـ `provider/model-id` لتلخيص Compaction فقط. استخدم هذا عندما يجب أن تبقى الجلسة الرئيسية على نموذج معيّن لكن تعمل ملخصات Compaction على نموذج آخر؛ وعند حذفه، يستخدم Compaction النموذج الأساسي للجلسة. -- `notifyUser`: عندما تكون `true`، يرسل إشعارات موجزة إلى المستخدم عند بدء Compaction وعند اكتماله (مثل "Compacting context..." و"Compaction complete"). يكون معطّلًا افتراضيًا لإبقاء Compaction صامتًا. -- `memoryFlush`: دور وكيل صامت قبل Compaction التلقائي لتخزين الذكريات الدائمة. يتم تخطيه عندما تكون `workspace` للقراءة فقط. +- `mode`: ‏`default` أو `safeguard` (تلخيص مُجزّأ للسجلات الطويلة). راجع [Compaction](/ar/concepts/compaction). +- `provider`: معرّف Plugin مزوّد Compaction مسجّل. عند ضبطه، يتم استدعاء `summarize()` الخاص بالمزوّد بدلاً من التلخيص المضمّن المعتمد على LLM. ويعود إلى المضمّن عند الفشل. يؤدي ضبط مزوّد إلى فرض `mode: "safeguard"`. راجع [Compaction](/ar/concepts/compaction). +- `timeoutSeconds`: الحد الأقصى بالثواني المسموح به لعملية Compaction واحدة قبل أن يقوم OpenClaw بإيقافها. الافتراضي: `900`. +- `identifierPolicy`: ‏`strict` (الافتراضي) أو `off` أو `custom`. تقوم `strict` بإضافة إرشادات مضمّنة للاحتفاظ بالمعرّفات المعتمة أثناء تلخيص Compaction. +- `identifierInstructions`: نص مخصص اختياري للمحافظة على المعرّفات يُستخدم عندما يكون `identifierPolicy=custom`. +- `postCompactionSections`: أسماء أقسام H2/H3 اختيارية من `AGENTS.md` لإعادة حقنها بعد Compaction. القيمة الافتراضية هي `["Session Startup", "Red Lines"]`؛ اضبط `[]` لتعطيل إعادة الحقن. عند عدم ضبطها أو عند ضبطها صراحةً على هذا الزوج الافتراضي، يتم أيضاً قبول العناوين الأقدم `Every Session`/`Safety` كبديل قديم. +- `model`: تجاوز اختياري بصيغة `provider/model-id` لتلخيص Compaction فقط. استخدم هذا عندما يجب أن تحتفظ الجلسة الرئيسية بنموذج واحد بينما تعمل ملخصات Compaction على نموذج آخر؛ وعند عدم ضبطه، يستخدم Compaction النموذج الأساسي للجلسة. +- `notifyUser`: عندما تكون قيمته `true`، يرسل إشعارات موجزة إلى المستخدم عند بدء Compaction وعند اكتماله (مثل "Compacting context..." و"Compaction complete"). ويكون معطلاً افتراضياً للحفاظ على صمت Compaction. +- `memoryFlush`: دور وكيل صامت قبل Compaction التلقائي لتخزين الذكريات الدائمة. يتم تخطيه عندما تكون مساحة العمل للقراءة فقط. ### `agents.defaults.contextPruning` -يقوم بتقليم **نتائج الأدوات القديمة** من السياق الموجود في الذاكرة قبل إرسالها إلى LLM. ولا **يعدّل** سجل الجلسة على القرص. +يقوم بتقليم **نتائج الأدوات القديمة** من السياق الموجود في الذاكرة قبل الإرسال إلى LLM. وهو **لا** يعدّل سجل الجلسة على القرص. ```json5 { @@ -1432,7 +1425,7 @@ Codex app-server harness المضمّن. defaults: { contextPruning: { mode: "cache-ttl", // off | cache-ttl - ttl: "1h", // مدة (ms/s/m/h)، الوحدة الافتراضية: الدقائق + ttl: "1h", // duration (ms/s/m/h), default unit: minutes keepLastAssistants: 3, softTrimRatio: 0.3, hardClearRatio: 0.5, @@ -1448,25 +1441,25 @@ Codex app-server harness المضمّن. -- يفعّل `mode: "cache-ttl"` عمليات التقليم. -- يتحكم `ttl` في عدد المرات التي يمكن أن يعمل فيها التقليم مجددًا (بعد آخر لمسة على cache). -- يقوم التقليم أولًا باقتطاع نتائج الأدوات الكبيرة اقتطاعًا خفيفًا، ثم يمسح نتائج الأدوات الأقدم مسحًا كاملًا إذا لزم الأمر. +- يفعّل `mode: "cache-ttl"` تمريرات التقليم. +- يتحكم `ttl` في عدد المرات التي يمكن أن يعمل فيها التقليم مجدداً (بعد آخر لمسة لذاكرة التخزين المؤقت). +- يقوم التقليم أولاً باقتطاع نتائج الأدوات كبيرة الحجم اقتطاعاً خفيفاً، ثم يفرّغ نتائج الأدوات الأقدم تفريغاً كاملاً عند الحاجة. -**الاقتطاع الخفيف** يحتفظ بالبداية + النهاية ويُدرج `...` في الوسط. +**الاقتطاع الخفيف** يحتفظ بالبداية + النهاية ويُدرج `...` في المنتصف. -**المسح الكامل** يستبدل نتيجة الأداة بالكامل بعنصر نائب. +**التفريغ الكامل** يستبدل نتيجة الأداة بالكامل بالنص النائب. ملاحظات: -- لا يتم أبدًا اقتطاع/مسح كتل الصور. -- تعتمد النسب على الأحرف (تقريبية)، وليست على عدد الرموز الدقيق. -- إذا وُجد عدد أقل من `keepLastAssistants` من رسائل المساعد، يتم تخطي التقليم. +- لا يتم أبداً اقتطاع/تفريغ كتل الصور. +- تستند النسب إلى عدد الأحرف (تقريبية)، وليس إلى عدد الرموز الدقيق. +- إذا كان عدد رسائل المساعد أقل من `keepLastAssistants`، يتم تخطي التقليم. -راجع [Session Pruning](/ar/concepts/session-pruning) للحصول على تفاصيل السلوك. +راجع [تقليم الجلسة](/ar/concepts/session-pruning) لمعرفة تفاصيل السلوك. -### التدفق على شكل كتل +### البث الكتلي ```json5 { @@ -1476,17 +1469,17 @@ Codex app-server harness المضمّن. blockStreamingBreak: "text_end", // text_end | message_end blockStreamingChunk: { minChars: 800, maxChars: 1200 }, blockStreamingCoalesce: { idleMs: 1000 }, - humanDelay: { mode: "natural" }, // off | natural | custom (استخدم minMs/maxMs) + humanDelay: { mode: "natural" }, // off | natural | custom (use minMs/maxMs) }, }, } ``` -- تتطلب القنوات غير Telegram ضبط `*.blockStreaming: true` صراحةً لتمكين الردود على شكل كتل. -- تجاوزات القنوات: `channels..blockStreamingCoalesce` ‏(ومتغيرات كل حساب). وتستخدم Signal/Slack/Discord/Google Chat افتراضيًا `minChars: 1500`. -- `humanDelay`: توقف عشوائي بين الردود على شكل كتل. تعني `natural` = ‏800–2500ms. تجاوز لكل وكيل: `agents.list[].humanDelay`. +- تتطلب القنوات غير Telegram ضبط `*.blockStreaming: true` صراحةً لتمكين الردود الكتلية. +- تجاوزات القناة: `channels..blockStreamingCoalesce` (ومتغيرات كل حساب). تستخدم Signal/Slack/Discord/Google Chat افتراضياً `minChars: 1500`. +- `humanDelay`: توقف عشوائي بين الردود الكتلية. تعني `natural` = ‏800–2500ms. تجاوز لكل وكيل: `agents.list[].humanDelay`. -راجع [Streaming](/ar/concepts/streaming) لمعرفة تفاصيل السلوك + التقسيم إلى أجزاء. +راجع [البث](/ar/concepts/streaming) للحصول على تفاصيل السلوك + التجزئة. ### مؤشرات الكتابة @@ -1501,16 +1494,16 @@ Codex app-server harness المضمّن. } ``` -- القيم الافتراضية: `instant` للدردشات المباشرة/الإشارات، و`message` للدردشات الجماعية غير المشار فيها. +- القيم الافتراضية: `instant` للدردشات المباشرة/الإشارات، و`message` للدردشات الجماعية غير المذكورة. - تجاوزات لكل جلسة: `session.typingMode` و`session.typingIntervalSeconds`. -راجع [Typing Indicators](/ar/concepts/typing-indicators). +راجع [مؤشرات الكتابة](/ar/concepts/typing-indicators). ### `agents.defaults.sandbox` -إعداد sandbox اختياري للوكيل المضمّن. راجع [Sandboxing](/ar/gateway/sandboxing) للحصول على الدليل الكامل. +وضع Sandbox اختياري للوكيل المضمّن. راجع [Sandboxing](/ar/gateway/sandboxing) للحصول على الدليل الكامل. ```json5 { @@ -1556,7 +1549,7 @@ Codex app-server harness المضمّن. identityFile: "~/.ssh/id_ed25519", certificateFile: "~/.ssh/id_ed25519-cert.pub", knownHostsFile: "~/.ssh/known_hosts", - // SecretRefs / المحتويات المضمنة مدعومة أيضًا: + // SecretRefs / inline contents also supported: // identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" }, // certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" }, // knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" }, @@ -1605,54 +1598,54 @@ Codex app-server harness المضمّن. } ``` - + -**الواجهة الخلفية:** +**الخلفية:** -- `docker`: runtime محلي لـ Docker ‏(الافتراضي) -- `ssh`: runtime بعيد عام مدعوم بـ SSH -- `openshell`: runtime لـ OpenShell +- `docker`: وقت تشغيل Docker محلي (الافتراضي) +- `ssh`: وقت تشغيل بعيد عام مدعوم عبر SSH +- `openshell`: وقت تشغيل OpenShell -عند تحديد `backend: "openshell"`، تنتقل الإعدادات الخاصة بالـ runtime إلى +عند اختيار `backend: "openshell"`، تنتقل الإعدادات الخاصة بوقت التشغيل إلى `plugins.entries.openshell.config`. -**تكوين الواجهة الخلفية لـ SSH:** +**إعدادات خلفية SSH:** - `target`: هدف SSH بصيغة `user@host[:port]` -- `command`: أمر عميل SSH ‏(الافتراضي: `ssh`) -- `workspaceRoot`: جذر بعيد مطلق يُستخدم لـ workspace لكل نطاق -- `identityFile` / `certificateFile` / `knownHostsFile`: ملفات محلية موجودة تُمرر إلى OpenSSH -- `identityData` / `certificateData` / `knownHostsData`: محتويات مضمنة أو SecretRefs يقوم OpenClaw بتحويلها إلى ملفات مؤقتة وقت runtime -- `strictHostKeyChecking` / `updateHostKeys`: مفاتيح سياسة مفتاح المضيف في OpenSSH +- `command`: أمر عميل SSH (الافتراضي: `ssh`) +- `workspaceRoot`: جذر بعيد مطلق يُستخدم لمساحات العمل بحسب النطاق +- `identityFile` / `certificateFile` / `knownHostsFile`: ملفات محلية موجودة مسبقاً يتم تمريرها إلى OpenSSH +- `identityData` / `certificateData` / `knownHostsData`: محتويات مضمنة أو SecretRefs يقوم OpenClaw بتحويلها إلى ملفات مؤقتة وقت التشغيل +- `strictHostKeyChecking` / `updateHostKeys`: مفاتيح سياسة مفاتيح المضيف في OpenSSH **أسبقية مصادقة SSH:** -- يتغلب `identityData` على `identityFile` -- يتغلب `certificateData` على `certificateFile` -- يتغلب `knownHostsData` على `knownHostsFile` -- يتم حل قيم `*Data` المدعومة بـ SecretRef من لقطة runtime النشطة للأسرار قبل بدء جلسة sandbox +- `identityData` يتغلب على `identityFile` +- `certificateData` يتغلب على `certificateFile` +- `knownHostsData` يتغلب على `knownHostsFile` +- يتم حل قيم `*Data` المدعومة بـ SecretRef من اللقطة النشطة لأسرار وقت التشغيل قبل بدء جلسة Sandbox -**سلوك الواجهة الخلفية لـ SSH:** +**سلوك خلفية SSH:** -- يجهّز workspace البعيد مرة واحدة بعد الإنشاء أو إعادة الإنشاء -- ثم يُبقي workspace البعيد عبر SSH هو النسخة الأساسية +- يهيّئ مساحة العمل البعيدة مرة واحدة بعد الإنشاء أو إعادة الإنشاء +- ثم يُبقي مساحة العمل البعيدة عبر SSH هي المرجع الأساسي - يوجّه `exec` وأدوات الملفات ومسارات الوسائط عبر SSH -- لا يزامن التغييرات البعيدة تلقائيًا إلى المضيف -- لا يدعم حاويات متصفح sandbox +- لا يزامن التغييرات البعيدة تلقائياً إلى المضيف +- لا يدعم حاويات متصفح Sandbox -**وصول workspace:** +**وصول مساحة العمل:** -- `none`: ‏workspace لـ sandbox لكل نطاق تحت `~/.openclaw/sandboxes` -- `ro`: ‏workspace لـ sandbox عند `/workspace`، وworkspace الوكيل مركّب للقراءة فقط عند `/agent` -- `rw`: ‏workspace الوكيل مركّب للقراءة/الكتابة عند `/workspace` +- `none`: مساحة عمل Sandbox بحسب النطاق ضمن `~/.openclaw/sandboxes` +- `ro`: مساحة عمل Sandbox عند `/workspace`، مع تثبيت مساحة عمل الوكيل للقراءة فقط عند `/agent` +- `rw`: يتم تثبيت مساحة عمل الوكيل للقراءة/الكتابة عند `/workspace` **النطاق:** -- `session`: حاوية + workspace لكل جلسة -- `agent`: حاوية + workspace واحد لكل وكيل (الافتراضي) -- `shared`: حاوية وworkspace مشتركان (من دون عزل بين الجلسات) +- `session`: حاوية + مساحة عمل لكل جلسة +- `agent`: حاوية + مساحة عمل واحدة لكل وكيل (الافتراضي) +- `shared`: حاوية ومساحة عمل مشتركتان (من دون عزل بين الجلسات) -**تكوين Plugin لـ OpenShell:** +**إعدادات Plugin ‏OpenShell:** ```json5 { @@ -1665,10 +1658,10 @@ Codex app-server harness المضمّن. from: "openclaw", remoteWorkspaceDir: "/sandbox", remoteAgentWorkspaceDir: "/agent", - gateway: "lab", // اختياري - gatewayEndpoint: "https://lab.example", // اختياري - policy: "strict", // معرّف سياسة OpenShell اختياري - providers: ["openai"], // اختياري + gateway: "lab", // optional + gatewayEndpoint: "https://lab.example", // optional + policy: "strict", // optional OpenShell policy id + providers: ["openai"], // optional autoProviders: true, timeoutSeconds: 120, }, @@ -1680,30 +1673,30 @@ Codex app-server harness المضمّن. **وضع OpenShell:** -- `mirror`: تجهيز البعيد من المحلي قبل `exec`، ثم المزامنة عكسيًا بعد `exec`؛ وتبقى workspace المحلية هي النسخة الأساسية -- `remote`: تجهيز البعيد مرة واحدة عند إنشاء sandbox، ثم إبقاء workspace البعيدة هي النسخة الأساسية +- `mirror`: يهيّئ البعيد من المحلي قبل التنفيذ، ويزامن العودة بعد التنفيذ؛ وتبقى مساحة العمل المحلية هي المرجع الأساسي +- `remote`: يهيّئ البعيد مرة واحدة عند إنشاء Sandbox، ثم يُبقي مساحة العمل البعيدة هي المرجع الأساسي -في وضع `remote`، لا تتم مزامنة التعديلات المحلية على المضيف التي تُجرى خارج OpenClaw تلقائيًا إلى sandbox بعد خطوة التجهيز. -يكون النقل عبر SSH إلى sandbox الخاص بـ OpenShell، لكن Plugin يملك دورة حياة sandbox ومزامنة mirror الاختيارية. +في وضع `remote`، لا تتم مزامنة التعديلات المحلية على المضيف التي تُجرى خارج OpenClaw إلى Sandbox تلقائياً بعد خطوة التهيئة. +يكون النقل عبر SSH إلى OpenShell Sandbox، لكن Plugin يملك دورة حياة Sandbox ومزامنة المرآة الاختيارية. -**`setupCommand`** يعمل مرة واحدة بعد إنشاء الحاوية (عبر `sh -lc`). ويحتاج إلى خروج شبكة، وجذر قابل للكتابة، ومستخدم root. +يعمل **`setupCommand`** مرة واحدة بعد إنشاء الحاوية (عبر `sh -lc`). ويحتاج إلى اتصال شبكة صادر، وجذر قابل للكتابة، ومستخدم root. -**تستخدم الحاويات افتراضيًا `network: "none"`** — اضبطها على `"bridge"` ‏(أو شبكة bridge مخصصة) إذا كان الوكيل يحتاج إلى وصول صادر. -يتم حظر `"host"`. ويتم حظر `"container:"` افتراضيًا ما لم تضبط صراحةً -`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` ‏(وضع طارئ). +**تستخدم الحاويات افتراضياً `network: "none"`** — اضبطها على `"bridge"` (أو شبكة bridge مخصصة) إذا كان الوكيل يحتاج إلى وصول صادر. +يتم حظر `"host"`. ويتم حظر `"container:"` افتراضياً ما لم تضبط صراحةً +`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (وضع طارئ). -**تُجهَّز المرفقات الواردة** داخل `media/inbound/*` في workspace النشطة. +**يتم تجهيز المرفقات الواردة** ضمن `media/inbound/*` في مساحة العمل النشطة. -**`docker.binds`** يركّب أدلة إضافية من المضيف؛ ويتم دمج bindات المستوى العام وكل وكيل. +يقوم **`docker.binds`** بتثبيت أدلة إضافية من المضيف؛ ويتم دمج bindings العامة ومع bindings الخاصة بكل وكيل. -**المتصفح داخل sandbox** ‏(`sandbox.browser.enabled`): ‏Chromium + CDP داخل حاوية. يتم حقن عنوان noVNC URL في system prompt. ولا يتطلب `browser.enabled` في `openclaw.json`. -يستخدم وصول المراقبة عبر noVNC مصادقة VNC افتراضيًا، ويصدر OpenClaw عنوان URL برمز قصير العمر (بدلًا من كشف كلمة المرور في عنوان URL المشترك). +**متصفح Sandbox** ‏(`sandbox.browser.enabled`): Chromium + CDP داخل حاوية. يتم حقن عنوان noVNC URL في system prompt. ولا يتطلب `browser.enabled` في `openclaw.json`. +يستخدم وصول المراقبة عبر noVNC مصادقة VNC افتراضياً، ويصدر OpenClaw عنوان URL برمز مميز قصير العمر (بدلاً من كشف كلمة المرور في عنوان URL المشترك). -- يمنع `allowHostControl: false` ‏(الافتراضي) الجلسات داخل sandbox من استهداف متصفح المضيف. -- تكون القيمة الافتراضية لـ `network` هي `openclaw-sandbox-browser` ‏(شبكة bridge مخصصة). اضبطها على `bridge` فقط عندما تريد صراحةً اتصال bridge عامًا. -- يقيّد `cdpSourceRange` اختياريًا دخول CDP عند حافة الحاوية إلى نطاق CIDR ‏(على سبيل المثال `172.21.0.1/32`). -- يقوم `sandbox.browser.binds` بتركيب أدلة إضافية من المضيف داخل حاوية متصفح sandbox فقط. وعند ضبطه (بما في ذلك `[]`)، فإنه يستبدل `docker.binds` لحاوية المتصفح. -- يتم تعريف إعدادات التشغيل الافتراضية في `scripts/sandbox-browser-entrypoint.sh` وضبطها لمضيفي الحاويات: +- يمنع `allowHostControl: false` (الافتراضي) الجلسات المعزولة في Sandbox من استهداف متصفح المضيف. +- تكون القيمة الافتراضية لـ `network` هي `openclaw-sandbox-browser` (شبكة bridge مخصصة). اضبطها على `bridge` فقط عندما تريد صراحةً اتصال bridge عاماً. +- يقيّد `cdpSourceRange` اختيارياً دخول CDP عند حافة الحاوية إلى نطاق CIDR (على سبيل المثال `172.21.0.1/32`). +- يقوم `sandbox.browser.binds` بتثبيت أدلة إضافية من المضيف داخل حاوية متصفح Sandbox فقط. وعند ضبطه (بما في ذلك `[]`) فإنه يستبدل `docker.binds` لحاوية المتصفح. +- يتم تعريف افتراضيات التشغيل في `scripts/sandbox-browser-entrypoint.sh` وضبطها لمضيفي الحاويات: - `--remote-debugging-address=127.0.0.1` - `--remote-debugging-port=` - `--user-data-dir=${HOME}/.chrome` @@ -1720,31 +1713,31 @@ Codex app-server harness المضمّن. - `--renderer-process-limit=2` - `--no-zygote` - `--metrics-recording-only` - - `--disable-extensions` ‏(مفعّل افتراضيًا) - - تكون `--disable-3d-apis` و`--disable-software-rasterizer` و`--disable-gpu` - مفعّلة افتراضيًا ويمكن تعطيلها باستخدام + - `--disable-extensions` (مفعّل افتراضياً) + - يتم تفعيل `--disable-3d-apis` و`--disable-software-rasterizer` و`--disable-gpu` + افتراضياً ويمكن تعطيلها عبر `OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0` إذا كان استخدام WebGL/3D يتطلب ذلك. - يعيد `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` تمكين الإضافات إذا كان سير عملك يعتمد عليها. - - يمكن تغيير `--renderer-process-limit=2` باستخدام + - يمكن تغيير `--renderer-process-limit=2` عبر `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`؛ اضبطه على `0` لاستخدام - حد العمليات الافتراضي في Chromium. - - بالإضافة إلى `--no-sandbox` و`--disable-setuid-sandbox` عندما يكون `noSandbox` مفعّلًا. + الحد الافتراضي لعمليات Chromium. + - بالإضافة إلى `--no-sandbox` و`--disable-setuid-sandbox` عندما يكون `noSandbox` مفعّلاً. - تمثل القيم الافتراضية خط الأساس لصورة الحاوية؛ استخدم صورة متصفح مخصصة مع - entrypoint مخصص لتغيير القيم الافتراضية للحاوية. + entrypoint مخصص لتغيير افتراضيات الحاوية. -يكون Browser sandboxing و`sandbox.docker.binds` مخصصين لـ Docker فقط. +إن عزل المتصفح داخل Sandbox و`sandbox.docker.binds` خاصان بـ Docker فقط. -بناء الصور: +إنشاء الصور: ```bash -scripts/sandbox-setup.sh # صورة sandbox الرئيسية -scripts/sandbox-browser-setup.sh # صورة المتصفح الاختيارية +scripts/sandbox-setup.sh # main sandbox image +scripts/sandbox-browser-setup.sh # optional browser image ``` -### `agents.list` ‏(تجاوزات لكل وكيل) +### `agents.list` (تجاوزات لكل وكيل) ```json5 { @@ -1756,13 +1749,13 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري name: "Main Agent", workspace: "~/.openclaw/workspace", agentDir: "~/.openclaw/agents/main/agent", - model: "anthropic/claude-opus-4-6", // أو { primary, fallbacks } - thinkingDefault: "high", // تجاوز لمستوى thinking لكل وكيل - reasoningDefault: "on", // تجاوز لرؤية reasoning لكل وكيل - fastModeDefault: false, // تجاوز للوضع السريع لكل وكيل + model: "anthropic/claude-opus-4-6", // or { primary, fallbacks } + thinkingDefault: "high", // per-agent thinking level override + reasoningDefault: "on", // per-agent reasoning visibility override + fastModeDefault: false, // per-agent fast mode override embeddedHarness: { runtime: "auto", fallback: "pi" }, - params: { cacheRetention: "none" }, // يتجاوز مفاتيح params المطابقة في defaults.models - skills: ["docs-search"], // يستبدل agents.defaults.skills عند ضبطه + params: { cacheRetention: "none" }, // overrides matching defaults.models params by key + skills: ["docs-search"], // replaces agents.defaults.skills when set identity: { name: "Samantha", theme: "helpful sloth", @@ -1793,27 +1786,27 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -- `id`: معرّف ثابت للوكيل (مطلوب). -- `default`: عند ضبط عدة وكلاء، يفوز الأول (مع تسجيل تحذير). وإذا لم يتم ضبط أيٍّ منهم، يكون أول إدخال في القائمة هو الافتراضي. -- `model`: تتجاوز صيغة السلسلة `primary` فقط؛ بينما تتجاوز صيغة الكائن `{ primary, fallbacks }` كليهما (`[]` يعطّل قيم التحويل عند الفشل العامة). وتظل مهام Cron التي تتجاوز `primary` فقط ترث قيم التحويل عند الفشل الافتراضية ما لم تضبط `fallbacks: []`. -- `params`: معلمات تدفق لكل وكيل مدمجة فوق إدخال النموذج المحدد في `agents.defaults.models`. استخدم هذا لتجاوزات خاصة بالوكيل مثل `cacheRetention` أو `temperature` أو `maxTokens` من دون تكرار فهرس النماذج بالكامل. -- `skills`: قائمة سماح اختيارية لـ Skills لكل وكيل. وإذا حُذفت، يرث الوكيل `agents.defaults.skills` عند ضبطها؛ وتستبدل القائمة الصريحة القيم الافتراضية بدلًا من دمجها، وتعني `[]` عدم وجود Skills. -- `thinkingDefault`: مستوى thinking افتراضي اختياري لكل وكيل (`off | minimal | low | medium | high | xhigh | adaptive | max`). ويتجاوز `agents.defaults.thinkingDefault` لهذا الوكيل عندما لا يكون هناك تجاوز لكل رسالة أو جلسة. -- `reasoningDefault`: رؤية reasoning افتراضية اختيارية لكل وكيل (`on | off | stream`). وتُطبق عندما لا يكون هناك تجاوز reasoning لكل رسالة أو جلسة. -- `fastModeDefault`: افتراضي اختياري للوضع السريع لكل وكيل (`true | false`). ويُطبق عندما لا يكون هناك تجاوز للوضع السريع لكل رسالة أو جلسة. -- `embeddedHarness`: تجاوز اختياري لسياسة harness منخفض المستوى لكل وكيل. استخدم `{ runtime: "codex", fallback: "none" }` لجعل وكيل واحد خاصًا بـ Codex فقط بينما يحتفظ الوكلاء الآخرون بالرجوع الافتراضي إلى PI. -- `runtime`: واصف runtime اختياري لكل وكيل. استخدم `type: "acp"` مع القيم الافتراضية لـ `runtime.acp` ‏(`agent` و`backend` و`mode` و`cwd`) عندما يجب أن يستخدم الوكيل جلسات ACP harness افتراضيًا. -- `identity.avatar`: مسار نسبي إلى workspace، أو عنوان `http(s)` URL، أو URI من نوع `data:`. -- تستمد `identity` قيمًا افتراضية: `ackReaction` من `emoji`، و`mentionPatterns` من `name`/`emoji`. -- `subagents.allowAgents`: قائمة سماح لمعرّفات الوكلاء لـ `sessions_spawn` ‏(`["*"]` = أي وكيل؛ الافتراضي: الوكيل نفسه فقط). -- حاجز وراثة sandbox: إذا كانت جلسة الطالب داخل sandbox، فإن `sessions_spawn` يرفض الأهداف التي ستعمل خارج sandbox. -- `subagents.requireAgentId`: عندما تكون true، يمنع استدعاءات `sessions_spawn` التي تحذف `agentId` ‏(يفرض اختيار profile صريح؛ الافتراضي: false). +- `id`: معرّف وكيل ثابت (مطلوب). +- `default`: عند ضبط عدة قيم، تفوز الأولى (مع تسجيل تحذير). وإذا لم تُضبط أي قيمة، يكون أول إدخال في القائمة هو الافتراضي. +- `model`: يتجاوز شكل السلسلة `primary` فقط؛ بينما يتجاوز شكل الكائن `{ primary, fallbacks }` كليهما (`[]` يعطّل القيم الاحتياطية العامة). تستمر مهام Cron التي تتجاوز `primary` فقط في وراثة القيم الاحتياطية الافتراضية ما لم تضبط `fallbacks: []`. +- `params`: معلمات بث لكل وكيل يتم دمجها فوق إدخال النموذج المحدد في `agents.defaults.models`. استخدمها لتجاوزات خاصة بالوكيل مثل `cacheRetention` أو `temperature` أو `maxTokens` من دون تكرار فهرس النماذج بالكامل. +- `skills`: قائمة سماح اختيارية لـ Skills لكل وكيل. إذا حُذفت، يرث الوكيل `agents.defaults.skills` عند ضبطها؛ وتستبدل القائمة الصريحة القيم الافتراضية بدلاً من دمجها، وتعني `[]` عدم وجود Skills. +- `thinkingDefault`: تجاوز اختياري لكل وكيل لمستوى التفكير الافتراضي (`off | minimal | low | medium | high | xhigh | adaptive | max`). ويتجاوز `agents.defaults.thinkingDefault` لهذا الوكيل عندما لا يكون هناك تجاوز لكل رسالة أو لكل جلسة. +- `reasoningDefault`: تجاوز اختياري لكل وكيل لإظهار reasoning افتراضياً (`on | off | stream`). ويُطبّق عندما لا يكون هناك تجاوز للـ reasoning لكل رسالة أو لكل جلسة. +- `fastModeDefault`: افتراضي اختياري لكل وكيل لوضع السرعة (`true | false`). ويُطبّق عندما لا يكون هناك تجاوز لوضع السرعة لكل رسالة أو لكل جلسة. +- `embeddedHarness`: تجاوز اختياري لكل وكيل لسياسة harness منخفضة المستوى. استخدم `{ runtime: "codex", fallback: "none" }` لجعل وكيل واحد يعتمد على Codex فقط بينما تحتفظ الوكلاء الأخرى بالرجوع الاحتياطي الافتراضي إلى PI. +- `runtime`: واصف وقت تشغيل اختياري لكل وكيل. استخدم `type: "acp"` مع القيم الافتراضية لـ `runtime.acp` ‏(`agent` و`backend` و`mode` و`cwd`) عندما يجب أن يستخدم الوكيل جلسات ACP harness افتراضياً. +- `identity.avatar`: مسار نسبي إلى مساحة العمل، أو عنوان URL من نوع `http(s)`، أو URI من نوع `data:`. +- تستمد `identity` قيماً افتراضية: `ackReaction` من `emoji`، و`mentionPatterns` من `name`/`emoji`. +- `subagents.allowAgents`: قائمة سماح لمعرّفات الوكلاء لأجل `sessions_spawn` ‏(`["*"]` = أي وكيل؛ الافتراضي: الوكيل نفسه فقط). +- حارس وراثة Sandbox: إذا كانت جلسة الطالب تعمل داخل Sandbox، يرفض `sessions_spawn` الأهداف التي ستعمل خارج Sandbox. +- `subagents.requireAgentId`: عند ضبطه على true، يحظر استدعاءات `sessions_spawn` التي تحذف `agentId` (يفرض اختيار ملف تعريف صريح؛ الافتراضي: false). --- ## التوجيه متعدد الوكلاء -شغّل عدة وكلاء معزولين داخل Gateway واحد. راجع [Multi-Agent](/ar/concepts/multi-agent). +شغّل عدة وكلاء معزولين داخل Gateway واحد. راجع [الوكلاء المتعددين](/ar/concepts/multi-agent). ```json5 { @@ -1832,29 +1825,29 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ### حقول مطابقة الربط -- `type` ‏(اختياري): ‏`route` للتوجيه العادي (والنوع المفقود افتراضيًا هو route)، و`acp` لارتباطات محادثات ACP المستمرة. -- `match.channel` ‏(مطلوب) -- `match.accountId` ‏(اختياري؛ `*` = أي حساب؛ والمحذوف = الحساب الافتراضي) -- `match.peer` ‏(اختياري؛ `{ kind: direct|group|channel, id }`) -- `match.guildId` / `match.teamId` ‏(اختياري؛ خاص بالقناة) -- `acp` ‏(اختياري؛ فقط لـ `type: "acp"`): ‏`{ mode, label, cwd, backend }` +- `type` (اختياري): `route` للتوجيه العادي (عند غياب النوع يكون الافتراضي route)، و`acp` لروابط المحادثة الدائمة الخاصة بـ ACP. +- `match.channel` (مطلوب) +- `match.accountId` (اختياري؛ `*` = أي حساب؛ والمحذوف = الحساب الافتراضي) +- `match.peer` (اختياري؛ `{ kind: direct|group|channel, id }`) +- `match.guildId` / `match.teamId` (اختياري؛ خاص بالقناة) +- `acp` (اختياري؛ فقط لـ `type: "acp"`): ‏`{ mode, label, cwd, backend }` **ترتيب المطابقة الحتمي:** 1. `match.peer` 2. `match.guildId` 3. `match.teamId` -4. `match.accountId` ‏(مطابقة تامة، من دون peer/guild/team) -5. `match.accountId: "*"` ‏(على مستوى القناة) +4. `match.accountId` (مطابقة تامة، من دون peer/guild/team) +5. `match.accountId: "*"` (على مستوى القناة) 6. الوكيل الافتراضي -داخل كل مستوى، يفوز أول إدخال مطابق في `bindings`. +ضمن كل طبقة، يفوز أول إدخال مطابق في `bindings`. -بالنسبة إلى إدخالات `type: "acp"`، يحل OpenClaw المطابقة حسب هوية المحادثة الدقيقة (`match.channel` + الحساب + `match.peer.id`) ولا يستخدم ترتيب مستويات route binding أعلاه. +بالنسبة إلى إدخالات `type: "acp"`، يقوم OpenClaw بالحل حسب هوية المحادثة الدقيقة (`match.channel` + الحساب + `match.peer.id`) ولا يستخدم ترتيب طبقات route binding أعلاه. ### ملفات تعريف الوصول لكل وكيل - + ```json5 { @@ -1872,7 +1865,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري - + ```json5 { @@ -1947,7 +1940,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري -راجع [Multi-Agent Sandbox & Tools](/ar/tools/multi-agent-sandbox-tools) للحصول على تفاصيل الأسبقية. +راجع [Sandbox والأدوات في الوكلاء المتعددين](/ar/tools/multi-agent-sandbox-tools) لمعرفة تفاصيل الأسبقية. --- @@ -1973,22 +1966,22 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري }, resetTriggers: ["/new", "/reset"], store: "~/.openclaw/agents/{agentId}/sessions/sessions.json", - parentForkMaxTokens: 100000, // تخطي تشعب السلسلة الأصلية فوق هذا العدد من الرموز (0 يعطّل) + parentForkMaxTokens: 100000, // skip parent-thread fork above this token count (0 disables) maintenance: { mode: "warn", // warn | enforce pruneAfter: "30d", maxEntries: 500, rotateBytes: "10mb", - resetArchiveRetention: "30d", // مدة أو false - maxDiskBytes: "500mb", // ميزانية قصوى اختيارية - highWaterBytes: "400mb", // هدف تنظيف اختياري + resetArchiveRetention: "30d", // duration or false + maxDiskBytes: "500mb", // optional hard budget + highWaterBytes: "400mb", // optional cleanup target }, threadBindings: { enabled: true, - idleHours: 24, // الإلغاء التلقائي للتركيز بعد عدم النشاط بالساعات (`0` يعطّل) - maxAgeHours: 0, // الحد الأقصى الصارم الافتراضي للعمر بالساعات (`0` يعطّل) + idleHours: 24, // default inactivity auto-unfocus in hours (`0` disables) + maxAgeHours: 0, // default hard max age in hours (`0` disables) }, - mainKey: "main", // قديم (يستخدم runtime دائمًا "main") + mainKey: "main", // legacy (runtime always uses "main") agentToAgent: { maxPingPongTurns: 5 }, sendPolicy: { rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }], @@ -2001,34 +1994,34 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري - **`scope`**: استراتيجية تجميع الجلسات الأساسية لسياقات الدردشة الجماعية. - - `per-sender` ‏(الافتراضي): يحصل كل مرسل على جلسة معزولة داخل سياق القناة. - - `global`: يشترك جميع المشاركين في سياق القناة في جلسة واحدة (استخدمه فقط عندما يكون المقصود سياقًا مشتركًا). -- **`dmScope`**: كيفية تجميع الرسائل المباشرة. - - `main`: تشترك جميع الرسائل المباشرة في الجلسة الرئيسية. - - `per-peer`: عزل حسب معرّف المرسل عبر القنوات. - - `per-channel-peer`: عزل لكل قناة + مرسل (موصى به لصناديق الوارد متعددة المستخدمين). - - `per-account-channel-peer`: عزل لكل حساب + قناة + مرسل (موصى به للحسابات المتعددة). -- **`identityLinks`**: تعيين المعرفات الأساسية إلى أقران مسبوقين بالموفر من أجل مشاركة الجلسات عبر القنوات. -- **`reset`**: سياسة إعادة التعيين الأساسية. تقوم `daily` بإعادة التعيين عند `atHour` وفق التوقيت المحلي؛ وتقوم `idle` بإعادة التعيين بعد `idleMinutes`. وعند تكوين الاثنين، يفوز أول ما تنتهي صلاحيته. -- **`resetByType`**: تجاوزات حسب النوع (`direct` و`group` و`thread`). ويتم قبول `dm` القديم كاسم مستعار لـ `direct`. -- **`parentForkMaxTokens`**: الحد الأقصى لقيمة `totalTokens` في الجلسة الأصلية المسموح بها عند إنشاء جلسة سلسلة متشعبة (الافتراضي `100000`). - - إذا كانت `totalTokens` في الأصل أعلى من هذه القيمة، يبدأ OpenClaw جلسة سلسلة جديدة بدلًا من وراثة سجل transcript الخاص بالأصل. - - اضبطها على `0` لتعطيل هذا الحاجز والسماح دائمًا بالتشعب من الأصل. -- **`mainKey`**: حقل قديم. يستخدم runtime دائمًا `"main"` لحاوية الدردشة المباشرة الرئيسية. -- **`agentToAgent.maxPingPongTurns`**: الحد الأقصى لأدوار الرد المتبادل بين الوكلاء أثناء التبادلات بين الوكلاء (عدد صحيح، المجال: `0`–`5`). تؤدي القيمة `0` إلى تعطيل تسلسل ping-pong. -- **`sendPolicy`**: المطابقة حسب `channel` أو `chatType` ‏(`direct|group|channel`، مع الاسم المستعار القديم `dm`) أو `keyPrefix` أو `rawKeyPrefix`. يفوز أول رفض. + - `per-sender` (الافتراضي): يحصل كل مُرسل على جلسة معزولة داخل سياق القناة. + - `global`: يشترك جميع المشاركين في سياق القناة في جلسة واحدة (استخدمه فقط عندما يكون السياق المشترك مقصوداً). +- **`dmScope`**: كيفية تجميع الرسائل الخاصة. + - `main`: تشترك جميع الرسائل الخاصة في الجلسة الرئيسية. + - `per-peer`: عزل حسب معرّف المُرسل عبر القنوات. + - `per-channel-peer`: عزل لكل قناة + مُرسل (موصى به لصناديق الوارد متعددة المستخدمين). + - `per-account-channel-peer`: عزل لكل حساب + قناة + مُرسل (موصى به لتعدد الحسابات). +- **`identityLinks`**: ربط المعرّفات القياسية بالنظراء ذوي بادئة المزوّد لمشاركة الجلسات عبر القنوات. +- **`reset`**: سياسة إعادة الضبط الأساسية. تقوم `daily` بإعادة الضبط عند `atHour` حسب التوقيت المحلي؛ وتقوم `idle` بإعادة الضبط بعد `idleMinutes`. وعند ضبط الاثنين، تفوز القيمة التي تنتهي أولاً. +- **`resetByType`**: تجاوزات حسب النوع (`direct` و`group` و`thread`). يُقبل `dm` القديم كاسم مستعار لـ `direct`. +- **`parentForkMaxTokens`**: الحد الأقصى المسموح به لقيمة `totalTokens` لجلسة الأصل عند إنشاء جلسة سلسلة متفرعة (الافتراضي `100000`). + - إذا كانت قيمة `totalTokens` للأصل أعلى من هذه القيمة، يبدأ OpenClaw جلسة سلسلة جديدة بدلاً من وراثة سجل محادثة الأصل. + - اضبطه على `0` لتعطيل هذا الحارس والسماح دائماً بتفريع الأصل. +- **`mainKey`**: حقل قديم. يستخدم وقت التشغيل دائماً `"main"` لحاوية الدردشة المباشرة الرئيسية. +- **`agentToAgent.maxPingPongTurns`**: الحد الأقصى لأدوار الرد المتبادل بين الوكلاء أثناء تبادلات وكيل-إلى-وكيل (عدد صحيح، المجال: `0`–`5`). تعطل `0` سلسلة التبادل ping-pong. +- **`sendPolicy`**: المطابقة حسب `channel` أو `chatType` ‏(`direct|group|channel`، مع الاسم المستعار القديم `dm`) أو `keyPrefix` أو `rawKeyPrefix`. ويفوز أول رفض. - **`maintenance`**: عناصر التحكم في تنظيف مخزن الجلسات + الاحتفاظ. - - `mode`: تقوم `warn` بإصدار تحذيرات فقط؛ بينما تطبق `enforce` التنظيف. - - `pruneAfter`: حد العمر لإدخالات التقادم (الافتراضي `30d`). - - `maxEntries`: الحد الأقصى لعدد الإدخالات في `sessions.json` ‏(الافتراضي `500`). + - `mode`: ‏`warn` يصدر تحذيرات فقط؛ و`enforce` يطبق التنظيف. + - `pruneAfter`: حد العمر للمدخلات القديمة (الافتراضي `30d`). + - `maxEntries`: الحد الأقصى لعدد المدخلات في `sessions.json` (الافتراضي `500`). - `rotateBytes`: تدوير `sessions.json` عندما يتجاوز هذا الحجم (الافتراضي `10mb`). - - `resetArchiveRetention`: مدة الاحتفاظ بأرشيفات transcript من نوع `*.reset.`. وتكون افتراضيًا مساوية لـ `pruneAfter`؛ اضبطها على `false` للتعطيل. - - `maxDiskBytes`: ميزانية قرص اختيارية لدليل الجلسات. وفي وضع `warn` تسجل تحذيرات؛ وفي وضع `enforce` تزيل أقدم العناصر/الجلسات أولًا. - - `highWaterBytes`: هدف اختياري بعد تنظيف الميزانية. ويكون افتراضيًا `80%` من `maxDiskBytes`. + - `resetArchiveRetention`: مدة الاحتفاظ بأرشيفات النصوص `*.reset.`. وتكون افتراضياً مساوية لـ `pruneAfter`؛ اضبطها على `false` لتعطيلها. + - `maxDiskBytes`: ميزانية قرص اختيارية لدليل الجلسات. في وضع `warn` تسجل تحذيرات؛ وفي وضع `enforce` تزيل أقدم العناصر/الجلسات أولاً. + - `highWaterBytes`: هدف اختياري بعد تنظيف الميزانية. ويكون افتراضياً `80%` من `maxDiskBytes`. - **`threadBindings`**: القيم الافتراضية العامة لميزات الجلسات المرتبطة بالسلاسل. - - `enabled`: مفتاح افتراضي رئيسي (يمكن للموفرات تجاوزه؛ ويستخدم Discord القيمة `channels.discord.threadBindings.enabled`) - - `idleHours`: الإلغاء التلقائي الافتراضي للتركيز بعد عدم النشاط بالساعات (`0` يعطّل؛ ويمكن للموفرات تجاوزه) - - `maxAgeHours`: الحد الأقصى الصارم الافتراضي للعمر بالساعات (`0` يعطّل؛ ويمكن للموفرات تجاوزه) + - `enabled`: مفتاح افتراضي رئيسي (يمكن للمزوّدات تجاوزه؛ ويستخدم Discord ‏`channels.discord.threadBindings.enabled`) + - `idleHours`: إلغاء التركيز التلقائي الافتراضي بعد عدم النشاط بالساعات (`0` يعطّل؛ ويمكن للمزوّدات تجاوزه) + - `maxAgeHours`: الحد الأقصى الصارم الافتراضي للعمر بالساعات (`0` يعطّل؛ ويمكن للمزوّدات تجاوزه) @@ -2039,7 +2032,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ```json5 { messages: { - responsePrefix: "🦞", // أو "auto" + responsePrefix: "🦞", // or "auto" ackReaction: "👀", ackReactionScope: "group-mentions", // group-mentions | group-all | direct | all removeAckAfterReply: false, @@ -2054,7 +2047,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري }, }, inbound: { - debounceMs: 2000, // 0 يعطّل + debounceMs: 2000, // 0 disables byChannel: { whatsapp: 5000, slack: 1500, @@ -2068,34 +2061,34 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري تجاوزات لكل قناة/حساب: `channels..responsePrefix` و`channels..accounts..responsePrefix`. -آلية الحل (الأكثر تخصيصًا يفوز): الحساب ← القناة ← العام. تؤدي القيمة `""` إلى التعطيل وإيقاف التسلسل. وتستنتج `"auto"` القيمة `[{identity.name}]`. +آلية الحل (الأكثر تحديداً يفوز): الحساب → القناة → العام. يقوم `""` بالتعطيل وإيقاف التسلسل. ويشتق `"auto"` القيمة `[{identity.name}]`. **متغيرات القالب:** -| المتغير | الوصف | المثال | -| ----------------- | ---------------------- | --------------------------- | -| `{model}` | الاسم المختصر للنموذج | `claude-opus-4-6` | -| `{modelFull}` | المعرّف الكامل للنموذج | `anthropic/claude-opus-4-6` | -| `{provider}` | اسم provider | `anthropic` | -| `{thinkingLevel}` | مستوى thinking الحالي | `high` أو `low` أو `off` | -| `{identity.name}` | اسم هوية الوكيل | (مثل `"auto"`) | +| المتغير | الوصف | المثال | +| ------- | ----- | ------ | +| `{model}` | اسم النموذج المختصر | `claude-opus-4-6` | +| `{modelFull}` | معرّف النموذج الكامل | `anthropic/claude-opus-4-6` | +| `{provider}` | اسم المزوّد | `anthropic` | +| `{thinkingLevel}` | مستوى التفكير الحالي | `high` أو `low` أو `off` | +| `{identity.name}` | اسم هوية الوكيل | (نفس `"auto"`) | -المتغيرات غير حساسة لحالة الأحرف. ويُعد `{think}` اسمًا مستعارًا لـ `{thinkingLevel}`. +المتغيرات غير حساسة لحالة الأحرف. و`{think}` اسم مستعار لـ `{thinkingLevel}`. -### تفاعل الإقرار +### تفاعل التأكيد -- يكون افتراضيًا `identity.emoji` الخاص بالوكيل النشط، وإلا `"👀"`. اضبطه على `""` للتعطيل. +- تكون قيمته الافتراضية `identity.emoji` للوكيل النشط، وإلا `"👀"`. اضبط `""` لتعطيله. - تجاوزات لكل قناة: `channels..ackReaction` و`channels..accounts..ackReaction`. -- ترتيب الحل: الحساب ← القناة ← `messages.ackReaction` ← رجوع الهوية. -- النطاق: `group-mentions` ‏(الافتراضي)، أو `group-all`، أو `direct`، أو `all`. -- يقوم `removeAckAfterReply` بإزالة تفاعل الإقرار بعد الرد في Slack وDiscord وTelegram. -- يفعّل `messages.statusReactions.enabled` تفاعلات حالة دورة الحياة في Slack وDiscord وTelegram. - وفي Slack وDiscord، يحافظ تركه غير مضبوط على تفعيل تفاعلات الحالة عندما تكون تفاعلات الإقرار نشطة. - وفي Telegram، اضبطه صراحةً على `true` لتفعيل تفاعلات حالة دورة الحياة. +- ترتيب الحل: الحساب → القناة → `messages.ackReaction` → رجوع هوية احتياطي. +- النطاق: `group-mentions` (الافتراضي) أو `group-all` أو `direct` أو `all`. +- تزيل `removeAckAfterReply` تفاعل التأكيد بعد الرد في Slack وDiscord وTelegram. +- يفعّل `messages.statusReactions.enabled` تفاعلات الحالة المرتبطة بدورة الحياة في Slack وDiscord وTelegram. + في Slack وDiscord، يؤدي تركه غير مضبوط إلى إبقاء تفاعلات الحالة مفعّلة عندما تكون تفاعلات التأكيد نشطة. + وفي Telegram، اضبطه صراحة على `true` لتمكين تفاعلات الحالة المرتبطة بدورة الحياة. -### تأخير الإدخال +### إزالة الارتداد للرسائل الواردة -يجمع الرسائل النصية السريعة فقط من المرسل نفسه في دور وكيل واحد. وتؤدي الوسائط/المرفقات إلى التفريغ فورًا. وتتجاوز أوامر التحكم آلية التأخير. +يجمع الرسائل النصية السريعة من المُرسل نفسه في دور وكيل واحد. وتقوم الوسائط/المرفقات بالتفريغ فوراً. وتتجاوز أوامر التحكم إزالة الارتداد. ### TTS ‏(تحويل النص إلى كلام) @@ -2139,17 +2132,17 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ``` - يتحكم `auto` في وضع TTS التلقائي الافتراضي: `off` أو `always` أو `inbound` أو `tagged`. ويمكن لـ `/tts on|off` تجاوز التفضيلات المحلية، ويعرض `/tts status` الحالة الفعلية. -- يتجاوز `summaryModel` قيمة `agents.defaults.model.primary` للملخص التلقائي. -- يكون `modelOverrides` مفعّلًا افتراضيًا؛ وتكون القيمة الافتراضية لـ `modelOverrides.allowProvider` هي `false` ‏(اشتراك اختياري). -- تعود API keys إلى `ELEVENLABS_API_KEY`/`XI_API_KEY` و`OPENAI_API_KEY`. -- يتجاوز `openai.baseUrl` نقطة نهاية TTS في OpenAI. وترتيب الحل هو: التكوين، ثم `OPENAI_TTS_BASE_URL`، ثم `https://api.openai.com/v1`. -- عندما يشير `openai.baseUrl` إلى نقطة نهاية ليست من OpenAI، يتعامل OpenClaw معها على أنها خادم TTS متوافق مع OpenAI ويخفف التحقق من النموذج/الصوت. +- يقوم `summaryModel` بتجاوز `agents.defaults.model.primary` للملخص التلقائي. +- تكون `modelOverrides` مفعّلة افتراضياً؛ وتكون القيمة الافتراضية لـ `modelOverrides.allowProvider` هي `false` (اشتراك اختياري). +- تعود مفاتيح API إلى `ELEVENLABS_API_KEY`/`XI_API_KEY` و`OPENAI_API_KEY`. +- يقوم `openai.baseUrl` بتجاوز نقطة نهاية OpenAI TTS. ويكون ترتيب الحل هو الإعدادات، ثم `OPENAI_TTS_BASE_URL`، ثم `https://api.openai.com/v1`. +- عندما يشير `openai.baseUrl` إلى نقطة نهاية غير تابعة لـ OpenAI، يتعامل OpenClaw معها بوصفها خادم TTS متوافقاً مع OpenAI ويخفف التحقق من النموذج/الصوت. --- ## Talk -القيم الافتراضية لوضع Talk ‏(macOS/iOS/Android). +الإعدادات الافتراضية لوضع Talk ‏(macOS/iOS/Android). ```json5 { @@ -2173,13 +2166,13 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -- يجب أن يطابق `talk.provider` مفتاحًا في `talk.providers` عندما يتم تكوين عدة موفري Talk. -- تكون مفاتيح Talk المسطحة القديمة (`talk.voiceId` و`talk.voiceAliases` و`talk.modelId` و`talk.outputFormat` و`talk.apiKey`) للتوافق فقط، ويتم ترحيلها تلقائيًا إلى `talk.providers.`. +- يجب أن تطابق `talk.provider` مفتاحاً في `talk.providers` عند ضبط عدة مزوّدي Talk. +- مفاتيح Talk القديمة المسطحة (`talk.voiceId` و`talk.voiceAliases` و`talk.modelId` و`talk.outputFormat` و`talk.apiKey`) مخصصة للتوافق فقط، ويتم ترحيلها تلقائياً إلى `talk.providers.`. - تعود معرّفات الصوت إلى `ELEVENLABS_VOICE_ID` أو `SAG_VOICE_ID`. -- يقبل `providers.*.apiKey` سلاسل نصية عادية أو كائنات SecretRef. -- لا يُطبّق الرجوع إلى `ELEVENLABS_API_KEY` إلا عندما لا يكون هناك Talk API key مكوَّن. -- يسمح `providers.*.voiceAliases` لتوجيهات Talk باستخدام أسماء مألوفة. -- يتحكم `silenceTimeoutMs` في مدة انتظار وضع Talk بعد صمت المستخدم قبل إرسال transcript. ويؤدي تركه غير مضبوط إلى الإبقاء على نافذة التوقف الافتراضية الخاصة بالمنصة (`700 ms` على macOS وAndroid، و`900 ms` على iOS). +- تقبل `providers.*.apiKey` سلاسل نصية صريحة أو كائنات SecretRef. +- ينطبق الرجوع الاحتياطي إلى `ELEVENLABS_API_KEY` فقط عندما لا يكون هناك مفتاح API مضبوط لـ Talk. +- تتيح `providers.*.voiceAliases` لتوجيهات Talk استخدام أسماء ودية. +- تتحكم `silenceTimeoutMs` في المدة التي ينتظرها وضع Talk بعد صمت المستخدم قبل إرسال النص المنسوخ. ويؤدي عدم ضبطها إلى الإبقاء على نافذة التوقف الافتراضية للمنصة (`700 ms` على macOS وAndroid، و`900 ms` على iOS). --- @@ -2189,35 +2182,35 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري يضبط `tools.profile` قائمة سماح أساسية قبل `tools.allow`/`tools.deny`: -تضبط عملية الإعداد الأولي المحلي التكوينات المحلية الجديدة افتراضيًا على `tools.profile: "coding"` عندما تكون غير مضبوطة (مع الحفاظ على ملفات التعريف الصريحة الموجودة). +تقوم الإعدادات المحلية الجديدة أثناء الإعداد المحلي بتهيئة `tools.profile: "coding"` عند عدم ضبطه (ويتم الحفاظ على ملفات التعريف الصريحة الموجودة). -| ملف التعريف | يتضمن | -| ----------- | ------------------------------------------------------------------------------------------------------------------------------- | -| `minimal` | `session_status` فقط | -| `coding` | `group:fs` و`group:runtime` و`group:web` و`group:sessions` و`group:memory` و`cron` و`image` و`image_generate` و`video_generate` | -| `messaging` | `group:messaging` و`sessions_list` و`sessions_history` و`sessions_send` و`session_status` | -| `full` | بلا قيود (مثل غير المضبوط) | +| ملف التعريف | يتضمن | +| ----------- | ------ | +| `minimal` | `session_status` فقط | +| `coding` | `group:fs` و`group:runtime` و`group:web` و`group:sessions` و`group:memory` و`cron` و`image` و`image_generate` و`video_generate` | +| `messaging` | `group:messaging` و`sessions_list` و`sessions_history` و`sessions_send` و`session_status` | +| `full` | بلا تقييد (مثل عدم الضبط) | ### مجموعات الأدوات -| المجموعة | الأدوات | -| ------------------ | ----------------------------------------------------------------------------------------------------------------------- | -| `group:runtime` | `exec` و`process` و`code_execution` ‏(`bash` مقبول كاسم مستعار لـ `exec`) | -| `group:fs` | `read` و`write` و`edit` و`apply_patch` | -| `group:sessions` | `sessions_list` و`sessions_history` و`sessions_send` و`sessions_spawn` و`sessions_yield` و`subagents` و`session_status` | -| `group:memory` | `memory_search` و`memory_get` | -| `group:web` | `web_search` و`x_search` و`web_fetch` | -| `group:ui` | `browser` و`canvas` | -| `group:automation` | `cron` و`gateway` | -| `group:messaging` | `message` | -| `group:nodes` | `nodes` | -| `group:agents` | `agents_list` | -| `group:media` | `image` و`image_generate` و`video_generate` و`tts` | -| `group:openclaw` | جميع الأدوات المضمنة (باستثناء provider plugins) | +| المجموعة | الأدوات | +| -------- | ------- | +| `group:runtime` | `exec` و`process` و`code_execution` (ويُقبل `bash` كاسم مستعار لـ `exec`) | +| `group:fs` | `read` و`write` و`edit` و`apply_patch` | +| `group:sessions` | `sessions_list` و`sessions_history` و`sessions_send` و`sessions_spawn` و`sessions_yield` و`subagents` و`session_status` | +| `group:memory` | `memory_search` و`memory_get` | +| `group:web` | `web_search` و`x_search` و`web_fetch` | +| `group:ui` | `browser` و`canvas` | +| `group:automation` | `cron` و`gateway` | +| `group:messaging` | `message` | +| `group:nodes` | `nodes` | +| `group:agents` | `agents_list` | +| `group:media` | `image` و`image_generate` و`video_generate` و`tts` | +| `group:openclaw` | جميع الأدوات المضمّنة (باستثناء Plugins الخاصة بالمزوّد) | ### `tools.allow` / `tools.deny` -سياسة السماح/المنع العامة للأدوات (المنع يفوز). غير حساسة لحالة الأحرف، وتدعم أحرف البدل `*`. وتُطبَّق حتى عندما يكون Docker sandbox معطّلًا. +سياسة السماح/المنع العامة للأدوات (يفوز المنع). غير حساسة لحالة الأحرف، وتدعم أحرف البدل `*`. وتُطبّق حتى عندما يكون Docker sandbox معطلاً. ```json5 { @@ -2227,7 +2220,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ### `tools.byProvider` -تقييد إضافي للأدوات لموفرين أو نماذج محددة. الترتيب: ملف التعريف الأساسي ← ملف تعريف provider ← allow/deny. +تقيّد الأدوات بشكل إضافي لمزوّدات أو نماذج محددة. الترتيب: ملف التعريف الأساسي → ملف تعريف المزوّد → allow/deny. ```json5 { @@ -2243,7 +2236,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ### `tools.elevated` -يتحكم في وصول `exec` المرتفع خارج sandbox: +يتحكم في وصول `exec` المرتفع خارج Sandbox: ```json5 { @@ -2259,9 +2252,9 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -- لا يمكن للتجاوز لكل وكيل (`agents.list[].tools.elevated`) إلا زيادة التقييد. -- يقوم `/elevated on|off|ask|full` بتخزين الحالة لكل جلسة؛ بينما تنطبق التوجيهات المضمنة على رسالة واحدة. -- يتجاوز `exec` المرتفع sandboxing ويستخدم مسار الخروج المكوَّن (`gateway` افتراضيًا، أو `node` عندما يكون هدف exec هو `node`). +- لا يمكن للتجاوز لكل وكيل (`agents.list[].tools.elevated`) إلا أن يزيد التقييد. +- يخزن `/elevated on|off|ask|full` الحالة لكل جلسة؛ وتُطبّق التوجيهات المضمنة على رسالة واحدة. +- يتجاوز `exec` المرتفع وضع Sandbox ويستخدم مسار الهروب المكوَّن (`gateway` افتراضياً، أو `node` عندما يكون هدف exec هو `node`). ### `tools.exec` @@ -2285,8 +2278,8 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ### `tools.loopDetection` -تكون فحوصات أمان حلقات الأدوات **معطلة افتراضيًا**. اضبط `enabled: true` لتفعيل الاكتشاف. -يمكن تعريف الإعدادات عمومًا في `tools.loopDetection` وتجاوزها لكل وكيل في `agents.list[].tools.loopDetection`. +تكون فحوصات أمان حلقات الأدوات **معطلة افتراضياً**. اضبط `enabled: true` لتفعيل الاكتشاف. +يمكن تعريف الإعدادات عالمياً في `tools.loopDetection` وتجاوزها لكل وكيل في `agents.list[].tools.loopDetection`. ```json5 { @@ -2309,12 +2302,12 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري - `historySize`: الحد الأقصى لسجل استدعاءات الأدوات المحتفظ به لتحليل الحلقات. - `warningThreshold`: حد نمط التكرار بلا تقدم لإصدار التحذيرات. -- `criticalThreshold`: حد أعلى للتكرار لحظر الحلقات الحرجة. -- `globalCircuitBreakerThreshold`: حد إيقاف صارم لأي تشغيل بلا تقدم. -- `detectors.genericRepeat`: التحذير عند تكرار استدعاءات الأداة نفسها/المعاملات نفسها. -- `detectors.knownPollNoProgress`: التحذير/الحظر عند أدوات polling المعروفة (`process.poll` و`command_status` وغير ذلك). -- `detectors.pingPong`: التحذير/الحظر عند أنماط الأزواج المتبادلة بلا تقدم. -- إذا كان `warningThreshold >= criticalThreshold` أو `criticalThreshold >= globalCircuitBreakerThreshold`، يفشل التحقق. +- `criticalThreshold`: حد تكرار أعلى لحظر الحلقات الحرجة. +- `globalCircuitBreakerThreshold`: حد توقف صارم لأي تشغيل بلا تقدم. +- `detectors.genericRepeat`: يحذر عند تكرار استدعاءات الأداة نفسها/الوسائط نفسها. +- `detectors.knownPollNoProgress`: يحذر/يحظر عند أدوات الاستطلاع المعروفة (`process.poll` و`command_status` وما إلى ذلك). +- `detectors.pingPong`: يحذر/يحظر عند الأنماط الزوجية المتناوبة بلا تقدم. +- إذا كانت `warningThreshold >= criticalThreshold` أو `criticalThreshold >= globalCircuitBreakerThreshold`، يفشل التحقق. ### `tools.web` @@ -2324,14 +2317,14 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري web: { search: { enabled: true, - apiKey: "brave_api_key", // أو متغير البيئة BRAVE_API_KEY + apiKey: "brave_api_key", // or BRAVE_API_KEY env maxResults: 5, timeoutSeconds: 30, cacheTtlMinutes: 15, }, fetch: { enabled: true, - provider: "firecrawl", // اختياري؛ احذفه للاكتشاف التلقائي + provider: "firecrawl", // optional; omit for auto-detect maxChars: 50000, maxCharsCap: 50000, maxResponseBytes: 2000000, @@ -2348,7 +2341,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ### `tools.media` -يضبط فهم الوسائط الواردة (الصورة/الصوت/الفيديو): +يضبط فهم الوسائط الواردة (صورة/صوت/فيديو): ```json5 { @@ -2356,7 +2349,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري media: { concurrency: 2, asyncCompletion: { - directSend: false, // اشتراك اختياري: إرسال الموسيقى/الفيديو غير المتزامن المكتمل مباشرة إلى القناة + directSend: false, // opt-in: send finished async music/video directly to the channel }, audio: { enabled: true, @@ -2382,30 +2375,31 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري -**إدخال provider** ‏(`type: "provider"` أو محذوف): +**إدخال المزوّد** (`type: "provider"` أو محذوف): -- `provider`: معرّف موفر API ‏(`openai` أو `anthropic` أو `google`/`gemini` أو `groq` وغير ذلك) +- `provider`: معرّف مزوّد API ‏(`openai` أو `anthropic` أو `google`/`gemini` أو `groq` وما إلى ذلك) - `model`: تجاوز معرّف النموذج -- `profile` / `preferredProfile`: اختيار profile من `auth-profiles.json` +- `profile` / `preferredProfile`: اختيار ملف التعريف من `auth-profiles.json` -**إدخال CLI** ‏(`type: "cli"`): +**إدخال CLI** (`type: "cli"`): - `command`: الملف التنفيذي المراد تشغيله -- `args`: معاملات ذات قوالب (تدعم `{{MediaPath}}` و`{{Prompt}}` و`{{MaxChars}}` وغير ذلك) +- `args`: وسائط قالبية (تدعم `{{MediaPath}}` و`{{Prompt}}` و`{{MaxChars}}` وما إلى ذلك) **الحقول المشتركة:** - `capabilities`: قائمة اختيارية (`image` أو `audio` أو `video`). القيم الافتراضية: `openai`/`anthropic`/`minimax` ← صورة، و`google` ← صورة+صوت+فيديو، و`groq` ← صوت. - `prompt` و`maxChars` و`maxBytes` و`timeoutSeconds` و`language`: تجاوزات لكل إدخال. -- تؤدي حالات الفشل إلى الرجوع إلى الإدخال التالي. +- تعود حالات الفشل إلى الإدخال التالي. -تتبع مصادقة provider الترتيب القياسي: `auth-profiles.json` ← متغيرات البيئة ← `models.providers.*.apiKey`. +تتبع مصادقة المزوّد الترتيب القياسي: `auth-profiles.json` ← متغيرات البيئة ← `models.providers.*.apiKey`. **حقول الإكمال غير المتزامن:** -- `asyncCompletion.directSend`: عندما تكون `true`، تحاول مهام - `music_generate` و`video_generate` غير المتزامنة المكتملة التسليم المباشر إلى القناة أولًا. والقيمة الافتراضية `false` - (مسار الاستيقاظ/تسليم النموذج القديم الخاص بجلسة الطالب). +- `asyncCompletion.directSend`: عندما تكون قيمته `true`، تحاول المهام + المكتملة غير المتزامنة الخاصة بـ `music_generate` + و`video_generate` التسليم المباشر إلى القناة أولاً. الافتراضي: `false` + (مسار الاستيقاظ/تسليم النموذج القديم المعتمد على جلسة الطالب). @@ -2426,7 +2420,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري يتحكم في الجلسات التي يمكن استهدافها بواسطة أدوات الجلسات (`sessions_list` و`sessions_history` و`sessions_send`). -الافتراضي: `tree` ‏(الجلسة الحالية + الجلسات التي أنشأتها، مثل subagents). +الافتراضي: `tree` (الجلسة الحالية + الجلسات التي أنشأتها، مثل الوكلاء الفرعيين). ```json5 { @@ -2442,10 +2436,10 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ملاحظات: - `self`: مفتاح الجلسة الحالية فقط. -- `tree`: الجلسة الحالية + الجلسات التي أنشأتها الجلسة الحالية (subagents). -- `agent`: أي جلسة تنتمي إلى معرّف الوكيل الحالي (قد يتضمن مستخدمين آخرين إذا كنت تشغّل جلسات لكل مرسل تحت معرّف الوكيل نفسه). -- `all`: أي جلسة. ولا يزال الاستهداف عبر الوكلاء يتطلب `tools.agentToAgent`. -- تقييد sandbox: عندما تكون الجلسة الحالية داخل sandbox ويكون `agents.defaults.sandbox.sessionToolsVisibility="spawned"`، تُفرض الرؤية إلى `tree` حتى لو كانت `tools.sessions.visibility="all"`. +- `tree`: الجلسة الحالية + الجلسات التي أنشأتها الجلسة الحالية (الوكلاء الفرعيون). +- `agent`: أي جلسة تنتمي إلى معرّف الوكيل الحالي (وقد تشمل مستخدمين آخرين إذا كنت تشغّل جلسات لكل مُرسل تحت معرّف الوكيل نفسه). +- `all`: أي جلسة. ويظل الاستهداف عبر الوكلاء يتطلب `tools.agentToAgent`. +- قيد Sandbox: عندما تكون الجلسة الحالية داخل Sandbox وتكون `agents.defaults.sandbox.sessionToolsVisibility="spawned"`، يتم فرض `visibility` على `tree` حتى لو كانت `tools.sessions.visibility="all"`. ### `tools.sessions_spawn` @@ -2456,11 +2450,11 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري tools: { sessions_spawn: { attachments: { - enabled: false, // اشتراك اختياري: اضبطه على true للسماح بمرفقات ملفات مضمنة - maxTotalBytes: 5242880, // 5 MB إجمالًا عبر جميع الملفات + enabled: false, // opt-in: set true to allow inline file attachments + maxTotalBytes: 5242880, // 5 MB total across all files maxFiles: 50, - maxFileBytes: 1048576, // 1 MB لكل ملف - retainOnSessionKeep: false, // الاحتفاظ بالمرفقات عندما يكون cleanup="keep" + maxFileBytes: 1048576, // 1 MB per file + retainOnSessionKeep: false, // keep attachments when cleanup="keep" }, }, }, @@ -2469,22 +2463,22 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ملاحظات: -- تكون المرفقات مدعومة فقط لـ `runtime: "subagent"`. ويرفض ACP runtime هذه المرفقات. -- يتم تجسيد الملفات في workspace الفرعية عند `.openclaw/attachments//` مع ملف `.manifest.json`. -- يتم تلقائيًا تنقيح محتوى المرفقات من استمرار transcript. -- يتم التحقق من مدخلات Base64 بفحوص صارمة للأبجدية/الحشو وحاجز حجم قبل فك الترميز. +- لا تُدعم المرفقات إلا لـ `runtime: "subagent"`. ويرفض وقت تشغيل ACP هذه المرفقات. +- يتم تحويل الملفات إلى مساحة عمل الابن في `.openclaw/attachments//` مع ملف `.manifest.json`. +- يتم تلقائياً حجب محتوى المرفقات من حفظ السجل. +- يتم التحقق من مدخلات Base64 باستخدام فحوص صارمة للأبجدية/الحشو وحارس حجم قبل فك الترميز. - تكون أذونات الملفات `0700` للأدلة و`0600` للملفات. -- يتبع التنظيف سياسة `cleanup`: يقوم `delete` دائمًا بإزالة المرفقات؛ بينما يحتفظ بها `keep` فقط عندما تكون `retainOnSessionKeep: true`. +- يتبع التنظيف سياسة `cleanup`: تقوم `delete` دائماً بإزالة المرفقات؛ وتحتفظ `keep` بها فقط عندما تكون `retainOnSessionKeep: true`. ### `tools.experimental` -أعلام الأدوات المضمنة التجريبية. تكون معطلة افتراضيًا ما لم تنطبق قاعدة تفعيل تلقائي صارمة لـ GPT-5 agentic. +أعلام الأدوات المضمنة التجريبية. تكون معطلة افتراضياً ما لم تنطبق قاعدة تمكين تلقائي صارمة لوكيلية GPT-5. ```json5 { tools: { experimental: { - planTool: true, // تفعيل update_plan التجريبية + planTool: true, // enable experimental update_plan }, }, } @@ -2492,9 +2486,9 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ملاحظات: -- `planTool`: يفعّل أداة `update_plan` المنظمة لتتبع الأعمال متعددة الخطوات غير البسيطة. -- الافتراضي: `false` ما لم يتم ضبط `agents.defaults.embeddedPi.executionContract` ‏(أو تجاوز لكل وكيل) على `"strict-agentic"` لتشغيل من عائلة OpenAI أو OpenAI Codex GPT-5. اضبطه على `true` لفرض تفعيل الأداة خارج هذا النطاق، أو على `false` لإبقائها معطلة حتى في تشغيلات GPT-5 strict-agentic. -- عند تفعيلها، يضيف system prompt أيضًا إرشادات استخدام بحيث لا يستخدمها النموذج إلا للأعمال الجوهرية ويحافظ على خطوة واحدة فقط في حالة `in_progress`. +- `planTool`: يفعّل أداة `update_plan` البنيوية لتتبع الأعمال متعددة الخطوات غير التافهة. +- الافتراضي: `false` ما لم تكن `agents.defaults.embeddedPi.executionContract` (أو تجاوز لكل وكيل) مضبوطة على `"strict-agentic"` لتشغيل OpenAI أو OpenAI Codex من عائلة GPT-5. اضبطه على `true` لفرض تشغيل الأداة خارج هذا النطاق، أو على `false` لإبقائها معطلة حتى في تشغيلات GPT-5 الصارمة الوكيلية. +- عند تفعيلها، يضيف system prompt أيضاً إرشادات استخدام حتى لا يستخدمها النموذج إلا للأعمال المهمة ويحافظ على خطوة واحدة فقط بحالة `in_progress`. ### `agents.defaults.subagents` @@ -2514,21 +2508,21 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -- `model`: النموذج الافتراضي للوكلاء الفرعيين المنشئين. وإذا حُذف، يرث الوكلاء الفرعيون نموذج المتصل. -- `allowAgents`: قائمة السماح الافتراضية لمعرّفات الوكلاء المستهدفة لـ `sessions_spawn` عندما لا يضبط وكيل الطالب `subagents.allowAgents` الخاص به (`["*"]` = أي وكيل؛ الافتراضي: الوكيل نفسه فقط). -- `runTimeoutSeconds`: المهلة الافتراضية (بالثواني) لـ `sessions_spawn` عندما يحذف استدعاء الأداة `runTimeoutSeconds`. وتعني القيمة `0` عدم وجود مهلة. +- `model`: النموذج الافتراضي للوكلاء الفرعيين المنشأين. وإذا تم حذفه، يرث الوكلاء الفرعيون نموذج المستدعي. +- `allowAgents`: قائمة السماح الافتراضية لمعرّفات الوكلاء الهدف لأجل `sessions_spawn` عندما لا يضبط الوكيل الطالب `subagents.allowAgents` الخاص به (`["*"]` = أي وكيل؛ الافتراضي: الوكيل نفسه فقط). +- `runTimeoutSeconds`: المهلة الافتراضية (بالثواني) لـ `sessions_spawn` عندما يحذف استدعاء الأداة `runTimeoutSeconds`. وتعني `0` عدم وجود مهلة. - سياسة الأدوات لكل وكيل فرعي: `tools.subagents.tools.allow` / `tools.subagents.tools.deny`. --- -## موفرو base URLs المخصصون +## المزوّدات المخصصة وعناوين URL الأساسية -يستخدم OpenClaw فهرس النماذج المضمن. أضف موفرين مخصصين عبر `models.providers` في التكوين أو `~/.openclaw/agents//agent/models.json`. +يستخدم OpenClaw فهرس النماذج المضمّن. أضف مزوّدات مخصصة عبر `models.providers` في الإعدادات أو `~/.openclaw/agents//agent/models.json`. ```json5 { models: { - mode: "merge", // merge (الافتراضي) | replace + mode: "merge", // merge (default) | replace providers: { "custom-proxy": { baseUrl: "http://localhost:4000/v1", @@ -2553,49 +2547,49 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ``` - استخدم `authHeader: true` + `headers` لاحتياجات المصادقة المخصصة. -- تجاوز جذر تكوين الوكيل باستخدام `OPENCLAW_AGENT_DIR` ‏(أو `PI_CODING_AGENT_DIR`، وهو اسم مستعار قديم لمتغير البيئة). -- أسبقية الدمج لمعرّفات provider المطابقة: - - تفوز قيم `baseUrl` غير الفارغة في `models.json` الخاصة بالوكيل. - - تفوز قيم `apiKey` غير الفارغة في الوكيل فقط عندما لا يكون ذلك provider مُدارًا عبر SecretRef في سياق التكوين/ملف التعريف الحالي للمصادقة. - - يتم تحديث قيم `apiKey` للموفرات المدارة عبر SecretRef من علامات المصدر (`ENV_VAR_NAME` لمراجع env، و`secretref-managed` لمراجع file/exec) بدلًا من استمرار الأسرار المحلولة. - - يتم تحديث قيم header الخاصة بالموفرات المدارة عبر SecretRef من علامات المصدر (`secretref-env:ENV_VAR_NAME` لمراجع env، و`secretref-managed` لمراجع file/exec). - - تعود قيم `apiKey`/`baseUrl` الفارغة أو المحذوفة في الوكيل إلى `models.providers` في التكوين. - - تستخدم القيم المطابقة لـ `contextWindow`/`maxTokens` في النموذج القيمة الأعلى بين التكوين الصريح وقيم الفهرس الضمنية. - - يحتفظ `contextTokens` المطابق في النموذج بحد runtime صريح عند وجوده؛ استخدمه لتقييد السياق الفعلي من دون تغيير بيانات النموذج الأصلية. - - استخدم `models.mode: "replace"` عندما تريد أن يعيد التكوين كتابة `models.json` بالكامل. - - يكون استمرار العلامات معتمدًا على المصدر: تُكتب العلامات من لقطة تكوين المصدر النشطة (قبل الحل)، وليس من قيم الأسرار المحلولة في runtime. +- تجاوز جذر إعدادات الوكيل باستخدام `OPENCLAW_AGENT_DIR` (أو `PI_CODING_AGENT_DIR`، وهو اسم مستعار قديم لمتغير البيئة). +- أسبقية الدمج لمعرّفات المزوّد المطابقة: + - تفوز القيم غير الفارغة `baseUrl` في `models.json` الخاصة بالوكيل. + - تفوز القيم غير الفارغة `apiKey` الخاصة بالوكيل فقط عندما لا يكون ذلك المزوّد مُداراً عبر SecretRef في سياق الإعدادات/ملف تعريف المصادقة الحالي. + - يتم تحديث قيم `apiKey` للمزوّدات المُدارة عبر SecretRef من علامات المصدر (`ENV_VAR_NAME` لمراجع البيئة، و`secretref-managed` لمراجع الملف/التنفيذ) بدلاً من حفظ الأسرار المحلولة. + - يتم تحديث قيم رؤوس المزوّد المُدارة عبر SecretRef من علامات المصدر (`secretref-env:ENV_VAR_NAME` لمراجع البيئة، و`secretref-managed` لمراجع الملف/التنفيذ). + - تعود القيم الفارغة أو المحذوفة `apiKey`/`baseUrl` الخاصة بالوكيل إلى `models.providers` في الإعدادات. + - تستخدم القيم المطابقة `contextWindow`/`maxTokens` للنموذج القيمة الأعلى بين الإعدادات الصريحة وقيم الفهرس الضمنية. + - تحافظ القيم المطابقة `contextTokens` للنموذج على حد وقت التشغيل الصريح عند وجوده؛ استخدمه لتقييد السياق الفعلي دون تغيير بيانات النموذج الأصلية. + - استخدم `models.mode: "replace"` عندما تريد أن تعيد الإعدادات كتابة `models.json` بالكامل. + - يكون حفظ العلامات خاضعاً للمصدر: تتم كتابة العلامات من اللقطة النشطة لإعدادات المصدر (قبل الحل)، وليس من قيم الأسرار المحلولة وقت التشغيل. -### تفاصيل حقول provider +### تفاصيل حقول المزوّد -- `models.mode`: سلوك فهرس provider ‏(`merge` أو `replace`). -- `models.providers`: خريطة الموفّرين المخصصين مفهرسة بمعرّف provider. -- `models.providers.*.api`: مهايئ الطلب (`openai-completions` أو `openai-responses` أو `anthropic-messages` أو `google-generative-ai` وغير ذلك). -- `models.providers.*.apiKey`: بيانات اعتماد provider ‏(يُفضّل استخدام SecretRef/استبدال متغيرات البيئة). +- `models.mode`: سلوك فهرس المزوّد (`merge` أو `replace`). +- `models.providers`: خريطة المزوّدات المخصصة مفهرسة حسب معرّف المزوّد. +- `models.providers.*.api`: محوّل الطلب (`openai-completions` أو `openai-responses` أو `anthropic-messages` أو `google-generative-ai` وما إلى ذلك). +- `models.providers.*.apiKey`: بيانات اعتماد المزوّد (يُفضّل SecretRef/الاستبدال من البيئة). - `models.providers.*.auth`: استراتيجية المصادقة (`api-key` أو `token` أو `oauth` أو `aws-sdk`). -- `models.providers.*.injectNumCtxForOpenAICompat`: بالنسبة إلى Ollama + `openai-completions`، يتم حقن `options.num_ctx` في الطلبات (الافتراضي: `true`). -- `models.providers.*.authHeader`: فرض نقل بيانات الاعتماد في ترويسة `Authorization` عند الحاجة. +- `models.providers.*.injectNumCtxForOpenAICompat`: بالنسبة إلى Ollama + `openai-completions`، يقوم بحقن `options.num_ctx` في الطلبات (الافتراضي: `true`). +- `models.providers.*.authHeader`: يفرض نقل بيانات الاعتماد في رأس `Authorization` عند الحاجة. - `models.providers.*.baseUrl`: عنوان URL الأساسي لـ API العلوي. -- `models.providers.*.headers`: ترويسات ثابتة إضافية لتوجيه proxy/المستأجر. -- `models.providers.*.request`: تجاوزات النقل لطلبات HTTP الخاصة بموفر النموذج. - - `request.headers`: ترويسات إضافية (تُدمج مع القيم الافتراضية للموفر). وتقبل القيم SecretRef. - - `request.auth`: تجاوز استراتيجية المصادقة. الأوضاع: `"provider-default"` ‏(استخدام المصادقة المضمنة الخاصة بالموفر)، و`"authorization-bearer"` ‏(مع `token`)، و`"header"` ‏(مع `headerName` و`value` و`prefix` الاختياري). - - `request.proxy`: تجاوز HTTP proxy. الأوضاع: `"env-proxy"` ‏(استخدام متغيرات البيئة `HTTP_PROXY`/`HTTPS_PROXY`) و`"explicit-proxy"` ‏(مع `url`). ويقبل كلا الوضعين كائنًا فرعيًا اختياريًا `tls`. - - `request.tls`: تجاوز TLS للاتصالات المباشرة. الحقول: `ca` و`cert` و`key` و`passphrase` ‏(كلها تقبل SecretRef)، و`serverName` و`insecureSkipVerify`. - - `request.allowPrivateNetwork`: عندما تكون `true`، تسمح باستخدام HTTPS إلى `baseUrl` عندما يحل DNS إلى نطاقات خاصة أو CGNAT أو ما شابه، عبر حاجز جلب HTTP الخاص بالموفر (اشتراك اختياري للمشغل لنقاط النهاية OpenAI-compatible المستضافة ذاتيًا والموثوقة). ويستخدم WebSocket الطلب `request` نفسه للترويسات/TLS ولكن ليس حاجز SSRF الخاص بالجلب. القيمة الافتراضية `false`. -- `models.providers.*.models`: إدخالات فهرس نماذج provider الصريحة. -- `models.providers.*.models.*.contextWindow`: بيانات وصفية لنافذة سياق النموذج الأصلية. -- `models.providers.*.models.*.contextTokens`: حد سياق runtime اختياري. استخدم هذا عندما تريد ميزانية سياق فعلية أصغر من `contextWindow` الأصلية للنموذج. -- `models.providers.*.models.*.compat.supportsDeveloperRole`: تلميح توافق اختياري. بالنسبة إلى `api: "openai-completions"` مع `baseUrl` غير أصلي وغير فارغ (المضيف ليس `api.openai.com`)، يفرض OpenClaw هذه القيمة إلى `false` وقت runtime. ويُبقي `baseUrl` الفارغ/المحذوف سلوك OpenAI الافتراضي. -- `models.providers.*.models.*.compat.requiresStringContent`: تلميح توافق اختياري لنقاط نهاية chat المتوافقة مع OpenAI التي تدعم المحتوى النصي فقط. وعندما تكون `true`، يقوم OpenClaw بتسطيح مصفوفات `messages[].content` النصية البحتة إلى سلاسل نصية عادية قبل إرسال الطلب. +- `models.providers.*.headers`: رؤوس ثابتة إضافية لتوجيه proxy/المستأجر. +- `models.providers.*.request`: تجاوزات النقل لطلبات HTTP الخاصة بمزوّد النموذج. + - `request.headers`: رؤوس إضافية (تُدمَج مع افتراضيات المزوّد). تقبل القيم SecretRef. + - `request.auth`: تجاوز استراتيجية المصادقة. الأوضاع: `"provider-default"` (استخدام المصادقة المضمّنة للمزوّد)، و`"authorization-bearer"` (مع `token`)، و`"header"` (مع `headerName` و`value` و`prefix` الاختياري). + - `request.proxy`: تجاوز HTTP proxy. الأوضاع: `"env-proxy"` (استخدام متغيرات البيئة `HTTP_PROXY`/`HTTPS_PROXY`) و`"explicit-proxy"` (مع `url`). يقبل كلا الوضعين كائناً فرعياً اختيارياً `tls`. + - `request.tls`: تجاوز TLS للاتصالات المباشرة. الحقول: `ca` و`cert` و`key` و`passphrase` (كلها تقبل SecretRef)، و`serverName` و`insecureSkipVerify`. + - `request.allowPrivateNetwork`: عندما تكون قيمته `true`، يسمح باتصالات HTTPS إلى `baseUrl` عندما يُحل DNS إلى نطاقات خاصة أو CGNAT أو ما شابه، عبر حارس جلب HTTP الخاص بالمزوّد (اشتراك اختياري من المشغّل لنقاط نهاية OpenAI-compatible ذاتية الاستضافة والموثوقة). تستخدم WebSocket نفس `request` للرؤوس/TLS ولكن ليس حارس SSRF الخاص بالجلب. الافتراضي `false`. +- `models.providers.*.models`: إدخالات فهرس نماذج صريحة للمزوّد. +- `models.providers.*.models.*.contextWindow`: بيانات وصفية لنافذة السياق الأصلية للنموذج. +- `models.providers.*.models.*.contextTokens`: حد سياق اختياري لوقت التشغيل. استخدمه عندما تريد ميزانية سياق فعلية أصغر من `contextWindow` الأصلية للنموذج. +- `models.providers.*.models.*.compat.supportsDeveloperRole`: تلميح توافق اختياري. بالنسبة إلى `api: "openai-completions"` مع `baseUrl` غير أصلي وغير فارغ (مضيف ليس `api.openai.com`)، يفرض OpenClaw هذه القيمة إلى `false` وقت التشغيل. أما `baseUrl` الفارغ/المحذوف فيحافظ على سلوك OpenAI الافتراضي. +- `models.providers.*.models.*.compat.requiresStringContent`: تلميح توافق اختياري لنقاط نهاية الدردشة OpenAI-compatible التي تقبل السلاسل فقط. عندما تكون قيمته `true`، يقوم OpenClaw بتسطيح المصفوفات النصية الخالصة `messages[].content` إلى سلاسل عادية قبل إرسال الطلب. - `plugins.entries.amazon-bedrock.config.discovery`: جذر إعدادات الاكتشاف التلقائي لـ Bedrock. - `plugins.entries.amazon-bedrock.config.discovery.enabled`: تشغيل/إيقاف الاكتشاف الضمني. - `plugins.entries.amazon-bedrock.config.discovery.region`: منطقة AWS الخاصة بالاكتشاف. -- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: عامل تصفية اختياري لمعرّف provider من أجل اكتشاف موجه. -- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: فترة polling لتحديث الاكتشاف. -- `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow`: نافذة سياق احتياطية للنماذج المكتشفة. -- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: الحد الاحتياطي الأقصى لرموز الإخراج للنماذج المكتشفة. +- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: عامل تصفية اختياري لمعرّف المزوّد للاكتشاف الموجّه. +- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: فاصل الاستقصاء لتحديث الاكتشاف. +- `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow`: نافذة السياق الاحتياطية للنماذج المكتشفة. +- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: الحد الاحتياطي لرموز الإخراج للنماذج المكتشفة. -### أمثلة على provider +### أمثلة المزوّدات @@ -2648,7 +2642,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -اضبط `OPENCODE_API_KEY` ‏(أو `OPENCODE_ZEN_API_KEY`). استخدم مراجع `opencode/...` لفهرس Zen أو مراجع `opencode-go/...` لفهرس Go. الاختصار: `openclaw onboard --auth-choice opencode-zen` أو `openclaw onboard --auth-choice opencode-go`. +اضبط `OPENCODE_API_KEY` (أو `OPENCODE_ZEN_API_KEY`). استخدم المراجع `opencode/...` لفهرس Zen أو المراجع `opencode-go/...` لفهرس Go. اختصار: `openclaw onboard --auth-choice opencode-zen` أو `openclaw onboard --auth-choice opencode-go`. @@ -2665,11 +2659,11 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -اضبط `ZAI_API_KEY`. ويُقبل كل من `z.ai/*` و`z-ai/*` كأسماء مستعارة. الاختصار: `openclaw onboard --auth-choice zai-api-key`. +اضبط `ZAI_API_KEY`. ويُقبل `z.ai/*` و`z-ai/*` كأسماء مستعارة. اختصار: `openclaw onboard --auth-choice zai-api-key`. - نقطة النهاية العامة: `https://api.z.ai/api/paas/v4` -- نقطة النهاية البرمجية (الافتراضية): `https://api.z.ai/api/coding/paas/v4` -- بالنسبة إلى نقطة النهاية العامة، عرّف provider مخصصًا مع تجاوز `baseUrl`. +- نقطة نهاية البرمجة (الافتراضية): `https://api.z.ai/api/coding/paas/v4` +- بالنسبة إلى نقطة النهاية العامة، عرّف مزوّداً مخصصاً مع تجاوز `baseUrl`. @@ -2708,11 +2702,11 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -بالنسبة إلى نقطة النهاية في الصين: `baseUrl: "https://api.moonshot.cn/v1"` أو `openclaw onboard --auth-choice moonshot-api-key-cn`. +بالنسبة إلى نقطة النهاية الخاصة بالصين: `baseUrl: "https://api.moonshot.cn/v1"` أو `openclaw onboard --auth-choice moonshot-api-key-cn`. -تعلن نقاط النهاية الأصلية لـ Moonshot عن توافق استخدام التدفق على النقل المشترك -`openai-completions`، ويعتمد OpenClaw في ذلك على قدرات نقطة النهاية -وليس على معرّف provider المضمن وحده. +تعلن نقاط نهاية Moonshot الأصلية عن توافق استخدام البث على ناقل +`openai-completions` المشترك، ويعتمد OpenClaw في ذلك على قدرات نقطة النهاية +وليس فقط على معرّف المزوّد المضمّن. @@ -2730,7 +2724,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -متوافق مع Anthropic، وprovider مضمّن. الاختصار: `openclaw onboard --auth-choice kimi-code-api-key`. +متوافق مع Anthropic، ومزوّد مضمّن. اختصار: `openclaw onboard --auth-choice kimi-code-api-key`. @@ -2769,7 +2763,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -يجب أن يحذف Base URL اللاحقة `/v1` ‏(لأن عميل Anthropic يضيفها). الاختصار: `openclaw onboard --auth-choice synthetic-api-key`. +يجب أن يحذف `baseUrl` المقطع `/v1` (إذ يضيفه عميل Anthropic). اختصار: `openclaw onboard --auth-choice synthetic-api-key`. @@ -2812,17 +2806,17 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري اضبط `MINIMAX_API_KEY`. الاختصارات: `openclaw onboard --auth-choice minimax-global-api` أو `openclaw onboard --auth-choice minimax-cn-api`. -يكون فهرس النماذج افتراضيًا على M2.7 فقط. -في مسار التدفق المتوافق مع Anthropic، يعطّل OpenClaw قيمة thinking في MiniMax -افتراضيًا ما لم تضبط `thinking` بنفسك صراحةً. ويؤدي `/fast on` أو -`params.fastMode: true` إلى إعادة كتابة `MiniMax-M2.7` إلى +يستخدم فهرس النماذج M2.7 فقط افتراضياً. +في مسار البث المتوافق مع Anthropic، يعطّل OpenClaw تفكير MiniMax +افتراضياً ما لم تضبط `thinking` بنفسك صراحةً. يقوم `/fast on` أو +`params.fastMode: true` بإعادة كتابة `MiniMax-M2.7` إلى `MiniMax-M2.7-highspeed`. -راجع [النماذج المحلية](/ar/gateway/local-models). باختصار: شغّل نموذجًا محليًا كبيرًا عبر LM Studio Responses API على عتاد قوي؛ وأبقِ النماذج المستضافة مدمجة للرجوع الاحتياطي. +راجع [النماذج المحلية](/ar/gateway/local-models). باختصار: شغّل نموذجاً محلياً كبيراً عبر LM Studio Responses API على عتاد قوي؛ واحتفظ بالنماذج المستضافة مدمجة من أجل الرجوع الاحتياطي. @@ -2843,7 +2837,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري }, entries: { "image-lab": { - apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // أو سلسلة نصية عادية + apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // or plaintext string env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, }, peekaboo: { enabled: true }, @@ -2853,14 +2847,14 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -- `allowBundled`: قائمة سماح اختيارية لـ Skills المضمنة فقط (ولا تتأثر Skills المُدارة/الخاصة بـ workspace). +- `allowBundled`: قائمة سماح اختيارية لـ Skills المجمّعة فقط (ولا تتأثر Skills المُدارة/Skills مساحة العمل). - `load.extraDirs`: جذور Skills مشتركة إضافية (أدنى أسبقية). -- `install.preferBrew`: عندما تكون true، يفضّل استخدام Homebrew عند - توفر `brew` قبل الرجوع إلى أنواع المُثبِّتات الأخرى. -- `install.nodeManager`: تفضيل مُثبِّت Node لمواصفات `metadata.openclaw.install` +- `install.preferBrew`: عندما تكون قيمته true، يفضّل أدوات التثبيت عبر Homebrew عندما يكون `brew` متاحاً + قبل الرجوع إلى أنواع المثبتات الأخرى. +- `install.nodeManager`: تفضيل مدير Node لمواصفات `metadata.openclaw.install` (`npm` | `pnpm` | `yarn` | `bun`). -- `entries..enabled: false` يعطّل Skill حتى لو كانت مضمّنة/مثبّتة. -- `entries..apiKey`: وسيلة مريحة لـ Skills التي تعلن عن متغير بيئة أساسي (سلسلة نصية عادية أو كائن SecretRef). +- `entries..enabled: false` يعطّل Skill حتى لو كانت مجمّعة/مثبتة. +- `entries..apiKey`: حقل مريح لـ Skills التي تعلن عن متغير بيئة أساسي (سلسلة نصية صريحة أو كائن SecretRef). --- @@ -2889,40 +2883,40 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ``` - يتم التحميل من `~/.openclaw/extensions` و`/.openclaw/extensions` بالإضافة إلى `plugins.load.paths`. -- يقبل الاكتشاف OpenClaw plugins الأصلية بالإضافة إلى حِزم Codex المتوافقة وحِزم Claude، بما في ذلك حِزم Claude ذات التخطيط الافتراضي من دون manifest. -- **تتطلب تغييرات التكوين إعادة تشغيل Gateway.** -- `allow`: قائمة سماح اختيارية (يتم تحميل plugins المدرجة فقط). ويفوز `deny`. -- `plugins.entries..apiKey`: حقل مريح على مستوى Plugin لمفتاح API ‏(عندما يدعمه Plugin). +- يقبل الاكتشاف Plugins الأصلية الخاصة بـ OpenClaw بالإضافة إلى حِزم Codex المتوافقة وحِزم Claude، بما في ذلك حِزم Claude ذات التخطيط الافتراضي من دون manifest. +- **تتطلب تغييرات الإعدادات إعادة تشغيل Gateway.** +- `allow`: قائمة سماح اختيارية (يتم تحميل Plugins المدرجة فقط). ويفوز `deny`. +- `plugins.entries..apiKey`: حقل مريح على مستوى Plugin لمفتاح API (عندما يدعمه Plugin). - `plugins.entries..env`: خريطة متغيرات بيئة ضمن نطاق Plugin. -- `plugins.entries..hooks.allowPromptInjection`: عندما تكون `false`، يمنع core ‏`before_prompt_build` ويتجاهل الحقول المعدِّلة للـ prompt من `before_agent_start` القديم، مع الحفاظ على `modelOverride` و`providerOverride` القديمين. وينطبق ذلك على hooks الخاصة بالـ Plugin الأصلية وأدلة hooks التي توفرها الحِزم المدعومة. -- `plugins.entries..subagent.allowModelOverride`: الوثوق صراحةً بهذا Plugin لطلب تجاوزات `provider` و`model` لكل تشغيل في تشغيلات subagent الخلفية. -- `plugins.entries..subagent.allowedModels`: قائمة سماح اختيارية للأهداف القياسية `provider/model` لتجاوزات subagent الموثوقة. استخدم `"*"` فقط عندما تريد عمدًا السماح بأي نموذج. -- `plugins.entries..config`: كائن تكوين يعرّفه Plugin ‏(ويتم التحقق منه بواسطة schema الخاصة بـ OpenClaw Plugin الأصلية عندما تكون متاحة). -- `plugins.entries.firecrawl.config.webFetch`: إعدادات موفر web-fetch الخاص بـ Firecrawl. - - `apiKey`: مفتاح API الخاص بـ Firecrawl ‏(يقبل SecretRef). ويعود إلى `plugins.entries.firecrawl.config.webSearch.apiKey` أو `tools.web.fetch.firecrawl.apiKey` القديم أو متغير البيئة `FIRECRAWL_API_KEY`. - - `baseUrl`: عنوان URL الأساسي لـ API الخاص بـ Firecrawl ‏(الافتراضي: `https://api.firecrawl.dev`). +- `plugins.entries..hooks.allowPromptInjection`: عندما تكون قيمته `false`، يقوم core بحظر `before_prompt_build` ويتجاهل الحقول المعدّلة لـ prompt من `before_agent_start` القديم، مع الحفاظ على `modelOverride` و`providerOverride` القديمين. وينطبق ذلك على hooks الأصلية للـ Plugin وعلى أدلة hooks التي توفرها الحِزم والمدعومة. +- `plugins.entries..subagent.allowModelOverride`: يثق صراحةً بهذا Plugin لطلب تجاوزات `provider` و`model` لكل تشغيل لتشغيلات الوكيل الفرعي في الخلفية. +- `plugins.entries..subagent.allowedModels`: قائمة سماح اختيارية لأهداف `provider/model` القياسية للتجاوزات الموثوقة للوكلاء الفرعيين. استخدم `"*"` فقط عندما تريد عمداً السماح بأي نموذج. +- `plugins.entries..config`: كائن إعدادات يعرّفه Plugin (يتم التحقق منه باستخدام مخطط Plugin الأصلي لـ OpenClaw عند توفره). +- `plugins.entries.firecrawl.config.webFetch`: إعدادات مزوّد Firecrawl الخاص بـ web-fetch. + - `apiKey`: مفتاح API الخاص بـ Firecrawl (يقبل SecretRef). ويعود احتياطياً إلى `plugins.entries.firecrawl.config.webSearch.apiKey`، أو إلى `tools.web.fetch.firecrawl.apiKey` القديم، أو إلى متغير البيئة `FIRECRAWL_API_KEY`. + - `baseUrl`: عنوان Firecrawl API الأساسي (الافتراضي: `https://api.firecrawl.dev`). - `onlyMainContent`: استخراج المحتوى الرئيسي فقط من الصفحات (الافتراضي: `true`). - - `maxAgeMs`: العمر الأقصى للذاكرة المؤقتة بالمللي ثانية (الافتراضي: `172800000` / يومان). - - `timeoutSeconds`: مهلة طلب الكشط بالثواني (الافتراضي: `60`). -- `plugins.entries.xai.config.xSearch`: إعدادات xAI X Search ‏(بحث Grok على الويب). - - `enabled`: تمكين موفر X Search. + - `maxAgeMs`: الحد الأقصى لعمر الذاكرة المؤقتة بالميلي ثانية (الافتراضي: `172800000` / يومان). + - `timeoutSeconds`: مهلة طلب الاستخراج بالثواني (الافتراضي: `60`). +- `plugins.entries.xai.config.xSearch`: إعدادات xAI X Search ‏(بحث الويب Grok). + - `enabled`: تمكين مزوّد X Search. - `model`: نموذج Grok المستخدم للبحث (مثل `"grok-4-1-fast"`). - `plugins.entries.memory-core.config.dreaming`: إعدادات Dreaming الخاصة بالذاكرة. راجع [Dreaming](/ar/concepts/dreaming) للمراحل والحدود. - - `enabled`: المفتاح الرئيسي لـ Dreaming ‏(الافتراضي `false`). - - `frequency`: إيقاع Cron لكل اجتياح Dreaming كامل (الافتراضي `"0 3 * * *"`). - - تُعد سياسة المراحل والحدود تفاصيل تنفيذ (وليست مفاتيح تكوين موجهة للمستخدم). -- يوجد تكوين الذاكرة الكامل في [مرجع تكوين الذاكرة](/ar/reference/memory-config): + - `enabled`: مفتاح Dreaming الرئيسي (الافتراضي `false`). + - `frequency`: وتيرة Cron لكل جولة Dreaming كاملة (الافتراضي `"0 3 * * *"`). + - سياسة المراحل والحدود هي تفاصيل تنفيذية (وليست مفاتيح إعدادات موجهة للمستخدم). +- توجد إعدادات الذاكرة الكاملة في [مرجع إعدادات الذاكرة](/ar/reference/memory-config): - `agents.defaults.memorySearch.*` - `memory.backend` - `memory.citations` - `memory.qmd.*` - `plugins.entries.memory-core.config.dreaming` -- يمكن أيضًا لـ Claude bundle plugins المفعّلة أن تسهم في القيم الافتراضية المضمنة لـ Pi من `settings.json`؛ ويطبق OpenClaw هذه القيم كإعدادات وكلاء منقّاة، وليس كرقع تكوين خام لـ OpenClaw. -- `plugins.slots.memory`: اختر معرّف Plugin الذاكرة النشط، أو `"none"` لتعطيل plugins الذاكرة. -- `plugins.slots.contextEngine`: اختر معرّف Plugin محرك السياق النشط؛ والافتراضي `"legacy"` ما لم تثبّت محركًا آخر وتحدده. +- يمكن أيضاً لحِزم Claude المفعّلة أن تسهم بإعدادات Pi مضمّنة افتراضية من `settings.json`؛ ويطبق OpenClaw هذه الإعدادات كإعدادات وكيل مُنقّحة، وليس كتصحيحات خام لإعدادات OpenClaw. +- `plugins.slots.memory`: اختر معرّف Plugin الذاكرة النشط، أو `"none"` لتعطيل Plugins الذاكرة. +- `plugins.slots.contextEngine`: اختر معرّف Plugin محرك السياق النشط؛ والافتراضي هو `"legacy"` ما لم تثبّت محركاً آخر وتحدده. - `plugins.installs`: بيانات تعريف التثبيت المُدارة عبر CLI والمستخدمة بواسطة `openclaw plugins update`. - تتضمن `source` و`spec` و`sourcePath` و`installPath` و`version` و`resolvedName` و`resolvedVersion` و`resolvedSpec` و`integrity` و`shasum` و`resolvedAt` و`installedAt`. - - تعامل مع `plugins.installs.*` على أنها حالة مُدارة؛ ويفضّل استخدام أوامر CLI بدلًا من التحرير اليدوي. + - اعتبر `plugins.installs.*` حالة مُدارة؛ وفضّل أوامر CLI على التعديلات اليدوية. راجع [Plugins](/ar/tools/plugin). @@ -2937,8 +2931,8 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري evaluateEnabled: true, defaultProfile: "user", ssrfPolicy: { - // dangerouslyAllowPrivateNetwork: true, // اشترك فقط عند الثقة المتعمدة في الوصول إلى الشبكات الخاصة - // allowPrivateNetwork: true, // اسم مستعار قديم + // dangerouslyAllowPrivateNetwork: true, // opt in only for trusted private-network access + // allowPrivateNetwork: true, // legacy alias // hostnameAllowlist: ["*.example.com", "example.com"], // allowedHostnames: ["localhost"], }, @@ -2964,34 +2958,34 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -- يؤدي `evaluateEnabled: false` إلى تعطيل `act:evaluate` و`wait --fn`. -- يكون `ssrfPolicy.dangerouslyAllowPrivateNetwork` معطّلًا عندما لا يُضبط، لذا يبقى تنقل المتصفح صارمًا افتراضيًا. -- اضبط `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` فقط عندما تثق عمدًا في تنقل المتصفح داخل الشبكات الخاصة. -- في الوضع الصارم، تخضع نقاط نهاية CDP للملفات التعريفية البعيدة (`profiles.*.cdpUrl`) لحظر الشبكات الخاصة نفسه أثناء فحوصات الوصول/الاكتشاف. -- يبقى `ssrfPolicy.allowPrivateNetwork` مدعومًا كاسم مستعار قديم. +- يقوم `evaluateEnabled: false` بتعطيل `act:evaluate` و`wait --fn`. +- تكون `ssrfPolicy.dangerouslyAllowPrivateNetwork` معطلة عند عدم ضبطها، لذا يبقى تنقل المتصفح صارماً افتراضياً. +- اضبط `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` فقط عندما تثق عمداً بتنقل المتصفح عبر الشبكات الخاصة. +- في الوضع الصارم، تخضع نقاط نهاية ملفات تعريف CDP البعيدة (`profiles.*.cdpUrl`) للحظر نفسه الخاص بالشبكات الخاصة أثناء فحوصات الوصول/الاكتشاف. +- يظل `ssrfPolicy.allowPrivateNetwork` مدعوماً كاسم مستعار قديم. - في الوضع الصارم، استخدم `ssrfPolicy.hostnameAllowlist` و`ssrfPolicy.allowedHostnames` للاستثناءات الصريحة. -- تكون الملفات التعريفية البعيدة للربط فقط (ويتم تعطيل start/stop/reset). +- تكون ملفات التعريف البعيدة قابلة للإرفاق فقط (بدء/إيقاف/إعادة ضبط معطل). - يقبل `profiles.*.cdpUrl` القيم `http://` و`https://` و`ws://` و`wss://`. استخدم HTTP(S) عندما تريد أن يكتشف OpenClaw ‏`/json/version`؛ واستخدم WS(S) - عندما يزوّدك provider بعنوان DevTools WebSocket URL مباشر. -- تستخدم الملفات التعريفية من نوع `existing-session` قيمة Chrome MCP بدلًا من CDP ويمكنها الربط على - المضيف المحدد أو عبر browser node متصلة. -- يمكن للملفات التعريفية من نوع `existing-session` ضبط `userDataDir` لاستهداف + عندما يزوّدك المزوّد بعنوان DevTools WebSocket مباشر. +- تستخدم ملفات تعريف `existing-session` القيمة Chrome MCP بدلاً من CDP ويمكنها الإرفاق على + المضيف المحدد أو عبر browser node متصل. +- يمكن لملفات تعريف `existing-session` ضبط `userDataDir` لاستهداف ملف تعريف محدد لمتصفح قائم على Chromium مثل Brave أو Edge. -- تحتفظ الملفات التعريفية من نوع `existing-session` بحدود مسار Chrome MCP الحالية: - إجراءات معتمدة على snapshot/ref بدلًا من استهداف CSS-selector، وhooks لرفع ملف واحد، - ومن دون تجاوزات لمهلات dialog، ومن دون `wait --load networkidle`، ومن دون - `responsebody` أو تصدير PDF أو اعتراض التنزيلات أو الإجراءات الدفعية. -- تقوم الملفات التعريفية المحلية المُدارة `openclaw` بتعيين `cdpPort` و`cdpUrl` تلقائيًا؛ - اضبط `cdpUrl` صراحةً فقط من أجل CDP البعيد. -- ترتيب الاكتشاف التلقائي: المتصفح الافتراضي إذا كان قائمًا على Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary. -- خدمة Control: على loopback فقط (منفذ مشتق من `gateway.port`، الافتراضي `18791`). -- يقوم `extraArgs` بإلحاق علامات تشغيل إضافية إلى بدء Chromium المحلي (على سبيل المثال - `--disable-gpu` أو حجم النافذة أو علامات التصحيح). +- تحتفظ ملفات تعريف `existing-session` بالقيود الحالية لمسار Chrome MCP: + إجراءات مبنية على snapshot/ref بدلاً من الاستهداف بواسطة CSS-selector، وخطافات رفع ملف واحد، + ومن دون تجاوزات مهلة الحوار، ومن دون `wait --load networkidle`، وكذلك من دون + `responsebody` أو تصدير PDF أو اعتراض التنزيل أو الإجراءات الدفعية. +- تقوم ملفات تعريف `openclaw` المحلية المُدارة بتعيين `cdpPort` و`cdpUrl` تلقائياً؛ + اضبط `cdpUrl` صراحةً فقط لـ CDP البعيد. +- ترتيب الاكتشاف التلقائي: المتصفح الافتراضي إذا كان قائماً على Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary. +- خدمة التحكم: على loopback فقط (المنفذ مشتق من `gateway.port`، والافتراضي `18791`). +- يضيف `extraArgs` أعلام تشغيل إضافية إلى بدء Chromium المحلي (على سبيل المثال + `--disable-gpu` أو تغيير حجم النافذة أو أعلام التصحيح). --- -## UI +## واجهة المستخدم ```json5 { @@ -2999,14 +2993,14 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري seamColor: "#FF4500", assistant: { name: "OpenClaw", - avatar: "CB", // emoji أو نص قصير أو image URL أو data URI + avatar: "CB", // emoji, short text, image URL, or data URI }, }, } ``` -- `seamColor`: لون التمييز لـ UI chrome في التطبيق الأصلي (مثل تلوين فقاعة Talk Mode). -- `assistant`: تجاوز هوية Control UI. ويعود إلى هوية الوكيل النشط. +- `seamColor`: لون التمييز لواجهة التطبيقات الأصلية (لون فقاعة Talk Mode، وما إلى ذلك). +- `assistant`: تجاوز هوية Control UI. ويعود احتياطياً إلى هوية الوكيل النشط. --- @@ -3021,8 +3015,8 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري auth: { mode: "token", // none | token | password | trusted-proxy token: "your-token", - // password: "your-password", // أو OPENCLAW_GATEWAY_PASSWORD - // trustedProxy: { userHeader: "x-forwarded-user" }, // للوضع mode=trusted-proxy؛ راجع /gateway/trusted-proxy-auth + // password: "your-password", // or OPENCLAW_GATEWAY_PASSWORD + // trustedProxy: { userHeader: "x-forwarded-user" }, // for mode=trusted-proxy; see /gateway/trusted-proxy-auth allowTailscale: true, rateLimit: { maxAttempts: 10, @@ -3040,9 +3034,9 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري basePath: "/openclaw", // root: "dist/control-ui", // embedSandbox: "scripts", // strict | scripts | trusted - // allowExternalEmbedUrls: false, // خطير: السماح بعناوين embed خارجية مطلقة من نوع http(s) - // allowedOrigins: ["https://control.example.com"], // مطلوب لـ Control UI غير loopback - // dangerouslyAllowHostHeaderOriginFallback: false, // وضع رجوع خطير لأصل Host-header + // allowExternalEmbedUrls: false, // dangerous: allow absolute external http(s) embed URLs + // allowedOrigins: ["https://control.example.com"], // required for non-loopback Control UI + // dangerouslyAllowHostHeaderOriginFallback: false, // dangerous Host-header origin fallback mode // allowInsecureAuth: false, // dangerouslyDisableDeviceAuth: false, }, @@ -3053,12 +3047,12 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري // password: "your-password", }, trustedProxies: ["10.0.0.1"], - // اختياري. الافتراضي false. + // Optional. Default false. allowRealIpFallback: false, tools: { - // عمليات منع HTTP إضافية على /tools/invoke + // Additional /tools/invoke HTTP denies deny: ["browser"], - // إزالة الأدوات من قائمة المنع الافتراضية لـ HTTP + // Remove tools from the default HTTP deny list allow: ["gateway"], }, push: { @@ -3075,62 +3069,62 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري -- `mode`: ‏`local` ‏(تشغيل Gateway) أو `remote` ‏(الاتصال بـ Gateway بعيد). ويرفض Gateway البدء ما لم يكن `local`. -- `port`: منفذ واحد متعدد الإرسال لكل من WS + HTTP. الأسبقية: `--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > `18789`. -- `bind`: ‏`auto` أو `loopback` ‏(الافتراضي) أو `lan` ‏(`0.0.0.0`) أو `tailnet` ‏(عنوان Tailscale IP فقط) أو `custom`. -- **أسماء bind المستعارة القديمة**: استخدم قيم وضع bind في `gateway.bind` ‏(`auto` أو `loopback` أو `lan` أو `tailnet` أو `custom`)، وليس أسماء المضيف المستعارة (`0.0.0.0` أو `127.0.0.1` أو `localhost` أو `::` أو `::1`). -- **ملاحظة Docker**: تستمع قيمة bind الافتراضية `loopback` على `127.0.0.1` داخل الحاوية. ومع Docker bridge networking ‏(`-p 18789:18789`)، تصل الحركة إلى `eth0`، لذلك يتعذر الوصول إلى Gateway. استخدم `--network host`، أو اضبط `bind: "lan"` ‏(أو `bind: "custom"` مع `customBindHost: "0.0.0.0"`) للاستماع على جميع الواجهات. -- **المصادقة**: مطلوبة افتراضيًا. وتتطلب قيم bind غير loopback مصادقة Gateway. ويعني ذلك عمليًا رمزًا/كلمة مرور مشتركة أو reverse proxy واعيًا بالهوية مع `gateway.auth.mode: "trusted-proxy"`. ويُنشئ معالج الإعداد الأولي رمزًا افتراضيًا. -- إذا تم تكوين كل من `gateway.auth.token` و`gateway.auth.password` ‏(بما في ذلك SecretRefs)، فاضبط `gateway.auth.mode` صراحةً على `token` أو `password`. وتفشل تدفقات البدء وتثبيت/إصلاح الخدمة عندما يكون الاثنان مكوَّنين ويكون الوضع غير مضبوط. -- `gateway.auth.mode: "none"`: وضع صريح من دون مصادقة. استخدمه فقط لإعدادات local loopback الموثوقة؛ ولا يتم عرضه عمدًا في مطالبات الإعداد الأولي. -- `gateway.auth.mode: "trusted-proxy"`: فوض المصادقة إلى reverse proxy واعٍ بالهوية وثق في ترويسات الهوية من `gateway.trustedProxies` ‏(راجع [Trusted Proxy Auth](/ar/gateway/trusted-proxy-auth)). يتوقع هذا الوضع مصدر proxy **غير loopback**؛ ولا تستوفي reverse proxies المحلية على المضيف نفسه مصادقة trusted-proxy. -- `gateway.auth.allowTailscale`: عندما تكون `true`، يمكن لترويسات هوية Tailscale Serve أن تفي بمصادقة Control UI/WebSocket ‏(تم التحقق منها عبر `tailscale whois`). ولا تستخدم نقاط نهاية HTTP API مصادقة ترويسة Tailscale تلك؛ بل تتبع وضع مصادقة HTTP العادي الخاص بـ Gateway بدلًا من ذلك. ويفترض هذا التدفق بلا رمز أن مضيف Gateway موثوق. ويكون افتراضيًا `true` عندما يكون `tailscale.mode = "serve"`. -- `gateway.auth.rateLimit`: محدد اختياري لمحاولات المصادقة الفاشلة. ويُطبق لكل عنوان IP عميل ولكل نطاق مصادقة (يتم تتبع السر المشترك ورمز الجهاز كلٌّ على حدة). وتعطي المحاولات المحظورة `429` + `Retry-After`. - - على مسار Control UI غير المتزامن في Tailscale Serve، تُسلسَل المحاولات الفاشلة لنفس `{scope, clientIp}` قبل كتابة الفشل. لذلك يمكن للمحاولات السيئة المتزامنة من العميل نفسه أن تُفعّل المحدد في الطلب الثاني بدلًا من أن تمر كلها كعدم تطابق عادي. - - تكون القيمة الافتراضية لـ `gateway.auth.rateLimit.exemptLoopback` هي `true`؛ اضبطها على `false` عندما تريد عمدًا أيضًا تقييد حركة localhost (لإعدادات الاختبار أو عمليات النشر الصارمة عبر proxy). -- يتم دائمًا خنق محاولات مصادقة WS ذات الأصل المتصفح مع تعطيل إعفاء loopback (كوسيلة دفاع إضافية ضد القوة الغاشمة من المتصفح على localhost). -- على loopback، تُعزل حالات القفل تلك ذات أصل المتصفح لكل قيمة `Origin` - مطبّعة، لذلك لا تؤدي الإخفاقات المتكررة من أصل localhost واحد تلقائيًا +- `mode`: ‏`local` (تشغيل Gateway) أو `remote` (الاتصال بـ Gateway بعيد). ويرفض Gateway البدء ما لم يكن `local`. +- `port`: منفذ متعدد واحد لـ WS + HTTP. الأسبقية: `--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > `18789`. +- `bind`: ‏`auto` أو `loopback` (الافتراضي) أو `lan` (`0.0.0.0`) أو `tailnet` (عنوان IP الخاص بـ Tailscale فقط) أو `custom`. +- **الأسماء المستعارة القديمة للربط**: استخدم قيم وضع الربط في `gateway.bind` ‏(`auto` و`loopback` و`lan` و`tailnet` و`custom`)، وليس الأسماء المستعارة للمضيف (`0.0.0.0` و`127.0.0.1` و`localhost` و`::` و`::1`). +- **ملاحظة Docker**: يستمع الربط الافتراضي `loopback` على `127.0.0.1` داخل الحاوية. ومع شبكات Docker bridge ‏(`-p 18789:18789`) تصل الحركة إلى `eth0`، لذلك يصبح Gateway غير قابل للوصول. استخدم `--network host`، أو اضبط `bind: "lan"` (أو `bind: "custom"` مع `customBindHost: "0.0.0.0"`) للاستماع على جميع الواجهات. +- **المصادقة**: مطلوبة افتراضياً. تتطلب الروابط غير المعتمدة على loopback مصادقة Gateway. وعملياً يعني ذلك رمزاً مشتركاً/كلمة مرور مشتركة أو reverse proxy واعياً بالهوية مع `gateway.auth.mode: "trusted-proxy"`. ويولد معالج الإعداد رمزاً افتراضياً. +- إذا تم ضبط كل من `gateway.auth.token` و`gateway.auth.password` (بما في ذلك SecretRefs)، فاضبط `gateway.auth.mode` صراحةً على `token` أو `password`. وتفشل عمليات بدء التشغيل وتثبيت/إصلاح الخدمة عندما يكون الاثنان مضبوطين ويكون الوضع غير مضبوط. +- `gateway.auth.mode: "none"`: وضع صريح بلا مصادقة. استخدمه فقط لإعدادات local loopback الموثوقة؛ وهذا لا يُعرض عمداً في مطالبات الإعداد. +- `gateway.auth.mode: "trusted-proxy"`: فوّض المصادقة إلى reverse proxy واعٍ بالهوية واثق برؤوس الهوية القادمة من `gateway.trustedProxies` (راجع [مصادقة Trusted Proxy](/ar/gateway/trusted-proxy-auth)). ويتوقع هذا الوضع مصدر proxy **غير loopback**؛ إذ لا تستوفي reverse proxies المعتمدة على loopback على المضيف نفسه مصادقة trusted-proxy. +- `gateway.auth.allowTailscale`: عندما تكون قيمته `true`، يمكن لرؤوس هوية Tailscale Serve تلبية مصادقة Control UI/WebSocket ‏(يتم التحقق منها عبر `tailscale whois`). أما نقاط نهاية HTTP API فلا تستخدم مصادقة رؤوس Tailscale هذه؛ بل تتبع وضع HTTP auth العادي الخاص بـ Gateway. ويفترض هذا التدفق بلا رمز أن مضيف Gateway موثوق. وتكون القيمة الافتراضية `true` عندما يكون `tailscale.mode = "serve"`. +- `gateway.auth.rateLimit`: محدد اختياري لمحاولات المصادقة الفاشلة. يُطبّق لكل عنوان IP عميل ولكل نطاق مصادقة (يتم تتبع السر المشترك ورمز الجهاز بشكل مستقل). وتُرجع المحاولات المحظورة `429` + `Retry-After`. + - في مسار Control UI غير المتزامن عبر Tailscale Serve، يتم تسلسل المحاولات الفاشلة لنفس `{scope, clientIp}` قبل كتابة الفشل. لذا يمكن للمحاولات السيئة المتزامنة من العميل نفسه أن تشغّل المحدد في الطلب الثاني بدلاً من مرور الاثنين معاً كعدم تطابق عادي. + - تكون القيمة الافتراضية لـ `gateway.auth.rateLimit.exemptLoopback` هي `true`؛ اضبطها على `false` عندما تريد عمداً تقييد حركة localhost أيضاً (لإعدادات الاختبار أو عمليات النشر الصارمة عبر proxy). +- يتم دائماً تقليل سرعة محاولات مصادقة WS ذات المصدر المتصفح مع تعطيل إعفاء loopback (دفاعاً إضافياً ضد محاولات القوة الغاشمة على localhost المعتمدة على المتصفح). +- على loopback، يتم عزل حالات القفل هذه ذات المصدر المتصفح لكل قيمة `Origin` + مُطبَّعة، بحيث لا تؤدي الإخفاقات المتكررة من أصل localhost واحد تلقائياً إلى قفل أصل مختلف. -- `tailscale.mode`: ‏`serve` ‏(tailnet فقط، bind على loopback) أو `funnel` ‏(عام، ويتطلب مصادقة). -- `controlUi.allowedOrigins`: قائمة سماح صريحة لأصول المتصفح لاتصالات WebSocket الخاصة بـ Gateway. وهي مطلوبة عندما يُتوقع عملاء متصفح من أصول غير loopback. -- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: وضع خطير يفعّل الرجوع إلى أصل Host-header لعمليات النشر التي تعتمد عمدًا على سياسة أصل Host-header. -- `remote.transport`: ‏`ssh` ‏(الافتراضي) أو `direct` ‏(ws/wss). وبالنسبة إلى `direct`، يجب أن تكون `remote.url` من النوع `ws://` أو `wss://`. -- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: تجاوز طارئ من جهة العميل يسمح بـ `ws://` النصي إلى عناوين IP موثوقة داخل الشبكات الخاصة؛ وتبقى القيمة الافتراضية مقتصرة على loopback فقط بالنسبة إلى النصي. -- `gateway.remote.token` / `.password` هما حقلا بيانات اعتماد العميل البعيد. ولا يقومان بتهيئة مصادقة Gateway بحد ذاتهما. -- `gateway.push.apns.relay.baseUrl`: عنوان HTTPS URL الأساسي لـ APNs relay الخارجي المستخدم بواسطة بنيات iOS الرسمية/‏TestFlight بعد أن تنشر تسجيلات مدعومة بالـ relay إلى Gateway. ويجب أن يطابق هذا العنوان عنوان relay المضمّن في بنية iOS. -- `gateway.push.apns.relay.timeoutMs`: مهلة الإرسال من Gateway إلى relay بالمللي ثانية. والقيمة الافتراضية `10000`. -- يتم تفويض التسجيلات المدعومة بالـ relay إلى هوية Gateway محددة. ويجلب تطبيق iOS المقترن `gateway.identity.get`، ويُدرج تلك الهوية في تسجيل relay، ويمرر إذن إرسال ضمن نطاق التسجيل إلى Gateway. ولا يمكن لـ Gateway آخر إعادة استخدام ذلك التسجيل المخزن. -- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: تجاوزات بيئة مؤقتة لتكوين relay أعلاه. -- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: مخرج تطوير فقط لعناوين relay من نوع HTTP على loopback. ويجب أن تبقى عناوين relay الإنتاجية على HTTPS. -- `gateway.channelHealthCheckMinutes`: فترة مراقبة صحة القناة بالدقائق. اضبطها على `0` لتعطيل إعادة التشغيل عبر مراقب الصحة عالميًا. الافتراضي: `5`. -- `gateway.channelStaleEventThresholdMinutes`: حد socket القديمة بالدقائق. اجعل هذه القيمة أكبر من أو مساوية لـ `gateway.channelHealthCheckMinutes`. الافتراضي: `30`. -- `gateway.channelMaxRestartsPerHour`: الحد الأقصى لإعادات التشغيل عبر مراقب الصحة لكل قناة/حساب في ساعة متحركة. الافتراضي: `10`. -- `channels..healthMonitor.enabled`: تعطيل اختياري لكل قناة لإعادات التشغيل الخاصة بمراقب الصحة مع إبقاء المراقب العام مفعّلًا. -- `channels..accounts..healthMonitor.enabled`: تجاوز لكل حساب في القنوات متعددة الحسابات. وعند ضبطه، تكون له أسبقية على تجاوز مستوى القناة. -- يمكن لمسارات استدعاء Gateway المحلية استخدام `gateway.remote.*` كرجوع احتياطي فقط عندما تكون `gateway.auth.*` غير مضبوطة. -- إذا تم تكوين `gateway.auth.token` / `gateway.auth.password` صراحةً عبر SecretRef ولم يتم حلّهما، فإن الحل يفشل بشكل مغلق (من دون إخفاء الرجوع البعيد). -- `trustedProxies`: عناوين IP الخاصة بالـ reverse proxies التي تنهي TLS أو تحقن ترويسات العميل المحوَّلة. أدرج فقط الـ proxies التي تتحكم فيها. وتبقى إدخالات loopback صالحة لإعدادات proxy المحلية/الاكتشاف المحلي على المضيف نفسه (مثل Tailscale Serve أو reverse proxy محلي)، لكنها **لا** تجعل طلبات loopback مؤهلة لـ `gateway.auth.mode: "trusted-proxy"`. -- `allowRealIpFallback`: عندما تكون `true`، يقبل Gateway قيمة `X-Real-IP` إذا كانت `X-Forwarded-For` مفقودة. الافتراضي `false` لسلوك فشل مغلق. -- `gateway.tools.deny`: أسماء أدوات إضافية محظورة لطلب HTTP ‏`POST /tools/invoke` ‏(تمدد قائمة المنع الافتراضية). -- `gateway.tools.allow`: إزالة أسماء الأدوات من قائمة المنع الافتراضية لـ HTTP. +- `tailscale.mode`: ‏`serve` (tailnet فقط، مع ربط loopback) أو `funnel` (عام، ويتطلب مصادقة). +- `controlUi.allowedOrigins`: قائمة سماح صريحة لأصول المتصفح لاتصالات Gateway WebSocket. وهي مطلوبة عندما يُتوقع وجود عملاء متصفح من أصول غير loopback. +- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: وضع خطر يفعّل الرجوع الاحتياطي إلى أصل Host-header لعمليات النشر التي تعتمد عمداً على سياسة الأصل المستندة إلى Host-header. +- `remote.transport`: ‏`ssh` (الافتراضي) أو `direct` ‏(ws/wss). بالنسبة إلى `direct`، يجب أن يكون `remote.url` من النوع `ws://` أو `wss://`. +- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: تجاوز طارئ من جهة العميل يسمح باتصالات `ws://` النصية العادية إلى عناوين IP موثوقة ضمن الشبكات الخاصة؛ وتبقى القيمة الافتراضية مقصورة على loopback فقط للاتصالات النصية العادية. +- إن `gateway.remote.token` / `.password` هما حقلا بيانات اعتماد للعميل البعيد. ولا يضبطان مصادقة Gateway بحد ذاتهما. +- `gateway.push.apns.relay.baseUrl`: عنوان HTTPS الأساسي لـ APNs relay الخارجي المستخدم بواسطة إصدارات iOS الرسمية/TestFlight بعد أن تنشر تسجيلات مدعومة بالـ relay إلى Gateway. ويجب أن يطابق هذا العنوان عنوان relay المضمّن في بناء iOS. +- `gateway.push.apns.relay.timeoutMs`: مهلة الإرسال من Gateway إلى relay بالميلي ثانية. الافتراضي `10000`. +- يتم تفويض التسجيلات المدعومة بالـ relay إلى هوية Gateway محددة. ويجلب تطبيق iOS المقترن `gateway.identity.get`، ويضمّن تلك الهوية في تسجيل relay، ويمرّر صلاحية إرسال ضمن نطاق التسجيل إلى Gateway. ولا يستطيع Gateway آخر إعادة استخدام ذلك التسجيل المخزّن. +- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: تجاوزات بيئة مؤقتة لإعداد relay أعلاه. +- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: منفذ هروب للتطوير فقط لعناوين relay المعتمدة على loopback عبر HTTP. ويجب أن تبقى عناوين relay الإنتاجية على HTTPS. +- `gateway.channelHealthCheckMinutes`: فاصل مراقبة صحة القنوات بالدقائق. اضبطه على `0` لتعطيل إعادة تشغيل مراقبة الصحة عالمياً. الافتراضي: `5`. +- `gateway.channelStaleEventThresholdMinutes`: حد الركود للمقبس بالدقائق. اجعله أكبر من أو مساوياً لـ `gateway.channelHealthCheckMinutes`. الافتراضي: `30`. +- `gateway.channelMaxRestartsPerHour`: الحد الأقصى لإعادات تشغيل مراقبة الصحة لكل قناة/حساب خلال ساعة متحركة. الافتراضي: `10`. +- `channels..healthMonitor.enabled`: تعطيل اختياري لكل قناة لإعادات تشغيل مراقبة الصحة مع إبقاء المراقبة العامة مفعّلة. +- `channels..accounts..healthMonitor.enabled`: تجاوز لكل حساب للقنوات متعددة الحسابات. وعند ضبطه، تكون له الأسبقية على التجاوز على مستوى القناة. +- يمكن لمسارات استدعاء Gateway المحلية استخدام `gateway.remote.*` كقيمة احتياطية فقط عندما يكون `gateway.auth.*` غير مضبوط. +- إذا تم ضبط `gateway.auth.token` / `gateway.auth.password` صراحةً عبر SecretRef وكان غير محلول، يفشل الحل بشكل مغلق (من دون إخفاء عبر الرجوع الاحتياطي البعيد). +- `trustedProxies`: عناوين IP الخاصة بـ reverse proxy التي تنهي TLS أو تحقن رؤوس العميل المُمرَّر. اذكر فقط الـ proxies التي تتحكم بها. وتظل إدخالات loopback صالحة لإعدادات الكشف المحلي/الـ proxy على المضيف نفسه (مثل Tailscale Serve أو reverse proxy محلي)، لكنها **لا** تجعل طلبات loopback مؤهلة لـ `gateway.auth.mode: "trusted-proxy"`. +- `allowRealIpFallback`: عندما تكون قيمته `true`، يقبل Gateway الرأس `X-Real-IP` إذا كان `X-Forwarded-For` مفقوداً. الافتراضي `false` لسلوك فشل مغلق. +- `gateway.tools.deny`: أسماء أدوات إضافية محظورة لـ HTTP ‏`POST /tools/invoke` (تمدد قائمة المنع الافتراضية). +- `gateway.tools.allow`: إزالة أسماء أدوات من قائمة المنع الافتراضية لـ HTTP. -### نقاط النهاية المتوافقة مع OpenAI +### نقاط النهاية OpenAI-compatible -- Chat Completions: معطلة افتراضيًا. فعّلها باستخدام `gateway.http.endpoints.chatCompletions.enabled: true`. +- Chat Completions: معطل افتراضياً. قم بتمكينه عبر `gateway.http.endpoints.chatCompletions.enabled: true`. - Responses API: ‏`gateway.http.endpoints.responses.enabled`. - تقوية إدخال URL في Responses: - `gateway.http.endpoints.responses.maxUrlParts` - `gateway.http.endpoints.responses.files.urlAllowlist` - `gateway.http.endpoints.responses.images.urlAllowlist` - تُعامل قوائم السماح الفارغة على أنها غير مضبوطة؛ استخدم `gateway.http.endpoints.responses.files.allowUrl=false` + يتم التعامل مع قوائم السماح الفارغة على أنها غير مضبوطة؛ استخدم `gateway.http.endpoints.responses.files.allowUrl=false` و/أو `gateway.http.endpoints.responses.images.allowUrl=false` لتعطيل جلب URL. -- ترويسة تقوية استجابة اختيارية: - - `gateway.http.securityHeaders.strictTransportSecurity` ‏(اضبطها فقط لأصول HTTPS التي تتحكم بها؛ راجع [Trusted Proxy Auth](/ar/gateway/trusted-proxy-auth#tls-termination-and-hsts)) +- رأس تقوية استجابة اختياري: + - `gateway.http.securityHeaders.strictTransportSecurity` (اضبطه فقط لأصول HTTPS التي تتحكم بها؛ راجع [مصادقة Trusted Proxy](/ar/gateway/trusted-proxy-auth#tls-termination-and-hsts)) -### العزل متعدد المثيلات +### العزل متعدد النسخ شغّل عدة Gateways على مضيف واحد مع منافذ وأدلة حالة فريدة: @@ -3140,9 +3134,9 @@ OPENCLAW_STATE_DIR=~/.openclaw-a \ openclaw gateway --port 19001 ``` -علامات مريحة: `--dev` ‏(يستخدم `~/.openclaw-dev` + المنفذ `19001`)، و`--profile ` ‏(يستخدم `~/.openclaw-`). +أعلام مريحة: `--dev` (يستخدم `~/.openclaw-dev` + المنفذ `19001`)، و`--profile ` (يستخدم `~/.openclaw-`). -راجع [Gateways متعددة](/ar/gateway/multiple-gateways). +راجع [Gateways المتعددة](/ar/gateway/multiple-gateways). ### `gateway.tls` @@ -3160,10 +3154,10 @@ openclaw gateway --port 19001 } ``` -- `enabled`: يفعّل إنهاء TLS عند مستمع Gateway ‏(HTTPS/WSS) ‏(الافتراضي: `false`). -- `autoGenerate`: ينشئ تلقائيًا زوج cert/key محليًا موقعًا ذاتيًا عندما لا تكون الملفات الصريحة مكوّنة؛ للاستخدام المحلي/التطويري فقط. +- `enabled`: يفعّل إنهاء TLS عند مستمع Gateway ‏(HTTPS/WSS) (الافتراضي: `false`). +- `autoGenerate`: يولّد تلقائياً زوج cert/key محلياً موقّعاً ذاتياً عندما لا تكون الملفات الصريحة مضبوطة؛ للاستخدام المحلي/التطوير فقط. - `certPath`: مسار نظام الملفات إلى ملف شهادة TLS. -- `keyPath`: مسار نظام الملفات إلى ملف المفتاح الخاص لـ TLS؛ واحفظه بأذونات مقيّدة. +- `keyPath`: مسار نظام الملفات إلى ملف المفتاح الخاص لـ TLS؛ ويجب إبقاء الأذونات عليه مقيّدة. - `caPath`: مسار اختياري إلى حزمة CA للتحقق من العميل أو سلاسل الثقة المخصصة. ### `gateway.reload` @@ -3180,13 +3174,13 @@ openclaw gateway --port 19001 } ``` -- `mode`: يتحكم في كيفية تطبيق تعديلات التكوين في runtime. - - `"off"`: تجاهل التعديلات الحية؛ وتتطلب التغييرات إعادة تشغيل صريحة. - - `"restart"`: أعد تشغيل عملية Gateway دائمًا عند تغير التكوين. - - `"hot"`: طبّق التغييرات داخل العملية من دون إعادة تشغيل. - - `"hybrid"` ‏(الافتراضي): جرّب أولًا إعادة التحميل الساخن؛ ثم ارجع إلى إعادة التشغيل إذا لزم الأمر. -- `debounceMs`: نافذة debounce بالمللي ثانية قبل تطبيق تغييرات التكوين (عدد صحيح غير سالب). -- `deferralTimeoutMs`: الحد الأقصى للوقت بالمللي ثانية لانتظار العمليات الجارية قبل فرض إعادة التشغيل (الافتراضي: `300000` = 5 دقائق). +- `mode`: يتحكم في كيفية تطبيق تعديلات الإعدادات وقت التشغيل. + - `"off"`: تجاهل التعديلات المباشرة؛ وتتطلب التغييرات إعادة تشغيل صريحة. + - `"restart"`: إعادة تشغيل عملية Gateway دائماً عند تغير الإعدادات. + - `"hot"`: تطبيق التغييرات داخل العملية من دون إعادة تشغيل. + - `"hybrid"` (الافتراضي): جرّب hot reload أولاً؛ وارجع إلى إعادة التشغيل عند الحاجة. +- `debounceMs`: نافذة إزالة ارتداد بالميلي ثانية قبل تطبيق تغييرات الإعدادات (عدد صحيح غير سالب). +- `deferralTimeoutMs`: الحد الأقصى بالميلي ثانية للانتظار حتى تنتهي العمليات الجارية قبل فرض إعادة التشغيل (الافتراضي: `300000` = 5 دقائق). --- @@ -3224,46 +3218,46 @@ openclaw gateway --port 19001 ``` المصادقة: `Authorization: Bearer ` أو `x-openclaw-token: `. -يتم رفض رموز hook الموجودة في query-string. +ويتم رفض رموز Hook الموجودة في سلسلة الاستعلام. -ملاحظات التحقق والأمان: +ملاحظات التحقق والسلامة: -- يتطلب `hooks.enabled=true` وجود `hooks.token` غير فارغ. -- يجب أن يكون `hooks.token` **مختلفًا** عن `gateway.auth.token`؛ ويُرفض إعادة استخدام رمز Gateway. -- لا يمكن أن يكون `hooks.path` هو `/`؛ استخدم مسارًا فرعيًا مخصصًا مثل `/hooks`. -- إذا كان `hooks.allowRequestSessionKey=true`، فقيّد `hooks.allowedSessionKeyPrefixes` ‏(مثل `["hook:"]`). -- إذا كان mapping أو preset يستخدم `sessionKey` قائمًا على القوالب، فاضبط `hooks.allowedSessionKeyPrefixes` و`hooks.allowRequestSessionKey=true`. ولا تتطلب مفاتيح mapping الثابتة ذلك الاشتراك الاختياري. +- يتطلب `hooks.enabled=true` قيمة `hooks.token` غير فارغة. +- يجب أن تكون `hooks.token` **مختلفة** عن `gateway.auth.token`؛ ويتم رفض إعادة استخدام رمز Gateway. +- لا يمكن أن تكون `hooks.path` هي `/`؛ استخدم مساراً فرعياً مخصصاً مثل `/hooks`. +- إذا كانت `hooks.allowRequestSessionKey=true`، فقيد `hooks.allowedSessionKeyPrefixes` (على سبيل المثال `["hook:"]`). +- إذا كان mapping أو preset يستخدم `sessionKey` قالبياً، فاضبط `hooks.allowedSessionKeyPrefixes` و`hooks.allowRequestSessionKey=true`. ولا تتطلب مفاتيح mapping الثابتة هذا الاشتراك الاختياري. **نقاط النهاية:** - `POST /hooks/wake` ← `{ text, mode?: "now"|"next-heartbeat" }` - `POST /hooks/agent` ← `{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }` - - يتم قبول `sessionKey` من حمولة الطلب فقط عندما يكون `hooks.allowRequestSessionKey=true` ‏(الافتراضي: `false`). -- `POST /hooks/` ← يتم حلها عبر `hooks.mappings` - - تُعامل قيم `sessionKey` الخاصة بـ mapping والمولدة بالقوالب على أنها مزوّدة خارجيًا وتتطلب أيضًا `hooks.allowRequestSessionKey=true`. + - لا يُقبل `sessionKey` من حمولة الطلب إلا عندما تكون `hooks.allowRequestSessionKey=true` (الافتراضي: `false`). +- `POST /hooks/` ← يتم حله عبر `hooks.mappings` + - تُعامل قيم `sessionKey` في mapping الناتجة عن القوالب على أنها مقدمة خارجياً، وتتطلب أيضاً `hooks.allowRequestSessionKey=true`. - + -- يطابق `match.path` المسار الفرعي بعد `/hooks` ‏(مثلًا `/hooks/gmail` ← `gmail`). -- يطابق `match.source` حقلًا من الحمولة للمسارات العامة. +- يطابق `match.path` المسار الفرعي بعد `/hooks` (مثال: `/hooks/gmail` ← `gmail`). +- يطابق `match.source` حقلاً من الحمولة للمسارات العامة. - تقرأ القوالب مثل `{{messages[0].subject}}` من الحمولة. -- يمكن أن يشير `transform` إلى وحدة JS/TS تعيد إجراء hook. - - يجب أن يكون `transform.module` مسارًا نسبيًا ويبقى ضمن `hooks.transformsDir` ‏(ويتم رفض المسارات المطلقة والتنقل العكسي). -- يوجّه `agentId` إلى وكيل محدد؛ وتعود المعرّفات غير المعروفة إلى الوكيل الافتراضي. -- `allowedAgentIds`: يقيّد التوجيه الصريح (`*` أو المحذوف = السماح للجميع، `[]` = رفض الجميع). -- `defaultSessionKey`: مفتاح جلسة ثابت اختياري لتشغيلات وكيل hook من دون `sessionKey` صريح. -- `allowRequestSessionKey`: السماح لعملاء `/hooks/agent` ولمفاتيح جلسات mapping المعتمدة على القوالب بتعيين `sessionKey` ‏(الافتراضي: `false`). -- `allowedSessionKeyPrefixes`: قائمة سماح اختيارية للبادئات الخاصة بقيم `sessionKey` الصريحة (الطلب + mapping)، مثل `["hook:"]`. وتصبح مطلوبة عندما يستخدم أي mapping أو preset قيمة `sessionKey` قائمة على القوالب. -- يؤدي `deliver: true` إلى إرسال الرد النهائي إلى قناة؛ وتكون القيمة الافتراضية لـ `channel` هي `last`. -- يتجاوز `model` قيمة LLM لتشغيل هذا hook ‏(ويجب أن يكون مسموحًا به إذا كان فهرس النماذج مضبوطًا). +- يمكن أن يشير `transform` إلى وحدة JS/TS تعيد إجراء Hook. + - يجب أن يكون `transform.module` مساراً نسبياً ويبقى ضمن `hooks.transformsDir` (تُرفض المسارات المطلقة وعمليات الاجتياز). +- يوجّه `agentId` إلى وكيل محدد؛ وتعود المعرّفات غير المعروفة إلى الافتراضي. +- `allowedAgentIds`: تقيد التوجيه الصريح (`*` أو الحذف = السماح للجميع، و`[]` = منع الجميع). +- `defaultSessionKey`: مفتاح جلسة ثابت اختياري لتشغيلات وكيل Hook من دون `sessionKey` صريح. +- `allowRequestSessionKey`: السماح لمستدعي `/hooks/agent` ولمفاتيح الجلسات في mappings المعتمدة على القوالب بضبط `sessionKey` (الافتراضي: `false`). +- `allowedSessionKeyPrefixes`: قائمة سماح اختيارية للبادئات لقيم `sessionKey` الصريحة (الطلب + mapping)، مثل `["hook:"]`. وتصبح مطلوبة عندما يستخدم أي mapping أو preset قيمة `sessionKey` قالبية. +- `deliver: true` يرسل الرد النهائي إلى قناة؛ وتكون القيمة الافتراضية لـ `channel` هي `last`. +- يقوم `model` بتجاوز LLM لهذا التشغيل الخاص بالـ Hook (ويجب أن يكون مسموحاً به إذا كان فهرس النماذج مضبوطاً). ### تكامل Gmail -- يستخدم preset المضمّن لـ Gmail القيمة `sessionKey: "hook:gmail:{{messages[0].id}}"`. -- إذا أبقيت هذا التوجيه لكل رسالة، فاضبط `hooks.allowRequestSessionKey: true` وقيّد `hooks.allowedSessionKeyPrefixes` لتطابق مساحة أسماء Gmail، مثل `["hook:", "hook:gmail:"]`. -- إذا كنت تحتاج إلى `hooks.allowRequestSessionKey: false`، فتجاوز preset باستخدام `sessionKey` ثابت بدلًا من القيمة الافتراضية المعتمدة على القوالب. +- يستخدم Gmail preset المضمّن القيمة `sessionKey: "hook:gmail:{{messages[0].id}}"`. +- إذا أبقيت هذا التوجيه لكل رسالة، فاضبط `hooks.allowRequestSessionKey: true` وقيّد `hooks.allowedSessionKeyPrefixes` بحيث تطابق نطاق Gmail، على سبيل المثال `["hook:", "hook:gmail:"]`. +- إذا كنت تحتاج إلى `hooks.allowRequestSessionKey: false`، فقم بتجاوز preset باستخدام `sessionKey` ثابت بدلاً من القيمة القالبية الافتراضية. ```json5 { @@ -3286,33 +3280,33 @@ openclaw gateway --port 19001 } ``` -- يبدأ Gateway تلقائيًا `gog gmail watch serve` عند الإقلاع عندما يكون مكوّنًا. اضبط `OPENCLAW_SKIP_GMAIL_WATCHER=1` لتعطيله. -- لا تشغّل `gog gmail watch serve` منفصلًا بالتوازي مع Gateway. +- يبدأ Gateway تلقائياً `gog gmail watch serve` عند الإقلاع عندما يكون مضبوطاً. اضبط `OPENCLAW_SKIP_GMAIL_WATCHER=1` لتعطيله. +- لا تشغّل `gog gmail watch serve` منفصلاً إلى جانب Gateway. --- -## مضيف Canvas +## مستضيف Canvas ```json5 { canvasHost: { root: "~/.openclaw/workspace/canvas", liveReload: true, - // enabled: false, // أو OPENCLAW_SKIP_CANVAS_HOST=1 + // enabled: false, // or OPENCLAW_SKIP_CANVAS_HOST=1 }, } ``` -- يقدّم HTML/CSS/JS وA2UI القابلة للتحرير بواسطة الوكيل عبر HTTP تحت منفذ Gateway: +- يقدّم ملفات HTML/CSS/JS وA2UI القابلة للتحرير من الوكيل عبر HTTP تحت منفذ Gateway: - `http://:/__openclaw__/canvas/` - `http://:/__openclaw__/a2ui/` -- محلي فقط: أبقِ `gateway.bind: "loopback"` ‏(الافتراضي). -- عند استخدام bind غير loopback: تتطلب مسارات canvas مصادقة Gateway ‏(token/password/trusted-proxy)، مثل بقية أسطح HTTP في Gateway. -- لا ترسل Node WebViews عادةً ترويسات مصادقة؛ وبعد إقران node واتصالها، يعلن Gateway عناوين capability URLs ضمن نطاق node للوصول إلى canvas/A2UI. -- ترتبط capability URLs بجلسة WS النشطة الخاصة بـ node وتنتهي سريعًا. ولا يُستخدم الرجوع المعتمد على IP. -- يحقن عميل live-reload في HTML المقدّم. -- ينشئ تلقائيًا `index.html` ابتدائيًا عندما يكون فارغًا. -- يقدّم أيضًا A2UI عند `/__openclaw__/a2ui/`. +- محلي فقط: أبقِ `gateway.bind: "loopback"` (الافتراضي). +- الروابط غير المعتمدة على loopback: تتطلب مسارات canvas مصادقة Gateway (رمز/كلمة مرور/trusted-proxy)، مثل بقية أسطح HTTP الخاصة بـ Gateway. +- لا ترسل Node WebViews عادةً رؤوس المصادقة؛ وبعد إقران node واتصاله، يعلن Gateway عناوين capability URLs ضمن نطاق node للوصول إلى canvas/A2UI. +- تكون capability URLs مرتبطة بجلسة WS النشطة الخاصة بـ node وتنتهي صلاحيتها بسرعة. ولا يُستخدم الرجوع الاحتياطي المعتمد على IP. +- يحقن عميل live-reload داخل HTML المقدّم. +- ينشئ تلقائياً ملف `index.html` ابتدائياً عندما يكون فارغاً. +- كما يقدّم A2UI عند `/__openclaw__/a2ui/`. - تتطلب التغييرات إعادة تشغيل Gateway. - عطّل live reload للأدلة الكبيرة أو عند أخطاء `EMFILE`. @@ -3332,11 +3326,11 @@ openclaw gateway --port 19001 } ``` -- `minimal` ‏(الافتراضي): يحذف `cliPath` + `sshPort` من سجلات TXT. +- `minimal` (الافتراضي): يحذف `cliPath` + `sshPort` من سجلات TXT. - `full`: يتضمن `cliPath` + `sshPort`. -- يكون اسم المضيف افتراضيًا `openclaw`. ويمكن تجاوزه باستخدام `OPENCLAW_MDNS_HOSTNAME`. +- يكون اسم المضيف الافتراضي هو `openclaw`. ويمكن تجاوزه عبر `OPENCLAW_MDNS_HOSTNAME`. -### النطاق الواسع ‏(DNS-SD) +### واسع النطاق ‏(DNS-SD) ```json5 { @@ -3346,7 +3340,7 @@ openclaw gateway --port 19001 } ``` -يكتب منطقة DNS-SD أحادية الإرسال تحت `~/.openclaw/dns/`. ومن أجل الاكتشاف عبر الشبكات، اقترنه بخادم DNS ‏(يوصى بـ CoreDNS) + DNS مقسّم عبر Tailscale. +يكتب منطقة DNS-SD أحادية الإرسال ضمن `~/.openclaw/dns/`. ولاكتشاف عبر الشبكات، قم بإقرانه مع خادم DNS ‏(يوصى بـ CoreDNS) + DNS تقسيم Tailscale. الإعداد: `openclaw dns setup --apply`. @@ -3354,7 +3348,7 @@ openclaw gateway --port 19001 ## البيئة -### `env` ‏(متغيرات بيئة مضمنة) +### `env` (متغيرات بيئة مضمنة) ```json5 { @@ -3371,14 +3365,14 @@ openclaw gateway --port 19001 } ``` -- لا تُطبق متغيرات البيئة المضمنة إلا إذا كانت بيئة العملية تفتقد المفتاح. -- ملفات `.env`: ‏`.env` في CWD + ‏`~/.openclaw/.env` ‏(ولا يتجاوز أي منهما المتغيرات الموجودة). -- `shellEnv`: يستورد المفاتيح المتوقعة المفقودة من ملف profile الخاص بصدفة تسجيل الدخول. -- راجع [البيئة](/ar/help/environment) للحصول على الأسبقية الكاملة. +- لا يتم تطبيق متغيرات البيئة المضمنة إلا إذا كانت بيئة العملية تفتقد المفتاح. +- ملفات `.env`: ملف `.env` في CWD + `~/.openclaw/.env` (ولا يتجاوز أي منهما المتغيرات الموجودة). +- `shellEnv`: يستورد المفاتيح المتوقعة المفقودة من ملف تعريف login shell الخاص بك. +- راجع [البيئة](/ar/help/environment) لمعرفة الأسبقية الكاملة. -### استبدال متغيرات البيئة +### الاستبدال بمتغيرات البيئة -أشر إلى متغيرات البيئة في أي سلسلة تكوين باستخدام `${VAR_NAME}`: +ارجع إلى متغيرات البيئة في أي سلسلة إعدادات باستخدام `${VAR_NAME}`: ```json5 { @@ -3388,20 +3382,20 @@ openclaw gateway --port 19001 } ``` -- لا تُطابق إلا الأسماء الكبيرة: `[A-Z_][A-Z0-9_]*`. -- تؤدي المتغيرات المفقودة/الفارغة إلى خطأ عند تحميل التكوين. -- استخدم `$${VAR}` للحصول على `${VAR}` حرفيًا. -- يعمل هذا مع `$include`. +- تتم مطابقة الأسماء المكتوبة بأحرف كبيرة فقط: `[A-Z_][A-Z0-9_]*`. +- تتسبب المتغيرات المفقودة/الفارغة في خطأ عند تحميل الإعدادات. +- استخدم `$${VAR}` للهروب إلى `${VAR}` حرفياً. +- يعمل ذلك مع `$include`. --- ## الأسرار -تكون مراجع الأسرار إضافية: فلا تزال القيم النصية العادية تعمل. +تكون مراجع الأسرار إضافية: ولا تزال القيم النصية الصريحة تعمل. ### `SecretRef` -استخدم بنية كائن واحدة: +استخدم شكلاً واحداً للكائن: ```json5 { source: "env" | "file" | "exec", provider: "default", id: "..." } @@ -3410,24 +3404,24 @@ openclaw gateway --port 19001 التحقق: - نمط `provider`: ‏`^[a-z][a-z0-9_-]{0,63}$` -- نمط `id` مع `source: "env"`: ‏`^[A-Z][A-Z0-9_]{0,127}$` -- `source: "file"` ‏`id`: مؤشر JSON مطلق (مثل `"/providers/openai/apiKey"`) -- نمط `id` مع `source: "exec"`: ‏`^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$` -- يجب ألا تحتوي معرفات `source: "exec"` على مقاطع مسار `.` أو `..` مفصولة بشرطات مائلة (على سبيل المثال يتم رفض `a/../b`) +- نمط `source: "env"` لـ id: ‏`^[A-Z][A-Z0-9_]{0,127}$` +- `source: "file"` id: مؤشر JSON مطلق (على سبيل المثال `"/providers/openai/apiKey"`) +- نمط `source: "exec"` لـ id: ‏`^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$` +- يجب ألا تحتوي معرّفات `source: "exec"` على مقاطع مسار `.` أو `..` مفصولة بشرطة مائلة (على سبيل المثال يتم رفض `a/../b`) ### سطح بيانات الاعتماد المدعوم - المصفوفة القياسية: [سطح بيانات اعتماد SecretRef](/ar/reference/secretref-credential-surface) -- يستهدف `secrets apply` مسارات بيانات الاعتماد المدعومة في `openclaw.json`. -- تُدرج مراجع `auth-profiles.json` في حل runtime وتغطية التدقيق. +- تستهدف `secrets apply` مسارات بيانات الاعتماد المدعومة في `openclaw.json`. +- يتم تضمين مراجع `auth-profiles.json` في حل وقت التشغيل وتغطية التدقيق. -### تكوين موفري الأسرار +### إعدادات مزوّدي الأسرار ```json5 { secrets: { providers: { - default: { source: "env" }, // موفر env صريح اختياري + default: { source: "env" }, // optional explicit env provider filemain: { source: "file", path: "~/.openclaw/secrets.json", @@ -3451,13 +3445,13 @@ openclaw gateway --port 19001 ملاحظات: -- يدعم موفر `file` الوضعين `mode: "json"` و`mode: "singleValue"` ‏(ويجب أن يكون `id` مساويًا لـ `"value"` في وضع singleValue). -- يتطلب موفر `exec` مسار `command` مطلقًا ويستخدم حمولات بروتوكول على stdin/stdout. -- تُرفض مسارات الأوامر الرمزية افتراضيًا. اضبط `allowSymlinkCommand: true` للسماح بالمسارات الرمزية مع التحقق من مسار الهدف المحلول. -- إذا كان `trustedDirs` مكوّنًا، فإن فحص الدليل الموثوق ينطبق على مسار الهدف المحلول. -- تكون بيئة الابن لـ `exec` ضئيلة افتراضيًا؛ مرّر المتغيرات المطلوبة صراحةً باستخدام `passEnv`. -- تُحل مراجع الأسرار وقت التفعيل إلى لقطة في الذاكرة، ثم لا تقرأ مسارات الطلب إلا من اللقطة. -- يُطبق ترشيح السطح النشط أثناء التفعيل: تفشل المراجع غير المحلولة على الأسطح المفعّلة عند البدء/إعادة التحميل، بينما يتم تخطي الأسطح غير النشطة مع بيانات تشخيصية. +- يدعم مزوّد `file` الوضعين `mode: "json"` و`mode: "singleValue"` (ويجب أن يكون `id` هو `"value"` في وضع singleValue). +- يتطلب مزوّد `exec` مسار `command` مطلقاً ويستخدم حمولات البروتوكول على stdin/stdout. +- يتم افتراضياً رفض مسارات الأوامر الرمزية symlink. اضبط `allowSymlinkCommand: true` للسماح بمسارات symlink مع التحقق من مسار الهدف المحلول. +- إذا تم ضبط `trustedDirs`، فسيُطبَّق فحص الدليل الموثوق على مسار الهدف المحلول. +- تكون بيئة الابن الخاصة بـ `exec` محدودة افتراضياً؛ مرّر المتغيرات المطلوبة صراحةً عبر `passEnv`. +- يتم حل مراجع الأسرار وقت التفعيل إلى لقطة داخل الذاكرة، ثم تقرأ مسارات الطلب من اللقطة فقط. +- يتم تطبيق تصفية السطح النشط أثناء التفعيل: تؤدي المراجع غير المحلولة على الأسطح المفعّلة إلى فشل بدء التشغيل/إعادة التحميل، بينما يتم تخطي الأسطح غير النشطة مع تشخيصات. --- @@ -3480,12 +3474,12 @@ openclaw gateway --port 19001 ``` - يتم تخزين ملفات التعريف لكل وكيل في `/auth-profiles.json`. -- يدعم `auth-profiles.json` مراجع على مستوى القيمة (`keyRef` لـ `api_key`، و`tokenRef` لـ `token`) لأنماط بيانات الاعتماد الثابتة. -- لا تدعم ملفات التعريف ذات وضع OAuth ‏(`auth.profiles..mode = "oauth"`) بيانات اعتماد auth-profile المدعومة بـ SecretRef. -- تأتي بيانات اعتماد runtime الثابتة من لقطات محلولة في الذاكرة؛ ويتم تنظيف إدخالات `auth.json` الثابتة القديمة عند اكتشافها. -- يتم الاستيراد القديم لـ OAuth من `~/.openclaw/credentials/oauth.json`. +- يدعم `auth-profiles.json` مراجع على مستوى القيمة (`keyRef` لـ `api_key` و`tokenRef` لـ `token`) لأوضاع بيانات الاعتماد الثابتة. +- لا تدعم ملفات التعريف ذات وضع OAuth ‏(`auth.profiles..mode = "oauth"`) بيانات اعتماد ملفات تعريف المصادقة المدعومة بـ SecretRef. +- تأتي بيانات الاعتماد الثابتة لوقت التشغيل من لقطات محلولة داخل الذاكرة؛ ويتم تنظيف إدخالات `auth.json` الثابتة القديمة عند اكتشافها. +- يتم استيراد OAuth القديم من `~/.openclaw/credentials/oauth.json`. - راجع [OAuth](/ar/concepts/oauth). -- سلوك runtime الخاص بالأسرار وأدوات `audit/configure/apply`: ‏[إدارة الأسرار](/ar/gateway/secrets). +- سلوك وقت تشغيل الأسرار وأدوات `audit/configure/apply`: ‏[إدارة الأسرار](/ar/gateway/secrets). ### `auth.cooldowns` @@ -3507,21 +3501,21 @@ openclaw gateway --port 19001 } ``` -- `billingBackoffHours`: التراجع الأساسي بالساعات عندما يفشل ملف تعريف بسبب أخطاء - فوترة/رصيد غير كافٍ حقيقية (الافتراضي: `5`). ولا يزال من الممكن أن - يندرج نص الفوترة الصريح هنا حتى في استجابات `401`/`403`، لكن تظل - مطابقات النص الخاصة بكل provider مقصورة على provider الذي يملكها - (مثل `Key limit exceeded` في OpenRouter). أما رسائل نافذة الاستخدام القابلة لإعادة المحاولة عبر HTTP `402` أو - حدود الإنفاق الخاصة بالمؤسسة/مساحة العمل فتبقى في مسار `rate_limit` - بدلًا من ذلك. -- `billingBackoffHoursByProvider`: تجاوزات اختيارية لكل provider لساعات التراجع المرتبط بالفوترة. -- `billingMaxHours`: الحد الأقصى بالساعات لنمو التراجع الأسي المرتبط بالفوترة (الافتراضي: `24`). +- `billingBackoffHours`: التراجع الأساسي بالساعات عندما يفشل ملف تعريف بسبب + أخطاء فوترة/رصيد غير كافٍ حقيقية (الافتراضي: `5`). ويمكن أن + تهبط نصوص الفوترة الصريحة هنا حتى على استجابات `401`/`403`، لكن + تظل مطابقات النص الخاصة بالمزوّد ضمن نطاق المزوّد الذي يملكها (مثل OpenRouter + ‏`Key limit exceeded`). أما رسائل `402` القابلة لإعادة المحاولة الخاصة بنافذة الاستخدام أو + حدود إنفاق المؤسسة/مساحة العمل فتظل ضمن مسار `rate_limit` + بدلاً من ذلك. +- `billingBackoffHoursByProvider`: تجاوزات اختيارية لكل مزوّد لساعات التراجع الخاصة بالفوترة. +- `billingMaxHours`: الحد الأقصى بالساعات للنمو الأسي لتراجع الفوترة (الافتراضي: `24`). - `authPermanentBackoffMinutes`: التراجع الأساسي بالدقائق لإخفاقات `auth_permanent` عالية الثقة (الافتراضي: `10`). -- `authPermanentMaxMinutes`: الحد الأقصى بالدقائق لنمو التراجع الخاص بـ `auth_permanent` ‏(الافتراضي: `60`). -- `failureWindowHours`: النافذة المتحركة بالساعات المستخدمة لعدادات التراجع (الافتراضي: `24`). -- `overloadedProfileRotations`: الحد الأقصى للتدويرات لملفات تعريف المصادقة ضمن provider نفسه عند أخطاء الحمل الزائد قبل الانتقال إلى التحويل عند الفشل للنموذج (الافتراضي: `1`). وتندرج هنا الأشكال الخاصة بانشغال provider مثل `ModelNotReadyException`. -- `overloadedBackoffMs`: تأخير ثابت قبل إعادة محاولة تدوير provider/profile محمّل فوق طاقته (الافتراضي: `0`). -- `rateLimitedProfileRotations`: الحد الأقصى لتدويرات ملفات تعريف المصادقة ضمن provider نفسه عند أخطاء تحديد المعدل قبل الانتقال إلى التحويل عند الفشل للنموذج (الافتراضي: `1`). ويتضمن هذا الحوض الخاص بتحديد المعدل نصوصًا على شكل provider مثل `Too many concurrent requests` و`ThrottlingException` و`concurrency limit reached` و`workers_ai ... quota limit exceeded` و`resource exhausted`. +- `authPermanentMaxMinutes`: الحد الأقصى بالدقائق لنمو التراجع الخاص بـ `auth_permanent` (الافتراضي: `60`). +- `failureWindowHours`: نافذة متحركة بالساعات تُستخدم لعدادات التراجع (الافتراضي: `24`). +- `overloadedProfileRotations`: الحد الأقصى لتبديلات ملفات تعريف المصادقة ضمن المزوّد نفسه لأخطاء الحمل الزائد قبل التحول إلى نموذج احتياطي (الافتراضي: `1`). وتندرج هنا أشكال انشغال المزوّد مثل `ModelNotReadyException`. +- `overloadedBackoffMs`: تأخير ثابت قبل إعادة محاولة تدوير ملف تعريف/مزوّد محمّل فوق الحد (الافتراضي: `0`). +- `rateLimitedProfileRotations`: الحد الأقصى لتبديلات ملفات تعريف المصادقة ضمن المزوّد نفسه لأخطاء rate-limit قبل التحول إلى نموذج احتياطي (الافتراضي: `1`). وتشمل سلة rate-limit هذه نصوصاً مشكلة حسب المزوّد مثل `Too many concurrent requests` و`ThrottlingException` و`concurrency limit reached` و`workers_ai ... quota limit exceeded` و`resource exhausted`. --- @@ -3542,8 +3536,8 @@ openclaw gateway --port 19001 - ملف السجل الافتراضي: `/tmp/openclaw/openclaw-YYYY-MM-DD.log`. - اضبط `logging.file` للحصول على مسار ثابت. -- يرتفع `consoleLevel` إلى `debug` عند استخدام `--verbose`. -- `maxFileBytes`: الحد الأقصى لحجم ملف السجل بالبايت قبل منع عمليات الكتابة (عدد صحيح موجب؛ الافتراضي: `524288000` = ‏500 MB). استخدم تدوير سجلات خارجيًا لعمليات النشر الإنتاجية. +- ترتفع قيمة `consoleLevel` إلى `debug` عند استخدام `--verbose`. +- `maxFileBytes`: الحد الأقصى لحجم ملف السجل بالبايت قبل كبت الكتابة (عدد صحيح موجب؛ الافتراضي: `524288000` = 500 MB). استخدم تدوير السجلات الخارجي لعمليات النشر الإنتاجية. --- @@ -3580,20 +3574,20 @@ openclaw gateway --port 19001 } ``` -- `enabled`: المفتاح الرئيسي لمخرجات القياس (الافتراضي: `true`). -- `flags`: مصفوفة من سلاسل الأعلام التي تفعّل مخرجات سجل موجّهة (وتدعم أحرف البدل مثل `"telegram.*"` أو `"*"`). -- `stuckSessionWarnMs`: حد العمر بالمللي ثانية لإصدار تحذيرات الجلسات العالقة بينما تظل الجلسة في حالة المعالجة. -- `otel.enabled`: يفعّل مسار التصدير الخاص بـ OpenTelemetry ‏(الافتراضي: `false`). -- `otel.endpoint`: عنوان URL للمجمّع الخاص بتصدير OTel. -- `otel.protocol`: ‏`"http/protobuf"` ‏(الافتراضي) أو `"grpc"`. -- `otel.headers`: ترويسات بيانات وصفية إضافية لـ HTTP/gRPC تُرسل مع طلبات تصدير OTel. +- `enabled`: مفتاح رئيسي لمخرجات القياس instrumentation (الافتراضي: `true`). +- `flags`: مصفوفة سلاسل flags لتمكين مخرجات سجل موجهة (تدعم أحرف البدل مثل `"telegram.*"` أو `"*"`). +- `stuckSessionWarnMs`: حد العمر بالميلي ثانية لإصدار تحذيرات الجلسات العالقة بينما تبقى الجلسة في حالة المعالجة. +- `otel.enabled`: يفعّل مسار تصدير OpenTelemetry ‏(الافتراضي: `false`). +- `otel.endpoint`: عنوان URL الخاص بالمجمّع لتصدير OTel. +- `otel.protocol`: ‏`"http/protobuf"` (الافتراضي) أو `"grpc"`. +- `otel.headers`: رؤوس بيانات وصفية إضافية لـ HTTP/gRPC يتم إرسالها مع طلبات تصدير OTel. - `otel.serviceName`: اسم الخدمة لسمات المورد. -- `otel.traces` / `otel.metrics` / `otel.logs`: تفعيل تصدير traces أو metrics أو logs. -- `otel.sampleRate`: معدل أخذ عينات trace من `0` إلى `1`. -- `otel.flushIntervalMs`: فترة التفريغ الدوري للقياس بالمللي ثانية. -- `cacheTrace.enabled`: تسجيل لقطات cache trace للتشغيلات المضمّنة (الافتراضي: `false`). -- `cacheTrace.filePath`: مسار الإخراج لملف JSONL الخاص بـ cache trace ‏(الافتراضي: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`). -- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: تتحكم فيما يُضمَّن في مخرجات cache trace ‏(القيم الافتراضية للجميع: `true`). +- `otel.traces` / `otel.metrics` / `otel.logs`: تمكين تصدير traces أو metrics أو logs. +- `otel.sampleRate`: معدل أخذ عينات traces من `0` إلى `1`. +- `otel.flushIntervalMs`: فاصل تفريغ القياس الدوري بالميلي ثانية. +- `cacheTrace.enabled`: تسجيل لقطات تتبع الذاكرة المؤقتة cache trace للتشغيلات المضمّنة (الافتراضي: `false`). +- `cacheTrace.filePath`: مسار الإخراج لـ cache trace بصيغة JSONL (الافتراضي: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`). +- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: تتحكم فيما يتم تضمينه في مخرجات cache trace (جميعها افتراضياً: `true`). --- @@ -3617,10 +3611,10 @@ openclaw gateway --port 19001 - `channel`: قناة الإصدار لتثبيتات npm/git — ‏`"stable"` أو `"beta"` أو `"dev"`. - `checkOnStart`: التحقق من تحديثات npm عند بدء Gateway ‏(الافتراضي: `true`). -- `auto.enabled`: تفعيل التحديث التلقائي في الخلفية لتثبيتات الحزم (الافتراضي: `false`). +- `auto.enabled`: تمكين التحديث التلقائي في الخلفية لتثبيتات الحزم (الافتراضي: `false`). - `auto.stableDelayHours`: الحد الأدنى للتأخير بالساعات قبل التطبيق التلقائي لقناة stable ‏(الافتراضي: `6`؛ الحد الأقصى: `168`). -- `auto.stableJitterHours`: نافذة توزيع إضافية بالساعات لطرح قناة stable ‏(الافتراضي: `12`؛ الحد الأقصى: `168`). -- `auto.betaCheckIntervalHours`: عدد الساعات بين فحوصات قناة beta ‏(الافتراضي: `1`؛ الحد الأقصى: `24`). +- `auto.stableJitterHours`: نافذة انتشار إضافية لقناة stable بالساعات (الافتراضي: `12`؛ الحد الأقصى: `168`). +- `auto.betaCheckIntervalHours`: عدد مرات تشغيل فحوصات قناة beta بالساعات (الافتراضي: `1`؛ الحد الأقصى: `24`). --- @@ -3653,22 +3647,22 @@ openclaw gateway --port 19001 } ``` -- `enabled`: بوابة الميزة العامة لـ ACP ‏(الافتراضي: `false`). -- `dispatch.enabled`: بوابة مستقلة لإرسال أدوار جلسات ACP ‏(الافتراضي: `true`). اضبطها على `false` للإبقاء على أوامر ACP متاحة مع حظر التنفيذ. -- `backend`: معرّف الواجهة الخلفية الافتراضية لـ ACP runtime ‏(ويجب أن يطابق Plugin runtime مسجلًا لـ ACP). -- `defaultAgent`: معرّف الوكيل الهدف الاحتياطي لـ ACP عندما لا تحدد عمليات الإنشاء هدفًا صريحًا. +- `enabled`: بوابة ميزات ACP العامة (الافتراضي: `false`). +- `dispatch.enabled`: بوابة مستقلة لإرسال أدوار جلسة ACP ‏(الافتراضي: `true`). اضبطها على `false` لإبقاء أوامر ACP متاحة مع حظر التنفيذ. +- `backend`: معرّف ACP runtime backend الافتراضي (ويجب أن يطابق ACP runtime plugin مسجلاً). +- `defaultAgent`: معرّف وكيل ACP الهدف الاحتياطي عندما لا تحدد عمليات spawn هدفاً صريحاً. - `allowedAgents`: قائمة سماح لمعرّفات الوكلاء المسموح بها لجلسات ACP runtime؛ وتعني القيمة الفارغة عدم وجود تقييد إضافي. -- `maxConcurrentSessions`: الحد الأقصى لعدد جلسات ACP النشطة في الوقت نفسه. -- `stream.coalesceIdleMs`: نافذة التفريغ الخامل بالمللي ثانية للنص المتدفق. -- `stream.maxChunkChars`: الحد الأقصى لحجم الجزء قبل تقسيم إسقاط الكتلة المتدفقة. -- `stream.repeatSuppression`: منع تكرار أسطر الحالة/الأدوات لكل دور (الافتراضي: `true`). -- `stream.deliveryMode`: ‏`"live"` يبث تدريجيًا؛ و`"final_only"` يخزن مؤقتًا حتى أحداث إنهاء الدور. +- `maxConcurrentSessions`: الحد الأقصى لعدد جلسات ACP النشطة بالتزامن. +- `stream.coalesceIdleMs`: نافذة التفريغ عند الخمول بالميلي ثانية للنص المتدفق. +- `stream.maxChunkChars`: الحد الأقصى لحجم chunk قبل تقسيم إسقاط الكتلة المتدفقة. +- `stream.repeatSuppression`: قمع تكرار أسطر الحالة/الأدوات لكل دور (الافتراضي: `true`). +- `stream.deliveryMode`: تقوم `"live"` بالبث تدريجياً؛ بينما تقوم `"final_only"` بالتخزين المؤقت حتى أحداث نهاية الدور. - `stream.hiddenBoundarySeparator`: الفاصل قبل النص المرئي بعد أحداث الأدوات المخفية (الافتراضي: `"paragraph"`). -- `stream.maxOutputChars`: الحد الأقصى لأحرف مخرجات المساعد المُسقطة لكل دور ACP. -- `stream.maxSessionUpdateChars`: الحد الأقصى لأحرف أسطر حالة/تحديث ACP المُسقطة. -- `stream.tagVisibility`: سجل يربط أسماء الوسوم بتجاوزات رؤية منطقية للأحداث المتدفقة. -- `runtime.ttlMinutes`: مدة TTL الخاملة بالدقائق لعوامل جلسات ACP قبل أن تصبح مؤهلة للتنظيف. -- `runtime.installCommand`: أمر تثبيت اختياري للتشغيل عند تهيئة بيئة ACP runtime. +- `stream.maxOutputChars`: الحد الأقصى لأحرف مخرجات المساعد المسقطة لكل دور ACP. +- `stream.maxSessionUpdateChars`: الحد الأقصى لأحرف أسطر الحالة/التحديث المسقطة الخاصة بـ ACP. +- `stream.tagVisibility`: سجل لأسماء الوسوم مع تجاوزات إظهار منطقية للأحداث المتدفقة. +- `runtime.ttlMinutes`: مدة TTL للخمول بالدقائق لعاملات جلسة ACP قبل أن تصبح مؤهلة للتنظيف. +- `runtime.installCommand`: أمر تثبيت اختياري لتشغيله عند تهيئة بيئة ACP runtime. --- @@ -3684,17 +3678,17 @@ openclaw gateway --port 19001 } ``` -- يتحكم `cli.banner.taglineMode` في نمط الشعار الفرعي داخل banner: - - `"random"` ‏(الافتراضي): شعارات فرعية متناوبة ومضحكة/موسمية. - - `"default"`: شعار فرعي ثابت ومحايد (`All your chats, one OpenClaw.`). - - `"off"`: من دون نص شعار فرعي (مع استمرار عرض عنوان banner/الإصدار). -- لإخفاء banner بالكامل (وليس فقط الشعارات الفرعية)، اضبط متغير البيئة `OPENCLAW_HIDE_BANNER=1`. +- يتحكم `cli.banner.taglineMode` في نمط الشعار الفرعي في الـ banner: + - `"random"` (الافتراضي): شعارات فرعية مضحكة/موسمية متبدلة. + - `"default"`: شعار فرعي محايد ثابت (`All your chats, one OpenClaw.`). + - `"off"`: من دون نص شعار فرعي (مع استمرار إظهار عنوان/version الـ banner). +- لإخفاء الـ banner بالكامل (وليس الشعارات الفرعية فقط)، اضبط متغير البيئة `OPENCLAW_HIDE_BANNER=1`. --- ## Wizard -بيانات تعريف يكتبها CLI في تدفقات الإعداد الموجّهة (`onboard` و`configure` و`doctor`): +بيانات وصفية تكتبها تدفقات الإعداد الإرشادي في CLI ‏(`onboard` و`configure` و`doctor`): ```json5 { @@ -3712,15 +3706,15 @@ openclaw gateway --port 19001 ## الهوية -راجع حقول الهوية في `agents.list` تحت [القيم الافتراضية للوكلاء](#agent-defaults). +راجع حقول الهوية في `agents.list` ضمن [الإعدادات الافتراضية للوكيل](#agent-defaults). --- ## Bridge ‏(قديم، تمت إزالته) -لم تعد البنيات الحالية تتضمن TCP bridge. وتتصل Nodes عبر Gateway WebSocket. ولم تعد مفاتيح `bridge.*` جزءًا من schema الخاصة بالتكوين (وسيفشل التحقق حتى تتم إزالتها؛ ويمكن لـ `openclaw doctor --fix` إزالة المفاتيح غير المعروفة). +لم تعد الإصدارات الحالية تتضمن TCP bridge. وتتصل Nodes عبر Gateway WebSocket. ولم تعد مفاتيح `bridge.*` جزءاً من مخطط الإعدادات (ويفشل التحقق إلى أن تتم إزالتها؛ ويمكن لـ `openclaw doctor --fix` إزالة المفاتيح غير المعروفة). - + ```json { @@ -3747,22 +3741,22 @@ openclaw gateway --port 19001 cron: { enabled: true, maxConcurrentRuns: 2, - webhook: "https://example.invalid/legacy", // رجوع قديم ومُهمَل للوظائف المخزنة notify:true - webhookToken: "replace-with-dedicated-token", // bearer token اختياري لمصادقة Webhook الصادر - sessionRetention: "24h", // سلسلة مدة أو false + webhook: "https://example.invalid/legacy", // deprecated fallback for stored notify:true jobs + webhookToken: "replace-with-dedicated-token", // optional bearer token for outbound webhook auth + sessionRetention: "24h", // duration string or false runLog: { - maxBytes: "2mb", // الافتراضي 2_000_000 بايت - keepLines: 2000, // الافتراضي 2000 + maxBytes: "2mb", // default 2_000_000 bytes + keepLines: 2000, // default 2000 }, }, } ``` -- `sessionRetention`: مدة الاحتفاظ بجلسات تشغيل Cron المعزولة المكتملة قبل تقليمها من `sessions.json`. كما تتحكم أيضًا في تنظيف أرشيفات transcript الخاصة بـ Cron المحذوفة. الافتراضي: `24h`؛ اضبطها على `false` للتعطيل. -- `runLog.maxBytes`: الحد الأقصى لحجم كل ملف سجل تشغيل (`cron/runs/.jsonl`) قبل التقليم. الافتراضي: `2_000_000` بايت. -- `runLog.keepLines`: أحدث الأسطر المحتفظ بها عند تفعيل تقليم سجل التشغيل. الافتراضي: `2000`. -- `webhookToken`: bearer token المستخدم لتسليم POST الخاص بـ Cron Webhook ‏(`delivery.mode = "webhook"`)، وإذا حُذف فلا تُرسل ترويسة مصادقة. -- `webhook`: عنوان Webhook احتياطي قديم ومُهمَل (`http/https`) يُستخدم فقط للوظائف المخزنة التي ما زال لديها `notify: true`. +- `sessionRetention`: المدة التي يتم خلالها الاحتفاظ بجلسات تشغيل Cron المعزولة المكتملة قبل تقليمها من `sessions.json`. كما تتحكم أيضاً في تنظيف نُسخ النصوص المحذوفة المؤرشفة الخاصة بـ Cron. الافتراضي: `24h`؛ اضبطها على `false` للتعطيل. +- `runLog.maxBytes`: الحد الأقصى لحجم ملف سجل كل تشغيل (`cron/runs/.jsonl`) قبل التقليم. الافتراضي: `2_000_000` بايت. +- `runLog.keepLines`: أحدث الأسطر التي يتم الاحتفاظ بها عند تشغيل تقليم سجل التشغيل. الافتراضي: `2000`. +- `webhookToken`: رمز bearer المستخدم لتسليم POST الخاص بـ Cron Webhook ‏(`delivery.mode = "webhook"`)، وإذا حُذف فلا يتم إرسال رأس مصادقة. +- `webhook`: عنوان Webhook احتياطي قديم ومُهمل (http/https) يُستخدم فقط للمهام المخزنة التي لا تزال تحمل `notify: true`. ### `cron.retry` @@ -3778,11 +3772,11 @@ openclaw gateway --port 19001 } ``` -- `maxAttempts`: الحد الأقصى لإعادات المحاولة للوظائف ذات التشغيل الواحد عند الأخطاء العابرة (الافتراضي: `3`؛ المجال: `0`–`10`). -- `backoffMs`: مصفوفة من تأخيرات التراجع بالمللي ثانية لكل محاولة إعادة (الافتراضي: `[30000, 60000, 300000]`؛ من 1 إلى 10 إدخالات). -- `retryOn`: أنواع الأخطاء التي تؤدي إلى إعادة المحاولة — ‏`"rate_limit"` و`"overloaded"` و`"network"` و`"timeout"` و`"server_error"`. احذفها لإعادة محاولة جميع الأنواع العابرة. +- `maxAttempts`: الحد الأقصى لإعادات المحاولة للمهام أحادية التشغيل عند الأخطاء العابرة (الافتراضي: `3`؛ المجال: `0`–`10`). +- `backoffMs`: مصفوفة تأخيرات التراجع بالميلي ثانية لكل محاولة إعادة (الافتراضي: `[30000, 60000, 300000]`؛ من 1 إلى 10 إدخالات). +- `retryOn`: أنواع الأخطاء التي تؤدي إلى إعادة المحاولة — `"rate_limit"` و`"overloaded"` و`"network"` و`"timeout"` و`"server_error"`. احذفها لإعادة المحاولة على جميع الأنواع العابرة. -ينطبق هذا فقط على وظائف Cron ذات التشغيل الواحد. وتستخدم الوظائف المتكررة معالجة فشل منفصلة. +ينطبق ذلك فقط على مهام Cron أحادية التشغيل. أما المهام المتكررة فتستخدم معالجة فشل منفصلة. ### `cron.failureAlert` @@ -3800,10 +3794,10 @@ openclaw gateway --port 19001 } ``` -- `enabled`: تفعيل تنبيهات الفشل لوظائف Cron ‏(الافتراضي: `false`). +- `enabled`: تمكين تنبيهات فشل مهام Cron ‏(الافتراضي: `false`). - `after`: عدد الإخفاقات المتتالية قبل إطلاق التنبيه (عدد صحيح موجب، الحد الأدنى: `1`). -- `cooldownMs`: الحد الأدنى بالمللي ثانية بين التنبيهات المتكررة للوظيفة نفسها (عدد صحيح غير سالب). -- `mode`: وضع التسليم — ترسل `"announce"` عبر رسالة قناة؛ بينما ترسل `"webhook"` إلى Webhook المكوَّن. +- `cooldownMs`: الحد الأدنى بالميلي ثانية بين التنبيهات المتكررة لنفس المهمة (عدد صحيح غير سالب). +- `mode`: وضع التسليم — تقوم `"announce"` بالإرسال عبر رسالة قناة؛ وتقوم `"webhook"` بالنشر إلى Webhook المكوَّن. - `accountId`: معرّف حساب أو قناة اختياري لتحديد نطاق تسليم التنبيه. ### `cron.failureDestination` @@ -3821,51 +3815,51 @@ openclaw gateway --port 19001 } ``` -- الوجهة الافتراضية لإشعارات فشل Cron عبر جميع الوظائف. -- `mode`: ‏`"announce"` أو `"webhook"`؛ وتكون القيمة الافتراضية `"announce"` عندما تتوفر بيانات هدف كافية. -- `channel`: تجاوز للقناة من أجل تسليم announce. وتعيد `"last"` استخدام آخر قناة تسليم معروفة. +- الوجهة الافتراضية لإشعارات فشل Cron عبر جميع المهام. +- `mode`: ‏`"announce"` أو `"webhook"`؛ وتكون القيمة الافتراضية `"announce"` عندما توجد بيانات هدف كافية. +- `channel`: تجاوز قناة لتسليم announce. وتقوم `"last"` بإعادة استخدام آخر قناة تسليم معروفة. - `to`: هدف announce صريح أو عنوان Webhook URL. وهو مطلوب لوضع webhook. - `accountId`: تجاوز اختياري للحساب من أجل التسليم. -- يتجاوز `delivery.failureDestination` لكل وظيفة هذا الافتراضي العام. -- عندما لا يتم ضبط وجهة فشل عامة ولا لكل وظيفة، فإن الوظائف التي تسلّم بالفعل عبر `announce` تعود عند الفشل إلى ذلك الهدف الأساسي الخاص بـ announce. -- لا يكون `delivery.failureDestination` مدعومًا إلا للوظائف ذات `sessionTarget="isolated"` ما لم يكن `delivery.mode` الأساسي للوظيفة هو `"webhook"`. +- تقوم `delivery.failureDestination` لكل مهمة بتجاوز هذا الافتراضي العام. +- عندما لا تكون هناك وجهة فشل عامة أو لكل مهمة، فإن المهام التي تسلّم بالفعل عبر `announce` تعود عند الفشل إلى هدف announce الأساسي نفسه. +- لا يتم دعم `delivery.failureDestination` إلا للمهام ذات `sessionTarget="isolated"` ما لم يكن `delivery.mode` الأساسي للمهمة هو `"webhook"`. -راجع [وظائف Cron](/ar/automation/cron-jobs). ويتم تتبع تشغيلات Cron المعزولة كـ [مهام في الخلفية](/ar/automation/tasks). +راجع [مهام Cron](/ar/automation/cron-jobs). ويتم تتبع عمليات Cron المعزولة على أنها [مهام خلفية](/ar/automation/tasks). --- -## متغيرات قوالب نماذج الوسائط +## متغيرات القالب لنموذج الوسائط -العناصر النائبة للقوالب الموسعة في `tools.media.models[].args`: +عناصر نائبة للقالب يتم توسيعها في `tools.media.models[].args`: -| المتغير | الوصف | -| ------------------ | ------------------------------------------------- | -| `{{Body}}` | النص الكامل للرسالة الواردة | -| `{{RawBody}}` | النص الخام (من دون أغلفة السجل/المرسل) | -| `{{BodyStripped}}` | النص بعد إزالة إشارات المجموعات | -| `{{From}}` | معرّف المرسل | -| `{{To}}` | معرّف الوجهة | -| `{{MessageSid}}` | معرّف رسالة القناة | -| `{{SessionId}}` | UUID الجلسة الحالية | -| `{{IsNewSession}}` | `"true"` عند إنشاء جلسة جديدة | -| `{{MediaUrl}}` | عنوان pseudo-URL للوسائط الواردة | -| `{{MediaPath}}` | مسار الوسائط المحلي | -| `{{MediaType}}` | نوع الوسائط (image/audio/document/…) | -| `{{Transcript}}` | transcript الصوت | -| `{{Prompt}}` | prompt الوسائط المحلول لإدخالات CLI | -| `{{MaxChars}}` | الحد الأقصى المحلول للأحرف الناتجة لإدخالات CLI | -| `{{ChatType}}` | `"direct"` أو `"group"` | -| `{{GroupSubject}}` | موضوع المجموعة (بأفضل جهد) | -| `{{GroupMembers}}` | معاينة أعضاء المجموعة (بأفضل جهد) | -| `{{SenderName}}` | اسم العرض للمرسل (بأفضل جهد) | -| `{{SenderE164}}` | رقم هاتف المرسل (بأفضل جهد) | -| `{{Provider}}` | تلميح provider ‏(whatsapp أو telegram أو discord، إلخ) | +| المتغير | الوصف | +| ------- | ----- | +| `{{Body}}` | كامل نص الرسالة الواردة | +| `{{RawBody}}` | النص الخام (من دون أغلفة السجل/المرسل) | +| `{{BodyStripped}}` | النص بعد إزالة إشارات المجموعات | +| `{{From}}` | معرّف المرسل | +| `{{To}}` | معرّف الوجهة | +| `{{MessageSid}}` | معرّف رسالة القناة | +| `{{SessionId}}` | UUID الجلسة الحالية | +| `{{IsNewSession}}` | `"true"` عند إنشاء جلسة جديدة | +| `{{MediaUrl}}` | عنوان pseudo-URL للوسائط الواردة | +| `{{MediaPath}}` | مسار الوسائط المحلي | +| `{{MediaType}}` | نوع الوسائط (صورة/صوت/مستند/…) | +| `{{Transcript}}` | النص المنسوخ من الصوت | +| `{{Prompt}}` | media prompt المحلول لإدخالات CLI | +| `{{MaxChars}}` | الحد الأقصى المحلول لأحرف الإخراج لإدخالات CLI | +| `{{ChatType}}` | `"direct"` أو `"group"` | +| `{{GroupSubject}}` | موضوع المجموعة (best effort) | +| `{{GroupMembers}}` | معاينة أعضاء المجموعة (best effort) | +| `{{SenderName}}` | اسم عرض المرسل (best effort) | +| `{{SenderE164}}` | رقم هاتف المرسل (best effort) | +| `{{Provider}}` | تلميح المزوّد (whatsapp أو telegram أو discord وما إلى ذلك) | --- -## تضمينات التكوين (`$include`) +## تضمين الإعدادات (`$include`) -قسّم التكوين إلى عدة ملفات: +قسّم الإعدادات إلى عدة ملفات: ```json5 // ~/.openclaw/openclaw.json @@ -3881,12 +3875,12 @@ openclaw gateway --port 19001 **سلوك الدمج:** - ملف واحد: يستبدل الكائن الحاوي. -- مصفوفة ملفات: تُدمج بعمق بالترتيب (ويغلب اللاحق السابق). -- المفاتيح الشقيقة: تُدمج بعد التضمينات (وتتجاوز القيم المضمّنة). -- التضمينات المتداخلة: حتى عمق 10 مستويات. -- المسارات: تُحل نسبةً إلى الملف المُضمِّن، لكن يجب أن تبقى داخل دليل التكوين ذي المستوى الأعلى (`dirname` الخاص بـ `openclaw.json`). ويُسمح بالأشكال المطلقة/‏`../` فقط عندما تُحلّ داخل ذلك الحد. +- مصفوفة ملفات: يتم دمجها عميقاً بالترتيب (ويقوم اللاحق بتجاوز السابق). +- المفاتيح المجاورة: يتم دمجها بعد التضمينات (فتتجاوز القيم المضمّنة). +- التضمينات المتداخلة: حتى 10 مستويات عمق. +- المسارات: يتم حلها نسبةً إلى الملف المضمِّن، ولكن يجب أن تبقى داخل دليل الإعدادات الأعلى مستوى (`dirname` الخاص بـ `openclaw.json`). ويُسمح بالأشكال المطلقة/`../` فقط عندما تستمر في الحل داخل هذا الحد. - الأخطاء: رسائل واضحة للملفات المفقودة، وأخطاء التحليل، والتضمينات الدائرية. --- -_ذو صلة: [التكوين](/ar/gateway/configuration) · [أمثلة على التكوين](/ar/gateway/configuration-examples) · [Doctor](/ar/gateway/doctor)_ +_ذو صلة: [الإعدادات](/ar/gateway/configuration) · [أمثلة الإعدادات](/ar/gateway/configuration-examples) · [Doctor](/ar/gateway/doctor)_ diff --git a/docs/ar/gateway/heartbeat.md b/docs/ar/gateway/heartbeat.md index 23c38fb6f..e30585c29 100644 --- a/docs/ar/gateway/heartbeat.md +++ b/docs/ar/gateway/heartbeat.md @@ -1,39 +1,39 @@ --- read_when: - - ضبط وتيرة نبضات الحياة أو رسائلها - - اتخاذ قرار بين نبضات الحياة وcron للمهام المجدولة -summary: رسائل استطلاع نبضات الحياة وقواعد الإشعارات -title: نبضات الحياة + - ضبط وتيرة Heartbeat أو الرسائل + - اتخاذ قرار بين Heartbeat وCron للمهام المجدولة +summary: رسائل استطلاع Heartbeat وقواعد الإشعارات +title: Heartbeat x-i18n: - generated_at: "2026-04-11T02:44:48Z" + generated_at: "2026-04-22T07:17:52Z" model: gpt-5.4 provider: openai - source_hash: e4485072148753076d909867a623696829bf4a82dcd0479b95d5d0cae43100b0 + source_hash: 13004e4e20b02b08aaf16f22cdf664d0b59da69446ecb30453db51ffdfd1d267 source_path: gateway/heartbeat.md workflow: 15 --- -# نبضات الحياة (Gateway) +# Heartbeat (Gateway) -> **نبضات الحياة أم Cron؟** راجع [الأتمتة والمهام](/ar/automation) للحصول على إرشادات حول وقت استخدام كل منهما. +> **Heartbeat أم Cron؟** راجع [الأتمتة والمهام](/ar/automation) للحصول على إرشادات حول وقت استخدام كل منهما. -تشغّل نبضات الحياة **دورات دورية للوكيل** في الجلسة الرئيسية حتى يتمكن النموذج من -إبراز أي شيء يحتاج إلى اهتمام من دون إغراقك بالرسائل. +يشغّل Heartbeat **أدوار وكيل دورية** في الجلسة الرئيسية حتى يتمكن النموذج من +إظهار أي شيء يحتاج إلى انتباه من دون إغراقك بالرسائل. -نبضات الحياة هي دورة مجدولة في الجلسة الرئيسية — وهي **لا** تنشئ سجلات [مهام في الخلفية](/ar/automation/tasks). -سجلات المهام مخصصة للعمل المنفصل (عمليات ACP، والوكلاء الفرعيون، ووظائف cron المعزولة). +Heartbeat هو دور مجدول في الجلسة الرئيسية — وهو **لا** ينشئ سجلات [مهام في الخلفية](/ar/automation/tasks). +سجلات المهام مخصّصة للعمل المنفصل (عمليات ACP، والوكلاء الفرعيون، ووظائف Cron المعزولة). استكشاف الأخطاء وإصلاحها: [المهام المجدولة](/ar/automation/cron-jobs#troubleshooting) -## بدء سريع (للمبتدئين) +## البدء السريع (للمبتدئين) -1. اترك نبضات الحياة مفعلة (الإعداد الافتراضي هو `30m`، أو `1h` لمصادقة Anthropic OAuth/token، بما في ذلك إعادة استخدام Claude CLI) أو اضبط الوتيرة التي تريدها. +1. اترك Heartbeat مفعّلًا (القيمة الافتراضية هي `30m`، أو `1h` لمصادقة Anthropic OAuth/الرمز المميز، بما في ذلك إعادة استخدام Claude CLI) أو اضبط وتيرتك الخاصة. 2. أنشئ قائمة تحقق صغيرة في `HEARTBEAT.md` أو كتلة `tasks:` في مساحة عمل الوكيل (اختياري لكنه موصى به). -3. حدّد إلى أين يجب أن تذهب رسائل نبضات الحياة (`target: "none"` هو الإعداد الافتراضي؛ اضبط `target: "last"` للتوجيه إلى آخر جهة اتصال). -4. اختياري: فعّل تسليم الاستدلال الخاص بنبضات الحياة من أجل مزيد من الشفافية. -5. اختياري: استخدم سياق bootstrap خفيفًا إذا كانت عمليات نبضات الحياة تحتاج فقط إلى `HEARTBEAT.md`. -6. اختياري: فعّل الجلسات المعزولة لتجنب إرسال سجل المحادثة الكامل مع كل نبضة حياة. -7. اختياري: قيّد نبضات الحياة بالساعات النشطة (بالتوقيت المحلي). +3. حدّد المكان الذي يجب أن تذهب إليه رسائل Heartbeat (`target: "none"` هو الخيار الافتراضي؛ اضبط `target: "last"` للتوجيه إلى آخر جهة اتصال). +4. اختياري: فعّل تسليم الاستدلال الخاص بـ Heartbeat لمزيد من الشفافية. +5. اختياري: استخدم سياق تهيئة خفيف إذا كانت تشغيلات Heartbeat تحتاج فقط إلى `HEARTBEAT.md`. +6. اختياري: فعّل الجلسات المعزولة لتجنب إرسال السجل الكامل للمحادثة مع كل Heartbeat. +7. اختياري: قيّد Heartbeat بالساعات النشطة (بالتوقيت المحلي). مثال على الإعداد: @@ -43,59 +43,59 @@ x-i18n: defaults: { heartbeat: { every: "30m", - target: "last", // تسليم صريح إلى آخر جهة اتصال (الإعداد الافتراضي هو "none") - directPolicy: "allow", // الافتراضي: السماح بالأهداف المباشرة/الرسائل الخاصة؛ اضبط "block" لمنعها - lightContext: true, // اختياري: حقن `HEARTBEAT.md` فقط من ملفات bootstrap - isolatedSession: true, // اختياري: جلسة جديدة في كل تشغيل (من دون سجل محادثة) + target: "last", // تسليم صريح إلى آخر جهة اتصال (القيمة الافتراضية هي "none") + directPolicy: "allow", // الافتراضي: السماح بالأهداف المباشرة/الرسائل الخاصة؛ اضبط "block" لكبتها + lightContext: true, // اختياري: حقن HEARTBEAT.md فقط من ملفات التهيئة + isolatedSession: true, // اختياري: جلسة جديدة لكل تشغيل (من دون سجل محادثة) // activeHours: { start: "08:00", end: "24:00" }, - // includeReasoning: true, // اختياري: إرسال رسالة `Reasoning:` منفصلة أيضًا + // includeReasoning: true, // اختياري: أرسل أيضًا رسالة `Reasoning:` منفصلة }, }, }, } ``` -## الإعدادات الافتراضية +## القيم الافتراضية -- الفاصل الزمني: `30m` (أو `1h` عندما يكون وضع المصادقة المكتشف هو Anthropic OAuth/token، بما في ذلك إعادة استخدام Claude CLI). اضبط `agents.defaults.heartbeat.every` أو `agents.list[].heartbeat.every` لكل وكيل؛ استخدم `0m` للتعطيل. +- الفاصل الزمني: `30m` (أو `1h` عندما يكون وضع المصادقة المكتشف هو Anthropic OAuth/مصادقة الرمز المميز، بما في ذلك إعادة استخدام Claude CLI). اضبط `agents.defaults.heartbeat.every` أو لكل وكيل `agents.list[].heartbeat.every`؛ استخدم `0m` للتعطيل. - نص المطالبة (قابل للتهيئة عبر `agents.defaults.heartbeat.prompt`): `Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.` -- يتم إرسال مطالبة نبضات الحياة **حرفيًا** كرسالة مستخدم. وتتضمن مطالبة النظام - قسمًا بعنوان “Heartbeat” فقط عندما تكون نبضات الحياة مفعلة للوكيل - الافتراضي، ويكون التشغيل مميزًا داخليًا على هذا الأساس. -- عند تعطيل نبضات الحياة باستخدام `0m`، تحذف العمليات العادية أيضًا `HEARTBEAT.md` - من سياق bootstrap حتى لا يرى النموذج تعليمات مخصصة لنبضات الحياة فقط. -- يتم التحقق من الساعات النشطة (`heartbeat.activeHours`) في المنطقة الزمنية المهيأة. - وخارج النافذة المحددة، يتم تخطي نبضات الحياة حتى النبضة التالية داخل النافذة. +- تُرسل مطالبة Heartbeat **حرفيًا** بوصفها رسالة المستخدم. وتتضمن + مطالبة النظام قسمًا باسم “Heartbeat” فقط عندما تكون Heartbeat مفعّلة + للوكيل الافتراضي، وعندما يتم تمييز التشغيل داخليًا. +- عند تعطيل Heartbeat باستخدام `0m`، تحذف التشغيلات العادية أيضًا `HEARTBEAT.md` + من سياق التهيئة حتى لا يرى النموذج تعليمات خاصة بـ Heartbeat فقط. +- يتم التحقق من الساعات النشطة (`heartbeat.activeHours`) في المنطقة الزمنية المضبوطة. + وخارج النافذة، يتم تخطي Heartbeat حتى النبضة التالية داخل النافذة. -## ما الغرض من مطالبة نبضات الحياة +## الغرض من مطالبة Heartbeat المطالبة الافتراضية عامة عمدًا: -- **المهام في الخلفية**: إن عبارة “Consider outstanding tasks” تدفع الوكيل إلى مراجعة - المتابعات (الوارد، والتقويم، والتذكيرات، والعمل الموجود في الطابور) وإبراز أي شيء عاجل. -- **الاطمئنان على الإنسان**: إن عبارة “Checkup sometimes on your human during day time” تدفع إلى - إرسال رسالة خفيفة من حين لآخر مثل “هل تحتاج إلى شيء؟”، لكنها تتجنب الإزعاج ليلًا - باستخدام منطقتك الزمنية المحلية المهيأة (راجع [/concepts/timezone](/ar/concepts/timezone)). +- **المهام في الخلفية**: عبارة “Consider outstanding tasks” تدفع الوكيل إلى مراجعة + المتابعات (البريد الوارد، والتقويم، والتذكيرات، والعمل المدرج في قائمة الانتظار) وإبراز أي شيء عاجل. +- **التحقق مع الإنسان**: عبارة “Checkup sometimes on your human during day time” تدفع إلى + إرسال رسالة خفيفة أحيانًا مثل “هل تحتاج إلى أي شيء؟”، لكنها تتجنب الإزعاج ليلًا + باستخدام منطقتك الزمنية المحلية المضبوطة (راجع [/concepts/timezone](/ar/concepts/timezone)). -يمكن لنبضات الحياة التفاعل مع [المهام في الخلفية](/ar/automation/tasks) المكتملة، لكن تشغيل نبضات الحياة نفسه لا ينشئ سجل مهمة. +يمكن لـ Heartbeat التفاعل مع [المهام في الخلفية](/ar/automation/tasks) المكتملة، لكن تشغيل Heartbeat نفسه لا ينشئ سجل مهمة. -إذا كنت تريد من نبضات الحياة أن تقوم بشيء محدد جدًا (مثل “check Gmail PubSub -stats” أو “verify gateway health”)، فاضبط `agents.defaults.heartbeat.prompt` (أو +إذا أردت أن ينفّذ Heartbeat شيئًا محددًا جدًا (مثل “تحقق من إحصاءات Gmail PubSub” +أو “تحقق من سلامة Gateway”)، فاضبط `agents.defaults.heartbeat.prompt` (أو `agents.list[].heartbeat.prompt`) على نص مخصص (يُرسل حرفيًا). ## عقد الاستجابة -- إذا لم يكن هناك شيء يحتاج إلى اهتمام، فاستجب بـ **`HEARTBEAT_OK`**. -- أثناء تشغيل نبضات الحياة، يتعامل OpenClaw مع `HEARTBEAT_OK` على أنه - تأكيد عندما يظهر في **بداية** الرد أو **نهايته**. وتُزال هذه العلامة ويُحذف الرد +- إذا لم يكن هناك ما يحتاج إلى انتباه، فردّ بـ **`HEARTBEAT_OK`**. +- أثناء تشغيلات Heartbeat، يتعامل OpenClaw مع `HEARTBEAT_OK` بوصفه + إقرارًا عندما يظهر في **بداية الرد أو نهايته**. تتم إزالة الرمز ويُسقط الرد إذا كان المحتوى المتبقي **≤ `ackMaxChars`** (الافتراضي: 300). -- إذا ظهر `HEARTBEAT_OK` في **منتصف** الرد، فلا تتم معاملته +- إذا ظهر `HEARTBEAT_OK` في **منتصف** الرد، فلن يُعامل معاملة خاصة. -- بالنسبة إلى التنبيهات، **لا** تُضمّن `HEARTBEAT_OK`؛ أرجع نص التنبيه فقط. +- في التنبيهات، **لا** تُضمّن `HEARTBEAT_OK`؛ أعد نص التنبيه فقط. -خارج نبضات الحياة، تتم إزالة أي `HEARTBEAT_OK` عارضة في بداية الرسالة/نهايتها -ويُسجل ذلك؛ أما الرسالة التي تكون فقط `HEARTBEAT_OK` فتُحذف. +خارج Heartbeat، تتم إزالة أي `HEARTBEAT_OK` عارض في بداية/نهاية الرسالة +ويُسجل؛ والرسالة التي تكون فقط `HEARTBEAT_OK` تُسقط. ## الإعداد @@ -104,37 +104,37 @@ stats” أو “verify gateway health”)، فاضبط `agents.defaults.heartbe agents: { defaults: { heartbeat: { - every: "30m", // الافتراضي: 30m (0m للتعطيل) + every: "30m", // الافتراضي: 30m (0m يعطل) model: "anthropic/claude-opus-4-6", - includeReasoning: false, // الافتراضي: false (تسليم رسالة `Reasoning:` منفصلة عند توفرها) - lightContext: false, // الافتراضي: false؛ تجعل القيمة true السياق مقتصرًا على `HEARTBEAT.md` فقط من ملفات bootstrap في مساحة العمل - isolatedSession: false, // الافتراضي: false؛ تجعل القيمة true كل نبضة حياة تعمل في جلسة جديدة (من دون سجل محادثة) - target: "last", // الافتراضي: none | الخيارات: last | none | (أساسي أو plugin، مثل "bluebubbles") + includeReasoning: false, // الافتراضي: false (تسليم رسالة Reasoning: منفصلة عند توفرها) + lightContext: false, // الافتراضي: false؛ true يُبقي فقط HEARTBEAT.md من ملفات تهيئة مساحة العمل + isolatedSession: false, // الافتراضي: false؛ true يشغّل كل Heartbeat في جلسة جديدة (من دون سجل محادثة) + target: "last", // الافتراضي: none | الخيارات: last | none | (أساسي أو Plugin، مثل "bluebubbles") to: "+15551234567", // تجاوز اختياري خاص بالقناة accountId: "ops-bot", // معرّف قناة اختياري للحسابات المتعددة prompt: "Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.", - ackMaxChars: 300, // الحد الأقصى للأحرف المسموح بها بعد `HEARTBEAT_OK` + ackMaxChars: 300, // الحد الأقصى للأحرف المسموح بها بعد HEARTBEAT_OK }, }, }, } ``` -### النطاق والأولوية +### النطاق والأسبقية -- يحدد `agents.defaults.heartbeat` سلوك نبضات الحياة العام. -- يندمج `agents.list[].heartbeat` فوقه؛ وإذا كان لدى أي وكيل كتلة `heartbeat`، فإن **هؤلاء الوكلاء فقط** هم من يشغّلون نبضات الحياة. -- يحدد `channels.defaults.heartbeat` إعدادات الرؤية الافتراضية لجميع القنوات. -- يتجاوز `channels..heartbeat` إعدادات القناة الافتراضية. -- يتجاوز `channels..accounts..heartbeat` (في القنوات متعددة الحسابات) الإعدادات على مستوى كل قناة. +- يضبط `agents.defaults.heartbeat` سلوك Heartbeat العام. +- يتم دمج `agents.list[].heartbeat` فوقه؛ وإذا كان لأي وكيل كتلة `heartbeat`، **فلن تشغّل Heartbeat إلا تلك الوكلاء فقط**. +- يضبط `channels.defaults.heartbeat` القيم الافتراضية للظهور لكل القنوات. +- يتجاوز `channels..heartbeat` القيم الافتراضية الخاصة بالقنوات. +- يتجاوز `channels..accounts..heartbeat` (القنوات متعددة الحسابات) إعدادات كل قناة على حدة. -### نبضات الحياة لكل وكيل +### Heartbeat لكل وكيل -إذا تضمّن أي إدخال في `agents.list[]` كتلة `heartbeat`، فإن **هؤلاء الوكلاء فقط** -هم من يشغّلون نبضات الحياة. وتندمج الكتلة الخاصة بكل وكيل فوق `agents.defaults.heartbeat` -(حتى تتمكن من تعيين إعدادات مشتركة مرة واحدة ثم تجاوزها لكل وكيل). +إذا كانت أي خانة في `agents.list[]` تتضمن كتلة `heartbeat`، فإن **تلك الوكلاء فقط** +هم الذين يشغّلون Heartbeat. ويتم دمج الكتلة الخاصة بكل وكيل فوق `agents.defaults.heartbeat` +(لذلك يمكنك ضبط القيم الافتراضية المشتركة مرة واحدة والتجاوز لكل وكيل). -مثال: وكيلان، ولا يشغّل نبضات الحياة إلا الوكيل الثاني. +مثال: وكيلان، والوكيل الثاني فقط هو الذي يشغّل Heartbeat. ```json5 { @@ -142,7 +142,7 @@ stats” أو “verify gateway health”)، فاضبط `agents.defaults.heartbe defaults: { heartbeat: { every: "30m", - target: "last", // تسليم صريح إلى آخر جهة اتصال (الإعداد الافتراضي هو "none") + target: "last", // تسليم صريح إلى آخر جهة اتصال (القيمة الافتراضية هي "none") }, }, list: [ @@ -164,7 +164,7 @@ stats” أو “verify gateway health”)، فاضبط `agents.defaults.heartbe ### مثال على الساعات النشطة -قيّد نبضات الحياة بساعات العمل في منطقة زمنية محددة: +قيّد Heartbeat بساعات العمل في منطقة زمنية محددة: ```json5 { @@ -172,11 +172,11 @@ stats” أو “verify gateway health”)، فاضبط `agents.defaults.heartbe defaults: { heartbeat: { every: "30m", - target: "last", // تسليم صريح إلى آخر جهة اتصال (الإعداد الافتراضي هو "none") + target: "last", // تسليم صريح إلى آخر جهة اتصال (القيمة الافتراضية هي "none") activeHours: { start: "09:00", end: "22:00", - timezone: "America/New_York", // اختياري؛ يستخدم `userTimezone` إذا كان مضبوطًا، وإلا فيستخدم المنطقة الزمنية للمضيف + timezone: "America/New_York", // اختياري؛ يستخدم userTimezone إن كان مضبوطًا، وإلا يستخدم المنطقة الزمنية للمضيف }, }, }, @@ -184,19 +184,19 @@ stats” أو “verify gateway health”)، فاضبط `agents.defaults.heartbe } ``` -خارج هذه النافذة (قبل التاسعة صباحًا أو بعد العاشرة مساءً بتوقيت الساحل الشرقي)، يتم تخطي نبضات الحياة. وستعمل النبضة المجدولة التالية داخل النافذة بشكل طبيعي. +خارج هذه النافذة (قبل 9 صباحًا أو بعد 10 مساءً بالتوقيت الشرقي)، يتم تخطي Heartbeat. وستعمل النبضة المجدولة التالية داخل النافذة بشكل طبيعي. ### إعداد 24/7 -إذا كنت تريد تشغيل نبضات الحياة طوال اليوم، فاستخدم أحد هذين النمطين: +إذا أردت تشغيل Heartbeat طوال اليوم، فاستخدم أحد هذه الأنماط: -- احذف `activeHours` بالكامل (من دون تقييد بنافذة زمنية؛ وهذا هو السلوك الافتراضي). +- احذف `activeHours` بالكامل (من دون تقييد نافذة زمنية؛ وهذا هو السلوك الافتراضي). - اضبط نافذة يوم كامل: `activeHours: { start: "00:00", end: "24:00" }`. -لا تضبط `start` و`end` على الوقت نفسه (مثلًا `08:00` إلى `08:00`). -يُعامل ذلك على أنه نافذة بعرض صفري، لذلك تُتخطى نبضات الحياة دائمًا. +لا تضبط القيمتين `start` و`end` على الوقت نفسه (على سبيل المثال `08:00` إلى `08:00`). +فهذا يُعامل على أنه نافذة بعرض صفري، لذلك يتم دائمًا تخطي Heartbeat. -### مثال على الحسابات المتعددة +### مثال على تعدد الحسابات استخدم `accountId` لاستهداف حساب محدد في القنوات متعددة الحسابات مثل Telegram: @@ -209,7 +209,7 @@ stats” أو “verify gateway health”)، فاضبط `agents.defaults.heartbe heartbeat: { every: "1h", target: "telegram", - to: "12345678:topic:42", // اختياري: التوجيه إلى موضوع/سلسلة رسائل محددة + to: "12345678:topic:42", // اختياري: التوجيه إلى topic/thread محدد accountId: "ops-bot", }, }, @@ -227,85 +227,88 @@ stats” أو “verify gateway health”)، فاضبط `agents.defaults.heartbe ### ملاحظات الحقول -- `every`: الفاصل الزمني لنبضات الحياة (سلسلة مدة؛ ووحدة القياس الافتراضية = الدقائق). -- `model`: تجاوز اختياري للنموذج في تشغيلات نبضات الحياة (`provider/model`). -- `includeReasoning`: عند التفعيل، يُسلَّم أيضًا رسالة `Reasoning:` المنفصلة عند توفرها (بنفس صيغة `/reasoning on`). -- `lightContext`: عند تفعيلها، تستخدم تشغيلات نبضات الحياة سياق bootstrap خفيفًا وتحتفظ فقط بـ `HEARTBEAT.md` من ملفات bootstrap في مساحة العمل. -- `isolatedSession`: عند تفعيلها، تعمل كل نبضة حياة في جلسة جديدة من دون أي سجل محادثة سابق. وتستخدم نمط العزل نفسه المستخدم في cron مع `sessionTarget: "isolated"`. وهذا يقلل بصورة كبيرة تكلفة التوكن لكل نبضة حياة. اجمعها مع `lightContext: true` لتحقيق أكبر قدر من التوفير. ومع ذلك، يظل توجيه التسليم يستخدم سياق الجلسة الرئيسية. -- `session`: مفتاح جلسة اختياري لتشغيلات نبضات الحياة. +- `every`: فاصل Heartbeat الزمني (سلسلة مدة؛ وحدة القياس الافتراضية = الدقائق). +- `model`: تجاوز اختياري للنموذج لتشغيلات Heartbeat (`provider/model`). +- `includeReasoning`: عند تفعيله، يسلّم أيضًا رسالة `Reasoning:` المنفصلة عند توفرها (بنفس صيغة `/reasoning on`). +- `lightContext`: عند تفعيله، تستخدم تشغيلات Heartbeat سياق تهيئة خفيفًا وتحتفظ فقط بـ `HEARTBEAT.md` من ملفات تهيئة مساحة العمل. +- `isolatedSession`: عند تفعيله، تعمل كل تشغيلات Heartbeat في جلسة جديدة من دون أي سجل محادثة سابق. ويستخدم نمط العزل نفسه الموجود في Cron `sessionTarget: "isolated"`. وهذا يقلل بشكل كبير تكلفة الرموز لكل Heartbeat. اجمعه مع `lightContext: true` لتحقيق أقصى توفير. ويظل توجيه التسليم يستخدم سياق الجلسة الرئيسية. +- `session`: مفتاح جلسة اختياري لتشغيلات Heartbeat. - `main` (الافتراضي): الجلسة الرئيسية للوكيل. - - مفتاح جلسة صريح (انسخه من `openclaw sessions --json` أو من [CLI الجلسات](/cli/sessions)). - - تنسيقات مفاتيح الجلسات: راجع [الجلسات](/ar/concepts/session) و[المجموعات](/ar/channels/groups). + - مفتاح جلسة صريح (انسخه من `openclaw sessions --json` أو من [sessions CLI](/cli/sessions)). + - صيغ مفاتيح الجلسة: راجع [الجلسات](/ar/concepts/session) و[المجموعات](/ar/channels/groups). - `target`: - `last`: التسليم إلى آخر قناة خارجية مستخدمة. - - قناة صريحة: أي قناة مهيأة أو معرّف plugin، مثل `discord` أو `matrix` أو `telegram` أو `whatsapp`. - - `none` (الافتراضي): تشغيل نبضات الحياة لكن **من دون تسليم** خارجي. + - قناة صريحة: أي قناة أو معرّف Plugin مهيأ، على سبيل المثال `discord` أو `matrix` أو `telegram` أو `whatsapp`. + - `none` (الافتراضي): شغّل Heartbeat لكن **لا تسلّمه** خارجيًا. - `directPolicy`: يتحكم في سلوك التسليم المباشر/الرسائل الخاصة: - - `allow` (الافتراضي): السماح بتسليم نبضات الحياة المباشر/عبر الرسائل الخاصة. - - `block`: منع التسليم المباشر/عبر الرسائل الخاصة (`reason=dm-blocked`). -- `to`: تجاوز اختياري للمستلم (معرّف خاص بالقناة، مثل E.164 لـ WhatsApp أو معرّف دردشة Telegram). وبالنسبة إلى مواضيع/سلاسل Telegram، استخدم `:topic:`. -- `accountId`: معرّف حساب اختياري للقنوات متعددة الحسابات. عند استخدام `target: "last"`، يُطبَّق معرّف الحساب على آخر قناة محلولة إذا كانت تدعم الحسابات؛ وإلا فيتم تجاهله. وإذا لم يطابق معرّف الحساب حسابًا مهيأً للقناة المحلولة، فسيتم تخطي التسليم. + - `allow` (الافتراضي): السماح بتسليم Heartbeat المباشر/الرسائل الخاصة. + - `block`: كبت التسليم المباشر/الرسائل الخاصة (`reason=dm-blocked`). +- `to`: تجاوز اختياري للمستلم (معرّف خاص بالقناة، مثل E.164 لـ WhatsApp أو معرّف دردشة Telegram). بالنسبة إلى topics/threads في Telegram، استخدم `:topic:`. +- `accountId`: معرّف حساب اختياري للقنوات متعددة الحسابات. عندما يكون `target: "last"`، يُطبّق معرّف الحساب على آخر قناة محلولة إذا كانت تدعم الحسابات؛ وإلا فيتم تجاهله. وإذا لم يطابق معرّف الحساب حسابًا مهيأً للقناة المحلولة، فسيتم تخطي التسليم. - `prompt`: يتجاوز نص المطالبة الافتراضي (من دون دمج). - `ackMaxChars`: الحد الأقصى للأحرف المسموح بها بعد `HEARTBEAT_OK` قبل التسليم. -- `suppressToolErrorWarnings`: عند تفعيلها، تُمنع حمولات تحذيرات أخطاء الأدوات أثناء تشغيلات نبضات الحياة. -- `activeHours`: يقيّد تشغيلات نبضات الحياة بنافذة زمنية. وهو كائن يحتوي على `start` (بتنسيق HH:MM، شامل؛ استخدم `00:00` لبداية اليوم)، و`end` (بتنسيق HH:MM، غير شامل؛ ويُسمح بـ `24:00` لنهاية اليوم)، و`timezone` اختياري. - - إذا حُذف أو كانت قيمته `"user"`: يستخدم `agents.defaults.userTimezone` إذا كان مضبوطًا، وإلا يعود إلى المنطقة الزمنية لنظام المضيف. +- `suppressToolErrorWarnings`: عند تفعيله، يكبت حمولات تحذير أخطاء الأدوات أثناء تشغيلات Heartbeat. +- `activeHours`: يقيّد تشغيلات Heartbeat بنافذة زمنية. وهو كائن يحتوي على `start` (HH:MM، شامل؛ استخدم `00:00` لبداية اليوم)، و`end` (HH:MM غير شامل؛ يُسمح بـ `24:00` لنهاية اليوم)، و`timezone` اختياري. + - إذا حُذف أو كان `"user"`: يستخدم `agents.defaults.userTimezone` إن كان مضبوطًا، وإلا يعود إلى المنطقة الزمنية لنظام المضيف. - `"local"`: يستخدم دائمًا المنطقة الزمنية لنظام المضيف. - - أي معرّف IANA (مثل `America/New_York`): يُستخدم مباشرة؛ وإذا كان غير صالح، يعود إلى سلوك `"user"` المذكور أعلاه. - - يجب ألا تكون `start` و`end` متساويتين بالنسبة إلى نافذة نشطة؛ إذ تُعامل القيم المتساوية كنافذة بعرض صفري (دائمًا خارج النافذة). - - خارج النافذة النشطة، يتم تخطي نبضات الحياة حتى النبضة التالية داخل النافذة. + - أي معرّف IANA (مثل `America/New_York`): يُستخدم مباشرة؛ وإذا كان غير صالح، فسيعود إلى سلوك `"user"` المذكور أعلاه. + - يجب ألا تكون `start` و`end` متساويتين بالنسبة إلى نافذة نشطة؛ فالقيم المتساوية تُعامل على أنها عرض صفري (دائمًا خارج النافذة). + - خارج النافذة النشطة، يتم تخطي Heartbeat حتى النبضة التالية داخل النافذة. ## سلوك التسليم -- تعمل نبضات الحياة في الجلسة الرئيسية للوكيل افتراضيًا (`agent::`)، - أو `global` عندما تكون `session.scope = "global"`. اضبط `session` لتجاوز ذلك إلى +- تعمل Heartbeat في الجلسة الرئيسية للوكيل افتراضيًا (`agent::`)، + أو `global` عندما يكون `session.scope = "global"`. اضبط `session` لتجاوزه إلى جلسة قناة محددة (Discord/WhatsApp/إلخ). -- يؤثر `session` في سياق التشغيل فقط؛ أما التسليم فتتحكم فيه `target` و`to`. -- للتسليم إلى قناة/مستلم محدد، اضبط `target` + `to`. وعند استخدام +- يؤثر `session` فقط في سياق التشغيل؛ ويتم التحكم في التسليم بواسطة `target` و`to`. +- للتسليم إلى قناة/مستلم محدد، اضبط `target` + `to`. ومع `target: "last"`، يستخدم التسليم آخر قناة خارجية لتلك الجلسة. -- تسمح عمليات تسليم نبضات الحياة بالأهداف المباشرة/الرسائل الخاصة افتراضيًا. اضبط `directPolicy: "block"` لمنع الإرسال إلى الأهداف المباشرة مع الاستمرار في تشغيل دورة نبضات الحياة. -- إذا كان الطابور الرئيسي مشغولًا، يتم تخطي نبضات الحياة وتُعاد المحاولة لاحقًا. -- إذا لم يُحل `target` إلى وجهة خارجية، فسيستمر التشغيل ولكن لن +- تسمح عمليات تسليم Heartbeat بالأهداف المباشرة/الرسائل الخاصة افتراضيًا. اضبط `directPolicy: "block"` لكبت الإرسال إلى الأهداف المباشرة مع الاستمرار في تشغيل دور Heartbeat. +- إذا كان الطابور الرئيسي مشغولًا، يتم تخطي Heartbeat وتُعاد المحاولة لاحقًا. +- إذا لم يُحل `target` إلى وجهة خارجية، فسيستمر التشغيل لكن لن تُرسل أي رسالة صادرة. -- إذا كانت `showOk` و`showAlerts` و`useIndicator` كلها معطلة، فسيتم تخطي التشغيل مسبقًا مع `reason=alerts-disabled`. -- إذا كان تسليم التنبيهات فقط معطلًا، فلا يزال بإمكان OpenClaw تشغيل نبضات الحياة، وتحديث الطوابع الزمنية للمهام المستحقة، واستعادة الطابع الزمني لخمول الجلسة، ومنع حمولة التنبيه الخارجية. -- الردود الخاصة بنبضات الحياة فقط **لا** تُبقي الجلسة نشطة؛ إذ تتم استعادة آخر قيمة لـ `updatedAt` - بحيث يعمل انتهاء الخمول كالمعتاد. -- يمكن [للمهام في الخلفية](/ar/automation/tasks) المنفصلة إدراج حدث نظام وتنشيط نبضات الحياة عندما ينبغي أن تلاحظ الجلسة الرئيسية شيئًا بسرعة. هذا التنشيط لا يجعل تشغيل نبضات الحياة مهمةً في الخلفية. +- إذا كانت `showOk` و`showAlerts` و`useIndicator` كلها معطلة، فيتم تخطي التشغيل مسبقًا على أنه `reason=alerts-disabled`. +- إذا كان تسليم التنبيهات فقط معطلًا، فلا يزال بإمكان OpenClaw تشغيل Heartbeat، وتحديث الطوابع الزمنية للمهام المستحقة، واستعادة الطابع الزمني لخمول الجلسة، وكبت حمولة التنبيه الخارجية. +- إذا كان هدف Heartbeat المحلول يدعم مؤشر الكتابة، فسيعرض OpenClaw حالة الكتابة أثناء + نشاط تشغيل Heartbeat. ويستخدم هذا الهدف نفسه الذي كان Heartbeat + سيرسل إليه مخرجات الدردشة، ويُعطَّل بواسطة `typingMode: "never"`. +- الردود الخاصة بـ Heartbeat فقط **لا** تُبقي الجلسة نشطة؛ إذ تتم استعادة قيمة `updatedAt` + الأخيرة حتى يعمل انتهاء الخمول بشكل طبيعي. +- يمكن لـ [المهام في الخلفية](/ar/automation/tasks) المنفصلة وضع حدث نظامي في الطابور وتنبيه Heartbeat عندما يجب أن تلاحظ الجلسة الرئيسية شيئًا بسرعة. ولا يجعل هذا التنبيه تشغيل Heartbeat مهمة في الخلفية. ## عناصر التحكم في الظهور -افتراضيًا، تُحجب تأكيدات `HEARTBEAT_OK` بينما يتم -تسليم محتوى التنبيه. ويمكنك ضبط هذا لكل قناة أو لكل حساب: +افتراضيًا، يتم كبت إقرارات `HEARTBEAT_OK` بينما يتم +تسليم محتوى التنبيه. ويمكنك ضبط ذلك لكل قناة أو لكل حساب: ```yaml channels: defaults: heartbeat: - showOk: false # إخفاء `HEARTBEAT_OK` (الافتراضي) + showOk: false # إخفاء HEARTBEAT_OK (الافتراضي) showAlerts: true # إظهار رسائل التنبيه (الافتراضي) useIndicator: true # إصدار أحداث المؤشر (الافتراضي) telegram: heartbeat: - showOk: true # إظهار تأكيدات OK على Telegram + showOk: true # إظهار إقرارات OK على Telegram whatsapp: accounts: work: heartbeat: - showAlerts: false # منع تسليم التنبيهات لهذا الحساب + showAlerts: false # كبت تسليم التنبيهات لهذا الحساب ``` -الأولوية: لكل حساب → لكل قناة → إعدادات القنوات الافتراضية → الإعدادات الافتراضية المضمنة. +الأسبقية: لكل حساب ← لكل قناة ← القيم الافتراضية للقناة ← القيم الافتراضية المضمّنة. -### ما الذي تفعله كل علامة +### ما الذي يفعله كل خيار -- `showOk`: يرسل تأكيد `HEARTBEAT_OK` عندما يعيد النموذج ردًا يتضمن OK فقط. -- `showAlerts`: يرسل محتوى التنبيه عندما يعيد النموذج ردًا لا يتضمن OK. -- `useIndicator`: يصدر أحداث مؤشر لواجهات حالة UI. +- `showOk`: يرسل إقرار `HEARTBEAT_OK` عندما يعيد النموذج ردًا يقتصر على OK. +- `showAlerts`: يرسل محتوى التنبيه عندما يعيد النموذج ردًا لا يحتوي على OK. +- `useIndicator`: يصدر أحداث المؤشر لواجهات حالة UI. -إذا كانت **القيم الثلاث كلها** false، فإن OpenClaw يتخطى تشغيل نبضات الحياة بالكامل (من دون استدعاء للنموذج). +إذا كانت **الخيارات الثلاثة جميعها** false، فسيتخطى OpenClaw تشغيل Heartbeat بالكامل (من دون استدعاء للنموذج). -### أمثلة: لكل قناة مقابل لكل حساب +### أمثلة لكل قناة مقابل لكل حساب ```yaml channels: @@ -320,53 +323,53 @@ channels: accounts: ops: heartbeat: - showAlerts: false # منع التنبيهات لحساب ops فقط + showAlerts: false # كبت التنبيهات لحساب ops فقط telegram: heartbeat: showOk: true ``` -### الأنماط الشائعة +### أنماط شائعة -| الهدف | الإعداد | -| ----------------------------------------- | ----------------------------------------------------------------------------------------- | -| السلوك الافتراضي (OK صامتة، والتنبيهات مفعلة) | _(لا حاجة إلى إعداد)_ | -| صامت بالكامل (لا رسائل، لا مؤشر) | `channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: false }` | -| مؤشر فقط (من دون رسائل) | `channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: true }` | -| OK في قناة واحدة فقط | `channels.telegram.heartbeat: { showOk: true }` | +| الهدف | الإعداد | +| ---------------------------------------- | ---------------------------------------------------------------------------------------- | +| السلوك الافتراضي (إقرارات OK صامتة، والتنبيهات مفعلة) | _(لا حاجة إلى أي إعداد)_ | +| صامت بالكامل (لا رسائل، لا مؤشر) | `channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: false }` | +| مؤشر فقط (من دون رسائل) | `channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: true }` | +| إقرارات OK في قناة واحدة فقط | `channels.telegram.heartbeat: { showOk: true }` | ## `HEARTBEAT.md` (اختياري) -إذا كان هناك ملف `HEARTBEAT.md` في مساحة العمل، فإن المطالبة الافتراضية تطلب من -الوكيل قراءته. ويمكنك اعتباره “قائمة التحقق الخاصة بنبضات الحياة”: صغيرة، وثابتة، +إذا كان ملف `HEARTBEAT.md` موجودًا في مساحة العمل، فإن المطالبة الافتراضية تطلب من +الوكيل قراءته. ويمكنك اعتباره “قائمة التحقق الخاصة بـ Heartbeat”: صغيرة، وثابتة، وآمنة للتضمين كل 30 دقيقة. -في التشغيلات العادية، لا يتم حقن `HEARTBEAT.md` إلا عندما تكون إرشادات نبضات الحياة -مفعلة للوكيل الافتراضي. يؤدي تعطيل وتيرة نبضات الحياة باستخدام `0m` أو -ضبط `includeSystemPromptSection: false` إلى حذف الملف من سياق bootstrap +في التشغيلات العادية، لا يتم حقن `HEARTBEAT.md` إلا عندما تكون إرشادات Heartbeat +مفعلة للوكيل الافتراضي. يؤدي تعطيل وتيرة Heartbeat باستخدام `0m` أو +ضبط `includeSystemPromptSection: false` إلى حذفه من سياق التهيئة العادي. -إذا كان `HEARTBEAT.md` موجودًا ولكنه فارغ فعليًا (فقط أسطر فارغة وعناوين markdown -مثل `# Heading`)، فإن OpenClaw يتخطى تشغيل نبضات الحياة لتوفير استدعاءات API. +إذا كان `HEARTBEAT.md` موجودًا لكنه فارغ فعليًا (أسطر فارغة فقط وعناوين markdown +مثل `# Heading`)، فسيتخطى OpenClaw تشغيل Heartbeat لتوفير استدعاءات API. ويتم الإبلاغ عن هذا التخطي على أنه `reason=empty-heartbeat-file`. -أما إذا كان الملف مفقودًا، فستستمر نبضات الحياة ويقرر النموذج ما يجب فعله. +أما إذا كان الملف مفقودًا، فسيستمر Heartbeat في العمل ويقرر النموذج ما يجب فعله. -اجعله صغيرًا (قائمة تحقق قصيرة أو تذكيرات) لتجنب تضخم المطالبة. +اجعله صغيرًا جدًا (قائمة تحقق قصيرة أو تذكيرات) لتجنب تضخم المطالبة. مثال على `HEARTBEAT.md`: ```md -# قائمة التحقق الخاصة بنبضات الحياة +# قائمة التحقق الخاصة بـ Heartbeat -- فحص سريع: هل يوجد شيء عاجل في صناديق الوارد؟ -- إذا كان الوقت نهارًا، فأجرِ تواصلًا خفيفًا إذا لم يكن هناك شيء آخر قيد الانتظار. -- إذا كانت مهمة ما متوقفة، فاكتب _ما الذي ينقص_ واسأل Peter في المرة القادمة. +- فحص سريع: هل هناك شيء عاجل في صناديق الوارد؟ +- إذا كان الوقت نهارًا، فقم بتحقق خفيف إذا لم يكن هناك شيء آخر معلق. +- إذا كانت هناك مهمة معطلة، فاكتب _ما الذي ينقص_ واسأل Peter في المرة القادمة. ``` ### كتل `tasks:` -يدعم `HEARTBEAT.md` أيضًا كتلة منظمة صغيرة `tasks:` للفحوصات -القائمة على الفواصل الزمنية داخل نبضات الحياة نفسها. +يدعم `HEARTBEAT.md` أيضًا كتلة `tasks:` منظمة صغيرة لعمليات +التحقق المعتمدة على الفاصل الزمني داخل Heartbeat نفسه. مثال: @@ -375,84 +378,85 @@ tasks: - name: inbox-triage interval: 30m - prompt: "افحص رسائل البريد الإلكتروني غير المقروءة العاجلة وحدد أي شيء حساس للوقت." + prompt: "تحقق من وجود رسائل بريد إلكتروني غير مقروءة وعاجلة وعلّم أي شيء حساس زمنيًا." - name: calendar-scan interval: 2h - prompt: "افحص الاجتماعات القادمة التي تحتاج إلى تحضير أو متابعة." + prompt: "تحقق من الاجتماعات القادمة التي تحتاج إلى تحضير أو متابعة." # تعليمات إضافية - اجعل التنبيهات قصيرة. -- إذا لم يكن هناك ما يحتاج إلى اهتمام بعد جميع المهام المستحقة، فردّ بـ HEARTBEAT_OK. +- إذا لم يكن هناك ما يحتاج إلى انتباه بعد جميع المهام المستحقة، فردّ بـ HEARTBEAT_OK. ``` السلوك: -- يقوم OpenClaw بتحليل كتلة `tasks:` والتحقق من كل مهمة وفق `interval` الخاص بها. -- لا تُضمَّن في مطالبة نبضات الحياة لتلك النبضة إلا المهام **المستحقة**. -- إذا لم تكن هناك مهام مستحقة، يتم تخطي نبضات الحياة بالكامل (`reason=no-tasks-due`) لتجنب استدعاء نموذج بلا فائدة. +- يحلل OpenClaw كتلة `tasks:` ويفحص كل مهمة وفق `interval` الخاص بها. +- لا يتم تضمين سوى المهام **المستحقة** في مطالبة Heartbeat الخاصة بتلك النبضة. +- إذا لم تكن هناك مهام مستحقة، يتم تخطي Heartbeat بالكامل (`reason=no-tasks-due`) لتجنب استدعاء نموذج بلا فائدة. - يتم الاحتفاظ بالمحتوى غير الخاص بالمهام في `HEARTBEAT.md` وإلحاقه كسياق إضافي بعد قائمة المهام المستحقة. -- تُخزَّن الطوابع الزمنية لآخر تشغيل للمهام في حالة الجلسة (`heartbeatTaskState`)، لذلك تبقى الفواصل الزمنية محفوظة عبر عمليات إعادة التشغيل العادية. -- لا يتم تقديم الطوابع الزمنية للمهام إلا بعد أن يكمل تشغيل نبضات الحياة مسار الرد العادي. أما التشغيلات المتخطاة بسبب `empty-heartbeat-file` / `no-tasks-due` فلا تُعلَّم فيها المهام على أنها مكتملة. +- يتم تخزين الطوابع الزمنية لآخر تشغيل للمهام في حالة الجلسة (`heartbeatTaskState`)، لذا تبقى الفواصل الزمنية محفوظة عبر عمليات إعادة التشغيل العادية. +- لا يتم تقديم الطوابع الزمنية للمهام إلا بعد أن يكمل تشغيل Heartbeat مسار الرد العادي. أما التشغيلات المتخطاة `empty-heartbeat-file` / `no-tasks-due` فلا تضع علامة على المهام على أنها مكتملة. -وضع المهام مفيد عندما تريد أن يحتوي ملف نبضات حياة واحد على عدة فحوصات دورية من دون دفع تكلفة جميعها في كل نبضة. +يفيد وضع المهام عندما تريد أن يحتوي ملف Heartbeat واحد على عدة عمليات تحقق دورية من دون دفع تكلفة جميعها في كل نبضة. ### هل يمكن للوكيل تحديث `HEARTBEAT.md`؟ نعم — إذا طلبت منه ذلك. -`HEARTBEAT.md` هو مجرد ملف عادي في مساحة عمل الوكيل، لذلك يمكنك أن تطلب من -الوكيل (في محادثة عادية) شيئًا مثل: +`HEARTBEAT.md` هو مجرد ملف عادي في مساحة عمل الوكيل، لذا يمكنك أن تطلب من +الوكيل (في دردشة عادية) شيئًا مثل: -- “حدّث `HEARTBEAT.md` لإضافة فحص يومي للتقويم.” -- “أعد كتابة `HEARTBEAT.md` ليكون أقصر وأكثر تركيزًا على متابعات الوارد.” +- “حدّث `HEARTBEAT.md` لإضافة تحقق يومي من التقويم.” +- “أعد كتابة `HEARTBEAT.md` ليكون أقصر ومركزًا على متابعات صندوق الوارد.” -إذا كنت تريد أن يحدث هذا بشكل استباقي، فيمكنك أيضًا تضمين سطر صريح في -مطالبة نبضات الحياة مثل: “إذا أصبحت قائمة التحقق قديمة، فحدّث HEARTBEAT.md +وإذا أردت أن يحدث ذلك بشكل استباقي، فيمكنك أيضًا تضمين سطر صريح في +مطالبة Heartbeat مثل: “إذا أصبحت قائمة التحقق قديمة، فحدّث HEARTBEAT.md بقائمة أفضل.” -ملاحظة أمان: لا تضع أسرارًا (مفاتيح API، أو أرقام هواتف، أو رموز وصول خاصة) في +ملاحظة أمان: لا تضع أسرارًا (مفاتيح API، أو أرقام الهواتف، أو الرموز الخاصة) داخل `HEARTBEAT.md` — لأنه يصبح جزءًا من سياق المطالبة. -## تنشيط يدوي (عند الطلب) +## التنبيه اليدوي (عند الطلب) -يمكنك إدراج حدث نظام وتشغيل نبضة حياة فورية باستخدام: +يمكنك وضع حدث نظامي في الطابور وتشغيل Heartbeat فورًا باستخدام: ```bash openclaw system event --text "Check for urgent follow-ups" --mode now ``` -إذا كانت هناك عدة وكلاء لديهم `heartbeat` مهيأ، فإن التنشيط اليدوي يشغّل نبضات حياة كل واحد من هؤلاء الوكلاء فورًا. +إذا كان لدى عدة وكلاء إعداد `heartbeat`، فإن التنبيه اليدوي يشغّل Heartbeat الخاص بكل من هذه +الوكلاء فورًا. -استخدم `--mode next-heartbeat` للانتظار حتى النبضة المجدولة التالية. +استخدم `--mode next-heartbeat` لانتظار النبضة المجدولة التالية. ## تسليم الاستدلال (اختياري) -افتراضيًا، تسلّم نبضات الحياة حمولة “الإجابة” النهائية فقط. +افتراضيًا، تسلّم Heartbeat حمولة “الإجابة” النهائية فقط. -إذا كنت تريد مزيدًا من الشفافية، فعّل: +إذا أردت مزيدًا من الشفافية، فعّل: - `agents.defaults.heartbeat.includeReasoning: true` -عند التفعيل، ستسلّم نبضات الحياة أيضًا رسالة منفصلة مسبوقة بـ -`Reasoning:` (بنفس صيغة `/reasoning on`). قد يكون هذا مفيدًا عندما يكون الوكيل -يدير عدة جلسات/Skills وتريد معرفة سبب قراره بتنبيهك — -لكنه قد يكشف أيضًا تفاصيل داخلية أكثر مما تريد. لذا يُفضَّل إبقاؤه +عند التفعيل، ستسلّم Heartbeat أيضًا رسالة منفصلة مسبوقة بـ +`Reasoning:` (بنفس صيغة `/reasoning on`). وقد يكون ذلك مفيدًا عندما يكون الوكيل +يدير عدة جلسات/حالات codex وتريد معرفة سبب قراره بتنبيهك +— لكنه قد يكشف أيضًا تفاصيل داخلية أكثر مما تريد. ومن الأفضل إبقاؤه معطلًا في الدردشات الجماعية. -## مراعاة التكلفة +## الوعي بالتكلفة -تشغّل نبضات الحياة دورات وكيل كاملة. وكلما قصرت الفواصل الزمنية زاد استهلاك التوكنات. لتقليل التكلفة: +تشغّل Heartbeat أدوار وكيل كاملة. وكلما قصرت الفواصل الزمنية زاد استهلاك الرموز. لتقليل التكلفة: -- استخدم `isolatedSession: true` لتجنب إرسال سجل المحادثة الكامل (من ~100K توكن إلى ~2-5K لكل تشغيل). -- استخدم `lightContext: true` لحصر ملفات bootstrap على `HEARTBEAT.md` فقط. +- استخدم `isolatedSession: true` لتجنب إرسال السجل الكامل للمحادثة (من ~100K رمز إلى ~2-5K لكل تشغيل). +- استخدم `lightContext: true` لحصر ملفات التهيئة في `HEARTBEAT.md` فقط. - اضبط `model` أرخص (مثل `ollama/llama3.2:1b`). -- أبقِ `HEARTBEAT.md` صغيرًا. +- اجعل `HEARTBEAT.md` صغيرًا. - استخدم `target: "none"` إذا كنت تريد فقط تحديثات الحالة الداخلية. ## ذو صلة - [الأتمتة والمهام](/ar/automation) — نظرة سريعة على جميع آليات الأتمتة - [المهام في الخلفية](/ar/automation/tasks) — كيفية تتبع العمل المنفصل -- [المنطقة الزمنية](/ar/concepts/timezone) — كيف تؤثر المنطقة الزمنية في جدولة نبضات الحياة +- [المنطقة الزمنية](/ar/concepts/timezone) — كيف تؤثر المنطقة الزمنية في جدولة Heartbeat - [استكشاف الأخطاء وإصلاحها](/ar/automation/cron-jobs#troubleshooting) — تصحيح مشكلات الأتمتة diff --git a/docs/ar/plugins/building-plugins.md b/docs/ar/plugins/building-plugins.md index 618498f0e..219d92907 100644 --- a/docs/ar/plugins/building-plugins.md +++ b/docs/ar/plugins/building-plugins.md @@ -1,65 +1,65 @@ --- read_when: - - تريد إنشاء plugin جديد لـ OpenClaw - - تحتاج إلى دليل بدء سريع لتطوير plugin - - تضيف قناة أو مزودًا أو أداة أو قدرة أخرى جديدة إلى OpenClaw + - تريد إنشاء Plugin جديد لـ OpenClaw + - تحتاج إلى بداية سريعة لتطوير Plugin + - أنت تضيف قناة أو موفّرًا أو أداة أو قدرة أخرى جديدة إلى OpenClaw sidebarTitle: Getting Started -summary: أنشئ أول plugin لـ OpenClaw خلال دقائق +summary: أنشئ أول Plugin لـ OpenClaw في غضون دقائق title: بناء Plugins x-i18n: - generated_at: "2026-04-07T07:19:17Z" + generated_at: "2026-04-22T07:17:53Z" model: gpt-5.4 provider: openai - source_hash: 509c1f5abe1a0a74966054ed79b71a1a7ee637a43b1214c424acfe62ddf48eef + source_hash: 67368be311537f984f14bea9239b88c3eccf72a76c9dd1347bb041e02697ae24 source_path: plugins/building-plugins.md workflow: 15 --- # بناء Plugins -توسّع Plugins قدرات OpenClaw بإمكانات جديدة: القنوات، وموفرو النماذج، -والكلام، والنسخ الفوري، والصوت الفوري، وفهم الوسائط، وتوليد -الصور، وتوليد الفيديو، وجلب الويب، والبحث على الويب، وأدوات الوكيل، أو أي -مزيج منها. +توسّع Plugins قدرات OpenClaw بإمكانات جديدة: القنوات، وموفّرو النماذج، +والكلام، والنسخ الفوري، والصوت الفوري، وفهم الوسائط، وتوليد الصور، +وتوليد الفيديو، وجلب الويب، والبحث على الويب، وأدوات الوكيل، أو أي +مزيج من ذلك. -لا تحتاج إلى إضافة plugin الخاص بك إلى مستودع OpenClaw. انشره على -[ClawHub](/ar/tools/clawhub) أو npm وسيقوم المستخدمون بتثبيته باستخدام -`openclaw plugins install `. يحاول OpenClaw استخدام ClawHub أولًا ثم -يرجع تلقائيًا إلى npm. +لا تحتاج إلى إضافة Plugin الخاص بك إلى مستودع OpenClaw. انشره إلى +[ClawHub](/ar/tools/clawhub) أو npm وسيقوم المستخدمون بالتثبيت باستخدام +`openclaw plugins install `. يحاول OpenClaw استخدام ClawHub أولًا +ثم يعود إلى npm تلقائيًا عند الحاجة. -## المتطلبات الأساسية +## المتطلبات المسبقة - Node >= 22 ومدير حزم (npm أو pnpm) -- الإلمام بـ TypeScript ‏(ESM) -- بالنسبة إلى plugins داخل المستودع: يجب أن يكون المستودع مستنسخًا وقد تم تشغيل `pnpm install` +- إلمام بـ TypeScript ‏(ESM) +- بالنسبة إلى Plugins داخل المستودع: أن يكون المستودع مستنسخًا وتم تنفيذ `pnpm install` -## ما نوع plugin الذي تريده؟ +## ما نوع Plugin الذي تريد إنشاءه؟ - - وصّل OpenClaw بمنصة مراسلة (Discord وIRC وغيرهما) + + اربط OpenClaw بمنصة مراسلة (Discord أو IRC أو غيرهما) - - أضف مزود نماذج (LLM أو proxy أو endpoint مخصص) + + أضف موفّر نماذج (LLM أو وكيل أو نقطة نهاية مخصّصة) - + سجّل أدوات الوكيل أو event hooks أو الخدمات — تابع أدناه -إذا كان Channel plugin اختياريًا وقد لا يكون مثبتًا عند تشغيل -onboarding/setup، فاستخدم `createOptionalChannelSetupSurface(...)` من -`openclaw/plugin-sdk/channel-setup`. فهو ينتج setup adapter + wizard -يعلن عن متطلب التثبيت ويفشل بشكل مغلق عند محاولات كتابة الإعدادات الفعلية -إلى أن يتم تثبيت plugin. +إذا كان Plugin القناة اختياريًا وقد لا يكون مُثبّتًا عند تشغيل الإعداد أو +التهيئة الأولية، فاستخدم `createOptionalChannelSetupSurface(...)` من +`openclaw/plugin-sdk/channel-setup`. فهو ينتج زوجًا من محوّل إعداد + معالج إعداد +يعرض متطلب التثبيت ويفشل بشكل آمن عند أي عمليات كتابة فعلية للإعدادات +إلى أن يتم تثبيت Plugin. -## بدء سريع: Tool plugin +## بداية سريعة: Plugin أداة -ينشئ هذا الدليل plugin بسيطًا يسجل أداة وكيل. أما Channel plugins -وProvider plugins فلها أدلة مخصصة مرتبطة أعلاه. +ينشئ هذا الدليل العملي Plugin بسيطًا يسجّل أداة وكيل. لدى Plugins القنوات +والموفّرين أدلة مخصّصة مرتبطة أعلاه. - + ```json package.json { @@ -93,9 +93,9 @@ onboarding/setup، فاستخدم `createOptionalChannelSetupSurface(...)` من ``` - يحتاج كل plugin إلى manifest، حتى من دون إعدادات. راجع - [Manifest](/ar/plugins/manifest) للاطلاع على المخطط الكامل. وتوجد مقتطفات النشر - القياسية الخاصة بـ ClawHub في `docs/snippets/plugin-publish/`. + يحتاج كل Plugin إلى ملف manifest، حتى إذا لم تكن لديه إعدادات. راجع + [Manifest](/ar/plugins/manifest) للاطلاع على المخطط الكامل. توجد مقتطفات النشر + القياسية إلى ClawHub في `docs/snippets/plugin-publish/`. @@ -123,15 +123,15 @@ onboarding/setup، فاستخدم `createOptionalChannelSetupSurface(...)` من }); ``` - يُستخدم `definePluginEntry` للـ plugins غير الخاصة بالقنوات. أما القنوات فاستخدم - `defineChannelPluginEntry` — راجع [Channel Plugins](/ar/plugins/sdk-channel-plugins). - وللاطلاع على الخيارات الكاملة لنقطة الإدخال، راجع [Entry Points](/ar/plugins/sdk-entrypoints). + يُستخدم `definePluginEntry` مع Plugins غير الخاصة بالقنوات. أما بالنسبة إلى القنوات، فاستخدم + `defineChannelPluginEntry` — راجع [Plugins القنوات](/ar/plugins/sdk-channel-plugins). + وللاطلاع على الخيارات الكاملة لنقطة الإدخال، راجع [نقاط الإدخال](/ar/plugins/sdk-entrypoints). - **Plugins الخارجية:** تحقّق وانشر باستخدام ClawHub، ثم ثبّت: + **Plugins الخارجية:** تحقّق منها وانشرها باستخدام ClawHub، ثم ثبّتها: ```bash clawhub package publish your-org/your-plugin --dry-run @@ -139,10 +139,10 @@ onboarding/setup، فاستخدم `createOptionalChannelSetupSurface(...)` من openclaw plugins install clawhub:@myorg/openclaw-my-plugin ``` - يفحص OpenClaw أيضًا ClawHub قبل npm عند استخدام مواصفات حزم مجردة مثل + يتحقق OpenClaw أيضًا من ClawHub قبل npm عند استخدام محددات الحزم المجردة مثل `@myorg/openclaw-my-plugin`. - **Plugins داخل المستودع:** ضَعها ضمن شجرة workspace الخاصة بالـ plugin المضمّن — سيتم اكتشافها تلقائيًا. + **Plugins داخل المستودع:** ضعها ضمن شجرة مساحة عمل Plugins المضمّنة — وسيتم اكتشافها تلقائيًا. ```bash pnpm test -- /my-plugin/ @@ -151,62 +151,69 @@ onboarding/setup، فاستخدم `createOptionalChannelSetupSurface(...)` من -## قدرات plugin +## قدرات Plugin -يمكن لـ plugin واحد تسجيل أي عدد من القدرات عبر الكائن `api`: +يمكن لـ Plugin واحد تسجيل أي عدد من القدرات عبر الكائن `api`: -| القدرة | طريقة التسجيل | الدليل المفصل | -| ---------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------- | -| الاستدلال النصي (LLM) | `api.registerProvider(...)` | [Provider Plugins](/ar/plugins/sdk-provider-plugins) | -| CLI inference backend | `api.registerCliBackend(...)` | [CLI Backends](/ar/gateway/cli-backends) | -| القناة / المراسلة | `api.registerChannel(...)` | [Channel Plugins](/ar/plugins/sdk-channel-plugins) | -| الكلام (TTS/STT) | `api.registerSpeechProvider(...)` | [Provider Plugins](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | -| النسخ الفوري | `api.registerRealtimeTranscriptionProvider(...)` | [Provider Plugins](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | -| الصوت الفوري | `api.registerRealtimeVoiceProvider(...)` | [Provider Plugins](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | -| فهم الوسائط | `api.registerMediaUnderstandingProvider(...)` | [Provider Plugins](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | -| توليد الصور | `api.registerImageGenerationProvider(...)` | [Provider Plugins](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | -| توليد الموسيقى | `api.registerMusicGenerationProvider(...)` | [Provider Plugins](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | -| توليد الفيديو | `api.registerVideoGenerationProvider(...)` | [Provider Plugins](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | -| جلب الويب | `api.registerWebFetchProvider(...)` | [Provider Plugins](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | -| البحث على الويب | `api.registerWebSearchProvider(...)` | [Provider Plugins](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | -| أدوات الوكيل | `api.registerTool(...)` | أدناه | -| أوامر مخصصة | `api.registerCommand(...)` | [Entry Points](/ar/plugins/sdk-entrypoints) | -| Event hooks | `api.registerHook(...)` | [Entry Points](/ar/plugins/sdk-entrypoints) | -| مسارات HTTP | `api.registerHttpRoute(...)` | [Internals](/ar/plugins/architecture#gateway-http-routes) | -| أوامر CLI فرعية | `api.registerCli(...)` | [Entry Points](/ar/plugins/sdk-entrypoints) | +| القدرة | طريقة التسجيل | الدليل المفصل | +| ---------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------ | +| الاستدلال النصي (LLM) | `api.registerProvider(...)` | [Plugins الموفّر](/ar/plugins/sdk-provider-plugins) | +| واجهة خلفية للاستدلال عبر CLI | `api.registerCliBackend(...)` | [واجهات CLI الخلفية](/ar/gateway/cli-backends) | +| القناة / المراسلة | `api.registerChannel(...)` | [Plugins القنوات](/ar/plugins/sdk-channel-plugins) | +| الكلام (TTS/STT) | `api.registerSpeechProvider(...)` | [Plugins الموفّر](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | +| النسخ الفوري | `api.registerRealtimeTranscriptionProvider(...)` | [Plugins الموفّر](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | +| الصوت الفوري | `api.registerRealtimeVoiceProvider(...)` | [Plugins الموفّر](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | +| فهم الوسائط | `api.registerMediaUnderstandingProvider(...)` | [Plugins الموفّر](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | +| توليد الصور | `api.registerImageGenerationProvider(...)` | [Plugins الموفّر](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | +| توليد الموسيقى | `api.registerMusicGenerationProvider(...)` | [Plugins الموفّر](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | +| توليد الفيديو | `api.registerVideoGenerationProvider(...)` | [Plugins الموفّر](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | +| جلب الويب | `api.registerWebFetchProvider(...)` | [Plugins الموفّر](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | +| البحث على الويب | `api.registerWebSearchProvider(...)` | [Plugins الموفّر](/ar/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) | +| امتداد Pi مضمّن | `api.registerEmbeddedExtensionFactory(...)` | [نظرة عامة على SDK](/ar/plugins/sdk-overview#registration-api) | +| أدوات الوكيل | `api.registerTool(...)` | أدناه | +| أوامر مخصّصة | `api.registerCommand(...)` | [نقاط الإدخال](/ar/plugins/sdk-entrypoints) | +| event hooks | `api.registerHook(...)` | [نقاط الإدخال](/ar/plugins/sdk-entrypoints) | +| مسارات HTTP | `api.registerHttpRoute(...)` | [الداخليات](/ar/plugins/architecture#gateway-http-routes) | +| أوامر CLI فرعية | `api.registerCli(...)` | [نقاط الإدخال](/ar/plugins/sdk-entrypoints) | للاطلاع على API التسجيل الكامل، راجع [نظرة عامة على SDK](/ar/plugins/sdk-overview#registration-api). -إذا كان plugin الخاص بك يسجل أساليب Gateway RPC مخصصة، فاحتفظ بها ضمن -بادئة خاصة بـ plugin. تظل مساحات أسماء الإدارة الأساسية (`config.*`, -`exec.approvals.*`, `wizard.*`, `update.*`) محجوزة وتُحل دائمًا إلى -`operator.admin`، حتى إذا طلب plugin نطاقًا أضيق. +استخدم `api.registerEmbeddedExtensionFactory(...)` عندما يحتاج Plugin إلى +hooks خاصة بالمشغّل المضمّن الأصلية في Pi مثل إعادة كتابة `tool_result` +غير المتزامنة قبل إصدار رسالة نتيجة الأداة النهائية. ويفضَّل استخدام hooks +Plugin العادية في OpenClaw عندما لا يتطلب العمل توقيت امتداد Pi. -دلالات حرس الـ hook التي يجب وضعها في الاعتبار: +إذا كان Plugin الخاص بك يسجّل أساليب RPC مخصّصة لـ Gateway، فاحتفظ بها ضمن +بادئة خاصة بالـ Plugin. تظل مساحات الأسماء الإدارية الأساسية (`config.*`, +`exec.approvals.*`, `wizard.*`, `update.*`) محجوزة ويجري حلّها دائمًا إلى +`operator.admin`، حتى إذا طلب Plugin نطاقًا أضيق. -- `before_tool_call`: ‏`{ block: true }` نهائية وتوقف المعالجات ذات الأولوية الأقل. -- `before_tool_call`: ‏`{ block: false }` تُعامل على أنها بدون قرار. -- `before_tool_call`: ‏`{ requireApproval: true }` توقف تنفيذ الوكيل مؤقتًا وتطلب موافقة المستخدم عبر طبقة exec approval، أو أزرار Telegram، أو تفاعلات Discord، أو الأمر `/approve` على أي قناة. -- `before_install`: ‏`{ block: true }` نهائية وتوقف المعالجات ذات الأولوية الأقل. -- `before_install`: ‏`{ block: false }` تُعامل على أنها بدون قرار. -- `message_sending`: ‏`{ cancel: true }` نهائية وتوقف المعالجات ذات الأولوية الأقل. -- `message_sending`: ‏`{ cancel: false }` تُعامل على أنها بدون قرار. +دلالات حارس hook التي ينبغي أخذها في الاعتبار: -يعالج الأمر `/approve` كلًا من exec approvals وplugin approvals مع fallback -مقيّد: فعندما لا يتم العثور على معرّف exec approval، يعيد OpenClaw محاولة -المعرّف نفسه عبر plugin approvals. ويمكن ضبط تمرير plugin approval -بشكل مستقل عبر `approvals.plugin` في الإعدادات. +- `before_tool_call`: القيمة `{ block: true }` نهائية وتوقف المعالجات ذات الأولوية الأقل. +- `before_tool_call`: القيمة `{ block: false }` تُعامل على أنها بلا قرار. +- `before_tool_call`: القيمة `{ requireApproval: true }` توقف تنفيذ الوكيل مؤقتًا وتطلب موافقة المستخدم عبر طبقة موافقات التنفيذ، أو أزرار Telegram، أو تفاعلات Discord، أو الأمر `/approve` على أي قناة. +- `before_install`: القيمة `{ block: true }` نهائية وتوقف المعالجات ذات الأولوية الأقل. +- `before_install`: القيمة `{ block: false }` تُعامل على أنها بلا قرار. +- `message_sending`: القيمة `{ cancel: true }` نهائية وتوقف المعالجات ذات الأولوية الأقل. +- `message_sending`: القيمة `{ cancel: false }` تُعامل على أنها بلا قرار. -إذا كان من الضروري أن يكتشف منطق approval المخصص حالة fallback المقيّدة نفسها، -ففضّل استخدام `isApprovalNotFoundError` من `openclaw/plugin-sdk/error-runtime` -بدلًا من مطابقة سلاسل انتهاء صلاحية approval يدويًا. +يتعامل الأمر `/approve` مع كلٍّ من موافقات التنفيذ وموافقات Plugin مع بديل +احتياطي مقيّد: عندما لا يتم العثور على معرّف موافقة تنفيذ، يعيد OpenClaw +محاولة استخدام المعرّف نفسه عبر موافقات Plugin. ويمكن تهيئة إعادة توجيه +موافقات Plugin بشكل مستقل عبر `approvals.plugin` في الإعدادات. -راجع [دلالات قرارات hook في نظرة عامة على SDK](/ar/plugins/sdk-overview#hook-decision-semantics) للتفاصيل. +إذا كانت بنية الموافقات المخصّصة تحتاج إلى اكتشاف حالة البديل الاحتياطي +المقيّد نفسها، فافضّل استخدام `isApprovalNotFoundError` من +`openclaw/plugin-sdk/error-runtime` بدلًا من مطابقة سلاسل انتهاء صلاحية +الموافقة يدويًا. + +راجع [دلالات قرارات hook في نظرة عامة على SDK](/ar/plugins/sdk-overview#hook-decision-semantics) لمزيد من التفاصيل. ## تسجيل أدوات الوكيل الأدوات هي دوال typed يمكن لـ LLM استدعاؤها. ويمكن أن تكون مطلوبة (متاحة -دائمًا) أو اختيارية (اشتراك من المستخدم): +دائمًا) أو اختيارية (يختار المستخدم تفعيلها): ```typescript register(api) { @@ -243,13 +250,13 @@ register(api) { } ``` -- يجب ألا تتعارض أسماء الأدوات مع الأدوات الأساسية (يتم تخطي التعارضات) -- استخدم `optional: true` للأدوات ذات التأثيرات الجانبية أو متطلبات الملفات التنفيذية الإضافية -- يمكن للمستخدمين تفعيل جميع أدوات plugin عبر إضافة معرّف plugin إلى `tools.allow` +- يجب ألا تتعارض أسماء الأدوات مع أدوات النواة الأساسية (سيتم تخطي التعارضات) +- استخدم `optional: true` للأدوات ذات الآثار الجانبية أو التي تتطلب ملفات تنفيذية إضافية +- يمكن للمستخدمين تفعيل جميع الأدوات من Plugin عبر إضافة معرّف Plugin إلى `tools.allow` ## اصطلاحات الاستيراد -استورد دائمًا من مسارات فرعية مركّزة `openclaw/plugin-sdk/`: +استورد دائمًا من مسارات `openclaw/plugin-sdk/` المركّزة: ```typescript import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry"; @@ -261,60 +268,60 @@ import { ... } from "openclaw/plugin-sdk"; للاطلاع على المرجع الكامل للمسارات الفرعية، راجع [نظرة عامة على SDK](/ar/plugins/sdk-overview). -داخل plugin الخاص بك، استخدم ملفات barrel محلية (`api.ts`, `runtime-api.ts`) -لعمليات الاستيراد الداخلية — ولا تستورد plugin الخاص بك أبدًا عبر مسار SDK الخاص به. +داخل Plugin الخاص بك، استخدم ملفات barrel المحلية (`api.ts`, `runtime-api.ts`) في +عمليات الاستيراد الداخلية — ولا تستورد Plugin الخاص بك مطلقًا عبر مسار SDK الخاص به. -بالنسبة إلى Provider plugins، احتفظ بالمساعدات الخاصة بالمزود داخل ملفات -barrel الموجودة في جذر الحزمة ما لم تكن نقطة الربط عامة فعلًا. ومن الأمثلة -المضمنة الحالية: +بالنسبة إلى Plugins الموفّر، احتفظ بالمساعدات الخاصة بالموفّر في ملفات +barrel الموجودة في جذر الحزمة ما لم يكن الحد الفاصل عامًا فعلًا. أمثلة +الحزم المضمّنة الحالية: -- Anthropic: مغلفات تدفق Claude ومساعدات `service_tier` / beta -- OpenAI: بُناة المزودات، ومساعدات النماذج الافتراضية، ومزودات الوقت الفعلي -- OpenRouter: باني المزود بالإضافة إلى مساعدات onboarding/config +- Anthropic: أغلفة Claude للبث ومساعدات `service_tier` و beta +- OpenAI: بُنّاة الموفّرين، ومساعدات النماذج الافتراضية، وموفّرو الزمن الحقيقي +- OpenRouter: باني الموفّر بالإضافة إلى مساعدات الإعداد الأولي والتهيئة -إذا كان المساعد مفيدًا فقط داخل حزمة مزود مضمّنة واحدة، فأبقِه ضمن -نقطة الربط الموجودة في جذر تلك الحزمة بدلًا من ترقيته إلى `openclaw/plugin-sdk/*`. +إذا كان المساعد مفيدًا فقط داخل حزمة موفّر مضمّنة واحدة، فأبقِه ضمن هذا +الحد الفاصل في جذر الحزمة بدلًا من ترقيته إلى `openclaw/plugin-sdk/*`. -لا تزال بعض نقاط الربط المساعدة المولدة `openclaw/plugin-sdk/` موجودة -لصيانة plugins المضمّنة والتوافق، مثل -`plugin-sdk/feishu-setup` أو `plugin-sdk/zalo-setup`. تعامل معها على أنها -أسطح محجوزة، وليست النمط الافتراضي لـ plugins الخارجية الجديدة. +لا تزال بعض حدود المساعدات المُولَّدة `openclaw/plugin-sdk/` +موجودة لصيانة Plugins المضمّنة والتوافق، على سبيل المثال +`plugin-sdk/feishu-setup` أو `plugin-sdk/zalo-setup`. تعامل مع هذه الأسطح على +أنها أسطح محجوزة، لا على أنها النمط الافتراضي لـ Plugins الخارجية الجديدة. ## قائمة التحقق قبل الإرسال يحتوي **package.json** على بيانات `openclaw` الوصفية الصحيحة -يوجد manifest **openclaw.plugin.json** وهو صالح +ملف manifest **openclaw.plugin.json** موجود وصالح تستخدم نقطة الإدخال `defineChannelPluginEntry` أو `definePluginEntry` -تستخدم جميع عمليات الاستيراد مسارات مركّزة `plugin-sdk/` -تستخدم عمليات الاستيراد الداخلية وحدات محلية، لا عمليات استيراد ذاتية عبر SDK -تجتاز الاختبارات (`pnpm test -- /my-plugin/`) -يجتاز `pnpm check` (للـ plugins داخل المستودع) +تستخدم جميع عمليات الاستيراد مسارات `plugin-sdk/` المركّزة +تستخدم عمليات الاستيراد الداخلية وحدات محلية، وليس عمليات استيراد ذاتية عبر SDK +تنجح الاختبارات (`pnpm test -- /my-plugin/`) +ينجح `pnpm check` (Plugins داخل المستودع) ## اختبار الإصدار التجريبي -1. راقب وسوم إصدارات GitHub على [openclaw/openclaw](https://github.com/openclaw/openclaw/releases) واشترك عبر `Watch` > `Releases`. تبدو الوسوم التجريبية مثل `v2026.3.N-beta.1`. ويمكنك أيضًا تفعيل الإشعارات للحساب الرسمي لـ OpenClaw على X ‏[@openclaw](https://x.com/openclaw) للإعلانات الخاصة بالإصدارات. -2. اختبر plugin الخاص بك مقابل الوسم التجريبي بمجرد ظهوره. وعادةً ما تكون النافذة قبل الإصدار المستقر بضع ساعات فقط. -3. انشر في سلسلة plugin الخاصة بك في قناة Discord ‏`plugin-forum` بعد الاختبار بإحدى العبارتين `all good` أو ما الذي تعطل. وإذا لم تكن لديك سلسلة بعد، فأنشئ واحدة. -4. إذا تعطل شيء ما، فافتح أو حدّث issue بعنوان `Beta blocker: - ` وطبّق الوسم `beta-blocker`. ضَع رابط issue في سلسلتك. -5. افتح PR إلى `main` بعنوان `fix(): beta blocker - ` واربط issue في كل من PR وسلسلة Discord الخاصة بك. لا يستطيع المساهمون إضافة وسوم إلى PRs، لذا فالعنوان هو الإشارة الخاصة بـ PR للمشرفين وللأتمتة. يتم دمج المشكلات الحرجة التي لها PR؛ أما التي لا تملك واحدًا فقد تُشحن على أي حال. يراقب المشرفون هذه السلاسل أثناء الاختبار التجريبي. -6. الصمت يعني أن كل شيء على ما يرام. وإذا فاتتك النافذة، فمن المرجح أن يصل إصلاحك في الدورة التالية. +1. راقب وسوم إصدارات GitHub في [openclaw/openclaw](https://github.com/openclaw/openclaw/releases) واشترك عبر `Watch` > `Releases`. تبدو وسوم الإصدارات التجريبية مثل `v2026.3.N-beta.1`. يمكنك أيضًا تفعيل الإشعارات لحساب OpenClaw الرسمي على X ‏[@openclaw](https://x.com/openclaw) لإعلانات الإصدارات. +2. اختبر Plugin الخاص بك مع الوسم التجريبي فور ظهوره. تكون المهلة قبل الإصدار المستقر عادة بضع ساعات فقط. +3. انشر في سلسلة Plugin الخاص بك في قناة Discord ‏`plugin-forum` بعد الاختبار بإحدى العبارتين: `all good` أو ما الذي تعطّل. إذا لم تكن لديك سلسلة بعد، فأنشئ واحدة. +4. إذا تعطّل شيء ما، فافتح Issue أو حدّث واحدة بعنوان `Beta blocker: - ` وطبّق التصنيف `beta-blocker`. ضع رابط الـ Issue في سلسلتك. +5. افتح PR إلى `main` بعنوان `fix(): beta blocker - ` واربط الـ Issue في كلٍّ من PR وسلسلة Discord الخاصة بك. لا يمكن للمساهمين وضع تصنيفات على PRs، لذا يُعد العنوان الإشارة في جهة PR للمشرفين والأتمتة. يتم دمج العناصر المانعة مع PR؛ أما العناصر المانعة من دون PR فقد تُشحن على أي حال. يراقب المشرفون هذه السلاسل أثناء اختبار الإصدارات التجريبية. +6. عدم وجود ردود يعني أن كل شيء جيد. إذا فاتتك المهلة، فمن المرجّح أن يصل إصلاحك في الدورة التالية. ## الخطوات التالية - - ابنِ Channel plugin للمراسلة + + أنشئ Plugin لقناة مراسلة - - ابنِ Provider plugin للنماذج + + أنشئ Plugin لموفّر نماذج - + مرجع خريطة الاستيراد وAPI التسجيل - + TTS والبحث وsubagent عبر api.runtime - + أدوات وأنماط الاختبار @@ -324,8 +331,8 @@ barrel الموجودة في جذر الحزمة ما لم تكن نقطة ال ## ذو صلة -- [بنية plugin](/ar/plugins/architecture) — نظرة عميقة على البنية الداخلية +- [معمارية Plugin](/ar/plugins/architecture) — شرح معماري داخلي متعمّق - [نظرة عامة على SDK](/ar/plugins/sdk-overview) — مرجع Plugin SDK - [Manifest](/ar/plugins/manifest) — تنسيق manifest الخاص بالـ plugin -- [Channel Plugins](/ar/plugins/sdk-channel-plugins) — بناء Channel plugins -- [Provider Plugins](/ar/plugins/sdk-provider-plugins) — بناء Provider plugins +- [Plugins القنوات](/ar/plugins/sdk-channel-plugins) — بناء Plugins القنوات +- [Plugins الموفّر](/ar/plugins/sdk-provider-plugins) — بناء Plugins الموفّر diff --git a/docs/ar/plugins/codex-harness.md b/docs/ar/plugins/codex-harness.md index bb7c741ee..49d908c6b 100644 --- a/docs/ar/plugins/codex-harness.md +++ b/docs/ar/plugins/codex-harness.md @@ -1,66 +1,65 @@ --- read_when: - - تريد استخدام حزام app-server المضمّن لـ Codex - - أنت بحاجة إلى مراجع نماذج Codex وأمثلة إعدادات - - تريد تعطيل الرجوع إلى Pi لعمليات النشر التي تستخدم Codex فقط -summary: شغّل أدوار الوكيل المضمّن في OpenClaw عبر حزام app-server المضمّن لـ Codex -title: حزام Codex + - تريد استخدام حزمة تسخير app-server الخاصة بـ Codex + - تحتاج إلى مراجع نماذج Codex وأمثلة على الإعدادات + - تريد تعطيل الرجوع الاحتياطي إلى Pi لعمليات النشر الخاصة بـ Codex فقط +summary: شغّل أدوار الوكيل المضمّن في OpenClaw عبر حزمة تسخير app-server الخاصة بـ Codex +title: حزمة تسخير Codex x-i18n: - generated_at: "2026-04-21T07:22:35Z" + generated_at: "2026-04-22T07:17:56Z" model: gpt-5.4 provider: openai - source_hash: 3f0cdaf68be3b2257de1046103ff04f53f9d3a65ffc15ab7af5ab1f425643d6c + source_hash: d45dbd39a7d8ebb3a39d8dca3a5125c07b7168d1658ca07b85792645fb98613c source_path: plugins/codex-harness.md workflow: 15 --- -# حزام Codex +# حزمة تسخير Codex -يتيح Plugin ‏`codex` المضمّن لـ OpenClaw تشغيل أدوار الوكيل المضمّن عبر -Codex app-server بدلًا من حزام Pi المضمّن. +يتيح Plugin `codex` المضمّن لـ OpenClaw تشغيل أدوار الوكيل المضمّن عبر +خادم تطبيقات Codex بدلًا من حزمة تسخير PI المدمجة. استخدم هذا عندما تريد أن يتولى Codex جلسة الوكيل منخفضة المستوى: اكتشاف -النموذج، واستئناف الخيوط الأصلي، وCompaction الأصلي، وتنفيذ app-server. -يظل OpenClaw مسؤولًا عن قنوات الدردشة، وملفات الجلسات، واختيار النموذج، والأدوات، -والموافقات، وتسليم الوسائط، ونسخة transcript المرئية. +النموذج، والاستئناف الأصلي للخيط، وCompaction الأصلية، والتنفيذ عبر خادم +التطبيقات. يظل OpenClaw مسؤولًا عن قنوات الدردشة، وملفات الجلسات، واختيار +النموذج، والأدوات، والموافقات، وتسليم الوسائط، ونسخة السجل الظاهرة. -يكون الحزام معطّلًا افتراضيًا. ولا يتم اختياره إلا عندما يكون Plugin ‏`codex` -مفعّلًا ويكون النموذج المحلول نموذج `codex/*`، أو عندما تفرض صراحةً +تكون حزمة التسخير معطّلة افتراضيًا. ويتم اختيارها فقط عندما يكون Plugin `codex` +مفعّلًا ويكون النموذج المحلول نموذجًا من نوع `codex/*`، أو عندما تفرض صراحةً `embeddedHarness.runtime: "codex"` أو `OPENCLAW_AGENT_RUNTIME=codex`. -إذا لم تضبط أبدًا `codex/*`، فإن تشغيلات PI وOpenAI وAnthropic وGemini وlocal -وcustom-provider الحالية تحتفظ بسلوكها الحالي. +إذا لم تقم مطلقًا بتهيئة `codex/*`، فستحافظ تشغيلات PI وOpenAI وAnthropic وGemini وlocal +وcustom-provider الحالية على سلوكها الحالي. -## اختر بادئة النموذج الصحيحة +## اختر بادئة النموذج المناسبة -يمتلك OpenClaw مسارات منفصلة للوصول بشكل OpenAI وبشكل Codex: +يحتوي OpenClaw على مسارات منفصلة للوصول على هيئة OpenAI والوصول على هيئة Codex: -| مرجع النموذج | مسار وقت التشغيل | استخدمه عندما | -| ---------------------- | --------------------------------------------- | ------------------------------------------------------------------------- | -| `openai/gpt-5.4` | مزود OpenAI عبر مسار OpenClaw/PI | تريد وصولًا مباشرًا إلى OpenAI Platform API باستخدام `OPENAI_API_KEY`. | -| `openai-codex/gpt-5.4` | مزود OpenAI Codex OAuth عبر PI | تريد ChatGPT/Codex OAuth بدون حزام Codex app-server. | -| `codex/gpt-5.4` | مزود Codex المضمّن مع حزام Codex | تريد تنفيذًا أصليًا عبر Codex app-server لدور الوكيل المضمّن. | +| مرجع النموذج | مسار وقت التشغيل | استخدم هذا عندما | +| --------------------- | --------------------------------------------- | ------------------------------------------------------------------------- | +| `openai/gpt-5.4` | مزود OpenAI عبر بنية OpenClaw/PI | تريد وصولًا مباشرًا إلى OpenAI Platform API باستخدام `OPENAI_API_KEY`. | +| `openai-codex/gpt-5.4` | مزود OpenAI Codex OAuth عبر PI | تريد ChatGPT/Codex OAuth من دون حزمة تسخير خادم تطبيقات Codex. | +| `codex/gpt-5.4` | مزود Codex المضمّن بالإضافة إلى حزمة تسخير Codex | تريد تنفيذًا أصليًا عبر خادم تطبيقات Codex لدور الوكيل المضمّن. | -لا يطالب حزام Codex إلا بمراجع النماذج `codex/*`. أما مراجع `openai/*` -و`openai-codex/*` وAnthropic وGemini وxAI وlocal وcustom provider الحالية -فتحتفظ بمساراتها العادية. +لا تتولى حزمة تسخير Codex إلا مراجع النماذج `codex/*`. أما مراجع `openai/*` +و`openai-codex/*` وAnthropic وGemini وxAI وlocal وcustom provider الحالية فتبقى +على مساراتها العادية. ## المتطلبات -- OpenClaw مع توفر Plugin ‏`codex` المضمّن. -- Codex app-server بالإصدار `0.118.0` أو أحدث. -- توفر مصادقة Codex لعملية app-server. +- OpenClaw مع توفر Plugin `codex` المضمّن. +- خادم تطبيقات Codex بالإصدار `0.118.0` أو أحدث. +- توفر مصادقة Codex لعملية خادم التطبيقات. -يمنع Plugin مصافحات app-server الأقدم أو غير المرقّمة بالإصدار. وهذا يُبقي -OpenClaw على سطح البروتوكول الذي تم اختباره معه. +يحظر Plugin مصافحات خادم التطبيقات الأقدم أو غير ذات الإصدار. وهذا يُبقي +OpenClaw على سطح البروتوكول الذي تم اختباره عليه. -بالنسبة لاختبارات smoke الحية وDocker، تأتي المصادقة عادةً من `OPENAI_API_KEY`، مع -ملفات Codex CLI الاختيارية مثل `~/.codex/auth.json` و -`~/.codex/config.toml`. استخدم مادة المصادقة نفسها التي يستخدمها Codex app-server -المحلي لديك. +في اختبارات التشغيل الحي واختبارات Docker الدخانية، تأتي المصادقة عادةً من +`OPENAI_API_KEY`، بالإضافة إلى ملفات Codex CLI الاختيارية مثل `~/.codex/auth.json` و +`~/.codex/config.toml`. استخدم مواد المصادقة نفسها التي يستخدمها خادم تطبيقات Codex المحلي لديك. ## الحد الأدنى من الإعدادات -استخدم `codex/gpt-5.4`، وفعّل Plugin المضمّن، وافرِض حزام `codex`: +استخدم `codex/gpt-5.4`، وفعّل Plugin المضمّن، وافرِض حزمة تسخير `codex`: ```json5 { @@ -83,7 +82,7 @@ OpenClaw على سطح البروتوكول الذي تم اختباره معه. } ``` -إذا كانت إعداداتك تستخدم `plugins.allow`، فأدرج `codex` هناك أيضًا: +إذا كان إعدادك يستخدم `plugins.allow`، فأدرج `codex` هناك أيضًا: ```json5 { @@ -98,13 +97,13 @@ OpenClaw على سطح البروتوكول الذي تم اختباره معه. } ``` -يؤدي ضبط `agents.defaults.model` أو نموذج وكيل إلى `codex/` أيضًا -إلى التفعيل التلقائي لـ Plugin ‏`codex` المضمّن. ولا يزال إدخال Plugin الصريح -مفيدًا في الإعدادات المشتركة لأنه يجعل نية النشر واضحة. +كما أن تعيين `agents.defaults.model` أو نموذج وكيل إلى `codex/` يؤدي أيضًا +إلى التفعيل التلقائي لـ Plugin `codex` المضمّن. وتظل إضافة Plugin الصريحة مفيدة +في الإعدادات المشتركة لأنها توضّح نية النشر بوضوح. -## أضف Codex بدون استبدال النماذج الأخرى +## أضف Codex من دون استبدال النماذج الأخرى -احتفظ بالقيمة `runtime: "auto"` عندما تريد Codex لنماذج `codex/*` وPI لكل +أبقِ `runtime: "auto"` عندما تريد Codex لنماذج `codex/*` وPI لكل شيء آخر: ```json5 @@ -139,15 +138,15 @@ OpenClaw على سطح البروتوكول الذي تم اختباره معه. مع هذا الشكل: -- يستخدم `/model codex` أو `/model codex/gpt-5.4` حزام Codex app-server. +- يستخدم `/model codex` أو `/model codex/gpt-5.4` حزمة تسخير خادم تطبيقات Codex. - يستخدم `/model gpt` أو `/model openai/gpt-5.4` مسار مزود OpenAI. - يستخدم `/model opus` مسار مزود Anthropic. -- إذا تم اختيار نموذج غير Codex، يظل PI حزام التوافق. +- إذا تم اختيار نموذج غير Codex، يظل PI هو حزمة التسخير التوافقية. -## عمليات النشر التي تستخدم Codex فقط +## عمليات النشر الخاصة بـ Codex فقط -عطّل الرجوع إلى Pi عندما تحتاج إلى إثبات أن كل دور وكيل مضمّن يستخدم -حزام Codex: +عطّل الرجوع الاحتياطي إلى PI عندما تحتاج إلى إثبات أن كل دور للوكيل المضمّن يستخدم +حزمة تسخير Codex: ```json5 { @@ -171,14 +170,14 @@ OPENCLAW_AGENT_HARNESS_FALLBACK=none \ openclaw gateway run ``` -مع تعطيل الرجوع، يفشل OpenClaw مبكرًا إذا كان Plugin ‏Codex معطّلًا، -أو لم يكن النموذج المطلوب مرجع `codex/*`، أو كان app-server قديمًا جدًا، أو -تعذر بدء app-server. +عند تعطيل الرجوع الاحتياطي، يفشل OpenClaw مبكرًا إذا كان Plugin Codex معطّلًا، +أو إذا لم يكن النموذج المطلوب مرجعًا من نوع `codex/*`، أو إذا كان خادم التطبيقات قديمًا جدًا، +أو إذا تعذر بدء خادم التطبيقات. ## Codex لكل وكيل -يمكنك جعل وكيل واحد يستخدم Codex فقط بينما يحتفظ الوكيل الافتراضي بالاختيار -التلقائي العادي: +يمكنك جعل وكيل واحد يعمل بـ Codex فقط بينما يحتفظ الوكيل الافتراضي +بالاختيار التلقائي العادي: ```json5 { @@ -210,19 +209,19 @@ openclaw gateway run ``` استخدم أوامر الجلسة العادية للتبديل بين الوكلاء والنماذج. ينشئ `/new` جلسة -OpenClaw جديدة وينشئ حزام Codex أو يستأنف خيط app-server الجانبي حسب -الحاجة. ويمسح `/reset` ربط جلسة OpenClaw لذلك الخيط. +OpenClaw جديدة، وتقوم حزمة تسخير Codex بإنشاء خيط خادم التطبيقات الجانبي أو +استئنافه حسب الحاجة. يقوم `/reset` بمسح ربط جلسة OpenClaw لذلك الخيط. ## اكتشاف النموذج -افتراضيًا، يطلب Plugin ‏Codex من app-server النماذج المتاحة. وإذا -فشل الاكتشاف أو انتهت مهلته، فإنه يستخدم catalog الاحتياطي المضمّن: +افتراضيًا، يطلب Plugin Codex من خادم التطبيقات النماذج المتاحة. إذا فشل +الاكتشاف أو انتهت مهلته، فإنه يستخدم فهرس الرجوع الاحتياطي المضمّن: - `codex/gpt-5.4` - `codex/gpt-5.4-mini` - `codex/gpt-5.2` -يمكنك ضبط الاكتشاف تحت `plugins.entries.codex.config.discovery`: +يمكنك ضبط الاكتشاف ضمن `plugins.entries.codex.config.discovery`: ```json5 { @@ -242,8 +241,8 @@ OpenClaw جديدة وينشئ حزام Codex أو يستأنف خيط app-serve } ``` -عطّل الاكتشاف عندما تريد أن يتجنب بدء التشغيل فحص Codex ويلتزم بـ -catalog الاحتياطي: +عطّل الاكتشاف عندما تريد أن يتجنب بدء التشغيل فحص Codex وأن يلتزم +بفهرس الرجوع الاحتياطي: ```json5 { @@ -262,16 +261,16 @@ catalog الاحتياطي: } ``` -## اتصال app-server والسياسة +## اتصال خادم التطبيقات والسياسة -افتراضيًا، يبدأ Plugin ‏Codex محليًا باستخدام: +افتراضيًا، يبدأ Plugin Codex محليًا باستخدام: ```bash codex app-server --listen stdio:// ``` -افتراضيًا، يطلب OpenClaw من Codex طلب الموافقات الأصلية. ويمكنك ضبط هذه -السياسة أكثر، مثلًا عبر تشديدها وتوجيه المراجعات عبر guardian: +افتراضيًا، يطلب OpenClaw من Codex طلب موافقات أصلية. ويمكنك ضبط هذه +السياسة بشكل أكبر، مثل تشديدها وتوجيه المراجعات عبر guardian: ```json5 { @@ -293,7 +292,7 @@ codex app-server --listen stdio:// } ``` -بالنسبة إلى app-server قيد التشغيل بالفعل، استخدم نقل WebSocket: +بالنسبة إلى خادم تطبيقات قيد التشغيل بالفعل، استخدم نقل WebSocket: ```json5 { @@ -317,22 +316,22 @@ codex app-server --listen stdio:// حقول `appServer` المدعومة: -| الحقل | الافتراضي | المعنى | -| ------------------- | ---------------------------------------- | ------------------------------------------------------------------------ | -| `transport` | `"stdio"` | يقوم `"stdio"` ببدء Codex؛ ويتصل `"websocket"` إلى `url`. | -| `command` | `"codex"` | الملف التنفيذي لنقل stdio. | -| `args` | `["app-server", "--listen", "stdio://"]` | الوسائط لنقل stdio. | -| `url` | غير مضبوط | عنوان WebSocket لـ app-server. | -| `authToken` | غير مضبوط | Bearer token لنقل WebSocket. | -| `headers` | `{}` | ترويسات WebSocket إضافية. | -| `requestTimeoutMs` | `60000` | المهلة لاستدعاءات مستوى التحكم في app-server. | -| `approvalPolicy` | `"on-request"` | سياسة موافقة Codex الأصلية المرسلة عند بدء/استئناف/دور الخيط. | -| `sandbox` | `"workspace-write"` | وضع sandbox الأصلي لـ Codex المرسل عند بدء/استئناف الخيط. | -| `approvalsReviewer` | `"user"` | استخدم `"guardian_subagent"` لجعل Codex guardian يراجع الموافقات الأصلية. | -| `serviceTier` | غير مضبوط | طبقة خدمة Codex اختيارية، مثل `"priority"`. | +| الحقل | الافتراضي | المعنى | +| ------------------- | ----------------------------------------- | ------------------------------------------------------------------------- | +| `transport` | `"stdio"` | تؤدي `"stdio"` إلى تشغيل Codex؛ وتؤدي `"websocket"` إلى الاتصال بـ `url`. | +| `command` | `"codex"` | الملف التنفيذي لنقل stdio. | +| `args` | `["app-server", "--listen", "stdio://"]` | الوسيطات الخاصة بنقل stdio. | +| `url` | غير معيّن | عنوان URL لخادم تطبيقات WebSocket. | +| `authToken` | غير معيّن | Bearer token لنقل WebSocket. | +| `headers` | `{}` | ترويسات WebSocket إضافية. | +| `requestTimeoutMs` | `60000` | المهلة الزمنية لاستدعاءات مستوى التحكم الخاصة بخادم التطبيقات. | +| `approvalPolicy` | `"on-request"` | سياسة موافقات Codex الأصلية المُرسلة إلى بدء/استئناف/دور الخيط. | +| `sandbox` | `"workspace-write"` | وضع sandbox الأصلي في Codex المُرسل إلى بدء/استئناف الخيط. | +| `approvalsReviewer` | `"user"` | استخدم `"guardian_subagent"` للسماح لـ guardian في Codex بمراجعة الموافقات الأصلية. | +| `serviceTier` | غير معيّن | طبقة خدمة Codex اختيارية، مثل `"priority"`. | -لا تزال متغيرات البيئة الأقدم تعمل كبدائل لاختبارات local عندما -يكون حقل الإعداد المطابق غير مضبوط: +لا تزال متغيرات البيئة الأقدم تعمل كخيارات رجوع احتياطي للاختبارات المحلية عندما +يكون حقل الإعداد المطابق غير معيّن: - `OPENCLAW_CODEX_APP_SERVER_BIN` - `OPENCLAW_CODEX_APP_SERVER_ARGS` @@ -340,7 +339,7 @@ codex app-server --listen stdio:// - `OPENCLAW_CODEX_APP_SERVER_SANDBOX` - `OPENCLAW_CODEX_APP_SERVER_GUARDIAN=1` -تُفضَّل الإعدادات من أجل عمليات نشر قابلة للتكرار. +تُفضَّل الإعدادات لعمليات النشر القابلة لإعادة الإنتاج. ## وصفات شائعة @@ -358,7 +357,7 @@ Codex محلي مع نقل stdio الافتراضي: } ``` -التحقق من الحزام الذي يستخدم Codex فقط، مع تعطيل الرجوع إلى Pi: +التحقق من حزمة تسخير Codex فقط، مع تعطيل الرجوع الاحتياطي إلى PI: ```json5 { @@ -375,7 +374,7 @@ Codex محلي مع نقل stdio الافتراضي: } ``` -موافقات Codex يراجعها guardian: +موافقات Codex التي يراجعها guardian: ```json5 { @@ -396,7 +395,7 @@ Codex محلي مع نقل stdio الافتراضي: } ``` -app-server بعيد مع ترويسات صريحة: +خادم تطبيقات بعيد مع ترويسات صريحة: ```json5 { @@ -419,80 +418,84 @@ app-server بعيد مع ترويسات صريحة: } ``` -يبقى تبديل النماذج تحت تحكم OpenClaw. عندما تكون جلسة OpenClaw مرفقة -بخيط Codex موجود، يرسل الدور التالي النموذج المحدد حاليًا -`codex/*`، والمزوّد، وسياسة الموافقة، وsandbox، وservice tier إلى -app-server مرة أخرى. يؤدي التبديل من `codex/gpt-5.4` إلى `codex/gpt-5.2` إلى -الاحتفاظ بربط الخيط لكنه يطلب من Codex المتابعة باستخدام النموذج المحدد حديثًا. +يبقى تبديل النموذج تحت تحكم OpenClaw. عندما تكون جلسة OpenClaw مرفقة +بخيط Codex موجود، يرسل الدور التالي النموذج المحدد حاليًا من نوع +`codex/*`، والمزود، وسياسة الموافقة، وsandbox، وطبقة الخدمة إلى +خادم التطبيقات مرة أخرى. يؤدي التبديل من `codex/gpt-5.4` إلى `codex/gpt-5.2` +إلى الإبقاء على ربط الخيط، لكنه يطلب من Codex المتابعة بالنموذج المحدد حديثًا. ## أمر Codex -يسجل Plugin المضمّن الأمر `/codex` كأمر slash مخوّل. وهو -عام ويعمل على أي قناة تدعم أوامر النص في OpenClaw. +يسجل Plugin المضمّن `/codex` بوصفه أمر slash مصرحًا به. وهو +عام ويعمل على أي قناة تدعم أوامر OpenClaw النصية. الصيغ الشائعة: -- يعرض `/codex status` الاتصال الحي بـ app-server، والنماذج، والحساب، وحدود المعدل، وخوادم MCP، وSkills. -- يسرد `/codex models` نماذج Codex app-server الحية. -- يسرد `/codex threads [filter]` أحدث خيوط Codex. +- يعرض `/codex status` حالة الاتصال الحي بخادم التطبيقات، والنماذج، والحساب، وحدود المعدل، وخوادم MCP، وSkills. +- يسرد `/codex models` نماذج خادم تطبيقات Codex الحية. +- يسرد `/codex threads [filter]` خيوط Codex الحديثة. - يربط `/codex resume ` جلسة OpenClaw الحالية بخيط Codex موجود. -- يطلب `/codex compact` من Codex app-server تنفيذ Compaction للخيط المرفق. -- يبدأ `/codex review` مراجعة Codex الأصلية للخيط المرفق. -- يعرض `/codex account` حالة الحساب وحد المعدل. -- يسرد `/codex mcp` حالة خادم MCP في Codex app-server. -- يسرد `/codex skills` Skills في Codex app-server. +- يطلب `/codex compact` من خادم تطبيقات Codex إجراء Compaction للخيط المرفق. +- يبدأ `/codex review` المراجعة الأصلية في Codex للخيط المرفق. +- يعرض `/codex account` حالة الحساب وحدود المعدل. +- يسرد `/codex mcp` حالة خادم MCP في خادم تطبيقات Codex. +- يسرد `/codex skills` Skills في خادم تطبيقات Codex. -يكتب `/codex resume` ملف الربط الجانبي نفسه الذي يستخدمه الحزام في -الأدوار العادية. وفي الرسالة التالية، يستأنف OpenClaw خيط Codex ذلك، ويمرّر -نموذج OpenClaw الحالي المحدد `codex/*` إلى app-server، ويُبقي -السجل الموسّع مفعّلًا. +يكتب `/codex resume` ملف ربط sidecar نفسه الذي تستخدمه حزمة التسخير في +الأدوار العادية. في الرسالة التالية، يستأنف OpenClaw خيط Codex ذلك، ويمرر +نموذج OpenClaw `codex/*` المحدد حاليًا إلى خادم التطبيقات، ويحافظ على +تفعيل السجل الموسّع. -يتطلب سطح الأوامر Codex app-server بالإصدار `0.118.0` أو أحدث. ويتم -الإبلاغ عن طرق التحكم الفردية على أنها `unsupported by this Codex app-server` إذا -لم يكشف app-server مستقبلي أو مخصص عن طريقة JSON-RPC تلك. +يتطلب سطح الأوامر خادم تطبيقات Codex بالإصدار `0.118.0` أو أحدث. ويتم +الإبلاغ عن أساليب التحكم الفردية على أنها `unsupported by this Codex app-server` إذا كان +خادم تطبيقات مستقبلي أو مخصص لا يكشف أسلوب JSON-RPC هذا. -## الأدوات، والوسائط، وCompaction +## الأدوات والوسائط وCompaction -يغيّر حزام Codex منفّذ الوكيل المضمّن منخفض المستوى فقط. +تغيّر حزمة تسخير Codex منفّذ الوكيل المضمّن منخفض المستوى فقط. -يظل OpenClaw يبني قائمة الأدوات ويتلقى نتائج الأدوات الديناميكية من -الحزام. ويستمر النص، والصور، والفيديو، والموسيقى، وTTS، والموافقات، ومخرجات -أدوات المراسلة عبر مسار التسليم العادي في OpenClaw. +يواصل OpenClaw إنشاء قائمة الأدوات واستقبال نتائج الأدوات الديناميكية من +حزمة التسخير. وتستمر النصوص والصور والفيديو والموسيقى وTTS والموافقات +ومخرجات أدوات المراسلة عبر مسار التسليم العادي في OpenClaw. -عندما يستخدم النموذج المحدد حزام Codex، يتم تفويض Compaction الخيط -الأصلي إلى Codex app-server. يحتفظ OpenClaw بنسخة transcript -لأجل سجل القناة، والبحث، و`/new`، و`/reset`، والتبديل المستقبلي للنموذج أو الحزام. وتتضمن -النسخة مطالبة المستخدم، ونص المساعد النهائي، وسجلات reasoning أو plan -الخفيفة الخاصة بـ Codex عندما يصدرها app-server. +عندما يستخدم النموذج المحدد حزمة تسخير Codex، يتم تفويض Compaction +الأصلية للخيط إلى خادم تطبيقات Codex. يحتفظ OpenClaw بنسخة معكوسة من +السجل من أجل سجل القناة، والبحث، و`/new`، و`/reset`، وعمليات التبديل +المستقبلية للنموذج أو حزمة التسخير. وتتضمن النسخة المعكوسة مطالبة المستخدم، +ونص المساعد النهائي، وسجلات reasoning أو الخطة الخفيفة الخاصة بـ Codex عندما +يصدرها خادم التطبيقات. -لا يتطلب إنشاء الوسائط PI. وتستمر الصور، والفيديو، والموسيقى، وPDF، وTTS، وفهم -الوسائط في استخدام إعدادات المزود/النموذج المطابقة مثل +لا يتطلب إنشاء الوسائط PI. وتستمر عملية إنشاء الصور والفيديو والموسيقى وPDF +وTTS وفهم الوسائط في استخدام إعدادات المزود/النموذج المطابقة مثل `agents.defaults.imageGenerationModel` و`videoGenerationModel` و`pdfModel` و `messages.tts`. ## استكشاف الأخطاء وإصلاحها **لا يظهر Codex في `/model`:** فعّل `plugins.entries.codex.enabled`، -واضبط مرجع نموذج `codex/*`، أو تحقّق مما إذا كان `plugins.allow` يستبعد `codex`. +واضبط مرجع نموذج `codex/*`، أو تحقق مما إذا كان `plugins.allow` يستبعد `codex`. -**يعود OpenClaw إلى PI:** اضبط `embeddedHarness.fallback: "none"` أو -`OPENCLAW_AGENT_HARNESS_FALLBACK=none` أثناء الاختبار. +**يستخدم OpenClaw PI بدلًا من Codex:** إذا لم تطالب أي حزمة تسخير Codex +بهذا التشغيل، فقد يستخدم OpenClaw PI كخلفية توافقية. اضبط +`embeddedHarness.runtime: "codex"` لفرض اختيار Codex أثناء الاختبار، أو +`embeddedHarness.fallback: "none"` للفشل عندما لا تتطابق أي حزمة تسخير Plugin. بمجرد +اختيار خادم تطبيقات Codex، تظهر أعطاله مباشرةً من دون إعدادات رجوع احتياطي إضافية. -**يتم رفض app-server:** حدّث Codex بحيث تُبلغ مصافحة app-server +**يتم رفض خادم التطبيقات:** حدّث Codex بحيث تُبلغ مصافحة خادم التطبيقات عن الإصدار `0.118.0` أو أحدث. **اكتشاف النموذج بطيء:** خفّض `plugins.entries.codex.config.discovery.timeoutMs` أو عطّل الاكتشاف. -**يفشل نقل WebSocket فورًا:** تحقّق من `appServer.url` و -`authToken` ومن أن app-server البعيد يتحدث بإصدار بروتوكول Codex app-server نفسه. +**يفشل نقل WebSocket فورًا:** تحقق من `appServer.url` و`authToken`، +ومن أن خادم التطبيقات البعيد يتحدث بإصدار بروتوكول خادم تطبيقات Codex نفسه. -**يستخدم نموذج غير Codex حزام PI:** هذا متوقع. لا يطالب حزام Codex إلا +**يستخدم نموذج غير Codex PI:** هذا متوقع. لا تطالب حزمة تسخير Codex إلا بمراجع النماذج `codex/*`. -## ذات صلة +## ذو صلة -- [Plugins حزام الوكيل](/ar/plugins/sdk-agent-harness) +- [Plugins حزمة تسخير الوكيل](/ar/plugins/sdk-agent-harness) - [مزودو النماذج](/ar/concepts/model-providers) - [مرجع الإعدادات](/ar/gateway/configuration-reference) - [الاختبار](/ar/help/testing#live-codex-app-server-harness-smoke) diff --git a/docs/ar/plugins/manifest.md b/docs/ar/plugins/manifest.md index 3d4c52243..484db7965 100644 --- a/docs/ar/plugins/manifest.md +++ b/docs/ar/plugins/manifest.md @@ -1,14 +1,14 @@ --- read_when: - أنت تبني Plugin لـ OpenClaw - - تحتاج إلى شحن مخطط تكوين للـ plugin أو تصحيح أخطاء التحقق من صحة plugin -summary: بيان Plugin ومتطلبات مخطط JSON ‏(تحقق صارم من التكوين) + - تحتاج إلى شحن مخطط إعدادات Plugin أو تصحيح أخطاء التحقق من صحة Plugin +summary: متطلبات بيان Plugin ومخطط JSON ‏(تحقق صارم من صحة الإعدادات) title: بيان Plugin x-i18n: - generated_at: "2026-04-22T04:24:55Z" + generated_at: "2026-04-22T07:17:52Z" model: gpt-5.4 provider: openai - source_hash: 52a52f7e2c78bbef2cc51ade6eb12b6edc950237bdfc478f6e82248374c687bf + source_hash: 085c1baccb96b8e6bd4033ad11bdd5f79bdb0daec470e977fce723c3ae38cc99 source_path: plugins/manifest.md workflow: 15 --- @@ -17,63 +17,62 @@ x-i18n: هذه الصفحة مخصصة **لبيان Plugin الأصلي في OpenClaw** فقط. -للتخطيطات المتوافقة الخاصة بالحزم، راجع [حزم Plugin](/ar/plugins/bundles). +للتعرّف على تخطيطات الحِزم المتوافقة، راجع [حِزم Plugin](/ar/plugins/bundles). -تستخدم تنسيقات الحزم المتوافقة ملفات بيان مختلفة: +تستخدم تنسيقات الحِزم المتوافقة ملفات بيان مختلفة: - حزمة Codex: `.codex-plugin/plugin.json` -- حزمة Claude: `.claude-plugin/plugin.json` أو تخطيط مكونات Claude - الافتراضي من دون بيان +- حزمة Claude: `.claude-plugin/plugin.json` أو تخطيط مكوّن Claude الافتراضي + بدون بيان - حزمة Cursor: `.cursor-plugin/plugin.json` -يقوم OpenClaw أيضًا باكتشاف تخطيطات الحزم تلك تلقائيًا، لكنها لا تُتحقق +يكتشف OpenClaw أيضًا تخطيطات الحِزم تلك تلقائيًا، لكنها لا تُتحقق مقابل مخطط `openclaw.plugin.json` الموضح هنا. -بالنسبة إلى الحزم المتوافقة، يقرأ OpenClaw حاليًا بيانات الحزمة الوصفية بالإضافة إلى -جذور Skill المعلنة، وجذور أوامر Claude، والقيم الافتراضية لملف `settings.json` في حزمة Claude، -والقيم الافتراضية لـ Claude bundle LSP، وحزم hooks المدعومة عندما يطابق التخطيط +بالنسبة إلى الحِزم المتوافقة، يقرأ OpenClaw حاليًا بيانات تعريف الحزمة بالإضافة إلى +جذور Skills المعلنة، وجذور أوامر Claude، وإعدادات `settings.json` الافتراضية في حزمة Claude، +وإعدادات LSP الافتراضية في حزمة Claude، وحِزم الخطافات المدعومة عندما يتطابق التخطيط مع توقعات وقت تشغيل OpenClaw. -يجب على كل Plugin أصلي في OpenClaw **أن يوفّر** ملف `openclaw.plugin.json` في -**جذر Plugin**. يستخدم OpenClaw هذا البيان للتحقق من التكوين +يجب على كل Plugin أصلي في OpenClaw **أن يتضمّن** ملف `openclaw.plugin.json` في +**جذر Plugin**. يستخدم OpenClaw هذا البيان للتحقق من صحة الإعدادات **من دون تنفيذ كود Plugin**. وتُعامل البيانات المفقودة أو غير الصالحة على أنها -أخطاء Plugin وتمنع التحقق من صحة التكوين. +أخطاء في Plugin وتمنع التحقق من صحة الإعدادات. راجع دليل نظام Plugin الكامل: [Plugins](/ar/tools/plugin). -وللاطلاع على نموذج القدرات الأصلي وإرشادات التوافق الخارجي الحالية: -[نموذج القدرات](/ar/plugins/architecture#public-capability-model). +وللاطلاع على نموذج الإمكانات الأصلي وإرشادات التوافق الخارجي الحالية: +[نموذج الإمكانات](/ar/plugins/architecture#public-capability-model). ## ما الذي يفعله هذا الملف -يمثل `openclaw.plugin.json` البيانات الوصفية التي يقرؤها OpenClaw قبل تحميل +يمثل `openclaw.plugin.json` بيانات التعريف التي يقرأها OpenClaw قبل أن يحمّل كود Plugin الخاص بك. استخدمه من أجل: - هوية Plugin -- التحقق من صحة التكوين -- بيانات المصادقة والإعداد الأولي الوصفية التي يجب أن تكون متاحة من دون تشغيل - وقت تشغيل Plugin -- تلميحات تفعيل منخفضة التكلفة يمكن لأسطح مستوى التحكم فحصها قبل تحميل وقت التشغيل -- واصفات إعداد منخفضة التكلفة يمكن لأسطح الإعداد/الإعداد الأولي فحصها قبل +- التحقق من صحة الإعدادات +- بيانات تعريف المصادقة والإعداد الأوّلي التي يجب أن تكون متاحة من دون تشغيل وقت تشغيل Plugin +- تلميحات تفعيل منخفضة التكلفة يمكن لواجهات مستوى التحكّم فحصها قبل تحميل وقت التشغيل +- واصفات إعداد منخفضة التكلفة يمكن لواجهات الإعداد/الإعداد الأوّلي فحصها قبل تحميل وقت التشغيل -- بيانات الأسماء المستعارة والتفعيل التلقائي التي يجب حلها قبل تحميل وقت تشغيل Plugin -- بيانات ملكية مختصرة لعائلات النماذج يجب أن تفعّل +- بيانات تعريف الأسماء المستعارة والتفعيل التلقائي التي يجب حلّها قبل تحميل وقت تشغيل Plugin +- بيانات تعريف مختصرة لملكية عائلات النماذج يجب أن تفعّل Plugin تلقائيًا قبل تحميل وقت التشغيل -- لقطات ثابتة لملكية القدرات تُستخدم لأسلاك التوافق المرفقة وتغطية العقود -- بيانات وصفية منخفضة التكلفة لمشغل QA يمكن للمضيف المشترك `openclaw qa` فحصها +- لقطات ثابتة لملكية الإمكانات تُستخدم في توصيل التوافق المضمّن وتغطية العقود +- بيانات تعريف منخفضة التكلفة لمشغّل QA يمكن لمضيف `openclaw qa` المشترك فحصها قبل تحميل وقت تشغيل Plugin -- بيانات وصفية خاصة بتكوين القناة يجب دمجها في الكتالوج وأسطح التحقق +- بيانات تعريف إعدادات خاصة بالقناة يجب دمجها في أسطح الفهرسة والتحقق من دون تحميل وقت التشغيل -- تلميحات UI الخاصة بالتكوين +- تلميحات واجهة مستخدم للإعدادات لا تستخدمه من أجل: - تسجيل سلوك وقت التشغيل -- إعلان نقاط دخول الكود -- بيانات تثبيت npm الوصفية +- التصريح بنقاط إدخال الكود +- بيانات تعريف تثبيت npm -فهذه تخص كود Plugin و`package.json`. +فهذه تنتمي إلى كود Plugin و`package.json`. ## مثال أدنى @@ -88,13 +87,13 @@ x-i18n: } ``` -## مثال غني +## مثال موسّع ```json { "id": "openrouter", "name": "OpenRouter", - "description": "Plugin مزود OpenRouter", + "description": "OpenRouter provider plugin", "version": "1.0.0", "providers": ["openrouter"], "modelSupport": { @@ -122,19 +121,19 @@ x-i18n: "provider": "openrouter", "method": "api-key", "choiceId": "openrouter-api-key", - "choiceLabel": "مفتاح OpenRouter API", + "choiceLabel": "OpenRouter API key", "groupId": "openrouter", "groupLabel": "OpenRouter", "optionKey": "openrouterApiKey", "cliFlag": "--openrouter-api-key", "cliOption": "--openrouter-api-key ", - "cliDescription": "مفتاح OpenRouter API", + "cliDescription": "OpenRouter API key", "onboardingScopes": ["text-inference"] } ], "uiHints": { "apiKey": { - "label": "مفتاح API", + "label": "API key", "placeholder": "sk-or-v1-...", "sensitive": true } @@ -151,68 +150,69 @@ x-i18n: } ``` -## مرجع الحقول العليا +## مرجع الحقول ذات المستوى الأعلى -| الحقل | مطلوب | النوع | ما الذي يعنيه | -| ----------------------------------- | -------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `id` | نعم | `string` | معرّف Plugin القياسي. هذا هو المعرّف المستخدم في `plugins.entries.`. | -| `configSchema` | نعم | `object` | مخطط JSON مضمن لتكوين هذا Plugin. | -| `enabledByDefault` | لا | `true` | يحدد أن Plugin المرفق مفعّل افتراضيًا. احذفه، أو اضبط أي قيمة غير `true`، لترك Plugin معطلًا افتراضيًا. | -| `legacyPluginIds` | لا | `string[]` | معرّفات قديمة تتم تسويتها إلى معرّف Plugin القياسي هذا. | -| `autoEnableWhenConfiguredProviders` | لا | `string[]` | معرّفات المزوّدين التي يجب أن تفعّل هذا Plugin تلقائيًا عندما تشير إليها المصادقة أو التكوين أو مراجع النماذج. | -| `kind` | لا | `"memory"` \| `"context-engine"` | يعلن نوع Plugin حصريًا يُستخدم بواسطة `plugins.slots.*`. | -| `channels` | لا | `string[]` | معرّفات القنوات التي يملكها هذا Plugin. تُستخدم للاكتشاف والتحقق من صحة التكوين. | -| `providers` | لا | `string[]` | معرّفات المزوّدين التي يملكها هذا Plugin. | -| `modelSupport` | لا | `object` | بيانات وصفية مختصرة تملكها البيان لعائلات النماذج وتُستخدم لتحميل Plugin تلقائيًا قبل وقت التشغيل. | -| `providerEndpoints` | لا | `object[]` | بيانات وصفية يملكها البيان حول مضيفي نقاط النهاية/`baseUrl` لمسارات المزوّدين التي يجب أن يصنفها core قبل تحميل وقت تشغيل المزوّد. | -| `cliBackends` | لا | `string[]` | معرّفات الواجهة الخلفية للاستدلال في CLI التي يملكها هذا Plugin. تُستخدم للتفعيل التلقائي عند بدء التشغيل من مراجع التكوين الصريحة. | -| `syntheticAuthRefs` | لا | `string[]` | مراجع المزوّد أو الواجهة الخلفية لـ CLI التي يجب فحص hook المصادقة الاصطناعية المملوك للـ Plugin لها أثناء اكتشاف النماذج البارد قبل تحميل وقت التشغيل. | -| `nonSecretAuthMarkers` | لا | `string[]` | قيم مفاتيح API النائبة المملوكة للـ plugin المرفق والتي تمثل حالة بيانات اعتماد محلية أو OAuth أو محيطة غير سرية. | -| `commandAliases` | لا | `object[]` | أسماء الأوامر التي يملكها هذا Plugin والتي يجب أن تنتج تشخيصات واعية بالـ Plugin للتكوين وCLI قبل تحميل وقت التشغيل. | -| `providerAuthEnvVars` | لا | `Record` | بيانات وصفية منخفضة التكلفة لمتغيرات بيئة مصادقة المزوّد يمكن لـ OpenClaw فحصها من دون تحميل كود Plugin. | -| `providerAuthAliases` | لا | `Record` | معرّفات المزوّدين التي يجب أن تعيد استخدام معرّف مزوّد آخر للبحث عن المصادقة، على سبيل المثال مزوّد برمجة يشارك مفتاح API الأساسي وملفات تعريف المصادقة مع المزوّد الأساسي. | -| `channelEnvVars` | لا | `Record` | بيانات وصفية منخفضة التكلفة لمتغيرات بيئة القناة يمكن لـ OpenClaw فحصها من دون تحميل كود Plugin. استخدم هذا لأسطح إعداد القنوات أو المصادقة المعتمدة على البيئة التي يجب أن تراها أدوات البدء/التكوين العامة. | -| `providerAuthChoices` | لا | `object[]` | بيانات وصفية منخفضة التكلفة لاختيارات المصادقة لمنتقيات الإعداد الأولي، وحل المزوّد المفضل، وربط علامات CLI البسيط. | -| `activation` | لا | `object` | تلميحات تفعيل منخفضة التكلفة للتحميل الذي يتم تشغيله بواسطة المزوّد أو الأمر أو القناة أو المسار أو القدرات. بيانات وصفية فقط؛ ولا يزال وقت تشغيل Plugin يملك السلوك الفعلي. | -| `setup` | لا | `object` | واصفات إعداد/إعداد أولي منخفضة التكلفة يمكن لأسطح الاكتشاف والإعداد فحصها من دون تحميل وقت تشغيل Plugin. | -| `qaRunners` | لا | `object[]` | واصفات QA runner منخفضة التكلفة يستخدمها المضيف المشترك `openclaw qa` قبل تحميل وقت تشغيل Plugin. | -| `contracts` | لا | `object` | لقطة قدرات مرفقة ثابتة للتعرّف على الكلام، والنسخ الفوري، والصوت الفوري، وفهم الوسائط، وتوليد الصور، وتوليد الموسيقى، وتوليد الفيديو، وجلب الويب، والبحث على الويب، وملكية الأدوات. | -| `channelConfigs` | لا | `Record` | بيانات وصفية لتكوين القناة يملكها البيان وتُدمج في أسطح الاكتشاف والتحقق قبل تحميل وقت التشغيل. | -| `skills` | لا | `string[]` | أدلة Skills المطلوب تحميلها، نسبةً إلى جذر Plugin. | -| `name` | لا | `string` | اسم Plugin قابل للقراءة البشرية. | -| `description` | لا | `string` | ملخص قصير يظهر في أسطح Plugin. | -| `version` | لا | `string` | إصدار Plugin لأغراض معلوماتية. | -| `uiHints` | لا | `Record` | تسميات UI وعناصر نائبة وتلميحات الحساسية لحقول التكوين. | +| الحقل | مطلوب | النوع | ما الذي يعنيه | +| ------------------------------------ | ------ | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | نعم | `string` | معرّف Plugin القياسي. هذا هو المعرّف المستخدم في `plugins.entries.`. | +| `configSchema` | نعم | `object` | مخطط JSON مضمّن لإعدادات Plugin هذا. | +| `enabledByDefault` | لا | `true` | يحدد أن Plugin المضمّن مفعّل افتراضيًا. احذفه، أو اضبطه على أي قيمة ليست `true`، لترك Plugin معطّلًا افتراضيًا. | +| `legacyPluginIds` | لا | `string[]` | معرّفات قديمة تُطبَّع إلى معرّف Plugin القياسي هذا. | +| `autoEnableWhenConfiguredProviders` | لا | `string[]` | معرّفات المزوّدين التي يجب أن تفعّل Plugin هذا تلقائيًا عندما تشير إليها المصادقة أو الإعدادات أو مراجع النماذج. | +| `kind` | لا | `"memory"` \| `"context-engine"` | يصرّح بنوع Plugin حصري يُستخدم بواسطة `plugins.slots.*`. | +| `channels` | لا | `string[]` | معرّفات القنوات التي يملكها Plugin هذا. تُستخدم للاكتشاف والتحقق من صحة الإعدادات. | +| `providers` | لا | `string[]` | معرّفات المزوّدين التي يملكها Plugin هذا. | +| `modelSupport` | لا | `object` | بيانات تعريف مختصرة لعائلات النماذج مملوكة للبيان وتُستخدم لتحميل Plugin تلقائيًا قبل وقت التشغيل. | +| `providerEndpoints` | لا | `object[]` | بيانات تعريف `host`/`baseUrl` لنقاط نهاية المزوّد مملوكة للبيان لمسارات المزوّد التي يجب على النواة تصنيفها قبل تحميل وقت تشغيل المزوّد. | +| `cliBackends` | لا | `string[]` | معرّفات الواجهات الخلفية للاستدلال في CLI التي يملكها Plugin هذا. تُستخدم للتفعيل التلقائي عند بدء التشغيل من مراجع إعدادات صريحة. | +| `syntheticAuthRefs` | لا | `string[]` | مراجع المزوّد أو الواجهة الخلفية لـ CLI التي يجب فحص خطاف المصادقة الاصطناعية المملوك لـ Plugin لها أثناء الاكتشاف البارد للنماذج قبل تحميل وقت التشغيل. | +| `nonSecretAuthMarkers` | لا | `string[]` | قيم مفاتيح API بديلة مملوكة لـ Plugin المضمّن تمثل حالة بيانات اعتماد غير سرية محلية أو OAuth أو محيطة. | +| `commandAliases` | لا | `object[]` | أسماء الأوامر التي يملكها Plugin هذا والتي يجب أن تنتج إعدادات وتشخيصات CLI مدركة لـ Plugin قبل تحميل وقت التشغيل. | +| `providerAuthEnvVars` | لا | `Record` | بيانات تعريف متغيرات البيئة لمصادقة المزوّد منخفضة التكلفة التي يمكن لـ OpenClaw فحصها من دون تحميل كود Plugin. | +| `providerAuthAliases` | لا | `Record` | معرّفات مزوّدين يجب أن تعيد استخدام معرّف مزوّد آخر للبحث عن المصادقة، مثل مزوّد برمجة يشارك مفتاح API الأساسي وملفات تعريف المصادقة مع المزوّد الأساسي. | +| `channelEnvVars` | لا | `Record` | بيانات تعريف متغيرات البيئة للقناة منخفضة التكلفة التي يمكن لـ OpenClaw فحصها من دون تحميل كود Plugin. استخدم هذا لأسطح إعداد القنوات أو المصادقة المعتمدة على متغيرات البيئة والتي يجب أن تراها أدوات البدء/الإعدادات العامة. | +| `providerAuthChoices` | لا | `object[]` | بيانات تعريف خيارات مصادقة منخفضة التكلفة لمنتقيات الإعداد الأوّلي، وحل المزوّد المفضّل، وربط أعلام CLI البسيط. | +| `activation` | لا | `object` | تلميحات تفعيل منخفضة التكلفة للتحميل المستند إلى المزوّد والأمر والقناة والمسار والإمكانات. بيانات تعريف فقط؛ يظل وقت تشغيل Plugin مالك السلوك الفعلي. | +| `setup` | لا | `object` | واصفات إعداد/إعداد أوّلي منخفضة التكلفة يمكن لأسطح الاكتشاف والإعداد فحصها من دون تحميل وقت تشغيل Plugin. | +| `qaRunners` | لا | `object[]` | واصفات مشغّلات QA منخفضة التكلفة التي يستخدمها مضيف `openclaw qa` المشترك قبل تحميل وقت تشغيل Plugin. | +| `contracts` | لا | `object` | لقطة ثابتة لإمكانات مضمّنة للتعرّف على الكلام، والنسخ الفوري، والصوت الفوري، وفهم الوسائط، وتوليد الصور، وتوليد الموسيقى، وتوليد الفيديو، وجلب الويب، والبحث في الويب، وملكية الأدوات. | +| `mediaUnderstandingProviderMetadata` | لا | `Record` | إعدادات افتراضية منخفضة التكلفة لفهم الوسائط لمعرّفات المزوّدين المصرّح بها في `contracts.mediaUnderstandingProviders`. | +| `channelConfigs` | لا | `Record` | بيانات تعريف إعدادات القناة مملوكة للبيان وتُدمج في أسطح الاكتشاف والتحقق قبل تحميل وقت التشغيل. | +| `skills` | لا | `string[]` | أدلة Skills المطلوب تحميلها، نسبةً إلى جذر Plugin. | +| `name` | لا | `string` | اسم Plugin بصيغة قابلة للقراءة البشرية. | +| `description` | لا | `string` | ملخص قصير يُعرض في أسطح Plugin. | +| `version` | لا | `string` | إصدار Plugin لأغراض معلوماتية. | +| `uiHints` | لا | `Record` | تسميات واجهة المستخدم، والعناصر النائبة، وتلميحات الحساسية لحقول الإعدادات. | ## مرجع `providerAuthChoices` -يصف كل إدخال في `providerAuthChoices` اختيارًا واحدًا من اختيارات الإعداد الأولي أو المصادقة. +يصف كل إدخال في `providerAuthChoices` خيارًا واحدًا للإعداد الأوّلي أو المصادقة. يقرأ OpenClaw هذا قبل تحميل وقت تشغيل المزوّد. -| الحقل | مطلوب | النوع | ما الذي يعنيه | -| --------------------- | -------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -| `provider` | نعم | `string` | معرّف المزوّد الذي ينتمي إليه هذا الاختيار. | -| `method` | نعم | `string` | معرّف طريقة المصادقة المطلوب التوجيه إليه. | -| `choiceId` | نعم | `string` | معرّف ثابت لاختيار المصادقة تستخدمه تدفقات الإعداد الأولي وCLI. | -| `choiceLabel` | لا | `string` | تسمية موجهة للمستخدم. إذا حُذفت، يعود OpenClaw إلى `choiceId`. | -| `choiceHint` | لا | `string` | نص مساعد قصير لمنتقي الاختيار. | -| `assistantPriority` | لا | `number` | القيم الأقل تُرتَّب أولًا في المنتقيات التفاعلية التي يقودها المساعد. | -| `assistantVisibility` | لا | `"visible"` \| `"manual-only"` | إخفاء الاختيار من منتقيات المساعد مع السماح مع ذلك بالاختيار اليدوي عبر CLI. | -| `deprecatedChoiceIds` | لا | `string[]` | معرّفات اختيارات قديمة يجب أن تعيد توجيه المستخدمين إلى هذا الاختيار البديل. | -| `groupId` | لا | `string` | معرّف مجموعة اختياري لتجميع الاختيارات ذات الصلة. | -| `groupLabel` | لا | `string` | تسمية موجهة للمستخدم لتلك المجموعة. | -| `groupHint` | لا | `string` | نص مساعد قصير للمجموعة. | -| `optionKey` | لا | `string` | مفتاح خيار داخلي لتدفقات المصادقة البسيطة ذات العلم الواحد. | -| `cliFlag` | لا | `string` | اسم علم CLI، مثل `--openrouter-api-key`. | -| `cliOption` | لا | `string` | الشكل الكامل لخيار CLI، مثل `--openrouter-api-key `. | -| `cliDescription` | لا | `string` | الوصف المستخدم في تعليمات CLI. | -| `onboardingScopes` | لا | `Array<"text-inference" \| "image-generation">` | أسطح الإعداد الأولي التي يجب أن يظهر فيها هذا الاختيار. إذا حُذفت، فالقيمة الافتراضية هي `["text-inference"]`. | +| الحقل | مطلوب | النوع | ما الذي يعنيه | +| --------------------- | ------ | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------- | +| `provider` | نعم | `string` | معرّف المزوّد الذي ينتمي إليه هذا الخيار. | +| `method` | نعم | `string` | معرّف طريقة المصادقة المطلوب التوجيه إليها. | +| `choiceId` | نعم | `string` | معرّف ثابت لخيار المصادقة تستخدمه تدفقات الإعداد الأوّلي وCLI. | +| `choiceLabel` | لا | `string` | تسمية موجهة للمستخدم. إذا لم تُحدَّد، يعود OpenClaw إلى `choiceId`. | +| `choiceHint` | لا | `string` | نص مساعد قصير للمنتقي. | +| `assistantPriority` | لا | `number` | تُرتَّب القيم الأقل أولًا في المنتقيات التفاعلية التي يقودها المساعد. | +| `assistantVisibility` | لا | `"visible"` \| `"manual-only"` | يُخفي الخيار من منتقيات المساعد مع السماح مع ذلك بالاختيار اليدوي عبر CLI. | +| `deprecatedChoiceIds` | لا | `string[]` | معرّفات خيارات قديمة يجب أن تعيد توجيه المستخدمين إلى خيار الاستبدال هذا. | +| `groupId` | لا | `string` | معرّف مجموعة اختياري لتجميع الخيارات ذات الصلة. | +| `groupLabel` | لا | `string` | تسمية موجهة للمستخدم لتلك المجموعة. | +| `groupHint` | لا | `string` | نص مساعد قصير للمجموعة. | +| `optionKey` | لا | `string` | مفتاح خيار داخلي لتدفقات المصادقة البسيطة ذات العلم الواحد. | +| `cliFlag` | لا | `string` | اسم علم CLI، مثل `--openrouter-api-key`. | +| `cliOption` | لا | `string` | الشكل الكامل لخيار CLI، مثل `--openrouter-api-key `. | +| `cliDescription` | لا | `string` | الوصف المستخدم في تعليمات CLI. | +| `onboardingScopes` | لا | `Array<"text-inference" \| "image-generation">` | أسطح الإعداد الأوّلي التي يجب أن يظهر فيها هذا الخيار. إذا لم تُحدَّد، تكون القيمة الافتراضية `["text-inference"]`. | ## مرجع `commandAliases` -استخدم `commandAliases` عندما يملك Plugin اسم أمر وقت تشغيل قد -يضعه المستخدمون عن طريق الخطأ في `plugins.allow` أو يحاولون تشغيله كأمر CLI جذري. يستخدم OpenClaw -هذه البيانات الوصفية للتشخيصات من دون استيراد كود وقت تشغيل Plugin. +استخدم `commandAliases` عندما يملك Plugin اسم أمر وقت تشغيل قد يضعه المستخدمون +بالخطأ في `plugins.allow` أو يحاولون تشغيله كأمر CLI جذري. يستخدم OpenClaw +بيانات التعريف هذه للتشخيصات من دون استيراد كود وقت تشغيل Plugin. ```json { @@ -226,45 +226,45 @@ x-i18n: } ``` -| الحقل | مطلوب | النوع | ما الذي يعنيه | -| ------------ | -------- | ----------------- | ----------------------------------------------------------------------- | -| `name` | نعم | `string` | اسم الأمر الذي ينتمي إلى هذا Plugin. | -| `kind` | لا | `"runtime-slash"` | يحدد الاسم المستعار على أنه أمر slash للدردشة وليس أمر CLI جذريًا. | -| `cliCommand` | لا | `string` | أمر CLI جذري ذو صلة يمكن اقتراحه لعمليات CLI، إذا كان موجودًا. | +| الحقل | مطلوب | النوع | ما الذي يعنيه | +| ------------ | ------ | ----------------- | --------------------------------------------------------------------------- | +| `name` | نعم | `string` | اسم الأمر الذي ينتمي إلى هذا Plugin. | +| `kind` | لا | `"runtime-slash"` | يحدد أن الاسم المستعار أمر slash للدردشة وليس أمر CLI جذريًا. | +| `cliCommand` | لا | `string` | أمر CLI جذري ذو صلة يُقترح لعمليات CLI، إذا كان موجودًا. | ## مرجع `activation` -استخدم `activation` عندما يستطيع Plugin أن يعلن بتكلفة منخفضة عن أحداث مستوى التحكم +استخدم `activation` عندما يستطيع Plugin أن يصرّح بتكلفة منخفضة عن أحداث مستوى التحكّم التي يجب أن تفعّله لاحقًا. ## مرجع `qaRunners` -استخدم `qaRunners` عندما يساهم Plugin بواحد أو أكثر من transport runners تحت -الجذر المشترك `openclaw qa`. اجعل هذه البيانات الوصفية منخفضة التكلفة وثابتة؛ فما زال وقت تشغيل Plugin -يملك تسجيل CLI الفعلي عبر سطح -`runtime-api.ts` خفيف يصدّر `qaRunnerCliRegistrations`. +استخدم `qaRunners` عندما يضيف Plugin مشغّل نقل واحدًا أو أكثر تحت الجذر المشترك +`openclaw qa`. اجعل بيانات التعريف هذه منخفضة التكلفة وثابتة؛ فما يزال وقت تشغيل Plugin +يملك تسجيل CLI الفعلي عبر سطح `runtime-api.ts` خفيف الوزن +يُصدّر `qaRunnerCliRegistrations`. ```json { "qaRunners": [ { "commandName": "matrix", - "description": "تشغيل مسار Matrix QA المباشر المدعوم بـ Docker مقابل homeserver مؤقت" + "description": "Run the Docker-backed Matrix live QA lane against a disposable homeserver" } ] } ``` -| الحقل | مطلوب | النوع | ما الذي يعنيه | -| ------------- | -------- | -------- | ------------------------------------------------------------------ | -| `commandName` | نعم | `string` | أمر فرعي يُركّب تحت `openclaw qa`، مثل `matrix`. | -| `description` | لا | `string` | نص مساعدة احتياطي يُستخدم عندما يحتاج المضيف المشترك إلى أمر stub. | +| الحقل | مطلوب | النوع | ما الذي يعنيه | +| ------------- | ------ | -------- | ------------------------------------------------------------------ | +| `commandName` | نعم | `string` | الأمر الفرعي المثبّت تحت `openclaw qa`، مثل `matrix`. | +| `description` | لا | `string` | نص تعليمات بديل يُستخدم عندما يحتاج المضيف المشترك إلى أمر stub. | -هذه الكتلة بيانات وصفية فقط. فهي لا تسجّل سلوك وقت التشغيل، ولا -تحل محل `register(...)` أو `setupEntry` أو نقاط دخول Plugin/وقت التشغيل الأخرى. -يستخدمها المستهلكون الحاليون كتلميح تضييق قبل تحميل Plugin على نطاق أوسع، لذا -فإن غياب بيانات `activation` الوصفية يؤدي عادةً فقط إلى تكلفة في الأداء؛ ويجب ألا -يغير الصحة ما دامت تراجعات ملكية البيان القديمة لا تزال موجودة. +هذه الكتلة بيانات تعريف فقط. فهي لا تسجل سلوك وقت التشغيل، ولا +تحل محل `register(...)` أو `setupEntry` أو نقاط دخول وقت التشغيل/Plugin الأخرى. +يستخدمها المستهلكون الحاليون كتلميح تضييق قبل تحميل Plugin على نطاق أوسع، لذلك فإن +غياب بيانات تعريف التفعيل عادة لا يكلّف سوى الأداء؛ ويجب ألا +يغير الصحة ما دامت بدائل ملكية البيان القديمة لا تزال موجودة. ```json { @@ -278,28 +278,28 @@ x-i18n: } ``` -| الحقل | مطلوب | النوع | ما الذي يعنيه | -| ---------------- | -------- | ---------------------------------------------------- | ----------------------------------------------------------------- | -| `onProviders` | لا | `string[]` | معرّفات المزوّدين التي يجب أن تفعّل هذا Plugin عند طلبها. | -| `onCommands` | لا | `string[]` | معرّفات الأوامر التي يجب أن تفعّل هذا Plugin. | -| `onChannels` | لا | `string[]` | معرّفات القنوات التي يجب أن تفعّل هذا Plugin. | -| `onRoutes` | لا | `string[]` | أنواع المسارات التي يجب أن تفعّل هذا Plugin. | -| `onCapabilities` | لا | `Array<"provider" \| "channel" \| "tool" \| "hook">` | تلميحات قدرات عامة تُستخدم في تخطيط التفعيل لمستوى التحكم. | +| الحقل | مطلوب | النوع | ما الذي يعنيه | +| ---------------- | ------ | ---------------------------------------------------- | ---------------------------------------------------------------- | +| `onProviders` | لا | `string[]` | معرّفات المزوّدين التي يجب أن تفعّل هذا Plugin عند طلبها. | +| `onCommands` | لا | `string[]` | معرّفات الأوامر التي يجب أن تفعّل هذا Plugin. | +| `onChannels` | لا | `string[]` | معرّفات القنوات التي يجب أن تفعّل هذا Plugin. | +| `onRoutes` | لا | `string[]` | أنواع المسارات التي يجب أن تفعّل هذا Plugin. | +| `onCapabilities` | لا | `Array<"provider" \| "channel" \| "tool" \| "hook">` | تلميحات إمكانات عامة تُستخدم في تخطيط التفعيل على مستوى التحكّم. | المستهلكون المباشرون الحاليون: -- يعتمد تخطيط CLI الذي يتم تشغيله بالأوامر على التراجع إلى - `commandAliases[].cliCommand` أو `commandAliases[].name` -- يعتمد تخطيط الإعداد/القناة الذي يتم تشغيله بالقنوات على التراجع إلى ملكية - `channels[]` القديمة عندما تكون بيانات تفعيل القناة الصريحة مفقودة -- يعتمد تخطيط الإعداد/وقت التشغيل الذي يتم تشغيله بالمزوّدين على التراجع إلى - ملكية `providers[]` و`cliBackends[]` على المستوى الأعلى عندما تكون بيانات +- يعود تخطيط CLI المعتمد على تشغيل الأمر إلى + `commandAliases[].cliCommand` أو `commandAliases[].name` القديمين +- يعود تخطيط الإعداد/القنوات المعتمد على تشغيل القناة إلى ملكية + `channels[]` القديمة عندما تكون بيانات تعريف تفعيل القناة الصريحة مفقودة +- يعود تخطيط الإعداد/وقت التشغيل المعتمد على تشغيل المزوّد إلى + ملكية `providers[]` القديمة وملكية `cliBackends[]` ذات المستوى الأعلى عندما تكون بيانات تعريف تفعيل المزوّد الصريحة مفقودة ## مرجع `setup` -استخدم `setup` عندما تحتاج أسطح الإعداد والإعداد الأولي إلى بيانات وصفية منخفضة التكلفة يملكها Plugin -قبل تحميل وقت التشغيل. +استخدم `setup` عندما تحتاج أسطح الإعداد والإعداد الأوّلي إلى بيانات تعريف منخفضة التكلفة +مملوكة لـ Plugin قبل تحميل وقت التشغيل. ```json { @@ -318,48 +318,48 @@ x-i18n: } ``` -يبقى `cliBackends` على المستوى الأعلى صالحًا ويستمر في وصف الواجهات الخلفية -لاستدلال CLI. أما `setup.cliBackends` فهو سطح الواصفات الخاص بالإعداد -لتدفقات مستوى التحكم/الإعداد التي يجب أن تبقى بيانات وصفية فقط. +يبقى `cliBackends` ذو المستوى الأعلى صالحًا ويستمر في وصف الواجهات الخلفية للاستدلال في CLI. +أما `setup.cliBackends` فهو سطح الواصفات الخاص بالإعداد من أجل +تدفقات مستوى التحكّم/الإعداد التي يجب أن تبقى بيانات تعريف فقط. -عند وجودها، تكون `setup.providers` و`setup.cliBackends` هما -سطح البحث المفضل القائم على الواصفات أولًا لاكتشاف الإعداد. وإذا كان الواصف -يضيّق Plugin المرشح فقط بينما لا يزال الإعداد يحتاج إلى hooks أغنى وقت الإعداد -في وقت التشغيل، فاضبط `requiresRuntime: true` وأبقِ `setup-api` -كمسار تنفيذ احتياطي. +عند وجودهما، تكون `setup.providers` و`setup.cliBackends` هما +سطح البحث المفضل القائم أولًا على الواصفات لاكتشاف الإعداد. وإذا كان الواصف +يضيّق Plugin المرشح فقط وما زال الإعداد يحتاج إلى خطافات وقت إعداد أغنى في وقت التشغيل، +فاضبط `requiresRuntime: true` وأبقِ `setup-api` في مكانه باعتباره +مسار التنفيذ الاحتياطي. -ولأن بحث الإعداد يمكن أن ينفّذ كود `setup-api` يملكه Plugin، فيجب أن تبقى القيم -المطبّعة في `setup.providers[].id` و`setup.cliBackends[]` فريدة على مستوى جميع -Plugins المكتشفة. تفشل الملكية الملتبسة بشكل مغلق بدلًا من اختيار -فائز بحسب ترتيب الاكتشاف. +ولأن بحث الإعداد يمكنه تنفيذ كود `setup-api` مملوكًا لـ Plugin، فيجب أن تبقى القيم +المطبّعة لـ `setup.providers[].id` و`setup.cliBackends[]` فريدة عبر +Plugins المكتشفة. وتفشل الملكية الملتبسة بإغلاق آمن بدلًا من اختيار فائز +استنادًا إلى ترتيب الاكتشاف. ### مرجع `setup.providers` -| الحقل | مطلوب | النوع | ما الذي يعنيه | -| ------------- | -------- | ---------- | ------------------------------------------------------------------------------------ | -| `id` | نعم | `string` | معرّف المزوّد المعروض أثناء الإعداد أو الإعداد الأولي. حافظ على فرادة المعرّفات المطبّعة عالميًا. | -| `authMethods` | لا | `string[]` | معرّفات طرق الإعداد/المصادقة التي يدعمها هذا المزوّد من دون تحميل وقت التشغيل الكامل. | -| `envVars` | لا | `string[]` | متغيرات البيئة التي يمكن لأسطح الإعداد/الحالة العامة التحقق منها قبل تحميل وقت تشغيل Plugin. | +| الحقل | مطلوب | النوع | ما الذي يعنيه | +| ------------- | ------ | ---------- | ------------------------------------------------------------------------------------ | +| `id` | نعم | `string` | معرّف المزوّد المعروض أثناء الإعداد أو الإعداد الأوّلي. احرص على أن تكون المعرّفات المطبّعة فريدة عالميًا. | +| `authMethods` | لا | `string[]` | معرّفات طرق الإعداد/المصادقة التي يدعمها هذا المزوّد من دون تحميل وقت التشغيل الكامل. | +| `envVars` | لا | `string[]` | متغيرات البيئة التي يمكن لأسطح الإعداد/الحالة العامة التحقق منها قبل تحميل وقت تشغيل Plugin. | ### حقول `setup` -| الحقل | مطلوب | النوع | ما الذي يعنيه | -| ------------------ | -------- | ---------- | --------------------------------------------------------------------------------------------------- | -| `providers` | لا | `object[]` | واصفات إعداد المزوّدين المعروضة أثناء الإعداد والإعداد الأولي. | -| `cliBackends` | لا | `string[]` | معرّفات الواجهات الخلفية وقت الإعداد المستخدمة للبحث القائم على الواصفات أولًا. حافظ على فرادة المعرّفات المطبّعة عالميًا. | -| `configMigrations` | لا | `string[]` | معرّفات ترحيل التكوين التي يملكها سطح الإعداد في هذا Plugin. | -| `requiresRuntime` | لا | `boolean` | ما إذا كان الإعداد لا يزال يحتاج إلى تنفيذ `setup-api` بعد البحث بالواصفات. | +| الحقل | مطلوب | النوع | ما الذي يعنيه | +| ------------------ | ------ | ---------- | -------------------------------------------------------------------------------------------------- | +| `providers` | لا | `object[]` | واصفات إعداد المزوّد المعروضة أثناء الإعداد والإعداد الأوّلي. | +| `cliBackends` | لا | `string[]` | معرّفات الواجهات الخلفية في وقت الإعداد المستخدمة في البحث القائم أولًا على الواصفات. احرص على أن تكون المعرّفات المطبّعة فريدة عالميًا. | +| `configMigrations` | لا | `string[]` | معرّفات ترحيل الإعدادات التي يملكها سطح إعداد هذا Plugin. | +| `requiresRuntime` | لا | `boolean` | ما إذا كان الإعداد لا يزال يحتاج إلى تنفيذ `setup-api` بعد البحث بالواصفات. | ## مرجع `uiHints` -تمثل `uiHints` خريطة من أسماء حقول التكوين إلى تلميحات عرض صغيرة. +تمثل `uiHints` خريطة من أسماء حقول الإعدادات إلى تلميحات عرض صغيرة. ```json { "uiHints": { "apiKey": { - "label": "مفتاح API", - "help": "يُستخدم لطلبات OpenRouter", + "label": "API key", + "help": "Used for OpenRouter requests", "placeholder": "sk-or-v1-...", "sensitive": true } @@ -367,25 +367,26 @@ Plugins المكتشفة. تفشل الملكية الملتبسة بشكل مغ } ``` -يمكن أن يتضمن كل تلميح حقل ما يلي: +يمكن أن يتضمن تلميح كل حقل ما يلي: -| الحقل | النوع | ما الذي يعنيه | -| ------------- | ---------- | --------------------------------------- | -| `label` | `string` | تسمية الحقل الموجهة للمستخدم. | -| `help` | `string` | نص مساعد قصير. | -| `tags` | `string[]` | وسوم UI اختيارية. | -| `advanced` | `boolean` | يحدد الحقل على أنه متقدم. | -| `sensitive` | `boolean` | يحدد الحقل على أنه سري أو حساس. | -| `placeholder` | `string` | نص العنصر النائب لحقول الإدخال في النماذج. | +| الحقل | النوع | ما الذي يعنيه | +| ------------- | ---------- | ------------------------------------- | +| `label` | `string` | تسمية الحقل الموجهة للمستخدم. | +| `help` | `string` | نص مساعد قصير. | +| `tags` | `string[]` | وسوم واجهة مستخدم اختيارية. | +| `advanced` | `boolean` | يحدد الحقل على أنه متقدم. | +| `sensitive` | `boolean` | يحدد الحقل على أنه سري أو حساس. | +| `placeholder` | `string` | نص العنصر النائب لمدخلات النماذج. | ## مرجع `contracts` -استخدم `contracts` فقط لبيانات وصفية ثابتة لملكية القدرات يستطيع OpenClaw +استخدم `contracts` فقط لبيانات تعريف ملكية الإمكانات الثابتة التي يمكن لـ OpenClaw قراءتها من دون استيراد وقت تشغيل Plugin. ```json { "contracts": { + "embeddedExtensionFactories": ["pi"], "speechProviders": ["openai"], "realtimeTranscriptionProviders": ["openai"], "realtimeVoiceProviders": ["openai"], @@ -401,21 +402,59 @@ Plugins المكتشفة. تفشل الملكية الملتبسة بشكل مغ كل قائمة اختيارية: -| الحقل | النوع | ما الذي يعنيه | -| -------------------------------- | ---------- | -------------------------------------------------------------- | -| `speechProviders` | `string[]` | معرّفات مزوّدي الكلام التي يملكها هذا Plugin. | -| `realtimeTranscriptionProviders` | `string[]` | معرّفات مزوّدي النسخ الفوري التي يملكها هذا Plugin. | -| `realtimeVoiceProviders` | `string[]` | معرّفات مزوّدي الصوت الفوري التي يملكها هذا Plugin. | -| `mediaUnderstandingProviders` | `string[]` | معرّفات مزوّدي فهم الوسائط التي يملكها هذا Plugin. | -| `imageGenerationProviders` | `string[]` | معرّفات مزوّدي توليد الصور التي يملكها هذا Plugin. | -| `videoGenerationProviders` | `string[]` | معرّفات مزوّدي توليد الفيديو التي يملكها هذا Plugin. | -| `webFetchProviders` | `string[]` | معرّفات مزوّدي جلب الويب التي يملكها هذا Plugin. | -| `webSearchProviders` | `string[]` | معرّفات مزوّدي البحث على الويب التي يملكها هذا Plugin. | -| `tools` | `string[]` | أسماء أدوات الوكيل التي يملكها هذا Plugin لفحوصات العقود المرفقة. | +| الحقل | النوع | ما الذي يعنيه | +| -------------------------------- | ---------- | ------------------------------------------------------------------ | +| `embeddedExtensionFactories` | `string[]` | معرّفات وقت التشغيل المضمّن التي يمكن أن يسجل Plugin المضمّن factories لها. | +| `speechProviders` | `string[]` | معرّفات مزوّدي الكلام التي يملكها Plugin هذا. | +| `realtimeTranscriptionProviders` | `string[]` | معرّفات مزوّدي النسخ الفوري التي يملكها Plugin هذا. | +| `realtimeVoiceProviders` | `string[]` | معرّفات مزوّدي الصوت الفوري التي يملكها Plugin هذا. | +| `mediaUnderstandingProviders` | `string[]` | معرّفات مزوّدي فهم الوسائط التي يملكها Plugin هذا. | +| `imageGenerationProviders` | `string[]` | معرّفات مزوّدي توليد الصور التي يملكها Plugin هذا. | +| `videoGenerationProviders` | `string[]` | معرّفات مزوّدي توليد الفيديو التي يملكها Plugin هذا. | +| `webFetchProviders` | `string[]` | معرّفات مزوّدي جلب الويب التي يملكها Plugin هذا. | +| `webSearchProviders` | `string[]` | معرّفات مزوّدي البحث في الويب التي يملكها Plugin هذا. | +| `tools` | `string[]` | أسماء أدوات الوكيل التي يملكها Plugin هذا لفحوصات العقود المضمّنة. | + +## مرجع `mediaUnderstandingProviderMetadata` + +استخدم `mediaUnderstandingProviderMetadata` عندما يكون لدى مزوّد فهم الوسائط +نماذج افتراضية، أو أولوية احتياطية للمصادقة التلقائية، أو دعم أصلي للمستندات +تحتاجه مساعدات النواة العامة قبل تحميل وقت التشغيل. ويجب أيضًا التصريح بالمفاتيح في +`contracts.mediaUnderstandingProviders`. + +```json +{ + "contracts": { + "mediaUnderstandingProviders": ["example"] + }, + "mediaUnderstandingProviderMetadata": { + "example": { + "capabilities": ["image", "audio"], + "defaultModels": { + "image": "example-vision-latest", + "audio": "example-transcribe-latest" + }, + "autoPriority": { + "image": 40 + }, + "nativeDocumentInputs": ["pdf"] + } + } +} +``` + +يمكن أن يتضمن كل إدخال مزوّد ما يلي: + +| الحقل | النوع | ما الذي يعنيه | +| ---------------------- | ----------------------------------- | ----------------------------------------------------------------------------- | +| `capabilities` | `("image" \| "audio" \| "video")[]` | إمكانات الوسائط التي يوفّرها هذا المزوّد. | +| `defaultModels` | `Record` | الإعدادات الافتراضية من الإمكانية إلى النموذج المستخدمة عندما لا يحدد الإعداد نموذجًا. | +| `autoPriority` | `Record` | تُرتَّب الأرقام الأقل أولًا للاحتياط التلقائي للمزوّد المستند إلى بيانات الاعتماد. | +| `nativeDocumentInputs` | `"pdf"[]` | مدخلات المستندات الأصلية التي يدعمها المزوّد. | ## مرجع `channelConfigs` -استخدم `channelConfigs` عندما يحتاج Plugin قناة إلى بيانات وصفية منخفضة التكلفة للتكوين قبل +استخدم `channelConfigs` عندما يحتاج Plugin القناة إلى بيانات تعريف إعدادات منخفضة التكلفة قبل تحميل وقت التشغيل. ```json @@ -431,12 +470,12 @@ Plugins المكتشفة. تفشل الملكية الملتبسة بشكل مغ }, "uiHints": { "homeserverUrl": { - "label": "عنوان URL لـ Homeserver", + "label": "Homeserver URL", "placeholder": "https://matrix.example.com" } }, "label": "Matrix", - "description": "اتصال Matrix homeserver", + "description": "Matrix homeserver connection", "preferOver": ["matrix-legacy"] } } @@ -445,19 +484,18 @@ Plugins المكتشفة. تفشل الملكية الملتبسة بشكل مغ يمكن أن يتضمن كل إدخال قناة ما يلي: -| الحقل | النوع | ما الذي يعنيه | -| ------------- | ------------------------ | ----------------------------------------------------------------------------------------- | -| `schema` | `object` | مخطط JSON لـ `channels.`. وهو مطلوب لكل إدخال تكوين قناة مُعلن. | -| `uiHints` | `Record` | تسميات UI/عناصر نائبة/تلميحات حساسية اختيارية لذلك القسم من تكوين القناة. | -| `label` | `string` | تسمية القناة المدمجة في أسطح المنتقي والفحص عندما لا تكون بيانات وقت التشغيل الوصفية جاهزة. | -| `description` | `string` | وصف قصير للقناة لأسطح الفحص والكتالوج. | -| `preferOver` | `string[]` | معرّفات Plugins قديمة أو أقل أولوية يجب أن تتفوق عليها هذه القناة في أسطح الاختيار. | +| الحقل | النوع | ما الذي يعنيه | +| ------------- | ------------------------ | ------------------------------------------------------------------------------------------ | +| `schema` | `object` | مخطط JSON لـ `channels.`. وهو مطلوب لكل إدخال معلن لإعدادات القناة. | +| `uiHints` | `Record` | تسميات/عناصر نائبة/تلميحات حساسية اختيارية لواجهة المستخدم لقسم إعدادات تلك القناة. | +| `label` | `string` | تسمية القناة المدمجة في أسطح المنتقي والمعاينة عندما لا تكون بيانات تعريف وقت التشغيل جاهزة. | +| `description` | `string` | وصف قصير للقناة لأسطح المعاينة والفهرس. | +| `preferOver` | `string[]` | معرّفات Plugin قديمة أو أقل أولوية يجب أن تتفوق عليها هذه القناة في أسطح الاختيار. | ## مرجع `modelSupport` -استخدم `modelSupport` عندما يجب على OpenClaw استنتاج Plugin المزوّد الخاص بك من -معرّفات النماذج المختصرة مثل `gpt-5.4` أو `claude-sonnet-4.6` قبل تحميل -وقت تشغيل Plugin. +استخدم `modelSupport` عندما يجب على OpenClaw أن يستنتج Plugin المزوّد الخاص بك من +معرّفات نماذج مختصرة مثل `gpt-5.4` أو `claude-sonnet-4.6` قبل تحميل وقت تشغيل Plugin. ```json { @@ -468,88 +506,87 @@ Plugins المكتشفة. تفشل الملكية الملتبسة بشكل مغ } ``` -يطبّق OpenClaw ترتيب الأولوية التالي: +يطبق OpenClaw ترتيب الأولوية هذا: -- تستخدم مراجع `provider/model` الصريحة بيانات البيان الوصفية المملوكة في `providers` -- تتغلب `modelPatterns` على `modelPrefixes` -- إذا طابق كل من Plugin غير مرفق وPlugin مرفق، فإن Plugin - غير المرفق يفوز -- يتم تجاهل الغموض المتبقي حتى يحدد المستخدم أو التكوين مزوّدًا +- تستخدم مراجع `provider/model` الصريحة بيانات تعريف `providers` المملوكة في البيان +- تتفوق `modelPatterns` على `modelPrefixes` +- إذا تطابق Plugin غير مضمّن وPlugin مضمّن معًا، فإن Plugin غير المضمّن + هو الذي يفوز +- يُتجاهل أي غموض متبقٍ إلى أن يحدد المستخدم أو الإعدادات مزوّدًا الحقول: -| الحقل | النوع | ما الذي يعنيه | -| --------------- | ---------- | ------------------------------------------------------------------------------- | -| `modelPrefixes` | `string[]` | بادئات تتم مطابقتها باستخدام `startsWith` مقابل معرّفات النماذج المختصرة. | -| `modelPatterns` | `string[]` | مصادر regex تتم مطابقتها مقابل معرّفات النماذج المختصرة بعد إزالة لاحقة ملف التعريف. | +| الحقل | النوع | ما الذي يعنيه | +| --------------- | ---------- | -------------------------------------------------------------------------------- | +| `modelPrefixes` | `string[]` | بادئات تُطابَق باستخدام `startsWith` مع معرّفات النماذج المختصرة. | +| `modelPatterns` | `string[]` | مصادر regex تُطابَق مع معرّفات النماذج المختصرة بعد إزالة لاحقة ملف التعريف. | -أصبحت مفاتيح القدرات القديمة على المستوى الأعلى مهجورة. استخدم `openclaw doctor --fix` من أجل +أصبحت مفاتيح الإمكانات القديمة ذات المستوى الأعلى مهملة. استخدم `openclaw doctor --fix` من أجل نقل `speechProviders` و`realtimeTranscriptionProviders`، -و`realtimeVoiceProviders`، و`mediaUnderstandingProviders`، -و`imageGenerationProviders`، و`videoGenerationProviders`، -و`webFetchProviders`، و`webSearchProviders` إلى `contracts`؛ إذ لم يعد -تحميل البيان العادي يتعامل مع تلك الحقول العليا على أنها ملكية -قدرات. +و`realtimeVoiceProviders` و`mediaUnderstandingProviders`، +و`imageGenerationProviders` و`videoGenerationProviders`، +و`webFetchProviders` و`webSearchProviders` إلى `contracts`؛ لم يعد +تحميل البيان العادي يعامل تلك الحقول ذات المستوى الأعلى على أنها +ملكية للإمكانات. -## البيان مقابل `package.json` +## البيان مقابل package.json -يخدم الملفان وظيفتين مختلفتين: +يؤدي الملفان مهمتين مختلفتين: -| الملف | استخدمه من أجل | -| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -| `openclaw.plugin.json` | الاكتشاف، والتحقق من صحة التكوين، وبيانات اختيار المصادقة الوصفية، وتلميحات UI التي يجب أن توجد قبل تشغيل كود Plugin | -| `package.json` | بيانات npm الوصفية، وتثبيت الاعتماديات، وكتلة `openclaw` المستخدمة لنقاط الدخول، وبوابة التثبيت، والإعداد، أو بيانات الكتالوج الوصفية | +| الملف | استخدمه من أجل | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `openclaw.plugin.json` | الاكتشاف، والتحقق من صحة الإعدادات، وبيانات تعريف خيارات المصادقة، وتلميحات واجهة المستخدم التي يجب أن تكون موجودة قبل تشغيل كود Plugin | +| `package.json` | بيانات تعريف npm، وتثبيت التبعيات، وكتلة `openclaw` المستخدمة لنقاط الدخول، أو تقييد التثبيت، أو الإعداد، أو بيانات تعريف الفهرس | -إذا لم تكن متأكدًا من موضع قطعة من البيانات الوصفية، فاستخدم هذه القاعدة: +إذا لم تكن متأكدًا من الموضع الذي يجب أن تنتمي إليه قطعة من بيانات التعريف، فاستخدم هذه القاعدة: - إذا كان يجب على OpenClaw معرفتها قبل تحميل كود Plugin، فضعها في `openclaw.plugin.json` - إذا كانت تتعلق بالتغليف أو ملفات الدخول أو سلوك تثبيت npm، فضعها في `package.json` ### حقول `package.json` التي تؤثر في الاكتشاف -توجد بعض بيانات Plugin الوصفية قبل وقت التشغيل عمدًا في `package.json` تحت كتلة -`openclaw` بدلًا من `openclaw.plugin.json`. +توجد بعض بيانات تعريف Plugin قبل وقت التشغيل عمدًا في `package.json` تحت +كتلة `openclaw` بدلًا من `openclaw.plugin.json`. أمثلة مهمة: -| الحقل | ما الذي يعنيه | -| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `openclaw.extensions` | يعلن نقاط دخول Plugin الأصلية. يجب أن تبقى داخل دليل حزمة Plugin. | -| `openclaw.runtimeExtensions` | يعلن نقاط دخول وقت تشغيل JavaScript المبنية للحزم المثبتة. يجب أن تبقى داخل دليل حزمة Plugin. | -| `openclaw.setupEntry` | نقطة دخول خفيفة خاصة بالإعداد تُستخدم أثناء الإعداد الأولي، وبدء القنوات المؤجل، واكتشاف حالة القناة/SecretRef للقراءة فقط. يجب أن تبقى داخل دليل حزمة Plugin. | -| `openclaw.runtimeSetupEntry` | يعلن نقطة دخول الإعداد المبنية بلغة JavaScript للحزم المثبتة. يجب أن تبقى داخل دليل حزمة Plugin. | -| `openclaw.channel` | بيانات وصفية منخفضة التكلفة لكتالوج القنوات مثل التسميات ومسارات الوثائق والأسماء المستعارة ونصوص الاختيار. | -| `openclaw.channel.configuredState` | بيانات وصفية خفيفة لفاحص الحالة المكوّنة يمكنها الإجابة عن السؤال "هل يوجد إعداد معتمد على البيئة فقط بالفعل؟" من دون تحميل وقت تشغيل القناة الكامل. | -| `openclaw.channel.persistedAuthState` | بيانات وصفية خفيفة لفاحص المصادقة المحفوظة يمكنها الإجابة عن السؤال "هل يوجد أي تسجيل دخول بالفعل؟" من دون تحميل وقت تشغيل القناة الكامل. | -| `openclaw.install.npmSpec` / `openclaw.install.localPath` | تلميحات تثبيت/تحديث للـ Plugins المرفقة والمنشورة خارجيًا. | -| `openclaw.install.defaultChoice` | مسار التثبيت المفضل عند توفر مصادر تثبيت متعددة. | -| `openclaw.install.minHostVersion` | الحد الأدنى المدعوم لإصدار مضيف OpenClaw، باستخدام حد أدنى semver مثل `>=2026.3.22`. | -| `openclaw.install.allowInvalidConfigRecovery` | يسمح بمسار استرداد ضيق لإعادة تثبيت Plugin مرفق عندما يكون التكوين غير صالح. | -| `openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen` | يسمح لأسطح القنوات الخاصة بالإعداد فقط بالتحميل قبل Plugin القناة الكامل أثناء بدء التشغيل. | +| الحقل | ما الذي يعنيه | +| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `openclaw.extensions` | يصرّح بنقاط دخول Plugin الأصلية. يجب أن تبقى داخل دليل حزمة Plugin. | +| `openclaw.runtimeExtensions` | يصرّح بنقاط دخول وقت تشغيل JavaScript المبنية للحزم المثبتة. يجب أن تبقى داخل دليل حزمة Plugin. | +| `openclaw.setupEntry` | نقطة دخول خفيفة للإعداد فقط تُستخدم أثناء الإعداد الأوّلي، وبدء تشغيل القنوات المؤجل، واكتشاف حالة القناة/SecretRef للقراءة فقط. يجب أن تبقى داخل دليل حزمة Plugin. | +| `openclaw.runtimeSetupEntry` | يصرّح بنقطة دخول الإعداد المبنية لـ JavaScript للحزم المثبتة. يجب أن تبقى داخل دليل حزمة Plugin. | +| `openclaw.channel` | بيانات تعريف منخفضة التكلفة لفهرس القناة مثل التسميات ومسارات التوثيق والأسماء المستعارة ونص الاختيار. | +| `openclaw.channel.configuredState` | بيانات تعريف خفيفة لفاحص الحالة المهيّأة يمكنها الإجابة عن السؤال «هل يوجد بالفعل إعداد يعتمد فقط على البيئة؟» من دون تحميل وقت تشغيل القناة الكامل. | +| `openclaw.channel.persistedAuthState` | بيانات تعريف خفيفة لفاحص حالة المصادقة المستمرة يمكنها الإجابة عن السؤال «هل تم بالفعل تسجيل الدخول إلى أي شيء؟» من دون تحميل وقت تشغيل القناة الكامل. | +| `openclaw.install.npmSpec` / `openclaw.install.localPath` | تلميحات التثبيت/التحديث للـ Plugins المضمّنة والمنشورة خارجيًا. | +| `openclaw.install.defaultChoice` | مسار التثبيت المفضل عندما تتوفر مصادر تثبيت متعددة. | +| `openclaw.install.minHostVersion` | الحد الأدنى لإصدار مضيف OpenClaw المدعوم، باستخدام حد semver أدنى مثل `>=2026.3.22`. | +| `openclaw.install.allowInvalidConfigRecovery` | يسمح بمسار استرداد ضيق لإعادة تثبيت Plugin مضمّن عندما تكون الإعدادات غير صالحة. | +| `openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen` | يسمح بتحميل أسطح القناة الخاصة بالإعداد فقط قبل Plugin القناة الكامل أثناء بدء التشغيل. | -يتم فرض `openclaw.install.minHostVersion` أثناء التثبيت وتحميل سجل -البيان. وتُرفض القيم غير الصالحة؛ أما القيم الأحدث لكن الصالحة فتتجاوز +يُفرَض `openclaw.install.minHostVersion` أثناء التثبيت وتحميل سجل +البيان. وتُرفض القيم غير الصالحة؛ أما القيم الأحدث ولكن الصالحة فتتجاوز Plugin على المضيفين الأقدم. -يجب على Plugins القنوات توفير `openclaw.setupEntry` عندما تحتاج الحالة أو قائمة القنوات -أو فحوصات SecretRef إلى تحديد الحسابات المكوّنة من دون تحميل -وقت التشغيل الكامل. يجب أن تعرض نقطة دخول الإعداد بيانات القناة الوصفية بالإضافة إلى -مهايئات التكوين والحالة والأسرار الآمنة للإعداد؛ واحفظ عملاء الشبكة ومستمعي gateway -وأوقات تشغيل النقل في نقطة دخول الامتداد الرئيسية. +يجب على Plugins القنوات توفير `openclaw.setupEntry` عندما تحتاج عمليات فحص الحالة أو قائمة القنوات +أو SecretRef إلى تحديد الحسابات المهيّأة من دون تحميل وقت التشغيل الكامل. +ويجب أن تعرض نقطة دخول الإعداد بيانات تعريف القناة بالإضافة إلى محوّلات الإعداد الآمنة، +والحالة، والأسرار؛ وأبقِ عملاء الشبكة، ومستمعي Gateway، وبيئات تشغيل النقل +في نقطة دخول extension الرئيسية. -لا تتجاوز حقول نقطة دخول وقت التشغيل فحوصات حدود الحزمة لحقول -نقطة دخول المصدر. على سبيل المثال، لا يمكن لـ `openclaw.runtimeExtensions` أن تجعل -مسار `openclaw.extensions` الهارب قابلاً للتحميل. +حقول نقطة دخول وقت التشغيل لا تتجاوز فحوصات حدود الحزمة الخاصة بحقول نقاط +دخول المصدر. على سبيل المثال، لا يمكن لـ `openclaw.runtimeExtensions` أن يجعل +مسار `openclaw.extensions` المتجاوز للحدود قابلًا للتحميل. -إن `openclaw.install.allowInvalidConfigRecovery` ضيق عمدًا. فهو -لا يجعل التكوينات المعطوبة العشوائية قابلة للتثبيت. واليوم يسمح فقط -لتدفقات التثبيت بالتعافي من إخفاقات ترقية معينة قديمة لPlugins المرفقة، مثل -مسار Plugin مرفق مفقود أو إدخال `channels.` قديم لذلك Plugin المرفق نفسه. -أما أخطاء التكوين غير ذات الصلة فلا تزال تمنع التثبيت وتوجّه المشغّلين إلى -`openclaw doctor --fix`. +إن `openclaw.install.allowInvalidConfigRecovery` ضيق النطاق عمدًا. فهو لا +يجعل الإعدادات المعطلة بشكل تعسفي قابلة للتثبيت. وهو اليوم يسمح فقط +لتدفقات التثبيت بالتعافي من أعطال ترقية محددة في Plugins المضمّنة القديمة، مثل +مسار Plugin مضمّن مفقود أو إدخال قديم `channels.` لذلك +Plugin المضمّن نفسه. وتظل أخطاء الإعدادات غير المرتبطة تمنع التثبيت وتوجّه +المشغّلين إلى `openclaw doctor --fix`. -إن `openclaw.channel.persistedAuthState` هو بيانات حزمة وصفية خاصة -بوحدة فاحص صغيرة: +تمثل `openclaw.channel.persistedAuthState` بيانات تعريف حزمة لوحدة فحص صغيرة: ```json { @@ -565,13 +602,13 @@ Plugin على المضيفين الأقدم. } ``` -استخدمه عندما تحتاج تدفقات الإعداد أو doctor أو الحالة المكوّنة إلى -فحص مصادقة منخفض التكلفة بنعم/لا قبل تحميل Plugin القناة الكامل. يجب أن يكون -التصدير المستهدف دالة صغيرة تقرأ الحالة المحفوظة فقط؛ ولا تمرره عبر -الحاوية الكاملة لوقت تشغيل القناة. +استخدمها عندما تحتاج تدفقات الإعداد أو doctor أو الحالة المهيّأة إلى فحص +مصادقة سريع بنعم/لا قبل تحميل Plugin القناة الكامل. ويجب أن يكون التصدير +المستهدف دالة صغيرة تقرأ الحالة المستمرة فقط؛ ولا تمرّرها عبر barrel +وقت تشغيل القناة الكامل. -يتبع `openclaw.channel.configuredState` الشكل نفسه لفحوصات -الحالة المكوّنة منخفضة التكلفة المعتمدة على البيئة فقط: +ويتبع `openclaw.channel.configuredState` الشكل نفسه لفحوصات الحالة المهيّأة +الرخيصة المعتمدة على البيئة فقط: ```json { @@ -587,92 +624,92 @@ Plugin على المضيفين الأقدم. } ``` -استخدمه عندما تستطيع القناة الإجابة عن الحالة المكوّنة من البيئة أو مدخلات -صغيرة أخرى غير وقت التشغيل. وإذا كان الفحص يحتاج إلى حل كامل للتكوين أو إلى -وقت تشغيل القناة الحقيقي، فأبقِ هذا المنطق في hook -`config.hasConfiguredState` الخاص بالـ Plugin بدلًا من ذلك. +استخدمه عندما تستطيع قناة ما الإجابة عن الحالة المهيّأة من البيئة أو من +مدخلات صغيرة أخرى غير وقت التشغيل. وإذا كان الفحص يحتاج إلى حل كامل +للإعدادات أو إلى وقت تشغيل القناة الحقيقي، فأبقِ هذا المنطق في الخطاف +`config.hasConfiguredState` الخاص بـ Plugin بدلًا من ذلك. ## أولوية الاكتشاف (معرّفات Plugin المكررة) -يكتشف OpenClaw Plugins من عدة جذور (مرفقة، وتثبيت عام، ومساحة عمل، ومسارات صريحة محددة في التكوين). إذا اشتركت عمليتا اكتشاف في نفس `id`، فسيتم الاحتفاظ فقط بالبيان ذي **الأولوية الأعلى**؛ أما النسخ المكررة ذات الأولوية الأدنى فيتم إسقاطها بدلًا من تحميلها بجانبه. +يكتشف OpenClaw Plugins من عدة جذور (المضمّنة، والتثبيت العام، ومساحة العمل، والمسارات الصريحة المختارة من الإعدادات). وإذا اشترك اكتشافان في `id` نفسه، فلا يُحتفَظ إلا بالبيان ذي **الأولوية الأعلى**؛ وتُسقَط النسخ المكررة ذات الأولوية الأدنى بدلًا من تحميلها بجانبه. -الأولوية، من الأعلى إلى الأدنى: +ترتيب الأولوية، من الأعلى إلى الأدنى: -1. **محدد في التكوين** — مسار مثبت صراحةً في `plugins.entries.` -2. **مرفق** — Plugins تُشحن مع OpenClaw -3. **تثبيت عام** — Plugins مثبّتة في جذر Plugins العام لـ OpenClaw -4. **مساحة العمل** — Plugins مكتشفة نسبةً إلى مساحة العمل الحالية +1. **المختار من الإعدادات** — مسار مثبّت صراحة في `plugins.entries.` +2. **المضمّن** — Plugins المشحونة مع OpenClaw +3. **التثبيت العام** — Plugins المثبتة في جذر Plugin العام لـ OpenClaw +4. **مساحة العمل** — Plugins المكتشفة نسبة إلى مساحة العمل الحالية الآثار المترتبة: -- لن تؤدي نسخة متفرعة أو قديمة من Plugin مرفق موجودة في مساحة العمل إلى حجب النسخة المرفقة. -- لتجاوز Plugin مرفق فعليًا بنسخة محلية، ثبّته عبر `plugins.entries.` حتى يفوز بالأولوية بدلًا من الاعتماد على اكتشاف مساحة العمل. -- يتم تسجيل إسقاط النسخ المكررة حتى يتمكن Doctor وتشخيصات بدء التشغيل من الإشارة إلى النسخة المستبعدة. +- لن تطغى نسخة متفرعة أو قديمة من Plugin مضمّن موجودة في مساحة العمل على النسخة المضمّنة. +- لتجاوز Plugin مضمّن فعليًا بنسخة محلية، ثبّته عبر `plugins.entries.` لكي يفوز بالأولوية بدلًا من الاعتماد على اكتشاف مساحة العمل. +- تُسجَّل عمليات إسقاط النسخ المكررة حتى يتمكن Doctor وتشخيصات بدء التشغيل من الإشارة إلى النسخة التي تم تجاهلها. ## متطلبات مخطط JSON -- **يجب على كل Plugin أن يوفّر مخطط JSON**، حتى إذا كان لا يقبل أي تكوين. -- يُعد المخطط الفارغ مقبولًا (مثلًا، `{ "type": "object", "additionalProperties": false }`). -- يتم التحقق من صحة المخططات وقت قراءة/كتابة التكوين، وليس وقت التشغيل. +- **يجب على كل Plugin أن يشحن مخطط JSON**، حتى إذا كان لا يقبل أي إعدادات. +- يُقبل مخطط فارغ (على سبيل المثال، `{ "type": "object", "additionalProperties": false }`). +- تُتحقق المخططات عند وقت قراءة/كتابة الإعدادات، وليس عند وقت التشغيل. ## سلوك التحقق -- مفاتيح `channels.*` غير المعروفة هي **أخطاء**، ما لم يكن معرّف القناة مُعلنًا بواسطة +- مفاتيح `channels.*` غير المعروفة تُعد **أخطاء**، ما لم يكن معرّف القناة مصرّحًا به بواسطة بيان Plugin. - يجب أن تشير `plugins.entries.` و`plugins.allow` و`plugins.deny` و`plugins.slots.*` - إلى معرّفات Plugin **قابلة للاكتشاف**. المعرّفات غير المعروفة هي **أخطاء**. -- إذا كان Plugin مثبتًا لكنه يملك بيانًا أو مخططًا معطوبًا أو مفقودًا، + إلى معرّفات Plugin **قابلة للاكتشاف**. وتُعد المعرّفات غير المعروفة **أخطاء**. +- إذا كان Plugin مثبتًا ولكن لديه بيان أو مخطط معطّل أو مفقود، يفشل التحقق ويبلّغ Doctor عن خطأ Plugin. -- إذا كان تكوين Plugin موجودًا لكن Plugin **معطّل**، فيُحتفظ بالتكوين - وتظهر **تحذير** في Doctor + السجلات. +- إذا وُجدت إعدادات Plugin ولكن Plugin **معطّل**، فسيتم الاحتفاظ بالإعدادات + وسيظهر **تحذير** في Doctor + السجلات. -راجع [مرجع التكوين](/ar/gateway/configuration) للاطلاع على مخطط `plugins.*` الكامل. +راجع [مرجع الإعدادات](/ar/gateway/configuration) للاطلاع على مخطط `plugins.*` الكامل. ## ملاحظات -- البيان **مطلوب للـ Plugins الأصلية في OpenClaw**، بما في ذلك التحميل من نظام الملفات المحلي. +- البيان **مطلوب لـ Plugins الأصلية في OpenClaw**، بما في ذلك التحميلات المحلية من نظام الملفات. - لا يزال وقت التشغيل يحمّل وحدة Plugin بشكل منفصل؛ فالبيان مخصص فقط للاكتشاف + التحقق. -- تُحلَّل البيانات الأصلية باستخدام JSON5، لذا تُقبل التعليقات والفواصل اللاحقة - والمفاتيح غير المقتبسة طالما أن القيمة النهائية لا تزال كائنًا. -- لا يقرأ محمّل البيان إلا حقول البيان الموثقة. تجنب إضافة - مفاتيح عليا مخصصة هنا. -- يمثل `providerAuthEnvVars` مسار البيانات الوصفية منخفضة التكلفة لفحوصات المصادقة، والتحقق من - علامات البيئة، والأسطح المشابهة الخاصة بمصادقة المزوّد التي يجب ألا تشغّل - وقت تشغيل Plugin لمجرد فحص أسماء متغيرات البيئة. -- يسمح `providerAuthAliases` لمتغيرات المزوّد بإعادة استخدام متغيرات بيئة - مصادقة مزوّد آخر، وملفات تعريف المصادقة، والمصادقة المدعومة بالتكوين، وخيار الإعداد الأولي لمفتاح API - من دون ترميز هذه العلاقة صراحةً في core. -- يسمح `providerEndpoints` لPlugins المزوّدين بامتلاك بيانات وصفية بسيطة - لمطابقة مضيف نقطة النهاية/`baseUrl`. استخدمه فقط لفئات نقاط النهاية التي يدعمها core - بالفعل؛ ولا يزال Plugin يملك سلوك وقت التشغيل. -- يمثل `syntheticAuthRefs` مسار البيانات الوصفية منخفضة التكلفة - لـ hooks المصادقة الاصطناعية المملوكة للمزوّد التي يجب أن تكون مرئية - لاكتشاف النماذج البارد قبل وجود سجل وقت التشغيل. أدرج فقط المراجع التي ينفذ - مزوّد وقت التشغيل أو الواجهة الخلفية لـ CLI الخاصة بها `resolveSyntheticAuth` فعلًا. -- يمثل `nonSecretAuthMarkers` مسار البيانات الوصفية منخفضة التكلفة - لمفاتيح API النائبة المملوكة للـ plugin المرفق مثل العلامات المحلية أو OAuth أو - بيانات الاعتماد المحيطة. يعاملها core على أنها غير سرية لعرض المصادقة - وتدقيق الأسرار من دون ترميز المزوّد المالك صراحةً. -- يمثل `channelEnvVars` مسار البيانات الوصفية منخفضة التكلفة للتراجع إلى - متغيرات بيئة shell، ومطالبات الإعداد، والأسطح المماثلة للقنوات التي يجب ألا تشغّل - وقت تشغيل Plugin لمجرد فحص أسماء متغيرات البيئة. أسماء متغيرات البيئة هي بيانات وصفية، - وليست تفعيلًا بحد ذاتها: فما زالت الحالة، والتدقيق، والتحقق من تسليم Cron، - والأسطح الأخرى للقراءة فقط تطبق الثقة الخاصة بالـ Plugin وسياسة التفعيل الفعالة قبل أن - تتعامل مع متغير بيئة على أنه قناة مكوّنة. -- يمثل `providerAuthChoices` مسار البيانات الوصفية منخفضة التكلفة لمنتقيات اختيار المصادقة، - وحل `--auth-choice`، وتعيين المزوّد المفضل، وتسجيل أعلام CLI البسيط للإعداد الأولي - قبل تحميل وقت تشغيل المزوّد. وبالنسبة إلى بيانات المعالج الوصفية في وقت التشغيل - التي تتطلب كود المزوّد، راجع - [hooks وقت تشغيل المزوّد](/ar/plugins/architecture#provider-runtime-hooks). -- تُحدَّد أنواع Plugins الحصرية عبر `plugins.slots.*`. +- تُحلَّل البيانات الأصلية باستخدام JSON5، لذا تُقبل التعليقات، والفواصل + اللاحقة، والمفاتيح غير الموضوعة بين علامتَي اقتباس ما دامت القيمة النهائية لا تزال كائنًا. +- لا يقرأ محمّل البيان إلا حقول البيان الموثقة. تجنّب إضافة + مفاتيح مخصصة ذات مستوى أعلى هنا. +- تمثل `providerAuthEnvVars` مسار بيانات التعريف الرخيص لفحوصات المصادقة، والتحقق من + علامات البيئة، وأسطح مصادقة المزوّد المشابهة التي يجب ألا تشغّل وقت تشغيل Plugin + فقط لفحص أسماء متغيرات البيئة. +- تسمح `providerAuthAliases` لمتغيرات المزوّد بإعادة استخدام مصادقة + مزوّد آخر: متغيرات البيئة، وملفات تعريف المصادقة، والمصادقة المدعومة بالإعدادات، وخيار + الإعداد الأوّلي لمفتاح API من دون ترميز تلك العلاقة داخل النواة. +- تسمح `providerEndpoints` لـ Plugins المزوّدين بامتلاك بيانات تعريف بسيطة لمطابقة + `host`/`baseUrl` لنقاط النهاية. استخدمها فقط لفئات نقاط النهاية التي تدعمها النواة + بالفعل؛ وما يزال Plugin يملك سلوك وقت التشغيل. +- تمثل `syntheticAuthRefs` مسار بيانات التعريف الرخيص لخطافات المصادقة الاصطناعية + المملوكة للمزوّد والتي يجب أن تكون مرئية لاكتشاف النماذج البارد قبل وجود + سجل وقت التشغيل. لا تُدرج إلا المراجع التي يطبّق مزوّد وقت التشغيل أو الواجهة الخلفية لـ CLI الخاصة بها + بالفعل `resolveSyntheticAuth`. +- تمثل `nonSecretAuthMarkers` مسار بيانات التعريف الرخيص لعناصر + مفتاح API البديلة المملوكة لـ Plugin المضمّن مثل العلامات المحلية أو OAuth أو بيانات الاعتماد المحيطة. + وتتعامل النواة مع هذه القيم على أنها غير سرية لأغراض عرض المصادقة وتدقيق الأسرار + من دون ترميز المزوّد المالك داخلها. +- تمثل `channelEnvVars` مسار بيانات التعريف الرخيص للاحتياط المعتمد على بيئة الصدفة، + ومطالبات الإعداد، وأسطح القنوات المشابهة التي يجب ألا تشغّل وقت تشغيل Plugin + فقط لفحص أسماء متغيرات البيئة. أسماء متغيرات البيئة هي بيانات تعريف، وليست تفعيلًا + بحد ذاتها: فما تزال أسطح الحالة، والتدقيق، والتحقق من تسليم Cron، وغيرها من الأسطح + المخصّصة للقراءة فقط تطبق سياسة الثقة والتفعيل الفعّال الخاصة بـ Plugin قبل أن + تتعامل مع متغير البيئة على أنه قناة مهيّأة. +- تمثل `providerAuthChoices` مسار بيانات التعريف الرخيص لمنتقيات خيارات المصادقة، + وحل `--auth-choice`، وتخطيط المزوّد المفضل، وتسجيل أعلام + CLI البسيطة للإعداد الأوّلي قبل تحميل وقت تشغيل المزوّد. أما بالنسبة إلى بيانات تعريف معالج + وقت التشغيل التي تتطلب كود المزوّد، فراجع + [خطافات وقت تشغيل المزوّد](/ar/plugins/architecture#provider-runtime-hooks). +- تُختار أنواع Plugin الحصرية عبر `plugins.slots.*`. - يتم اختيار `kind: "memory"` بواسطة `plugins.slots.memory`. - - يتم اختيار `kind: "context-engine"` بواسطة `plugins.slots.contextEngine` - (الافتراضي: `legacy` المدمج). -- يمكن حذف `channels` و`providers` و`cliBackends` و`skills` عندما - لا يحتاج Plugin إليها. + - ويتم اختيار `kind: "context-engine"` بواسطة `plugins.slots.contextEngine` + (الافتراضي: `legacy` المضمّن). +- يمكن حذف `channels` و`providers` و`cliBackends` و`skills` عندما لا + يحتاجها Plugin. - إذا كان Plugin الخاص بك يعتمد على وحدات أصلية، فوثّق خطوات البناء وأي - متطلبات قائمة سماح خاصة بمدير الحزم (على سبيل المثال، pnpm `allow-build-scripts` + متطلبات قائمة سماح لمدير الحزم (على سبيل المثال، `allow-build-scripts` في pnpm - `pnpm rebuild `). ## ذو صلة diff --git a/docs/ar/plugins/sdk-agent-harness.md b/docs/ar/plugins/sdk-agent-harness.md index 36ed7eb25..263650c02 100644 --- a/docs/ar/plugins/sdk-agent-harness.md +++ b/docs/ar/plugins/sdk-agent-harness.md @@ -1,59 +1,59 @@ --- read_when: - - أنت تغيّر وقت تشغيل الوكيل المضمّن أو سجل Harness الخاص به - - أنت تسجّل Harness وكيل من مكوّن إضافي مضمّن أو موثوق به - - تحتاج إلى فهم كيفية ارتباط مكوّن Codex الإضافي بموفري النماذج + - أنت تغيّر وقت تشغيل الوكيل المضمّن أو سجل أداة التسخير الخاص به + - أنت تسجّل أداة تسخير وكيل من Plugin مضمّنة أو موثوقة + - تحتاج إلى فهم كيفية ارتباط Plugin Codex بموفّري النماذج sidebarTitle: Agent Harness -summary: سطح SDK تجريبي للمكوّنات الإضافية التي تستبدل منفّذ الوكيل المضمّن منخفض المستوى -title: مكوّنات Harness الإضافية للوكيل +summary: واجهة SDK تجريبية للإضافات التي تستبدل منفّذ الوكيل المضمّن منخفض المستوى +title: إضافات أداة تسخير الوكيل x-i18n: - generated_at: "2026-04-12T00:18:56Z" + generated_at: "2026-04-22T07:17:54Z" model: gpt-5.4 provider: openai - source_hash: 62b88fd24ce8b600179db27e16e8d764a2cd7a14e5c5df76374c33121aa5e365 + source_hash: 728fef59ae3cce29a3348842820f1f71a2eac98ae6b276179bce6c85d16613df source_path: plugins/sdk-agent-harness.md workflow: 15 --- -# مكوّنات Agent Harness الإضافية +# إضافات أداة تسخير الوكيل -يُعد **agent harness** المنفّذ منخفض المستوى لدورة واحدة مُحضّرة لوكيل OpenClaw. -وهو ليس موفر نماذج، وليس قناة، وليس سجل أدوات. +**أداة تسخير الوكيل** هي المنفّذ منخفض المستوى لدورة واحدة مُحضّرة من وكيل OpenClaw. +وهي ليست موفّر نماذج، وليست قناة، وليست سجل أدوات. -استخدم هذا السطح فقط للمكوّنات الإضافية الأصلية المضمّنة أو الموثوق بها. لا يزال -هذا التعاقد تجريبيًا لأن أنواع المعاملات تعكس عمدًا المنفّذ المضمّن الحالي. +استخدم هذه الواجهة فقط مع Plugins أصلية مضمّنة أو موثوقة. لا يزال هذا العقد +تجريبيًا لأن أنواع المعاملات تعكس عمدًا المنفّذ المضمّن الحالي. -## متى تستخدم harness +## متى تستخدم أداة تسخير -سجّل agent harness عندما تكون لعائلة نماذج ما بيئة جلسات أصلية خاصة بها -ويكون نقل موفر OpenClaw العادي تجريدًا غير مناسب. +سجّل أداة تسخير وكيل عندما تمتلك عائلة نماذج وقت تشغيل جلسة أصليًا خاصًا بها +ويكون نقل الموفّر العادي في OpenClaw تجريدًا غير مناسب. أمثلة: -- خادم coding-agent أصلي يملك سلاسل التنفيذ والضغط -- CLI أو daemon محلي يجب أن يبث أحداث الخطة/الاستدلال/الأدوات الأصلية -- بيئة تشغيل نموذج تحتاج إلى معرّف استئناف خاص بها بالإضافة إلى - نص جلسة OpenClaw +- خادم وكيل برمجة أصلي يمتلك سلاسل المحادثة وCompaction +- CLI أو خدمة daemon محلية يجب أن تبث أحداث الخطة/الاستدلال/الأدوات الأصلية +- وقت تشغيل نموذج يحتاج إلى معرّف استئناف خاص به بالإضافة إلى + نص الجلسة في OpenClaw -**لا** تسجّل harness لمجرد إضافة واجهة API جديدة لـ LLM. بالنسبة لواجهات -HTTP أو WebSocket العادية للنماذج، أنشئ [مكوّن provider إضافي](/ar/plugins/sdk-provider-plugins). +**لا** تسجّل أداة تسخير فقط لإضافة واجهة API جديدة لـ LLM. بالنسبة إلى واجهات API +العادية للنماذج عبر HTTP أو WebSocket، أنشئ [Plugin موفّر](/ar/plugins/sdk-provider-plugins). -## ما الذي لا يزال core يملكه +## ما الذي لا يزال الأساس يمتلكه -قبل اختيار harness، يكون OpenClaw قد حدّد بالفعل: +قبل اختيار أداة تسخير، يكون OpenClaw قد حدّد بالفعل: -- الموفر والنموذج -- حالة المصادقة في وقت التشغيل +- الموفّر والنموذج +- حالة المصادقة وقت التشغيل - مستوى التفكير وميزانية السياق -- ملف النص/جلسة OpenClaw -- مساحة العمل وsandbox وسياسة الأدوات -- عمليات رد القناة وعمليات البث -- سياسة الرجوع إلى نموذج بديل والتبديل بين النماذج الحية +- ملف النص/الجلسة الخاص بـ OpenClaw +- مساحة العمل، وsandbox، وسياسة الأدوات +- استدعاءات رد القناة واستدعاءات البث +- سياسة الرجوع إلى نموذج بديل والتبديل الحي للنموذج -هذا التقسيم مقصود. يقوم harness بتشغيل محاولة مُحضّرة؛ ولا يختار -الموفرين، ولا يستبدل تسليم القنوات، ولا يبدّل النماذج بصمت. +هذا الفصل مقصود. أداة التسخير تشغّل محاولة مُحضّرة؛ ولا تختار +الموفّرين، ولا تستبدل تسليم القناة، ولا تبدّل النماذج بصمت. -## تسجيل harness +## تسجيل أداة تسخير **الاستيراد:** `openclaw/plugin-sdk/agent-harness` @@ -91,84 +91,88 @@ export default definePluginEntry({ ## سياسة الاختيار -يختار OpenClaw harness بعد تحديد الموفر/النموذج: +يختار OpenClaw أداة تسخير بعد تحديد الموفّر/النموذج: -1. يفرض `OPENCLAW_AGENT_RUNTIME=` استخدام harness مسجّل بهذا المعرّف. -2. يفرض `OPENCLAW_AGENT_RUNTIME=pi` استخدام harness المدمج PI. -3. يطلب `OPENCLAW_AGENT_RUNTIME=auto` من الـ harnesses المسجّلة ما إذا كانت تدعم - الموفر/النموذج الذي تم تحديده. -4. إذا لم يطابق أي harness مسجّل، يستخدم OpenClaw PI ما لم يكن الرجوع إلى PI +1. `OPENCLAW_AGENT_RUNTIME=` يفرض أداة تسخير مسجّلة بذلك المعرّف. +2. `OPENCLAW_AGENT_RUNTIME=pi` يفرض أداة تسخير PI المضمّنة. +3. `OPENCLAW_AGENT_RUNTIME=auto` يطلب من أدوات التسخير المسجّلة ما إذا كانت تدعم + الموفّر/النموذج الذي تم تحديده. +4. إذا لم تتطابق أي أداة تسخير مسجّلة، يستخدم OpenClaw PI ما لم يكن الرجوع إلى PI معطّلًا. -تظهر أعطال harness الخاص بالمكوّن الإضافي المفروض كأعطال تشغيل. في وضع `auto`، -قد يرجع OpenClaw إلى PI عندما يفشل harness المحدد من المكوّن الإضافي قبل أن -تنتج الدورة آثارًا جانبية. عيّن `OPENCLAW_AGENT_HARNESS_FALLBACK=none` أو -`embeddedHarness.fallback: "none"` لجعل هذا الرجوع فشلًا صارمًا بدلًا من ذلك. +تظهر أعطال أداة التسخير التابعة لـ Plugin كأعطال تشغيل. في وضع `auto`، لا يُستخدم +الرجوع إلى PI إلا عندما لا تدعم أي أداة تسخير Plugin مسجّلة +الموفّر/النموذج الذي تم تحديده. بمجرد أن تعلن أداة تسخير Plugin عن امتلاكها +للتشغيل، لا يعيد OpenClaw تشغيل الدورة نفسها عبر PI لأن ذلك قد يغيّر +دلالات المصادقة/وقت التشغيل أو يكرر الآثار الجانبية. -يسجّل مكوّن Codex الإضافي المضمّن `codex` كمعرّف harness له. ويتعامل core مع ذلك -باعتباره معرّف harness عاديًا لمكوّن إضافي؛ أما الأسماء المستعارة الخاصة بـ Codex -فينبغي أن تكون ضمن المكوّن الإضافي أو إعدادات المشغّل، لا في محدد وقت التشغيل المشترك. +تسجّل Plugin Codex المضمّنة `codex` بوصفه معرّف أداة التسخير الخاصة بها. يتعامل +الأساس مع ذلك بوصفه معرّف أداة تسخير Plugin عاديًا؛ أما الأسماء المستعارة +الخاصة بـ Codex فمكانها داخل Plugin أو إعدادات المشغّل، وليس في محدِّد +وقت التشغيل المشترك. -## إقران provider مع harness +## إقران الموفّر مع أداة التسخير -ينبغي لمعظم الـ harnesses أيضًا تسجيل provider. يجعل provider مراجع النماذج، -وحالة المصادقة، وبيانات النموذج الوصفية، واختيار `/model` مرئية لباقي OpenClaw. -ثم يطالب harness بهذا الموفر في `supports(...)`. +ينبغي لمعظم أدوات التسخير أن تسجّل أيضًا موفّرًا. يتيح الموفّر +مراجع النماذج، وحالة المصادقة، وبيانات النموذج الوصفية، واختيار `/model` +لبقية OpenClaw. ثم تعلن أداة التسخير امتلاكها لهذا الموفّر في `supports(...)`. -يتبع مكوّن Codex الإضافي المضمّن هذا النمط: +تتبع Plugin Codex المضمّنة هذا النمط: -- معرّف provider: `codex` +- معرّف الموفّر: `codex` - مراجع النماذج للمستخدم: `codex/gpt-5.4` و`codex/gpt-5.2` أو نموذج آخر يعيده خادم تطبيق Codex -- معرّف harness: `codex` -- المصادقة: إتاحة موفر تركيبية، لأن Codex harness يملك تسجيل الدخول/الجلسة الأصلية لـ Codex -- طلب خادم التطبيق: يرسل OpenClaw معرّف النموذج المجرد إلى Codex ويترك - لـ harness التحدث مع بروتوكول خادم التطبيق الأصلي +- معرّف أداة التسخير: `codex` +- المصادقة: إتاحة موفّر اصطناعية، لأن أداة تسخير Codex تمتلك + تسجيل الدخول/الجلسة الأصلية لـ Codex +- طلب خادم التطبيق: يرسل OpenClaw معرّف النموذج الخام إلى Codex ويترك + لأداة التسخير التحدّث إلى بروتوكول خادم التطبيق الأصلي -مكوّن Codex الإضافي ذو طبيعة إضافية. تظل مراجع `openai/gpt-*` العادية -مراجع لموفر OpenAI وتستمر في استخدام مسار موفر OpenClaw العادي. اختر `codex/gpt-*` -عندما تريد مصادقة مُدارة بواسطة Codex، واكتشاف نماذج Codex، وسلاسل تنفيذ أصلية، +Plugin Codex إضافية. تظل مراجع `openai/gpt-*` العادية مراجع لموفّر OpenAI +وتستمر في استخدام مسار موفّر OpenClaw المعتاد. اختر `codex/gpt-*` +عندما تريد مصادقة مُدارة من Codex، واكتشاف نماذج Codex، وسلاسل محادثة أصلية، وتنفيذ خادم تطبيق Codex. يمكن لـ `/model` التبديل بين نماذج Codex التي يعيدها -خادم تطبيق Codex من دون الحاجة إلى بيانات اعتماد موفر OpenAI. +خادم تطبيق Codex من دون الحاجة إلى بيانات اعتماد موفّر OpenAI. -لإعدادات المشغّل، وأمثلة بادئات النماذج، وإعدادات Codex فقط، راجع -[Codex Harness](/ar/plugins/codex-harness). +لإعداد المشغّل، وأمثلة بادئات النماذج، وإعدادات Codex فقط، راجع +[أداة تسخير Codex](/ar/plugins/codex-harness). -يتطلب OpenClaw إصدار Codex app-server `0.118.0` أو أحدث. يتحقق مكوّن Codex -الإضافي من مصافحة التهيئة مع app-server ويحظر الخوادم الأقدم أو غير المرقمة -حتى لا يعمل OpenClaw إلا على سطح البروتوكول الذي جرى اختباره معه. +يتطلب OpenClaw إصدار Codex app-server `0.118.0` أو أحدث. تتحقق Plugin Codex +من مصافحة تهيئة خادم التطبيق وتمنع الخوادم الأقدم أو غير ذات الإصدار +بحيث يعمل OpenClaw فقط مع سطح البروتوكول الذي تم اختباره معه. -### وضع Codex harness الأصلي +### وضع أداة تسخير Codex الأصلية -يُعد `codex` harness المضمّن وضع Codex الأصلي لدورات وكلاء OpenClaw المضمّنة. -فعّل مكوّن `codex` الإضافي المضمّن أولًا، وأدرج `codex` في -`plugins.allow` إذا كان إعدادك يستخدم قائمة سماح مقيّدة. وهو يختلف عن -`openai-codex/*`: +أداة التسخير المضمّنة `codex` هي وضع Codex الأصلي لدورات وكيل OpenClaw +المضمّنة. فعّل Plugin `codex` المضمّنة أولًا، وأدرج `codex` ضمن +`plugins.allow` إذا كان إعدادك يستخدم قائمة سماح مقيّدة. وهي تختلف +عن `openai-codex/*`: -- يستخدم `openai-codex/*` OAuth الخاص بـ ChatGPT/Codex عبر مسار موفر OpenClaw العادي. -- يستخدم `codex/*` موفر Codex المضمّن ويوجّه الدورة عبر Codex +- يستخدم `openai-codex/*` OAuth الخاص بـ ChatGPT/Codex عبر مسار موفّر OpenClaw + المعتاد. +- يستخدم `codex/*` موفّر Codex المضمّن ويوجّه الدورة عبر Codex app-server. -عند تشغيل هذا الوضع، يملك Codex معرّف سلسلة التنفيذ الأصلية، وسلوك الاستئناف، -والضغط، وتنفيذ app-server. ولا يزال OpenClaw يملك قناة الدردشة، -ومرآة النص الظاهرة، وسياسة الأدوات، والموافقات، وتسليم الوسائط، واختيار -الجلسة. استخدم `embeddedHarness.runtime: "codex"` مع -`embeddedHarness.fallback: "none"` عندما تحتاج إلى إثبات أن مسار Codex -app-server مستخدم وأن الرجوع إلى PI لا يخفي harness أصليًا معطّلًا. +عند تشغيل هذا الوضع، يمتلك Codex معرّف سلسلة المحادثة الأصلي، وسلوك +الاستئناف، وCompaction، وتنفيذ خادم التطبيق. ولا يزال OpenClaw يمتلك قناة +الدردشة، ومرآة النص الظاهرة، وسياسة الأدوات، وعمليات الموافقة، وتسليم الوسائط، +واختيار الجلسة. استخدم `embeddedHarness.runtime: "codex"` مع +`embeddedHarness.fallback: "none"` عندما تحتاج إلى إثبات أن +مسار Codex app-server فقط هو الذي يمكنه امتلاك التشغيل. هذا الإعداد +ليس سوى حاجز اختيار: فأعطال Codex app-server تتسبب بالفعل في الفشل مباشرة +بدلًا من إعادة المحاولة عبر PI. ## تعطيل الرجوع إلى PI -بشكل افتراضي، يشغّل OpenClaw الوكلاء المضمّنين مع تعيين `agents.defaults.embeddedHarness` -إلى `{ runtime: "auto", fallback: "pi" }`. في وضع `auto`، يمكن لـ harnesses -المسجّلة من المكوّنات الإضافية المطالبة بزوج موفر/نموذج. إذا لم يطابق أي منها، -أو إذا فشل harness لمكوّن إضافي تم اختياره تلقائيًا قبل إنتاج أي مخرجات، -يرجع OpenClaw إلى PI. +افتراضيًا، يشغّل OpenClaw الوكلاء المضمّنين مع تعيين `agents.defaults.embeddedHarness` +إلى `{ runtime: "auto", fallback: "pi" }`. في وضع `auto`، يمكن لأدوات تسخير +Plugins المسجّلة امتلاك زوج موفّر/نموذج. وإذا لم يتطابق أي منها، يرجع OpenClaw إلى PI. -عيّن `fallback: "none"` عندما تحتاج إلى إثبات أن harness الخاص بالمكوّن الإضافي -هو وقت التشغيل الوحيد الجاري استخدامه. يؤدي ذلك إلى تعطيل الرجوع التلقائي إلى PI؛ -لكنه لا يمنع `runtime: "pi"` الصريح أو `OPENCLAW_AGENT_RUNTIME=pi`. +عيّن `fallback: "none"` عندما تحتاج إلى أن يفشل غياب اختيار أداة تسخير Plugin +بدلًا من استخدام PI. أما أعطال أداة تسخير Plugin المختارة فتفشل بالفعل بشكل +صارم. وهذا لا يمنع `runtime: "pi"` الصريح أو `OPENCLAW_AGENT_RUNTIME=pi`. -لتشغيلات مضمّنة خاصة بـ Codex: +لتشغيلات مضمّنة تعتمد على Codex فقط: ```json { @@ -184,8 +188,8 @@ app-server مستخدم وأن الرجوع إلى PI لا يخفي harness أص } ``` -إذا كنت تريد أن تطالب أي harness مسجّل من المكوّنات الإضافية بالنماذج المطابقة ولكنك -لا تريد أبدًا أن يرجع OpenClaw بصمت إلى PI، فأبقِ `runtime: "auto"` وعطّل +إذا كنت تريد أن تمتلك أي أداة تسخير Plugin مسجّلة النماذج المطابقة لكنك لا تريد +أن يرجع OpenClaw بصمت إلى PI مطلقًا، فأبقِ `runtime: "auto"` وعطّل الرجوع: ```json @@ -226,8 +230,8 @@ app-server مستخدم وأن الرجوع إلى PI لا يخفي harness أص } ``` -لا يزال `OPENCLAW_AGENT_RUNTIME` يتجاوز وقت التشغيل المكوَّن. استخدم -`OPENCLAW_AGENT_HARNESS_FALLBACK=none` لتعطيل الرجوع إلى PI من +لا يزال `OPENCLAW_AGENT_RUNTIME` يتجاوز وقت التشغيل المضبوط في الإعداد. +استخدم `OPENCLAW_AGENT_HARNESS_FALLBACK=none` لتعطيل الرجوع إلى PI من البيئة. ```bash @@ -236,53 +240,54 @@ OPENCLAW_AGENT_HARNESS_FALLBACK=none \ openclaw gateway run ``` -مع تعطيل الرجوع، تفشل الجلسة مبكرًا عندما لا يكون harness المطلوب -مسجّلًا، أو لا يدعم الموفر/النموذج الذي تم تحديده، أو يفشل قبل -إنتاج آثار جانبية للدورة. وهذا مقصود لعمليات النشر الخاصة بـ Codex فقط -ولاختبارات live التي يجب أن تثبت أن مسار Codex app-server قيد الاستخدام فعلًا. +عند تعطيل الرجوع، تفشل الجلسة مبكرًا عندما لا تكون أداة التسخير المطلوبة +مسجّلة، أو لا تدعم الموفّر/النموذج الذي تم تحديده، أو تفشل قبل +إنتاج آثار جانبية للدورة. وهذا مقصود لبيئات النشر التي تعتمد على Codex فقط +وللاختبارات الحية التي يجب أن تثبت أن مسار Codex app-server مستخدم بالفعل. -يتحكم هذا الإعداد فقط في embedded agent harness. ولا يعطّل -توجيه النماذج الخاص بالموفر للصور أو الفيديو أو الموسيقى أو TTS أو PDF أو غيرها. +يتحكم هذا الإعداد فقط في أداة تسخير الوكيل المضمّنة. وهو لا يعطّل +توجيه النماذج الخاص بالموفّر للصور أو الفيديو أو الموسيقى أو TTS أو PDF +أو غير ذلك. ## الجلسات الأصلية ومرآة النص -قد يحتفظ harness بمعرّف جلسة أصلي، أو معرّف سلسلة تنفيذ، أو رمز استئناف -على جانب daemon. أبقِ هذا الارتباط مقترنًا صراحةً بجلسة OpenClaw، واستمر +قد تحتفظ أداة التسخير بمعرّف جلسة أصلي، أو معرّف سلسلة محادثة، أو رمز استئناف +على جانب الخدمة. احتفظ بهذا الارتباط مرتبطًا صراحة بجلسة OpenClaw، واستمر في عكس مخرجات المساعد/الأداة الظاهرة للمستخدم إلى نص OpenClaw. -يبقى نص OpenClaw طبقة التوافق من أجل: +يظل نص OpenClaw طبقة التوافق من أجل: - سجل الجلسة الظاهر في القناة - البحث في النص وفهرسته -- العودة إلى harness المدمج PI في دورة لاحقة -- السلوك العام لـ `/new` و`/reset` وحذف الجلسة +- العودة إلى أداة تسخير PI المضمّنة في دورة لاحقة +- سلوك `/new` و`/reset` وحذف الجلسة العام -إذا كان harness يخزن ارتباطًا جانبيًا، فنفّذ `reset(...)` حتى يتمكن OpenClaw من -مسحه عند إعادة تعيين جلسة OpenClaw المالكة له. +إذا كانت أداة التسخير تخزّن ارتباطًا جانبيًا، فنفّذ `reset(...)` بحيث يتمكن OpenClaw +من مسحه عند إعادة تعيين جلسة OpenClaw المالكة. ## نتائج الأدوات والوسائط -يبني core قائمة أدوات OpenClaw ويمررها إلى المحاولة المُحضّرة. -عندما ينفّذ harness استدعاء أداة ديناميكيًا، أعد نتيجة الأداة عبر -صيغة نتيجة harness بدلًا من إرسال وسائط القناة بنفسك. +ينشئ الأساس قائمة أدوات OpenClaw ويمررها إلى المحاولة المُحضّرة. +عندما تنفّذ أداة تسخير استدعاء أداة ديناميكيًا، فأعد نتيجة الأداة عبر +شكل نتيجة أداة التسخير بدلًا من إرسال وسائط القناة بنفسك. -يحافظ ذلك على مخرجات النص والصورة والفيديو والموسيقى وTTS والموافقة وأدوات المراسلة -ضمن مسار التسليم نفسه كما في التشغيلات المدعومة بـ PI. +يحافظ ذلك على النص، والصورة، والفيديو، والموسيقى، وTTS، والموافقة، ومخرجات +أدوات المراسلة على مسار التسليم نفسه مثل التشغيلات المدعومة بـ PI. ## القيود الحالية -- مسار الاستيراد العام عام، لكن بعض الأسماء المستعارة لأنواع المحاولة/النتيجة لا تزال - تحمل أسماء `Pi` من أجل التوافق. -- تثبيت harnesses الخارجية تجريبي. فضّل مكوّنات provider الإضافية - إلى أن تحتاج إلى بيئة جلسات أصلية. -- التبديل بين harnesses مدعوم عبر الدورات. لا تبدّل بين harnesses في - منتصف الدورة بعد بدء الأدوات الأصلية أو الموافقات أو نص المساعد أو إرسال - الرسائل. +- مسار الاستيراد العام عامّ، لكن بعض الأسماء المستعارة لأنواع المحاولة/النتيجة لا تزال + تحمل أسماء `Pi` حفاظًا على التوافق. +- تثبيت أدوات التسخير التابعة لجهات خارجية تجريبي. فضّل Plugins الموفّرين + إلى أن تحتاج إلى وقت تشغيل جلسة أصلي. +- التبديل بين أدوات التسخير مدعوم عبر الدورات. لا تبدّل أدوات التسخير في + منتصف دورة بعد بدء الأدوات الأصلية، أو الموافقات، أو نص المساعد، أو عمليات + إرسال الرسائل. ## ذو صلة - [نظرة عامة على SDK](/ar/plugins/sdk-overview) - [مساعدات وقت التشغيل](/ar/plugins/sdk-runtime) -- [مكوّنات Provider الإضافية](/ar/plugins/sdk-provider-plugins) -- [Codex Harness](/ar/plugins/codex-harness) -- [موفرو النماذج](/ar/concepts/model-providers) +- [Plugins الموفّرين](/ar/plugins/sdk-provider-plugins) +- [أداة تسخير Codex](/ar/plugins/codex-harness) +- [موفّرو النماذج](/ar/concepts/model-providers) diff --git a/docs/ar/plugins/sdk-channel-plugins.md b/docs/ar/plugins/sdk-channel-plugins.md index 44594364a..48c1210e2 100644 --- a/docs/ar/plugins/sdk-channel-plugins.md +++ b/docs/ar/plugins/sdk-channel-plugins.md @@ -1,114 +1,120 @@ --- read_when: - - أنت تبني Plugin قناة مراسلة جديدة + - أنت تبني Plugin جديدًا لقناة مراسلة - تريد ربط OpenClaw بمنصة مراسلة - - تحتاج إلى فهم سطح المهايئ ChannelPlugin + - تحتاج إلى فهم واجهة المهايئ `ChannelPlugin` sidebarTitle: Channel Plugins -summary: دليل خطوة بخطوة لبناء Plugin قناة مراسلة لـ OpenClaw +summary: دليل خطوة بخطوة لإنشاء Plugin لقناة مراسلة لـ OpenClaw title: بناء Plugins القنوات x-i18n: - generated_at: "2026-04-22T04:25:25Z" + generated_at: "2026-04-22T07:18:18Z" model: gpt-5.4 provider: openai - source_hash: f08bf785cd2e16ed6ce0317f4fd55c9eccecf7476d84148ad47e7be516dd71fb + source_hash: e67d8c4be8cc4a312e5480545497b139c27bed828304de251e6258a3630dd9b5 source_path: plugins/sdk-channel-plugins.md workflow: 15 --- # بناء Plugins القنوات -يرشدك هذا الدليل خلال بناء Plugin قناة يربط OpenClaw بمنصة -مراسلة. وبنهاية هذا الدليل سيكون لديك قناة عاملة مع أمان الرسائل المباشرة، +يرشدك هذا الدليل خلال بناء Plugin لقناة يربط OpenClaw بمنصة مراسلة. +وبحلول النهاية سيكون لديك قناة عاملة تتضمن أمان الرسائل المباشرة، والاقتران، وتسلسل الردود، والمراسلة الصادرة. - إذا لم تكن قد بنيت أي Plugin لـ OpenClaw من قبل، فاقرأ أولًا - [البدء](/ar/plugins/building-plugins) لمعرفة بنية الحزمة الأساسية - وإعداد البيان. + إذا لم تكن قد بنيت أي Plugin لـ OpenClaw من قبل، فاقرأ + [البدء](/ar/plugins/building-plugins) أولًا للتعرف على بنية + الحزمة الأساسية وإعداد manifest. ## كيف تعمل Plugins القنوات لا تحتاج Plugins القنوات إلى أدوات send/edit/react خاصة بها. يحتفظ OpenClaw -بأداة `message` مشتركة واحدة في Core. ويتولى Plugin الخاص بك ما يلي: +بأداة `message` واحدة مشتركة في النواة. ويتولى Plugin الخاص بك ما يلي: -- **التكوين** — حل الحسابات ومعالج الإعداد +- **الإعداد** — حلّ الحساب ومعالج الإعداد - **الأمان** — سياسة الرسائل المباشرة وقوائم السماح - **الاقتران** — تدفق الموافقة على الرسائل المباشرة -- **قواعد الجلسة** — كيفية ربط معرّفات المحادثات الخاصة بالمزوّد بالمحادثات الأساسية، ومعرّفات السلاسل، وعمليات الرجوع إلى الأصل -- **الصادر** — إرسال النصوص والوسائط والاستطلاعات إلى المنصة -- **التسلسل** — كيفية تسلسل الردود +- **قواعد الجلسة** — كيفية ربط معرّفات المحادثات الخاصة بالموفر بالدردشات الأساسية ومعرّفات السلاسل وبدائل الأصل +- **الإرسال الصادر** — إرسال النصوص والوسائط والاستطلاعات إلى المنصة +- **التسلسل** — كيفية تنظيم الردود ضمن سلاسل +- **كتابة Heartbeat** — إشارات الكتابة/الانشغال الاختيارية لأهداف تسليم Heartbeat -يمتلك Core أداة الرسائل المشتركة، وتوصيل المطالبات، وشكل مفتاح الجلسة الخارجي، -وسجل `:thread:` العام، والتوزيع. +تتولى النواة أداة الرسائل المشتركة، وربط المطالبات، والشكل الخارجي لمفتاح الجلسة، +وتتبّع `:thread:` العام، والتوزيع. -إذا كانت قناتك تضيف معلمات لأداة الرسائل تحمل مصادر وسائط، فاكشف أسماء -هذه المعلمات عبر `describeMessageTool(...).mediaSourceParams`. يستخدم Core هذه -القائمة الصريحة لتطبيع مسارات sandbox ولسياسة الوصول إلى الوسائط الصادرة، -بحيث لا تحتاج Plugins إلى حالات خاصة في Core المشتركة لمعلمات -الصورة الرمزية أو المرفقات أو صور الغلاف الخاصة بالمزوّد. -ويُفضَّل إرجاع خريطة مفهرسة بالمفاتيح الإجرائية مثل -`{ "set-profile": ["avatarUrl", "avatarPath"] }` حتى لا ترث الإجراءات غير المرتبطة -معلمات الوسائط التابعة لإجراء آخر. وتظل المصفوفة المسطحة تعمل للمعلمات -المشتركة عمدًا بين كل الإجراءات المكشوفة. +إذا كانت قناتك تدعم مؤشرات الكتابة خارج الردود الواردة، فكشف +`heartbeat.sendTyping(...)` على Plugin القناة. تستدعيه النواة مع +هدف تسليم Heartbeat المحسوم قبل بدء تشغيل نموذج Heartbeat وتستخدم +دورة الحياة المشتركة للإبقاء على الكتابة/تنظيفها. أضف `heartbeat.clearTyping(...)` +عندما تحتاج المنصة إلى إشارة توقف صريحة. -إذا كانت منصتك تخزن نطاقًا إضافيًا داخل معرّفات المحادثات، فأبقِ هذا التحليل -داخل Plugin باستخدام `messaging.resolveSessionConversation(...)`. فهذا هو الخطاف -المرجعي لربط `rawId` بمعرّف المحادثة الأساسي، ومعرّف السلسلة الاختياري، -و`baseConversationId` الصريح، وأي `parentConversationCandidates`. -وعندما تُرجع `parentConversationCandidates`، فأبقِ ترتيبها من -الأصل الأضيق إلى المحادثة الأساسية/الأوسع. +إذا كانت قناتك تضيف معاملات message tool تحمل مصادر وسائط، فكشف أسماء +هذه المعاملات عبر `describeMessageTool(...).mediaSourceParams`. تستخدم النواة +هذه القائمة الصريحة لتطبيع مسارات sandbox ولسياسة الوصول إلى الوسائط الصادرة، +بحيث لا تحتاج Plugins إلى حالات خاصة في النواة المشتركة لمعاملات الصور +الرمزية أو المرفقات أو صور الغلاف الخاصة بموفر معين. +يُفضّل إرجاع خريطة مفاتيحها هي الإجراءات مثل +`{ "set-profile": ["avatarUrl", "avatarPath"] }` +حتى لا ترث الإجراءات غير المرتبطة معاملات الوسائط الخاصة بإجراء آخر. +ولا تزال المصفوفة المسطحة تعمل للمعاملات التي يُقصد مشاركتها عمدًا بين +كل إجراء مكشوف. -يمكن أيضًا للPlugins المضمّنة التي تحتاج إلى التحليل نفسه قبل إقلاع سجل -القنوات أن تكشف ملف `session-key-api.ts` على المستوى الأعلى مع -تصدير مطابق لـ `resolveSessionConversation(...)`. -يستخدم Core هذا السطح الآمن للإقلاع فقط عندما لا يكون سجل Plugins وقت التشغيل -متاحًا بعد. +إذا كانت منصتك تخزن نطاقًا إضافيًا داخل معرّفات المحادثة، فأبقِ هذا التحليل +داخل Plugin عبر `messaging.resolveSessionConversation(...)`. فهذه هي +الخطاف القياسي لربط `rawId` بمعرّف المحادثة الأساسي ومعرّف السلسلة الاختياري +و`baseConversationId` الصريح وأي `parentConversationCandidates`. +وعند إرجاع `parentConversationCandidates`، أبقِ ترتيبها من الأصل الأضيق +إلى المحادثة الأوسع/الأساسية. -يبقى `messaging.resolveParentConversationCandidates(...)` متاحًا كرجوع -توافقي قديم عندما يحتاج Plugin فقط إلى عمليات رجوع إلى الأصل فوق -المعرّف الخام/العام. وإذا وُجد الخطافان معًا، يستخدم Core -`resolveSessionConversation(...).parentConversationCandidates` أولًا ثم -لا يعود إلى `resolveParentConversationCandidates(...)` إلا عندما يحذفها -الخطاف المرجعي. +يمكن أيضًا للـ Plugins المضمّنة التي تحتاج إلى التحليل نفسه قبل إقلاع +سجل القنوات أن تكشف ملف `session-key-api.ts` على المستوى الأعلى مع +تصدير `resolveSessionConversation(...)` مطابق. تستخدم النواة هذه الواجهة +الآمنة لمرحلة الإقلاع فقط عندما لا يكون سجل Plugins وقت التشغيل متاحًا بعد. -## الموافقات وإمكانات القناة +يبقى `messaging.resolveParentConversationCandidates(...)` متاحًا كبديل +توافقي قديم عندما يحتاج Plugin فقط إلى بدائل الأصل فوق المعرف العام/الخام. +إذا وُجد الخطافان معًا، تستخدم النواة +`resolveSessionConversation(...).parentConversationCandidates` أولًا ولا +تعود إلى `resolveParentConversationCandidates(...)` إلا إذا أغفل الخطاف +القياسي هذه القيم. -معظم Plugins القنوات لا تحتاج إلى كود خاص بالموافقات. +## الموافقات وقدرات القناة -- يمتلك Core أمر `/approve` داخل المحادثة نفسها، وحمولات أزرار الموافقة المشتركة، وتسليم الرجوع الاحتياطي العام. -- فضّل كائن `approvalCapability` واحدًا على Plugin القناة عندما تحتاج القناة إلى سلوك خاص بالموافقة. -- تمت إزالة `ChannelPlugin.approvals`. ضع حقائق التسليم/الواجهة الأصلية/العرض/المصادقة الخاصة بالموافقة في `approvalCapability`. -- `plugin.auth` مخصص لتسجيل الدخول/الخروج فقط؛ ولم يعد Core يقرأ خطافات مصادقة الموافقة من ذلك الكائن. -- يشكل `approvalCapability.authorizeActorAction` و`approvalCapability.getActionAvailabilityState` طبقة مصادقة الموافقة المرجعية. -- استخدم `approvalCapability.getActionAvailabilityState` لتوفر مصادقة الموافقة داخل المحادثة نفسها. -- إذا كانت قناتك تكشف موافقات تنفيذ أصلية، فاستخدم `approvalCapability.getExecInitiatingSurfaceState` لحالة السطح البادئ/العميل الأصلي عندما تختلف عن مصادقة الموافقة داخل المحادثة نفسها. يستخدم Core هذا الخطاف الخاص بالتنفيذ للتمييز بين `enabled` و`disabled`، وتحديد ما إذا كانت القناة البادئة تدعم موافقات التنفيذ الأصلية، وإدراج القناة في إرشادات الرجوع الاحتياطي للعميل الأصلي. ويملأ `createApproverRestrictedNativeApprovalCapability(...)` هذا في الحالة الشائعة. -- استخدم `outbound.shouldSuppressLocalPayloadPrompt` أو `outbound.beforeDeliverPayload` لسلوك دورة حياة الحمولة الخاص بالقناة مثل إخفاء مطالبات الموافقة المحلية المكررة أو إرسال مؤشرات الكتابة قبل التسليم. -- استخدم `approvalCapability.delivery` فقط لتوجيه الموافقات الأصلية أو منع الرجوع الاحتياطي. -- استخدم `approvalCapability.nativeRuntime` للحقائق الأصلية للموافقات التي تملكها القناة. وأبقِه كسولًا على نقاط دخول القنوات السريعة باستخدام `createLazyChannelApprovalNativeRuntimeAdapter(...)`، الذي يمكنه استيراد وحدة وقت التشغيل عند الطلب مع السماح لـ Core بتجميع دورة حياة الموافقة. -- استخدم `approvalCapability.render` فقط عندما تحتاج القناة فعلًا إلى حمولات موافقة مخصصة بدلًا من العارِض المشترك. -- استخدم `approvalCapability.describeExecApprovalSetup` عندما تريد القناة أن يشرح رد المسار المعطل مفاتيح التكوين الدقيقة المطلوبة لتفعيل موافقات التنفيذ الأصلية. يتلقى الخطاف `{ channel, channelLabel, accountId }`؛ ويجب على القنوات ذات الحسابات المسماة عرض مسارات بنطاق الحساب مثل `channels..accounts..execApprovals.*` بدلًا من الإعدادات الافتراضية العليا. -- إذا كانت القناة تستطيع استنتاج هويات مستقرة شبيهة بالمالكين في الرسائل المباشرة من التكوين القائم، فاستخدم `createResolvedApproverActionAuthAdapter` من `openclaw/plugin-sdk/approval-runtime` لتقييد `/approve` داخل المحادثة نفسها من دون إضافة منطق خاص بالموافقة في Core. -- إذا كانت القناة تحتاج إلى تسليم موافقة أصلية، فاحرص على إبقاء كود القناة مركزًا على تطبيع الهدف وحقائق النقل/العرض. استخدم `createChannelExecApprovalProfile` و`createChannelNativeOriginTargetResolver` و`createChannelApproverDmTargetResolver` و`createApproverRestrictedNativeApprovalCapability` من `openclaw/plugin-sdk/approval-runtime`. ضع حقائق القناة الخاصة خلف `approvalCapability.nativeRuntime`، ويفضل عبر `createChannelApprovalNativeRuntimeAdapter(...)` أو `createLazyChannelApprovalNativeRuntimeAdapter(...)`، حتى يتمكن Core من تجميع المعالج وامتلاك تصفية الطلبات، والتوجيه، وإزالة التكرار، وانتهاء الصلاحية، واشتراك Gateway، وإشعارات التوجيه إلى مكان آخر. وقد قُسِّم `nativeRuntime` إلى طبقات أصغر: -- `availability` — ما إذا كان الحساب مُكوَّنًا وما إذا كان ينبغي التعامل مع الطلب -- `presentation` — ربط نموذج عرض الموافقة المشترك إلى حمولات أصلية معلقة/محلولة/منتهية أو إجراءات نهائية -- `transport` — إعداد الأهداف بالإضافة إلى إرسال/تحديث/حذف رسائل الموافقة الأصلية -- `interactions` — خطافات اختيارية للربط/فك الربط/مسح الإجراءات للأزرار أو التفاعلات الأصلية +لا تحتاج معظم Plugins القنوات إلى شيفرة خاصة بالموافقة. + +- تتولى النواة `/approve` داخل الدردشة نفسها، وحمولات أزرار الموافقة المشتركة، وتسليم البدائل العام. +- يُفضّل استخدام كائن `approvalCapability` واحد على Plugin القناة عندما تحتاج القناة إلى سلوك خاص بالموافقة. +- تمت إزالة `ChannelPlugin.approvals`. ضع حقائق تسليم/أصلي/عرض/مصادقة الموافقة على `approvalCapability`. +- يختص `plugin.auth` بتسجيل الدخول/الخروج فقط؛ ولم تعد النواة تقرأ خطافات مصادقة الموافقة من هذا الكائن. +- يُعد `approvalCapability.authorizeActorAction` و`approvalCapability.getActionAvailabilityState` الواجهة القياسية لمصادقة الموافقة. +- استخدم `approvalCapability.getActionAvailabilityState` لتوافر مصادقة الموافقة داخل الدردشة نفسها. +- إذا كانت قناتك تكشف موافقات تنفيذ أصلية، فاستخدم `approvalCapability.getExecInitiatingSurfaceState` لحالة سطح البدء/العميل الأصلي عندما تختلف عن مصادقة الموافقة داخل الدردشة نفسها. تستخدم النواة هذا الخطاف الخاص بالتنفيذ للتمييز بين `enabled` و`disabled`، وتحديد ما إذا كانت قناة البدء تدعم موافقات التنفيذ الأصلية، وإدراج القناة في إرشادات بدائل العميل الأصلي. يملأ `createApproverRestrictedNativeApprovalCapability(...)` هذا الجزء للحالة الشائعة. +- استخدم `outbound.shouldSuppressLocalPayloadPrompt` أو `outbound.beforeDeliverPayload` لسلوك دورة حياة الحمولة الخاص بالقناة، مثل إخفاء مطالبات الموافقة المحلية المكررة أو إرسال مؤشرات الكتابة قبل التسليم. +- استخدم `approvalCapability.delivery` فقط لتوجيه الموافقة الأصلية أو منع التسليم البديل. +- استخدم `approvalCapability.nativeRuntime` للحقائق الأصلية الخاصة بالقناة المتعلقة بالموافقة. أبقه كسول التحميل على نقاط دخول القنوات الساخنة باستخدام `createLazyChannelApprovalNativeRuntimeAdapter(...)`، الذي يمكنه استيراد module وقت التشغيل عند الطلب مع السماح للنواة بتجميع دورة حياة الموافقة. +- استخدم `approvalCapability.render` فقط عندما تحتاج القناة فعلًا إلى حمولات موافقة مخصصة بدلًا من العارض المشترك. +- استخدم `approvalCapability.describeExecApprovalSetup` عندما تريد القناة أن يشرح رد مسار التعطيل مفاتيح الإعداد الدقيقة اللازمة لتمكين موافقات التنفيذ الأصلية. يتلقى الخطاف `{ channel, channelLabel, accountId }`؛ ويجب على القنوات ذات الحسابات المسماة عرض مسارات ضمن نطاق الحساب مثل `channels..accounts..execApprovals.*` بدلًا من الإعدادات الافتراضية ذات المستوى الأعلى. +- إذا كانت القناة تستطيع استنتاج هويات رسائل مباشرة مستقرة شبيهة بالمالك من الإعداد الحالي، فاستخدم `createResolvedApproverActionAuthAdapter` من `openclaw/plugin-sdk/approval-runtime` لتقييد `/approve` داخل الدردشة نفسها من دون إضافة منطق خاص بالموافقة إلى النواة. +- إذا كانت القناة تحتاج إلى تسليم موافقة أصلية، فاحصر شيفرة القناة في تطبيع الهدف وحقائق النقل/العرض. استخدم `createChannelExecApprovalProfile` و`createChannelNativeOriginTargetResolver` و`createChannelApproverDmTargetResolver` و`createApproverRestrictedNativeApprovalCapability` من `openclaw/plugin-sdk/approval-runtime`. ضع الحقائق الخاصة بالقناة خلف `approvalCapability.nativeRuntime`، ويفضل عبر `createChannelApprovalNativeRuntimeAdapter(...)` أو `createLazyChannelApprovalNativeRuntimeAdapter(...)`، حتى تتمكن النواة من تجميع المعالج وامتلاك ترشيح الطلبات والتوجيه وإزالة التكرار والانتهاء والاشتراك في Gateway وإشعارات التوجيه إلى مكان آخر. ينقسم `nativeRuntime` إلى عدة واجهات أصغر: +- `availability` — ما إذا كان الحساب مضبوطًا وما إذا كان يجب التعامل مع الطلب +- `presentation` — ربط نموذج عرض الموافقة المشترك بحمولات أصلية معلقة/محلولة/منتهية أو إجراءات نهائية +- `transport` — تحضير الأهداف إضافة إلى إرسال/تحديث/حذف رسائل الموافقة الأصلية +- `interactions` — خطافات اختيارية لربط/فك ربط/مسح الإجراءات الخاصة بالأزرار أو التفاعلات الأصلية - `observe` — خطافات اختيارية لتشخيصات التسليم -- إذا كانت القناة تحتاج إلى كائنات يملكها وقت التشغيل مثل عميل أو رمز أو تطبيق Bolt أو مستقبِل Webhook، فسجّلها عبر `openclaw/plugin-sdk/channel-runtime-context`. يتيح سجل سياق وقت التشغيل العام لـ Core إقلاع معالجات مدفوعة بالإمكانات من حالة بدء تشغيل القناة من دون إضافة غراء تغليف خاص بالموافقة. -- لا تلجأ إلى `createChannelApprovalHandler` أو `createChannelNativeApprovalRuntime` منخفضي المستوى إلا عندما لا تكون طبقة الإمكانات التعبيرية كافية بعد. -- يجب على قنوات الموافقات الأصلية تمرير كل من `accountId` و`approvalKind` عبر تلك المساعدات. فـ `accountId` يحافظ على سياسة الموافقة متعددة الحسابات ضمن نطاق حساب البوت الصحيح، و`approvalKind` يبقي سلوك موافقة التنفيذ مقابل Plugin متاحًا للقناة من دون فروع صلبة في Core. -- يمتلك Core الآن أيضًا إشعارات إعادة توجيه الموافقات. يجب ألا ترسل Plugins القنوات رسائل متابعة خاصة بها من نوع "تم إرسال الموافقة إلى الرسائل المباشرة / قناة أخرى" من `createChannelNativeApprovalRuntime`؛ بل اكشف بدلًا من ذلك توجيه الأصل + الرسائل المباشرة للموافق عبر مساعدات إمكانات الموافقة المشتركة ودع Core يجمع عمليات التسليم الفعلية قبل نشر أي إشعار إلى الدردشة البادئة. -- حافظ على نوع معرّف الموافقة المُسلَّم من البداية إلى النهاية. يجب ألا - تخمّن العملاء الأصلية أو تعيد كتابة توجيه موافقة التنفيذ مقابل Plugin من حالة محلية خاصة بالقناة. -- يمكن لأنواع مختلفة من الموافقات أن تكشف عمدًا عن أسطح أصلية مختلفة. - من الأمثلة المضمّنة الحالية: - - يبقي Slack توجيه الموافقات الأصلية متاحًا لكل من معرّفات التنفيذ وPlugin. - - يحتفظ Matrix بالتوجيه الأصلي نفسه للرسائل المباشرة/القنوات وبواجهة التفاعلات نفسها لموافقات التنفيذ وPlugin، مع السماح في الوقت نفسه باختلاف المصادقة حسب نوع الموافقة. -- لا يزال `createApproverRestrictedNativeApprovalAdapter` موجودًا كغلاف توافق، لكن ينبغي للكود الجديد تفضيل باني الإمكانات وكشف `approvalCapability` على Plugin. +- إذا كانت القناة تحتاج إلى كائنات يملكها وقت التشغيل مثل عميل أو token أو تطبيق Bolt أو مستقبِل Webhook، فسجلها عبر `openclaw/plugin-sdk/channel-runtime-context`. يتيح سجل runtime-context العام للنواة إقلاع المعالجات المدفوعة بالقدرات من حالة بدء تشغيل القناة دون إضافة غلاف خاص بالموافقة. +- انتقل إلى `createChannelApprovalHandler` أو `createChannelNativeApprovalRuntime` ذوي المستوى الأدنى فقط عندما لا تكون الواجهة المعتمدة على القدرات معبرة بما يكفي بعد. +- يجب على قنوات الموافقة الأصلية تمرير كلٍّ من `accountId` و`approvalKind` عبر هذه المساعدات. يحافظ `accountId` على تقييد سياسة الموافقة متعددة الحسابات بالحساب الآلي الصحيح، ويحافظ `approvalKind` على إتاحة سلوك موافقة التنفيذ مقابل Plugin للقناة من دون فروع مبرمجة بشكل ثابت في النواة. +- تتولى النواة الآن أيضًا إشعارات إعادة توجيه الموافقة. يجب ألا ترسل Plugins القنوات رسائل متابعة خاصة بها من نوع "تم إرسال الموافقة إلى الرسائل المباشرة / قناة أخرى" من `createChannelNativeApprovalRuntime`؛ بل عليها كشف توجيه صحيح لكل من الأصل + الرسائل المباشرة للموافق عبر مساعدات قدرة الموافقة المشتركة وترك النواة تجمع عمليات التسليم الفعلية قبل نشر أي إشعار إلى الدردشة التي بدأت الطلب. +- حافظ على نوع معرّف الموافقة الذي تم تسليمه من البداية إلى النهاية. يجب ألا تقوم العملاء الأصلية بتخمين أو إعادة كتابة توجيه موافقة التنفيذ مقابل Plugin استنادًا إلى حالة محلية في القناة. +- يمكن لأنواع الموافقة المختلفة أن تكشف عمدًا أسطحًا أصلية مختلفة. + الأمثلة المضمّنة الحالية: + - يحافظ Slack على إتاحة توجيه الموافقة الأصلية لكل من معرّفات التنفيذ وPlugin. + - يحافظ Matrix على التوجيه الأصلي نفسه للرسائل المباشرة/القناة وتجربة التفاعلات لكل من موافقات التنفيذ وPlugin، مع الاستمرار في السماح باختلاف المصادقة حسب نوع الموافقة. +- لا يزال `createApproverRestrictedNativeApprovalAdapter` موجودًا كغلاف توافقي، لكن يجب أن تفضّل الشيفرة الجديدة مُنشئ القدرة وأن تكشف `approvalCapability` على Plugin. -بالنسبة لنقاط دخول القنوات السريعة، فضّل المسارات الفرعية الأضيق لوقت التشغيل عندما تحتاج فقط -إلى جزء واحد من هذه العائلة: +بالنسبة إلى نقاط دخول القنوات الساخنة، فضّل المسارات الفرعية الأضيق لوقت التشغيل عندما +تحتاج إلى جزء واحد فقط من هذه العائلة: - `openclaw/plugin-sdk/approval-auth-runtime` - `openclaw/plugin-sdk/approval-client-runtime` @@ -120,98 +126,105 @@ x-i18n: - `openclaw/plugin-sdk/approval-reply-runtime` - `openclaw/plugin-sdk/channel-runtime-context` -وبالمثل، فضّل `openclaw/plugin-sdk/setup-runtime`, -و`openclaw/plugin-sdk/setup-adapter-runtime`, -و`openclaw/plugin-sdk/reply-runtime`, -و`openclaw/plugin-sdk/reply-dispatch-runtime`, +وبالمثل، فضّل `openclaw/plugin-sdk/setup-runtime`، +و`openclaw/plugin-sdk/setup-adapter-runtime`، +و`openclaw/plugin-sdk/reply-runtime`، +و`openclaw/plugin-sdk/reply-dispatch-runtime`، و`openclaw/plugin-sdk/reply-reference`، و -`openclaw/plugin-sdk/reply-chunking` عندما لا تحتاج إلى سطح -التجميع الأوسع. +`openclaw/plugin-sdk/reply-chunking` عندما لا تحتاج إلى الواجهة +الأوسع ذات المستوى الأعلى. -بالنسبة إلى الإعداد تحديدًا: +وبالنسبة إلى الإعداد تحديدًا: -- يغطي `openclaw/plugin-sdk/setup-runtime` مساعدات الإعداد الآمنة وقت التشغيل: - مهايئات تصحيح الإعداد الآمنة للاستيراد (`createPatchedAccountSetupAdapter`, - و`createEnvPatchedAccountSetupAdapter`, - و`createSetupInputPresenceValidator`)، ومخرجات ملاحظات البحث، - و`promptResolvedAllowFrom`، و`splitSetupEntries`، وبناة - setup-proxy المفوضة -- يشكل `openclaw/plugin-sdk/setup-adapter-runtime` طبقة المهايئ الضيقة الواعية بالبيئة - لـ `createEnvPatchedAccountSetupAdapter` -- يغطي `openclaw/plugin-sdk/channel-setup` بناة الإعداد ذات التثبيت الاختياري +- يغطي `openclaw/plugin-sdk/setup-runtime` مساعدات الإعداد الآمنة لوقت التشغيل: + مهايئات ترقيع الإعداد الآمنة للاستيراد (`createPatchedAccountSetupAdapter`, + `createEnvPatchedAccountSetupAdapter`, + `createSetupInputPresenceValidator`)، ومخرجات + ملاحظات البحث، و`promptResolvedAllowFrom`، و`splitSetupEntries`، وبناة + setup-proxy المفوّضة +- يُعد `openclaw/plugin-sdk/setup-adapter-runtime` الواجهة الضيقة الواعية بالبيئة + الخاصة بـ `createEnvPatchedAccountSetupAdapter` +- يغطي `openclaw/plugin-sdk/channel-setup` بُناة الإعداد ذي التثبيت الاختياري بالإضافة إلى بعض البدائيات الآمنة للإعداد: - `createOptionalChannelSetupSurface` و`createOptionalChannelSetupAdapter`، + `createOptionalChannelSetupSurface`، `createOptionalChannelSetupAdapter`، -إذا كانت قناتك تدعم إعدادًا أو مصادقة مدفوعين بمتغيرات البيئة، وكان يجب أن تعرف -تدفقات الإقلاع/التكوين العامة أسماء متغيرات البيئة تلك قبل تحميل وقت التشغيل، -فصرّح بها في بيان Plugin باستخدام `channelEnvVars`. وأبقِ `envVars` الخاصة بوقت تشغيل القناة أو الثوابت المحلية لنسخة المشغّل فقط. +إذا كانت قناتك تدعم إعدادًا أو مصادقة مدفوعين بالبيئة وكان ينبغي لتدفقات +البدء/الإعداد العامة معرفة أسماء متغيرات البيئة هذه قبل تحميل وقت التشغيل، +فصرّح بها في manifest الخاص بـ Plugin باستخدام `channelEnvVars`. +واحتفظ بـ `envVars` وقت تشغيل القناة أو الثوابت المحلية فقط للنصوص +الموجهة للمشغّل. -إذا كان يمكن لقناتك أن تظهر في `status` أو `channels list` أو `channels status` أو في عمليات فحص SecretRef قبل بدء وقت تشغيل Plugin، فأضف `openclaw.setupEntry` في `package.json`. يجب أن تكون نقطة الدخول هذه آمنة للاستيراد في مسارات الأوامر للقراءة فقط، ويجب أن تعيد بيانات تعريف القناة، ومهايئ التكوين الآمن للإعداد، ومهايئ الحالة، وبيانات تعريف أهداف أسرار القناة اللازمة لتلك الملخصات. لا تبدأ عملاء أو مستمعين أو أزمنة تشغيل للنقل من نقطة دخول الإعداد. +إذا كانت قناتك قد تظهر في `status` أو `channels list` أو `channels status` أو +عمليات فحص SecretRef قبل بدء وقت تشغيل Plugin، فأضف `openclaw.setupEntry` في +`package.json`. يجب أن تكون نقطة الدخول هذه آمنة للاستيراد في مسارات الأوامر +للقراءة فقط، ويجب أن تعيد بيانات القناة الوصفية، ومهايئ الإعداد الآمن، +ومهايئ الحالة، وبيانات هدف سر القناة اللازمة لهذه الملخصات. لا تبدأ +العملاء أو المستمعين أو أوقات تشغيل النقل من نقطة دخول الإعداد. -`createOptionalChannelSetupWizard`، و`DEFAULT_ACCOUNT_ID`, +`createOptionalChannelSetupWizard`، و`DEFAULT_ACCOUNT_ID`، و`createTopLevelChannelDmPolicy`، و`setSetupChannelEnabled`، و `splitSetupEntries` -- استخدم سطح `openclaw/plugin-sdk/setup` الأوسع فقط عندما تحتاج أيضًا إلى - مساعدات الإعداد/التكوين المشتركة الأثقل مثل +- استخدم الواجهة الأوسع `openclaw/plugin-sdk/setup` فقط عندما تحتاج أيضًا إلى + مساعدات الإعداد/التهيئة المشتركة الأثقل مثل `moveSingleAccountChannelSectionToDefaultAccount(...)` -إذا كانت قناتك تريد فقط الإعلان عن "ثبّت هذا Plugin أولًا" في أسطح الإعداد، -ففضّل `createOptionalChannelSetupSurface(...)`. يفشل المهايئ/المعالج الناتج -بشكل مغلق في عمليات كتابة التكوين والإنهاء، ويعيد استخدام الرسالة نفسها -المطلوبة للتثبيت عبر التحقق والإنهاء ونسخة رابط الوثائق. +إذا كانت قناتك تريد فقط الإعلان عن "ثبّت هذا Plugin أولًا" في أسطح +الإعداد، ففضّل `createOptionalChannelSetupSurface(...)`. إذ إن +المهايئ/المعالج المُولَّدين يفشلان بشكل مغلق عند كتابة الإعدادات وعند +الإتمام، ويعيدان استخدام رسالة الحاجة إلى التثبيت نفسها عبر التحقق +والإتمام ونص رابط التوثيق. -وبالنسبة إلى المسارات السريعة الأخرى للقنوات، فضّل المساعدات الضيقة على الأسطح -القديمة الأوسع: +وبالنسبة إلى مسارات القنوات الساخنة الأخرى، فضّل المساعدات الضيقة بدلًا من +الواجهات القديمة الأوسع: -- `openclaw/plugin-sdk/account-core`, - و`openclaw/plugin-sdk/account-id`, +- `openclaw/plugin-sdk/account-core`، + و`openclaw/plugin-sdk/account-id`، و`openclaw/plugin-sdk/account-resolution`، و - `openclaw/plugin-sdk/account-helpers` لتكوين الحسابات المتعددة - والرجوع الاحتياطي إلى الحساب الافتراضي + `openclaw/plugin-sdk/account-helpers` لإعدادات تعدد الحسابات + والرجوع إلى الحساب الافتراضي - `openclaw/plugin-sdk/inbound-envelope` و - `openclaw/plugin-sdk/inbound-reply-dispatch` لتوصيل المسار/المغلف الوارد + `openclaw/plugin-sdk/inbound-reply-dispatch` لمسار/غلاف الوارد وربط التسجيل والتوزيع -- `openclaw/plugin-sdk/messaging-targets` لتحليل/مطابقة الأهداف +- `openclaw/plugin-sdk/messaging-targets` لتحليل الأهداف ومطابقتها - `openclaw/plugin-sdk/outbound-media` و - `openclaw/plugin-sdk/outbound-runtime` لتحميل الوسائط بالإضافة إلى - مفوّضي هوية/إرسال الصادر وتخطيط الحمولة + `openclaw/plugin-sdk/outbound-runtime` لتحميل الوسائط إضافة إلى + مفوضات الهوية/الإرسال الصادر وتخطيط الحمولة - `buildThreadAwareOutboundSessionRoute(...)` من - `openclaw/plugin-sdk/channel-core` عندما يجب أن يحافظ مسار الإرسال الصادر على - `replyToId`/`threadId` صريح أو يستعيد جلسة `:thread:` الحالية - بعد أن يظل مفتاح الجلسة الأساسي مطابقًا. ويمكن لـ Plugins المزوّدات + `openclaw/plugin-sdk/channel-core` عندما ينبغي للمسار الصادر الحفاظ على + `replyToId`/`threadId` صريح أو استعادة جلسة `:thread:` الحالية + بعد أن يظل مفتاح الجلسة الأساسي مطابقًا. ويمكن لـ Plugins الموفر تجاوز الأولوية وسلوك اللاحقة وتطبيع معرّف السلسلة عندما تكون لدى منصتها دلالات أصلية لتسليم السلاسل. - `openclaw/plugin-sdk/thread-bindings-runtime` لدورة حياة ربط السلاسل وتسجيل المهايئات -- `openclaw/plugin-sdk/agent-media-payload` فقط عندما يظل تخطيط - حقل حمولة الوكيل/الوسائط القديم مطلوبًا -- `openclaw/plugin-sdk/telegram-command-config` لتطبيع أوامر Telegram - المخصصة، والتحقق من التكرار/التعارض، وعقد تكوين أوامر مستقر في - الرجوع الاحتياطي +- `openclaw/plugin-sdk/agent-media-payload` فقط عندما يكون تخطيط حقل + حمولة agent/media القديم لا يزال مطلوبًا +- `openclaw/plugin-sdk/telegram-command-config` لتطبيع الأوامر المخصصة في Telegram، + والتحقق من التكرار/التعارض، وعقد إعداد أوامر ثابت كبديل -يمكن لقنوات المصادقة فقط عادةً التوقف عند المسار الافتراضي: يتولى Core الموافقات وتكشف Plugin فقط عن إمكانات الصادر/المصادقة. ويجب على قنوات الموافقات الأصلية مثل Matrix وSlack وTelegram وناقلات الدردشة المخصصة استخدام المساعدات الأصلية المشتركة بدلًا من بناء دورة حياة الموافقة الخاصة بها. +يمكن للقنوات التي تقتصر على المصادقة عادةً الاكتفاء بالمسار الافتراضي: تتولى النواة الموافقات ويكشف Plugin فقط عن قدرات الإرسال الصادر/المصادقة. أما قنوات الموافقة الأصلية مثل Matrix وSlack وTelegram ووسائط الدردشة المخصصة فيجب أن تستخدم المساعدات الأصلية المشتركة بدلًا من بناء دورة حياة الموافقة الخاصة بها. ## سياسة الإشارة الواردة -أبقِ التعامل مع الإشارة الواردة منقسمًا إلى طبقتين: +أبقِ التعامل مع الإشارات الواردة مقسومًا إلى طبقتين: -- جمع الأدلة الذي تملكه Plugin +- جمع الأدلة المملوك للـ Plugin - تقييم السياسة المشتركة استخدم `openclaw/plugin-sdk/channel-mention-gating` لقرارات سياسة الإشارة. واستخدم `openclaw/plugin-sdk/channel-inbound` فقط عندما تحتاج إلى -مجمّع مساعدات الوارد الأوسع. +الواجهة الأوسع لمساعدات الوارد. -مناسب جيدًا للمنطق المحلي في Plugin: +حالات مناسبة للمنطق المحلي في Plugin: -- كشف الرد على البوت -- كشف الاقتباس من البوت +- اكتشاف الرد على bot +- اكتشاف الاقتباس من bot - التحقق من المشاركة في السلسلة -- استثناءات رسائل الخدمة/النظام -- الذاكرات المؤقتة الأصلية للمنصة المطلوبة لإثبات مشاركة البوت +- استبعاد رسائل الخدمة/النظام +- مخابئ أصلية خاصة بالمنصة لازمة لإثبات مشاركة bot -مناسب جيدًا للمساعد المشترك: +حالات مناسبة للمساعد المشترك: - `requireMention` - نتيجة الإشارة الصريحة @@ -222,7 +235,7 @@ x-i18n: التدفق المفضّل: 1. احسب حقائق الإشارة المحلية. -2. مرّر تلك الحقائق إلى `resolveInboundMentionDecision({ facts, policy })`. +2. مرّر هذه الحقائق إلى `resolveInboundMentionDecision({ facts, policy })`. 3. استخدم `decision.effectiveWasMentioned` و`decision.shouldBypassMention` و`decision.shouldSkip` في بوابة الوارد لديك. ```typescript @@ -277,17 +290,17 @@ if (decision.shouldSkip) return; وقت تشغيل الوارد غير المرتبطة. تبقى مساعدات `resolveMentionGating*` الأقدم على -`openclaw/plugin-sdk/channel-inbound` كتصديرات توافق فقط. يجب على الكود الجديد -استخدام `resolveInboundMentionDecision({ facts, policy })`. +`openclaw/plugin-sdk/channel-inbound` كتصديرات توافقية فقط. ويجب أن تستخدم +الشيفرة الجديدة `resolveInboundMentionDecision({ facts, policy })`. ## الشرح العملي - - أنشئ ملفات Plugin القياسية. إن الحقل `channel` في `package.json` هو - ما يجعل هذا Plugin قناة. وللاطلاع على سطح بيانات تعريف الحزمة الكامل، - راجع [إعداد Plugin والتكوين](/ar/plugins/sdk-setup#openclaw-channel): + + أنشئ ملفات Plugin القياسية. إن حقل `channel` في `package.json` هو + ما يجعل هذا Plugin قناة. وللاطلاع على سطح بيانات الحزمة الوصفية الكامل، + راجع [إعداد Plugin والتهيئة](/ar/plugins/sdk-setup#openclaw-channel): ```json package.json @@ -301,7 +314,7 @@ if (decision.shouldSkip) return; "channel": { "id": "acme-chat", "label": "Acme Chat", - "blurb": "ربط OpenClaw بـ Acme Chat." + "blurb": "Connect OpenClaw to Acme Chat." } } } @@ -313,7 +326,7 @@ if (decision.shouldSkip) return; "kind": "channel", "channels": ["acme-chat"], "name": "Acme Chat", - "description": "Plugin قناة Acme Chat", + "description": "Acme Chat channel plugin", "configSchema": { "type": "object", "additionalProperties": false, @@ -336,9 +349,9 @@ if (decision.shouldSkip) return; - - تحتوي الواجهة `ChannelPlugin` على العديد من أسطح المهايئات الاختيارية. ابدأ - بالحد الأدنى — `id` و`setup` — ثم أضف المهايئات عند الحاجة. + + تحتوي واجهة `ChannelPlugin` على العديد من أسطح المهايئات الاختيارية. ابدأ + بالحد الأدنى — `id` و`setup` — ثم أضف المهايئات حسب الحاجة. أنشئ `src/channel.ts`: @@ -348,7 +361,7 @@ if (decision.shouldSkip) return; createChannelPluginBase, } from "openclaw/plugin-sdk/channel-core"; import type { OpenClawConfig } from "openclaw/plugin-sdk/channel-core"; - import { acmeChatApi } from "./client.js"; // عميل API الخاص بمنصتك + import { acmeChatApi } from "./client.js"; // your platform API client type ResolvedAccount = { accountId: string | null; @@ -389,7 +402,7 @@ if (decision.shouldSkip) return; }, }), - // أمان الرسائل المباشرة: من يمكنه مراسلة البوت + // DM security: who can message the bot security: { dm: { channelKey: "acme-chat", @@ -399,21 +412,21 @@ if (decision.shouldSkip) return; }, }, - // الاقتران: تدفق الموافقة لجهات اتصال الرسائل المباشرة الجديدة + // Pairing: approval flow for new DM contacts pairing: { text: { - idLabel: "اسم مستخدم Acme Chat", - message: "أرسل هذا الرمز للتحقق من هويتك:", + idLabel: "Acme Chat username", + message: "Send this code to verify your identity:", notify: async ({ target, code }) => { await acmeChatApi.sendDm(target, `Pairing code: ${code}`); }, }, }, - // التسلسل: كيف يتم تسليم الردود + // Threading: how replies are delivered threading: { topLevelReplyToMode: "reply" }, - // الصادر: إرسال الرسائل إلى المنصة + // Outbound: send messages to the platform outbound: { attachedResults: { sendText: async (params) => { @@ -433,24 +446,24 @@ if (decision.shouldSkip) return; }); ``` - - بدلًا من تنفيذ واجهات مهايئات منخفضة المستوى يدويًا، فإنك تمرّر - خيارات تصريحية، ويتولى الباني تركيبها: + + بدلًا من تنفيذ واجهات المهايئات منخفضة المستوى يدويًا، فإنك تمرر + خيارات وصفية ويقوم الباني بتجميعها: - | الخيار | ما الذي يوصّله | + | الخيار | ما الذي يربطه | | --- | --- | - | `security.dm` | محلل أمان رسائل مباشرة ضمن النطاق من حقول التكوين | - | `pairing.text` | تدفق اقتران رسائل مباشرة قائم على النص مع تبادل الرموز | - | `threading` | محلل وضع الرد (ثابت، أو ضمن الحساب، أو مخصص) | - | `outbound.attachedResults` | دوال إرسال تعيد بيانات تعريف النتيجة (معرّفات الرسائل) | + | `security.dm` | محلّل أمان DM مقيّد النطاق من حقول التهيئة | + | `pairing.text` | تدفق اقتران DM قائم على النص مع تبادل الرموز | + | `threading` | محلّل وضع الرد (ثابت أو مقيّد بالحساب أو مخصص) | + | `outbound.attachedResults` | دوال إرسال تُرجع بيانات وصفية للنتيجة (معرّفات الرسائل) | - يمكنك أيضًا تمرير كائنات المهايئات الخام بدلًا من الخيارات التصريحية - إذا كنت بحاجة إلى تحكم كامل. + يمكنك أيضًا تمرير كائنات مهايئات خام بدلًا من الخيارات الوصفية + إذا كنت تحتاج إلى تحكم كامل. - + أنشئ `index.ts`: ```typescript index.ts @@ -460,20 +473,20 @@ if (decision.shouldSkip) return; export default defineChannelPluginEntry({ id: "acme-chat", name: "Acme Chat", - description: "Plugin قناة Acme Chat", + description: "Acme Chat channel plugin", plugin: acmeChatPlugin, registerCliMetadata(api) { api.registerCli( ({ program }) => { program .command("acme-chat") - .description("إدارة Acme Chat"); + .description("Acme Chat management"); }, { descriptors: [ { name: "acme-chat", - description: "إدارة Acme Chat", + description: "Acme Chat management", hasSubcommands: false, }, ], @@ -486,21 +499,22 @@ if (decision.shouldSkip) return; }); ``` - ضع واصفات CLI التي تملكها القناة في `registerCliMetadata(...)` حتى يتمكن OpenClaw - من عرضها في المساعدة الجذرية من دون تفعيل وقت تشغيل القناة الكامل، - بينما تلتقط عمليات التحميل الكاملة العادية الواصفات نفسها لتسجيل الأوامر - الفعلي. وأبقِ `registerFull(...)` للأعمال الخاصة بوقت التشغيل فقط. - إذا كان `registerFull(...)` يسجل أساليب Gateway RPC، فاستخدم - بادئة خاصة بـ Plugin. تبقى نطاقات إدارة Core (`config.*`, - و`exec.approvals.*`، و`wizard.*`، و`update.*`) محجوزة، وتُحل دائمًا + ضع واصفات CLI الخاصة بالقناة في `registerCliMetadata(...)` حتى يتمكن OpenClaw + من عرضها في مساعدة الجذر دون تنشيط وقت تشغيل القناة الكامل، + بينما تستمر عمليات التحميل الكاملة العادية في التقاط الواصفات نفسها + لتسجيل الأوامر الفعلي. وأبقِ `registerFull(...)` للأعمال الخاصة + بوقت التشغيل فقط. + وإذا كان `registerFull(...)` يسجّل أساليب Gateway RPC، فاستخدم + بادئة خاصة بالـ Plugin. إذ تبقى نطاقات أسماء إدارة النواة (`config.*`، + و`exec.approvals.*`، و`wizard.*`، و`update.*`) محجوزة وتُحل دائمًا إلى `operator.admin`. - يتولى `defineChannelPluginEntry` معالجة تقسيم وضع التسجيل تلقائيًا. راجع + يتولى `defineChannelPluginEntry` تقسيم وضع التسجيل تلقائيًا. راجع [نقاط الدخول](/ar/plugins/sdk-entrypoints#definechannelpluginentry) لجميع الخيارات. - + أنشئ `setup-entry.ts` للتحميل الخفيف أثناء الإعداد الأولي: ```typescript setup-entry.ts @@ -511,18 +525,18 @@ if (decision.shouldSkip) return; ``` يحمّل OpenClaw هذا بدلًا من نقطة الدخول الكاملة عندما تكون القناة معطلة - أو غير مكوّنة. وهذا يتجنب سحب كود وقت تشغيل ثقيل أثناء تدفقات الإعداد. - راجع [الإعداد والتكوين](/ar/plugins/sdk-setup#setup-entry) للتفاصيل. + أو غير مضبوطة. وهو يتجنب سحب شيفرة وقت تشغيل ثقيلة أثناء تدفقات الإعداد. + راجع [الإعداد والتهيئة](/ar/plugins/sdk-setup#setup-entry) للتفاصيل. - يمكن لقنوات مساحة العمل المضمّنة التي تفصل التصديرات الآمنة للإعداد إلى - وحدات جانبية استخدام `defineBundledChannelSetupEntry(...)` من + يمكن لقنوات workspace المضمّنة التي تفصل التصديرات الآمنة للإعداد إلى + وحدات sidecar أن تستخدم `defineBundledChannelSetupEntry(...)` من `openclaw/plugin-sdk/channel-entry-contract` عندما تحتاج أيضًا إلى - معيّن وقت تشغيل صريح في وقت الإعداد. + أداة ضبط صريحة لوقت التشغيل في وقت الإعداد. - - يحتاج Plugin الخاص بك إلى استقبال الرسائل من المنصة وتمريرها إلى + + يحتاج Plugin الخاص بك إلى تلقي الرسائل من المنصة وتمريرها إلى OpenClaw. والنمط المعتاد هو Webhook يتحقق من الطلب ثم يوزعه عبر معالج الوارد الخاص بقناتك: @@ -534,9 +548,9 @@ if (decision.shouldSkip) return; handler: async (req, res) => { const event = parseWebhookPayload(req); - // يوزّع معالج الوارد الخاص بك الرسالة إلى OpenClaw. - // يعتمد التوصيل الدقيق على SDK الخاصة بمنصتك — - // راجع مثالًا حقيقيًا في حزمة Plugin الخاصة بـ Microsoft Teams أو Google Chat المضمّنة. + // يوزّع معالج الوارد لديك الرسالة إلى OpenClaw. + // يعتمد الربط الدقيق على SDK الخاص بمنصتك — + // راجع مثالًا حقيقيًا في حزمة Plugin ‏Microsoft Teams أو Google Chat المضمّنة. await handleAcmeChatInbound(api, event); res.statusCode = 200; @@ -548,9 +562,9 @@ if (decision.shouldSkip) return; ``` - إن التعامل مع الرسائل الواردة خاص بكل قناة. فكل Plugin قناة يمتلك - خط أنابيب الوارد الخاص به. انظر إلى Plugins القنوات المضمّنة - (مثل حزمة Plugin الخاصة بـ Microsoft Teams أو Google Chat) لمعرفة الأنماط الفعلية. + إن معالجة الرسائل الواردة خاصة بكل قناة. إذ يمتلك كل Plugin قناة + خط معالجة وارد خاصًا به. انظر إلى Plugins القنوات المضمّنة + (مثل حزمة Plugin ‏Microsoft Teams أو Google Chat) للاطلاع على أنماط حقيقية. @@ -595,7 +609,7 @@ if (decision.shouldSkip) return; pnpm test -- /acme-chat/ ``` - بالنسبة إلى مساعدات الاختبار المشتركة، راجع [الاختبار](/ar/plugins/sdk-testing). + للاطلاع على مساعدات الاختبار المشتركة، راجع [الاختبار](/ar/plugins/sdk-testing). @@ -604,8 +618,8 @@ if (decision.shouldSkip) return; ``` /acme-chat/ -├── package.json # بيانات تعريف openclaw.channel -├── openclaw.plugin.json # البيان مع مخطط التكوين +├── package.json # بيانات openclaw.channel الوصفية +├── openclaw.plugin.json # Manifest مع مخطط التهيئة ├── index.ts # defineChannelPluginEntry ├── setup-entry.ts # defineSetupPluginEntry ├── api.ts # التصديرات العامة (اختياري) @@ -613,20 +627,20 @@ if (decision.shouldSkip) return; └── src/ ├── channel.ts # ChannelPlugin عبر createChatChannelPlugin ├── channel.test.ts # الاختبارات - ├── client.ts # عميل API الخاص بالمنصة - └── runtime.ts # مخزن وقت التشغيل (إذا لزم الأمر) + ├── client.ts # عميل API للمنصة + └── runtime.ts # مخزن وقت التشغيل (عند الحاجة) ``` ## موضوعات متقدمة - أوضاع الرد الثابتة، أو ضمن الحساب، أو المخصصة + أوضاع رد ثابتة، أو مقيّدة بالحساب، أو مخصصة - + describeMessageTool واكتشاف الإجراءات - + inferTargetChatType وlooksLikeId وresolveTarget @@ -635,15 +649,15 @@ if (decision.shouldSkip) return; -لا تزال بعض طبقات المساعدات المضمّنة موجودة لصيانة Plugins المضمّنة -ولأغراض التوافق. لكنها ليست النمط الموصى به لـ Plugins القنوات الجديدة؛ -فضّل المسارات الفرعية العامة للقنوات/الإعداد/الرد/وقت التشغيل من -سطح SDK المشترك ما لم تكن تصون عائلة Plugin المضمّنة تلك مباشرة. +لا تزال بعض واجهات المساعدات المضمّنة موجودة لصيانة Plugins المضمّنة +ولأغراض التوافق. وهي ليست النمط الموصى به لـ Plugins القنوات الجديدة؛ +بل يُفضّل استخدام المسارات الفرعية العامة للقناة/الإعداد/الرد/وقت التشغيل من +سطح SDK المشترك ما لم تكن تصون عائلة Plugin المضمّنة تلك مباشرةً. ## الخطوات التالية -- [Provider Plugins](/ar/plugins/sdk-provider-plugins) — إذا كان Plugin الخاص بك يوفّر أيضًا نماذج -- [نظرة عامة على SDK](/ar/plugins/sdk-overview) — المرجع الكامل لاستيراد المسارات الفرعية +- [Plugins الموفر](/ar/plugins/sdk-provider-plugins) — إذا كان Plugin الخاص بك يوفر أيضًا نماذج +- [نظرة عامة على SDK](/ar/plugins/sdk-overview) — مرجع كامل لاستيراد المسارات الفرعية - [اختبار SDK](/ar/plugins/sdk-testing) — أدوات الاختبار واختبارات العقود -- [بيان Plugin](/ar/plugins/manifest) — المخطط الكامل للبيان +- [Manifest Plugin](/ar/plugins/manifest) — مخطط manifest الكامل diff --git a/docs/ar/plugins/sdk-overview.md b/docs/ar/plugins/sdk-overview.md index 645dcaf0a..4c2ac36c9 100644 --- a/docs/ar/plugins/sdk-overview.md +++ b/docs/ar/plugins/sdk-overview.md @@ -1,30 +1,30 @@ --- read_when: - - تحتاج إلى معرفة أي مسار فرعي من SDK يجب الاستيراد منه - - تريد مرجعًا لجميع أساليب التسجيل في `OpenClawPluginApi` - - أنت تبحث عن تصدير محدد من SDK + - تحتاج إلى معرفة أي مسار فرعي من Plugin SDK يجب الاستيراد منه + - تريد مرجعًا لجميع أساليب التسجيل في OpenClawPluginApi + - أنت تبحث عن تصدير محدد في SDK sidebarTitle: SDK Overview -summary: خريطة الاستيراد، ومرجع واجهة API للتسجيل، وبنية SDK +summary: خريطة الاستيراد، ومرجع API للتسجيل، وبنية Plugin SDK title: نظرة عامة على Plugin SDK x-i18n: - generated_at: "2026-04-22T04:26:25Z" + generated_at: "2026-04-22T07:18:33Z" model: gpt-5.4 provider: openai - source_hash: 8045c11976bbda6afe3303a0aab08caf0d0a86ebcf1aaaf927943b90cc517673 + source_hash: e57019e6f9a7fed7842ac575e025b6db41d125f5fa9d0d1de03923fdb1f6bcc3 source_path: plugins/sdk-overview.md workflow: 15 --- # نظرة عامة على Plugin SDK -يُعد Plugin SDK العقد المطبّع بين plugins والنواة. وهذه الصفحة هي -المرجع الخاص بـ **ما يجب استيراده** و**ما الذي يمكنك تسجيله**. +يمثل Plugin SDK العقد المطبوع بين Plugins والنواة. وتعد هذه الصفحة +مرجعًا لـ **ما الذي يجب استيراده** و**ما الذي يمكنك تسجيله**. **هل تبحث عن دليل إرشادي؟** - - أول plugin؟ ابدأ من [البدء](/ar/plugins/building-plugins) - - plugin قناة؟ راجع [Channel Plugins](/ar/plugins/sdk-channel-plugins) - - plugin مزوّد؟ راجع [Provider Plugins](/ar/plugins/sdk-provider-plugins) + - أول Plugin؟ ابدأ من [Getting Started](/ar/plugins/building-plugins) + - Plugin للقنوات؟ راجع [Channel Plugins](/ar/plugins/sdk-channel-plugins) + - Plugin لموفّر؟ راجع [Provider Plugins](/ar/plugins/sdk-provider-plugins) ## اصطلاح الاستيراد @@ -36,43 +36,43 @@ import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry"; import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core"; ``` -كل مسار فرعي هو وحدة صغيرة ومكتفية ذاتيًا. وهذا يحافظ على سرعة بدء التشغيل -ويمنع مشكلات التبعيات الدائرية. وبالنسبة إلى وسائل المساعدة الخاصة بإدخال/بناء القنوات، -ففضّل `openclaw/plugin-sdk/channel-core`؛ وأبقِ `openclaw/plugin-sdk/core` من أجل -السطح الأشمل والمساعدات المشتركة مثل +كل مسار فرعي هو وحدة صغيرة ومكتفية ذاتيًا. يحافظ ذلك على سرعة بدء التشغيل +ويمنع مشكلات التبعيات الدائرية. وبالنسبة إلى أدوات الإدخال/البناء الخاصة بالقنوات، +فمن المفضل استخدام `openclaw/plugin-sdk/channel-core`؛ واحتفظ بـ `openclaw/plugin-sdk/core` لواجهة +المظلة الأوسع وللمساعدات المشتركة مثل `buildChannelConfigSchema`. -لا تُضف أو تعتمد على مسارات convenience seams المسماة باسم المزوّد مثل -`openclaw/plugin-sdk/slack` أو `openclaw/plugin-sdk/discord`، -أو `openclaw/plugin-sdk/signal`، أو `openclaw/plugin-sdk/whatsapp`، أو -المسارات المساعدة ذات العلامة التجارية الخاصة بالقنوات. يجب على plugins المضمّنة أن تركّب -المسارات الفرعية العامة لـ SDK داخل ملفات `api.ts` أو `runtime-api.ts` -الخاصة بها، ويجب على النواة إما استخدام تلك الملفات المحلية الخاصة بالplugin أو إضافة -عقد SDK عامًا ضيقًا عندما تكون الحاجة فعلًا عابرة للقنوات. +لا تُضف ولا تعتمد على واجهات تسهيلية مسماة باسم الموفّر مثل +`openclaw/plugin-sdk/slack` أو `openclaw/plugin-sdk/discord` أو +`openclaw/plugin-sdk/signal` أو `openclaw/plugin-sdk/whatsapp` أو +واجهات مساعدة تحمل علامة القناة. يجب على bundled plugins تركيب +المسارات الفرعية العامة في SDK داخل حاويات `api.ts` أو `runtime-api.ts` الخاصة بها، ويجب على النواة +إما استخدام هذه الحاويات المحلية الخاصة بالـ plugin أو إضافة عقد SDK عام وضيّق +عندما تكون الحاجة مشتركة فعلًا بين القنوات. -ما زالت خريطة التصدير المولدة تحتوي على مجموعة صغيرة من المسارات المساعدة الخاصة بالplugins المضمّنة -مثل `plugin-sdk/feishu`، و`plugin-sdk/feishu-setup`، -و`plugin-sdk/zalo`، و`plugin-sdk/zalo-setup`، و`plugin-sdk/matrix*`. توجد هذه -المسارات الفرعية لصيانة plugins المضمّنة والتوافق فقط؛ وقد تم حذفها عمدًا من الجدول المشترك أدناه -وليست مسار الاستيراد الموصى به للplugins الجديدة التابعة لجهات خارجية. +لا تزال خريطة التصدير المُولّدة تتضمن مجموعة صغيرة من +واجهات المساعدة الخاصة بـ bundled-plugin مثل `plugin-sdk/feishu` و`plugin-sdk/feishu-setup` +و`plugin-sdk/zalo` و`plugin-sdk/zalo-setup` و`plugin-sdk/matrix*`. هذه +المسارات الفرعية موجودة فقط لصيانة bundled-plugin والتوافق؛ وقد أُزيلت عمدًا من الجدول الشائع أدناه +وليست مسار الاستيراد الموصى به للـ Plugins الخارجية الجديدة. ## مرجع المسارات الفرعية -أكثر المسارات الفرعية استخدامًا، مجمّعة حسب الغرض. وتوجد القائمة الكاملة المولدة -التي تضم أكثر من 200 مسار فرعي في `scripts/lib/plugin-sdk-entrypoints.json`. +أكثر المسارات الفرعية استخدامًا، مجمعة حسب الغرض. توجد القائمة الكاملة المُولّدة التي تضم +أكثر من 200 مسار فرعي في `scripts/lib/plugin-sdk-entrypoints.json`. -ما زالت المسارات الفرعية المساعدة المحجوزة الخاصة بالplugins المضمّنة تظهر في هذه القائمة المولدة. -تعامل معها على أنها تفاصيل تنفيذ/أسطح توافق ما لم تروّج لها صفحة وثائق -صراحةً باعتبارها عامة. +لا تزال المسارات الفرعية المحجوزة لمساعدات bundled-plugin تظهر في تلك القائمة المُولّدة. +تعامل معها على أنها تفاصيل تنفيذ/واجهات توافق، ما لم تقم صفحة وثائق +بالترويج الصريح لإحداها على أنها عامة. ### إدخال Plugin -| المسار الفرعي | أهم التصديرات | -| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -| `plugin-sdk/plugin-entry` | `definePluginEntry` | -| `plugin-sdk/core` | `defineChannelPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase`, `defineSetupPluginEntry`, `buildChannelConfigSchema` | -| `plugin-sdk/config-schema` | `OpenClawSchema` | -| `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` | +| المسار الفرعي | أهم التصديرات | +| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `plugin-sdk/plugin-entry` | `definePluginEntry` | +| `plugin-sdk/core` | `defineChannelPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase`, `defineSetupPluginEntry`, `buildChannelConfigSchema` | +| `plugin-sdk/config-schema` | `OpenClawSchema` | +| `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` | @@ -80,199 +80,199 @@ import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core"; | --- | --- | | `plugin-sdk/channel-core` | `defineChannelPluginEntry`, `defineSetupPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase` | | `plugin-sdk/config-schema` | تصدير مخطط Zod الجذري لـ `openclaw.json` (`OpenClawSchema`) | - | `plugin-sdk/channel-setup` | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`، بالإضافة إلى `DEFAULT_ACCOUNT_ID` و`createTopLevelChannelDmPolicy` و`setSetupChannelEnabled` و`splitSetupEntries` | - | `plugin-sdk/setup` | مساعدات معالج الإعداد المشتركة، ومطالبات قائمة السماح، وبناة حالة الإعداد | + | `plugin-sdk/channel-setup` | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`، بالإضافة إلى `DEFAULT_ACCOUNT_ID`, `createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, `splitSetupEntries` | + | `plugin-sdk/setup` | مساعدات مشتركة لمعالج الإعداد، ورسائل allowlist، وبُناة حالة الإعداد | | `plugin-sdk/setup-runtime` | `createPatchedAccountSetupAdapter`, `createEnvPatchedAccountSetupAdapter`, `createSetupInputPresenceValidator`, `noteChannelLookupFailure`, `noteChannelLookupSummary`, `promptResolvedAllowFrom`, `splitSetupEntries`, `createAllowlistSetupWizardProxy`, `createDelegatedSetupWizardProxy` | | `plugin-sdk/setup-adapter-runtime` | `createEnvPatchedAccountSetupAdapter` | | `plugin-sdk/setup-tools` | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` | - | `plugin-sdk/account-core` | مساعدات تكوين/بوابة الإجراءات متعددة الحسابات، ومساعدات fallback للحساب الافتراضي | + | `plugin-sdk/account-core` | مساعدات إعدادات/بوابة إجراءات متعددة الحسابات، ومساعدات الرجوع إلى الحساب الافتراضي | | `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`، ومساعدات تطبيع معرّف الحساب | - | `plugin-sdk/account-resolution` | مساعدات البحث عن الحساب + fallback الافتراضي | + | `plugin-sdk/account-resolution` | مساعدات البحث عن الحساب + الرجوع إلى الافتراضي | | `plugin-sdk/account-helpers` | مساعدات ضيقة لقائمة الحسابات/إجراءات الحساب | | `plugin-sdk/channel-pairing` | `createChannelPairingController` | | `plugin-sdk/channel-reply-pipeline` | `createChannelReplyPipeline` | | `plugin-sdk/channel-config-helpers` | `createHybridChannelConfigAdapter` | - | `plugin-sdk/channel-config-schema` | أنواع مخطط تكوين القناة | - | `plugin-sdk/telegram-command-config` | مساعدات تطبيع/تحقق الأوامر المخصصة في Telegram مع fallback لعقد مضمّن | + | `plugin-sdk/channel-config-schema` | أنواع مخطط إعداد القناة | + | `plugin-sdk/telegram-command-config` | مساعدات تطبيع/تحقق للأوامر المخصصة في Telegram مع رجوع إلى bundled-contract | | `plugin-sdk/command-gating` | مساعدات ضيقة لبوابة تفويض الأوامر | | `plugin-sdk/channel-policy` | `resolveChannelGroupRequireMention` | - | `plugin-sdk/channel-lifecycle` | `createAccountStatusSink`، ومساعدات دورة حياة/finalization الخاصة ببث المسودات | - | `plugin-sdk/inbound-envelope` | مساعدات مشتركة لبناء التوجيه الداخل + envelope | - | `plugin-sdk/inbound-reply-dispatch` | مساعدات مشتركة لتسجيل وتوزيع الرسائل الداخلة | + | `plugin-sdk/channel-lifecycle` | `createAccountStatusSink`، ومساعدات دورة الحياة/الإنهاء لمسودة التدفق | + | `plugin-sdk/inbound-envelope` | مساعدات مشتركة للتوجيه الوارد + بناء الظرف | + | `plugin-sdk/inbound-reply-dispatch` | مساعدات مشتركة للتسجيل الوارد ثم الإرسال | | `plugin-sdk/messaging-targets` | مساعدات تحليل/مطابقة الأهداف | | `plugin-sdk/outbound-media` | مساعدات مشتركة لتحميل الوسائط الصادرة | | `plugin-sdk/outbound-runtime` | مساعدات الهوية الصادرة، ومفوّض الإرسال، وتخطيط الحمولة | | `plugin-sdk/poll-runtime` | مساعدات ضيقة لتطبيع الاستطلاعات | - | `plugin-sdk/thread-bindings-runtime` | مساعدات دورة حياة ارتباطات الخيوط والمهايئات | - | `plugin-sdk/agent-media-payload` | باني حمولة وسائط الوكيل القديم | - | `plugin-sdk/conversation-runtime` | مساعدات المحادثة/ربط الخيوط، وpairing، والارتباطات المكوّنة | - | `plugin-sdk/runtime-config-snapshot` | مساعد snapshot لتكوين وقت التشغيل | - | `plugin-sdk/runtime-group-policy` | مساعدات حل سياسة المجموعة في وقت التشغيل | - | `plugin-sdk/channel-status` | مساعدات مشتركة لـ snapshot/summary حالة القناة | - | `plugin-sdk/channel-config-primitives` | العناصر الأولية الضيقة لمخطط تكوين القناة | - | `plugin-sdk/channel-config-writes` | مساعدات تفويض كتابة تكوين القناة | - | `plugin-sdk/channel-plugin-common` | تصديرات المقدمة المشتركة لـ plugin القناة | - | `plugin-sdk/allowlist-config-edit` | مساعدات تعديل/قراءة تكوين قائمة السماح | + | `plugin-sdk/thread-bindings-runtime` | مساعدات دورة الحياة والمهايئ لربط الخيوط | + | `plugin-sdk/agent-media-payload` | باني حمولة وسائط العامل القديم | + | `plugin-sdk/conversation-runtime` | مساعدات المحادثة/ربط الخيوط، والاقتران، والربط المُعد | + | `plugin-sdk/runtime-config-snapshot` | مساعد لقطة إعدادات وقت التشغيل | + | `plugin-sdk/runtime-group-policy` | مساعدات حل سياسات المجموعات في وقت التشغيل | + | `plugin-sdk/channel-status` | مساعدات مشتركة للّقطة/الملخص الخاص بحالة القناة | + | `plugin-sdk/channel-config-primitives` | بدائيات ضيقة لمخطط إعداد القناة | + | `plugin-sdk/channel-config-writes` | مساعدات تفويض كتابة إعدادات القناة | + | `plugin-sdk/channel-plugin-common` | تصديرات تمهيدية مشتركة لـ channel plugin | + | `plugin-sdk/allowlist-config-edit` | مساعدات قراءة/تعديل إعدادات allowlist | | `plugin-sdk/group-access` | مساعدات مشتركة لقرارات وصول المجموعات | - | `plugin-sdk/direct-dm` | مساعدات مشتركة لمصادقة/حماية الرسائل المباشرة المباشرة | - | `plugin-sdk/interactive-runtime` | العرض الدلالي للرسائل، والتسليم، ومساعدات الردود التفاعلية القديمة. راجع [عرض الرسائل](/ar/plugins/message-presentation) | - | `plugin-sdk/channel-inbound` | ملف توافق للتعامل مع debounce للواردات، ومطابقة الذكر، ومساعدات سياسة الذكر، ومساعدات envelope | - | `plugin-sdk/channel-mention-gating` | مساعدات ضيقة لسياسة الذكر من دون السطح الأشمل لوقت تشغيل الواردات | - | `plugin-sdk/channel-location` | مساعدات سياق الموقع في القناة وتنسيقه | - | `plugin-sdk/channel-logging` | مساعدات تسجيل القنوات لحالات إسقاط الواردات وإخفاقات الكتابة/الإقرار | - | `plugin-sdk/channel-send-result` | أنواع نتائج الرد | - | `plugin-sdk/channel-actions` | مساعدات إجراءات رسائل القناة، بالإضافة إلى مساعدات المخطط الأصلية المهجورة التي أُبقي عليها من أجل توافق plugin | + | `plugin-sdk/direct-dm` | مساعدات مشتركة للمصادقة/الحماية الخاصة بـ direct-DM | + | `plugin-sdk/interactive-runtime` | مساعدات العرض الدلالي للرسائل، والتسليم، والردود التفاعلية القديمة. راجع [Message Presentation](/ar/plugins/message-presentation) | + | `plugin-sdk/channel-inbound` | حاوية توافق لمساعدات inbound debounce، ومطابقة الإشارات، ومساعدات mention-policy، ومساعدات الظرف | + | `plugin-sdk/channel-mention-gating` | مساعدات ضيقة لسياسات الإشارة من دون واجهة وقت التشغيل الوارد الأوسع | + | `plugin-sdk/channel-location` | مساعدات سياق موقع القناة وتنسيقه | + | `plugin-sdk/channel-logging` | مساعدات تسجيل القناة لحالات إسقاط الوارد وإخفاقات typing/ack | + | `plugin-sdk/channel-send-result` | أنواع نتيجة الرد | + | `plugin-sdk/channel-actions` | مساعدات إجراءات رسائل القناة، بالإضافة إلى مساعدات المخطط الأصلي المتقادمة المُحتفَظ بها لتوافق plugin | | `plugin-sdk/channel-targets` | مساعدات تحليل/مطابقة الأهداف | | `plugin-sdk/channel-contract` | أنواع عقد القناة | - | `plugin-sdk/channel-feedback` | ربط الملاحظات/التفاعلات | - | `plugin-sdk/channel-secret-runtime` | مساعدات ضيقة لعقد الأسرار مثل `collectSimpleChannelFieldAssignments` و`getChannelSurface` و`pushAssignment` وأنواع أهداف الأسرار | + | `plugin-sdk/channel-feedback` | توصيل التغذية الراجعة/التفاعلات | + | `plugin-sdk/channel-secret-runtime` | مساعدات ضيقة لعقد الأسرار مثل `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`، وأنواع أهداف الأسرار | - + | المسار الفرعي | أهم التصديرات | | --- | --- | | `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` | - | `plugin-sdk/provider-setup` | مساعدات منسّقة لإعداد المزوّدات المحلية/ذاتية الاستضافة | - | `plugin-sdk/self-hosted-provider-setup` | مساعدات مركزة لإعداد مزوّدات ذاتية الاستضافة متوافقة مع OpenAI | - | `plugin-sdk/cli-backend` | الإعدادات الافتراضية لخلفية CLI + ثوابت watchdog | - | `plugin-sdk/provider-auth-runtime` | مساعدات حل مفاتيح API في وقت التشغيل لـ plugins المزوّدين | - | `plugin-sdk/provider-auth-api-key` | مساعدات إعداد/كتابة ملف تعريف مفتاح API مثل `upsertApiKeyProfile` | - | `plugin-sdk/provider-auth-result` | الباني القياسي لنتيجة مصادقة OAuth | - | `plugin-sdk/provider-auth-login` | مساعدات تسجيل الدخول التفاعلي المشتركة لـ plugins المزوّدين | - | `plugin-sdk/provider-env-vars` | مساعدات البحث عن متغيرات بيئة مصادقة المزوّد | + | `plugin-sdk/provider-setup` | مساعدات منسقة لإعداد الموفّرات المحلية/المستضافة ذاتيًا | + | `plugin-sdk/self-hosted-provider-setup` | مساعدات مركزة لإعداد موفّر مستضاف ذاتيًا ومتوافق مع OpenAI | + | `plugin-sdk/cli-backend` | القيم الافتراضية للواجهة الخلفية لـ CLI + ثوابت watchdog | + | `plugin-sdk/provider-auth-runtime` | مساعدات حل API key في وقت التشغيل لـ provider plugins | + | `plugin-sdk/provider-auth-api-key` | مساعدات ضم API key وكتابة الملف التعريفي مثل `upsertApiKeyProfile` | + | `plugin-sdk/provider-auth-result` | باني قياسي لنتيجة مصادقة OAuth | + | `plugin-sdk/provider-auth-login` | مساعدات تسجيل دخول تفاعلية مشتركة لـ provider plugins | + | `plugin-sdk/provider-env-vars` | مساعدات البحث عن متغيرات البيئة الخاصة بمصادقة الموفّر | | `plugin-sdk/provider-auth` | `createProviderApiKeyAuthMethod`, `ensureApiKeyFromOptionEnvOrPrompt`, `upsertAuthProfile`, `upsertApiKeyProfile`, `writeOAuthCredentials` | - | `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`، و`buildProviderReplayFamilyHooks`، و`normalizeModelCompat`، وبناة سياسة replay المشتركة، ومساعدات نقاط نهاية المزوّد، ومساعدات تطبيع معرّف النموذج مثل `normalizeNativeXaiModelId` | + | `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`، وبُناة سياسات replay المشتركة، ومساعدات endpoint الخاصة بالموفّر، ومساعدات تطبيع model-id مثل `normalizeNativeXaiModelId` | | `plugin-sdk/provider-catalog-shared` | `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` | - | `plugin-sdk/provider-http` | مساعدات HTTP/قدرات نقاط نهاية المزوّد العامة | - | `plugin-sdk/provider-web-fetch-contract` | مساعدات ضيقة لعقد تكوين/اختيار web-fetch مثل `enablePluginInConfig` و`WebFetchProviderPlugin` | - | `plugin-sdk/provider-web-fetch` | مساعدات تسجيل/تخزين مؤقت/وقت تشغيل مزوّد web-fetch | - | `plugin-sdk/provider-web-search-config-contract` | مساعدات ضيقة لتكوين/بيانات اعتماد web-search للمزوّدات التي لا تحتاج إلى ربط تمكين plugin | - | `plugin-sdk/provider-web-search-contract` | مساعدات ضيقة لعقد تكوين/بيانات اعتماد web-search مثل `createWebSearchProviderContractFields` و`enablePluginInConfig` و`resolveProviderWebSearchPluginConfig` وعمليات تعيين/جلب بيانات الاعتماد ضمن النطاق | - | `plugin-sdk/provider-web-search` | مساعدات تسجيل/تخزين مؤقت/وقت تشغيل مزوّد web-search | - | `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`، و`buildProviderToolCompatFamilyHooks`، وتنظيف مخطط Gemini + التشخيصات، ومساعدات توافق xAI مثل `resolveXaiModelCompatPatch` / `applyXaiModelCompat` | - | `plugin-sdk/provider-usage` | `fetchClaudeUsage` وما شابه | - | `plugin-sdk/provider-stream` | `ProviderStreamFamily`، و`buildProviderStreamFamilyHooks`، و`composeProviderStreamWrappers`، وأنواع مغلفات stream، ومساعدات المغلفات المشتركة لـ Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot | - | `plugin-sdk/provider-transport-runtime` | مساعدات نقل المزوّد الأصلية مثل fetch المحمي، وتحويلات رسائل النقل، وتيارات أحداث النقل القابلة للكتابة | - | `plugin-sdk/provider-onboard` | مساعدات patch لتكوين الإعداد الأولي | + | `plugin-sdk/provider-http` | مساعدات عامة لقدرات HTTP/endpoint الخاصة بالموفّر | + | `plugin-sdk/provider-web-fetch-contract` | مساعدات ضيقة لعقد إعداد/اختيار web-fetch مثل `enablePluginInConfig` و`WebFetchProviderPlugin` | + | `plugin-sdk/provider-web-fetch` | مساعدات تسجيل/ذاكرة تخزين مؤقت لـ web-fetch provider | + | `plugin-sdk/provider-web-search-config-contract` | مساعدات ضيقة لإعداد/بيانات اعتماد web-search للموفّرين الذين لا يحتاجون إلى توصيل تمكين plugin | + | `plugin-sdk/provider-web-search-contract` | مساعدات ضيقة لعقد إعداد/بيانات اعتماد web-search مثل `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig`، وواضعات/جالبات بيانات الاعتماد ذات النطاق المحدد | + | `plugin-sdk/provider-web-search` | مساعدات تسجيل/ذاكرة تخزين مؤقت/وقت تشغيل لـ web-search provider | + | `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`، وتنظيف مخطط Gemini + التشخيصات، ومساعدات التوافق الخاصة بـ xAI مثل `resolveXaiModelCompatPatch` / `applyXaiModelCompat` | + | `plugin-sdk/provider-usage` | `fetchClaudeUsage` وما شابه ذلك | + | `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`، وأنواع مغلفات التدفق، ومساعدات المغلفات المشتركة لـ Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot | + | `plugin-sdk/provider-transport-runtime` | مساعدات النقل الأصلية الخاصة بالموفّر مثل fetch المحمي، وتحويلات رسائل النقل، وتدفقات أحداث النقل القابلة للكتابة | + | `plugin-sdk/provider-onboard` | مساعدات تصحيح إعدادات التهيئة | | `plugin-sdk/global-singleton` | مساعدات singleton/map/cache محلية للعملية | - | المسار الفرعي | أهم التصديرات | + | Subpath | أهم التصديرات | | --- | --- | | `plugin-sdk/command-auth` | `resolveControlCommandGate`، ومساعدات سجل الأوامر، ومساعدات تفويض المرسل | | `plugin-sdk/command-status` | بُناة رسائل الأوامر/المساعدة مثل `buildCommandsMessagePaginated` و`buildHelpMessage` | - | `plugin-sdk/approval-auth-runtime` | مساعدات حل الموافقين ومصادقة الإجراءات داخل الدردشة نفسها | - | `plugin-sdk/approval-client-runtime` | مساعدات ملفات تعريف/عوامل تصفية موافقات exec الأصلية | - | `plugin-sdk/approval-delivery-runtime` | مهايئات القدرة/التسليم الأصلية للموافقات | - | `plugin-sdk/approval-gateway-runtime` | مساعد مشترك لحل gateway الخاصة بالموافقات | - | `plugin-sdk/approval-handler-adapter-runtime` | مساعدات خفيفة لتحميل مهايئات الموافقات الأصلية لنقاط إدخال القنوات السريعة | - | `plugin-sdk/approval-handler-runtime` | مساعدات أوسع لوقت تشغيل معالجات الموافقات؛ فضّل المسارات الأضيق الخاصة بالمهايئ/gateway عندما تكون كافية | + | `plugin-sdk/approval-auth-runtime` | مساعدات حل المُوافق ومصادقة الإجراءات داخل المحادثة نفسها | + | `plugin-sdk/approval-client-runtime` | مساعدات الملف التعريفي/عامل التصفية الخاصة بالموافقة على التنفيذ الأصلي | + | `plugin-sdk/approval-delivery-runtime` | مهايئات قدرات/تسليم الموافقة الأصلية | + | `plugin-sdk/approval-gateway-runtime` | مساعد حل Gateway للموافقة المشتركة | + | `plugin-sdk/approval-handler-adapter-runtime` | مساعدات خفيفة لتحميل مهايئ الموافقة الأصلية لنقاط إدخال القنوات السريعة | + | `plugin-sdk/approval-handler-runtime` | مساعدات أوسع لوقت تشغيل معالج الموافقة؛ استخدم واجهات adapter/gateway الأضيق عندما تكون كافية | | `plugin-sdk/approval-native-runtime` | مساعدات الهدف الأصلي للموافقة + ربط الحساب | - | `plugin-sdk/approval-reply-runtime` | مساعدات حمولة ردود موافقات exec/plugin | - | `plugin-sdk/command-auth-native` | مساعدات مصادقة الأوامر الأصلية + أهداف الجلسات الأصلية | + | `plugin-sdk/approval-reply-runtime` | مساعدات حمولة رد الموافقة على التنفيذ/Plugin | + | `plugin-sdk/command-auth-native` | المصادقة الأصلية للأوامر + مساعدات هدف الجلسة الأصلية | | `plugin-sdk/command-detection` | مساعدات مشتركة لاكتشاف الأوامر | - | `plugin-sdk/command-surface` | مساعدات تطبيع متن الأوامر وسطح الأوامر | + | `plugin-sdk/command-surface` | تطبيع نص الأمر ومساعدات واجهة الأمر | | `plugin-sdk/allow-from` | `formatAllowFromLowercase` | - | `plugin-sdk/channel-secret-runtime` | مساعدات ضيقة لتجميع عقود الأسرار لأسطح أسرار القنوات/plugins | - | `plugin-sdk/secret-ref-runtime` | مساعدات ضيقة لـ `coerceSecretRef` وأنواع SecretRef لتحليل عقود الأسرار/التكوين | - | `plugin-sdk/security-runtime` | مساعدات مشتركة للثقة، وتقييد الرسائل المباشرة، والمحتوى الخارجي، وتجميع الأسرار | - | `plugin-sdk/ssrf-policy` | مساعدات سياسة SSRF الخاصة بقائمة سماح المضيفين والشبكات الخاصة | - | `plugin-sdk/ssrf-dispatcher` | مساعدات ضيقة لـ pinned-dispatcher من دون السطح الأوسع لوقت تشغيل البنية التحتية | - | `plugin-sdk/ssrf-runtime` | مساعدات pinned-dispatcher، وfetch المحمي من SSRF، وسياسة SSRF | - | `plugin-sdk/secret-input` | مساعدات تحليل مدخلات الأسرار | - | `plugin-sdk/webhook-ingress` | مساعدات طلبات/أهداف Webhook | - | `plugin-sdk/webhook-request-guards` | مساعدات حجم متن الطلب/المهلة | + | `plugin-sdk/channel-secret-runtime` | مساعدات ضيقة لتجميع عقود الأسرار لواجهات أسرار القناة/Plugin | + | `plugin-sdk/secret-ref-runtime` | `coerceSecretRef` الضيق ومساعدات typing الخاصة بـ SecretRef لتحليل عقد الأسرار/الإعدادات | + | `plugin-sdk/security-runtime` | مساعدات مشتركة للثقة، وبوابة DM، والمحتوى الخارجي، وتجميع الأسرار | + | `plugin-sdk/ssrf-policy` | مساعدات سياسة SSRF الخاصة بقائمة سماح المضيف والشبكة الخاصة | + | `plugin-sdk/ssrf-dispatcher` | مساعدات ضيقة لـ pinned-dispatcher من دون واجهة وقت تشغيل البنية الأوسع | + | `plugin-sdk/ssrf-runtime` | pinned-dispatcher، وfetch المحمي من SSRF، ومساعدات سياسة SSRF | + | `plugin-sdk/secret-input` | مساعدات تحليل إدخال الأسرار | + | `plugin-sdk/webhook-ingress` | مساعدات طلب/هدف Webhook | + | `plugin-sdk/webhook-request-guards` | مساعدات حجم نص الطلب/المهلة الزمنية | - | المسار الفرعي | أهم التصديرات | + | Subpath | أهم التصديرات | | --- | --- | - | `plugin-sdk/runtime` | مساعدات واسعة لوقت التشغيل/التسجيل/النسخ الاحتياطي/تثبيت plugin | - | `plugin-sdk/runtime-env` | مساعدات ضيقة لبيئة وقت التشغيل، وlogger، والمهلة، وإعادة المحاولة، وbackoff | + | `plugin-sdk/runtime` | مساعدات واسعة لوقت التشغيل/التسجيل/النسخ الاحتياطي/تثبيت Plugin | + | `plugin-sdk/runtime-env` | مساعدات ضيقة لبيئة وقت التشغيل، والمسجل، والمهلة الزمنية، وإعادة المحاولة، والتراجع | | `plugin-sdk/channel-runtime-context` | مساعدات عامة لتسجيل والبحث عن سياق وقت تشغيل القناة | | `plugin-sdk/runtime-store` | `createPluginRuntimeStore` | - | `plugin-sdk/plugin-runtime` | مساعدات مشتركة لأوامر/hook/http/التفاعل الخاصة بـ plugin | - | `plugin-sdk/hook-runtime` | مساعدات مشتركة لخط أنابيب Webhook/internal hook | + | `plugin-sdk/plugin-runtime` | مساعدات مشتركة لأوامر/خطافات/HTTP/التفاعل الخاصة بـ Plugin | + | `plugin-sdk/hook-runtime` | مساعدات مشتركة لخط أنابيب Webhook/الخطافات الداخلية | | `plugin-sdk/lazy-runtime` | مساعدات الاستيراد/الربط الكسول لوقت التشغيل مثل `createLazyRuntimeModule` و`createLazyRuntimeMethod` و`createLazyRuntimeSurface` | | `plugin-sdk/process-runtime` | مساعدات تنفيذ العمليات | - | `plugin-sdk/cli-runtime` | مساعدات تنسيق CLI، والانتظار، والإصدار | - | `plugin-sdk/gateway-runtime` | مساعدات عميل Gateway وpatch حالة القناة | - | `plugin-sdk/config-runtime` | مساعدات تحميل/كتابة التكوين | - | `plugin-sdk/telegram-command-config` | تطبيع أسماء/أوصاف أوامر Telegram والتحقق من التكرار/التعارض، حتى عند عدم توفر سطح عقد Telegram المضمّن | - | `plugin-sdk/text-autolink-runtime` | اكتشاف autolink لمراجع الملفات من دون ملف text-runtime الواسع | - | `plugin-sdk/approval-runtime` | مساعدات موافقات exec/plugin، وبناة قدرات الموافقة، ومساعدات المصادقة/الملف التعريفي، ومساعدات التوجيه/وقت التشغيل الأصلية | - | `plugin-sdk/reply-runtime` | مساعدات مشتركة لوقت تشغيل الوارد/الرد، والتجزئة، والتوزيع، وHeartbeat، ومخطط الرد | - | `plugin-sdk/reply-dispatch-runtime` | مساعدات ضيقة لتوزيع/finalize الردود | - | `plugin-sdk/reply-history` | مساعدات مشتركة قصيرة النافذة لسجل الردود مثل `buildHistoryContext` و`recordPendingHistoryEntry` و`clearHistoryEntriesIfEnabled` | + | `plugin-sdk/cli-runtime` | مساعدات تنسيق CLI والانتظار والإصدار | + | `plugin-sdk/gateway-runtime` | مساعدات عميل Gateway وتصحيح حالة القناة | + | `plugin-sdk/config-runtime` | مساعدات تحميل/كتابة الإعدادات | + | `plugin-sdk/telegram-command-config` | تطبيع اسم/وصف أوامر Telegram وفحوصات التكرار/التعارض، حتى عند غياب واجهة عقد Telegram المضمنة | + | `plugin-sdk/text-autolink-runtime` | اكتشاف الروابط التلقائية لمراجع الملفات من دون الحاوية الأوسع لـ text-runtime | + | `plugin-sdk/approval-runtime` | مساعدات الموافقة على التنفيذ/Plugin، وبناة قدرات الموافقة، ومساعدات المصادقة/الملف التعريفي، ومساعدات التوجيه/وقت التشغيل الأصلية | + | `plugin-sdk/reply-runtime` | مساعدات مشتركة لوقت تشغيل الوارد/الرد، والتجزئة، والإرسال، وHeartbeat، ومخطط الرد | + | `plugin-sdk/reply-dispatch-runtime` | مساعدات ضيقة لإرسال/إنهاء الرد | + | `plugin-sdk/reply-history` | مساعدات مشتركة لسجل الردود ضمن نافذة قصيرة مثل `buildHistoryContext` و`recordPendingHistoryEntry` و`clearHistoryEntriesIfEnabled` | | `plugin-sdk/reply-reference` | `createReplyReferencePlanner` | | `plugin-sdk/reply-chunking` | مساعدات ضيقة لتجزئة النص/Markdown | - | `plugin-sdk/session-store-runtime` | مساعدات مسار مخزن الجلسات + `updated-at` | + | `plugin-sdk/session-store-runtime` | مساعدات مسار مخزن الجلسة + `updated-at` | | `plugin-sdk/state-paths` | مساعدات مسارات أدلة state/OAuth | - | `plugin-sdk/routing` | مساعدات التوجيه/مفتاح الجلسة/ربط الحساب مثل `resolveAgentRoute` و`buildAgentSessionKey` و`resolveDefaultAgentBoundAccountId` | + | `plugin-sdk/routing` | مساعدات route/session-key وربط الحساب مثل `resolveAgentRoute` و`buildAgentSessionKey` و`resolveDefaultAgentBoundAccountId` | | `plugin-sdk/status-helpers` | مساعدات مشتركة لملخص حالة القناة/الحساب، والقيم الافتراضية لحالة وقت التشغيل، ومساعدات بيانات المشكلات الوصفية | | `plugin-sdk/target-resolver-runtime` | مساعدات مشتركة لحل الأهداف | - | `plugin-sdk/string-normalization-runtime` | مساعدات تطبيع slug/string | + | `plugin-sdk/string-normalization-runtime` | مساعدات تطبيع slug/السلاسل النصية | | `plugin-sdk/request-url` | استخراج عناوين URL النصية من مدخلات شبيهة بـ fetch/request | - | `plugin-sdk/run-command` | مشغّل أوامر بزمن محدد مع نتائج stdout/stderr مطبّعة | - | `plugin-sdk/param-readers` | قارئات معلمات مشتركة للأدوات/CLI | - | `plugin-sdk/tool-payload` | استخراج الحمولات المطبّعة من كائنات نتائج الأدوات | - | `plugin-sdk/tool-send` | استخراج حقول هدف الإرسال القياسية من وسائط الأداة | - | `plugin-sdk/temp-path` | مساعدات مشتركة لمسارات التنزيل المؤقت | - | `plugin-sdk/logging-core` | مساعدات logger للنظام الفرعي والتنقيح | - | `plugin-sdk/markdown-table-runtime` | مساعدات أوضاع جداول Markdown | + | `plugin-sdk/run-command` | مشغّل أوامر موقّت مع نتائج stdout/stderr مطبّعة | + | `plugin-sdk/param-readers` | قارئات شائعة لمعاملات الأدوات/CLI | + | `plugin-sdk/tool-payload` | استخراج حمولات مطبّعة من كائنات نتائج الأدوات | + | `plugin-sdk/tool-send` | استخراج حقول هدف الإرسال القياسية من معاملات الأداة | + | `plugin-sdk/temp-path` | مساعدات مشتركة لمسارات التنزيل المؤقتة | + | `plugin-sdk/logging-core` | مساعدات مسجل subsystem والتنقيح | + | `plugin-sdk/markdown-table-runtime` | مساعدات وضع جداول Markdown | | `plugin-sdk/json-store` | مساعدات صغيرة لقراءة/كتابة حالة JSON | - | `plugin-sdk/file-lock` | مساعدات إعادة الدخول إلى file-lock | - | `plugin-sdk/persistent-dedupe` | مساعدات cache إزالة التكرار المعتمد على القرص | - | `plugin-sdk/acp-runtime` | مساعدات وقت تشغيل/جلسات ACP وتوزيع الردود | - | `plugin-sdk/acp-binding-resolve-runtime` | حل ارتباط ACP للقراءة فقط من دون استيرادات بدء تشغيل دورة الحياة | - | `plugin-sdk/agent-config-primitives` | عناصر أولية ضيقة لمخطط تكوين وقت تشغيل الوكيل | - | `plugin-sdk/boolean-param` | قارئ مرن لمعلمات boolean | + | `plugin-sdk/file-lock` | مساعدات file-lock قابلة لإعادة الدخول | + | `plugin-sdk/persistent-dedupe` | مساعدات ذاكرة التخزين المؤقت لإزالة التكرار المدعومة بالقرص | + | `plugin-sdk/acp-runtime` | مساعدات وقت التشغيل/الجلسة وإرسال الردود الخاصة بـ ACP | + | `plugin-sdk/acp-binding-resolve-runtime` | حل ربط ACP للقراءة فقط من دون استيرادات بدء دورة الحياة | + | `plugin-sdk/agent-config-primitives` | بدائيات ضيقة لمخطط إعداد وقت تشغيل العامل | + | `plugin-sdk/boolean-param` | قارئ مرن لمعاملات boolean | | `plugin-sdk/dangerous-name-runtime` | مساعدات حل مطابقة الأسماء الخطرة | - | `plugin-sdk/device-bootstrap` | مساعدات bootstrap الخاصة بالأجهزة وtoken pairing | - | `plugin-sdk/extension-shared` | عناصر أولية مشتركة للمساعدات الخاصة بالقنوات السلبية، والحالة، وambient proxy | - | `plugin-sdk/models-provider-runtime` | مساعدات ردود الأمر `/models`/المزوّد | - | `plugin-sdk/skill-commands-runtime` | مساعدات إدراج أوامر Skills | - | `plugin-sdk/native-command-registry` | مساعدات سجل/بناء/تسلسل الأوامر الأصلية | - | `plugin-sdk/agent-harness` | سطح موثوق تجريبي لـ plugin من أجل agent harnesses منخفضة المستوى: أنواع harness، ومساعدات توجيه/إلغاء التشغيلات النشطة، ومساعدات جسر أدوات OpenClaw، وأدوات نتائج المحاولات | - | `plugin-sdk/provider-zai-endpoint` | مساعدات اكتشاف نقطة نهاية Z.A.I | + | `plugin-sdk/device-bootstrap` | مساعدات التمهيد الأولي للجهاز ورمز الاقتران | + | `plugin-sdk/extension-shared` | بدائيات مساعدة مشتركة للقنوات السلبية، والحالة، والوكيل المحيطي | + | `plugin-sdk/models-provider-runtime` | مساعدات أوامر `/models`/ردود الموفّر | + | `plugin-sdk/skill-commands-runtime` | مساعدات سرد أوامر Skills | + | `plugin-sdk/native-command-registry` | مساعدات سجل الأوامر الأصلي/البناء/التسلسل | + | `plugin-sdk/agent-harness` | واجهة تجريبية لـ Plugin موثوق للمسارات منخفضة المستوى الخاصة بـ agent harnesses: أنواع harness، ومساعدات التوجيه/الإيقاف للتشغيل النشط، ومساعدات جسر أدوات OpenClaw، وأدوات نتيجة المحاولة | + | `plugin-sdk/provider-zai-endpoint` | مساعدات اكتشاف نقطة نهاية Z.AI | | `plugin-sdk/infra-runtime` | مساعدات أحداث النظام/Heartbeat | - | `plugin-sdk/collection-runtime` | مساعدات cache صغيرة محدودة | - | `plugin-sdk/diagnostic-runtime` | مساعدات العلامات التشخيصية والأحداث | - | `plugin-sdk/error-runtime` | مساعدات رسم الأخطاء، والتنسيق، وتصنيف الأخطاء المشترك، و`isApprovalNotFoundError` | - | `plugin-sdk/fetch-runtime` | مساعدات fetch المغلف، وproxy، وlookup المثبت | + | `plugin-sdk/collection-runtime` | مساعدات صغيرة لذاكرة تخزين مؤقت محدودة | + | `plugin-sdk/diagnostic-runtime` | مساعدات الأعلام والأحداث التشخيصية | + | `plugin-sdk/error-runtime` | مساعدات رسم الأخطاء، والتنسيق، والتصنيف المشترك للأخطاء، و`isApprovalNotFoundError` | + | `plugin-sdk/fetch-runtime` | مساعدات fetch المغلف، والوكيل، والبحث المثبّت | | `plugin-sdk/runtime-fetch` | fetch لوقت التشغيل مدرك لـ dispatcher من دون استيرادات proxy/guarded-fetch | - | `plugin-sdk/response-limit-runtime` | قارئ محدود لمتن الاستجابة من دون السطح الأوسع لوقت تشغيل الوسائط | - | `plugin-sdk/session-binding-runtime` | حالة ارتباط المحادثة الحالية من دون توجيه الارتباطات المكوّنة أو مخازن pairing | - | `plugin-sdk/session-store-runtime` | مساعدات قراءة مخزن الجلسات من دون استيرادات واسعة لكتابة/صيانة التكوين | - | `plugin-sdk/context-visibility-runtime` | حل ظهور السياق وتصفية السياق الإضافي من دون استيرادات واسعة للتكوين/الأمان | - | `plugin-sdk/string-coerce-runtime` | مساعدات ضيقة للإجبار والتطبيع للسجلات/السلاسل الأولية من دون استيرادات markdown/logging | - | `plugin-sdk/host-runtime` | مساعدات تطبيع اسم المضيف وSCP host | - | `plugin-sdk/retry-runtime` | مساعدات تكوين إعادة المحاولة ومشغّل إعادة المحاولة | - | `plugin-sdk/agent-runtime` | مساعدات دليل/هوية/مساحة عمل الوكيل | - | `plugin-sdk/directory-runtime` | الاستعلام/إزالة التكرار من الدليل المدعوم بالتكوين | + | `plugin-sdk/response-limit-runtime` | قارئ محدود لنص الاستجابة من دون واجهة وقت تشغيل الوسائط الأوسع | + | `plugin-sdk/session-binding-runtime` | حالة ربط المحادثة الحالية من دون توجيه الربط المُعد أو مخازن الاقتران | + | `plugin-sdk/session-store-runtime` | مساعدات قراءة مخزن الجلسة من دون استيرادات واسعة لكتابة/صيانة الإعدادات | + | `plugin-sdk/context-visibility-runtime` | حل ظهور السياق وتصفية السياق الإضافي من دون استيرادات واسعة للإعدادات/الأمان | + | `plugin-sdk/string-coerce-runtime` | مساعدات ضيقة للإكراه والتطبيع للسلاسل/السجلات البدائية من دون استيرادات Markdown/التسجيل | + | `plugin-sdk/host-runtime` | مساعدات تطبيع اسم المضيف ومضيف SCP | + | `plugin-sdk/retry-runtime` | مساعدات إعداد إعادة المحاولة ومشغّلها | + | `plugin-sdk/agent-runtime` | مساعدات دليل/هوية/مساحة عمل العامل | + | `plugin-sdk/directory-runtime` | الاستعلام عن الأدلة المدعوم بالإعدادات/إزالة التكرار | | `plugin-sdk/keyed-async-queue` | `KeyedAsyncQueue` | - | المسار الفرعي | أهم التصديرات | + | Subpath | أهم التصديرات | | --- | --- | | `plugin-sdk/media-runtime` | مساعدات مشتركة لجلب/تحويل/تخزين الوسائط بالإضافة إلى بُناة حمولة الوسائط | - | `plugin-sdk/media-generation-runtime` | مساعدات مشتركة لـ failover في توليد الوسائط، واختيار المرشحين، ورسائل غياب النموذج | - | `plugin-sdk/media-understanding` | أنواع مزوّدات فهم الوسائط بالإضافة إلى تصديرات مساعدات الصور/الصوت المواجهة للمزوّد | - | `plugin-sdk/text-runtime` | مساعدات مشتركة للنص/Markdown/التسجيل مثل إزالة النص المرئي للمساعد، ومساعدات عرض/تجزئة/جداول Markdown، ومساعدات التنقيح، ومساعدات وسوم التوجيه، وأدوات النص الآمن | + | `plugin-sdk/media-generation-runtime` | مساعدات مشتركة للتجاوز عند فشل توليد الوسائط، واختيار المرشحين، ورسائل النموذج المفقود | + | `plugin-sdk/media-understanding` | أنواع موفّر فهم الوسائط بالإضافة إلى تصديرات مساعدات الصور/الصوت الموجّهة للموفّر | + | `plugin-sdk/text-runtime` | مساعدات مشتركة للنص/Markdown/التسجيل مثل إزالة النص المرئي للمساعد، ومساعدات العرض/التجزئة/الجداول في Markdown، ومساعدات التنقيح، ومساعدات وسم التوجيهات، وأدوات النص الآمن | | `plugin-sdk/text-chunking` | مساعد تجزئة النص الصادر | - | `plugin-sdk/speech` | أنواع مزوّدات الكلام بالإضافة إلى تصديرات المساعدات المواجهة للمزوّد الخاصة بالتوجيه، والسجل، والتحقق | - | `plugin-sdk/speech-core` | مساعدات مشتركة لأنواع مزوّدات الكلام، والسجل، والتوجيه، والتطبيع | - | `plugin-sdk/realtime-transcription` | أنواع مزوّدات النسخ الفوري ومساعدات السجل | - | `plugin-sdk/realtime-voice` | أنواع مزوّدات الصوت الفوري ومساعدات السجل | - | `plugin-sdk/image-generation` | أنواع مزوّدات توليد الصور | - | `plugin-sdk/image-generation-core` | مساعدات مشتركة لأنواع توليد الصور، وfailover، والمصادقة، والسجل | - | `plugin-sdk/music-generation` | أنواع مزوّد/طلب/نتيجة توليد الموسيقى | - | `plugin-sdk/music-generation-core` | مساعدات مشتركة لأنواع توليد الموسيقى، ومساعدات failover، والبحث عن المزوّد، وتحليل model-ref | - | `plugin-sdk/video-generation` | أنواع مزوّد/طلب/نتيجة توليد الفيديو | - | `plugin-sdk/video-generation-core` | مساعدات مشتركة لأنواع توليد الفيديو، ومساعدات failover، والبحث عن المزوّد، وتحليل model-ref | - | `plugin-sdk/webhook-targets` | سجل أهداف Webhook ومساعدات تثبيت المسارات | + | `plugin-sdk/speech` | أنواع موفّر الكلام بالإضافة إلى مساعدات التوجيه والسجل والتحقق الموجّهة للموفّر | + | `plugin-sdk/speech-core` | أنواع موفّر الكلام المشتركة، والسجل، والتوجيه، ومساعدات التطبيع | + | `plugin-sdk/realtime-transcription` | أنواع موفّر النسخ الفوري ومساعدات السجل | + | `plugin-sdk/realtime-voice` | أنواع موفّر الصوت الفوري ومساعدات السجل | + | `plugin-sdk/image-generation` | أنواع موفّر توليد الصور | + | `plugin-sdk/image-generation-core` | الأنواع المشتركة لتوليد الصور، والتجاوز عند الفشل، والمصادقة، ومساعدات السجل | + | `plugin-sdk/music-generation` | أنواع موفّر/طلب/نتيجة توليد الموسيقى | + | `plugin-sdk/music-generation-core` | الأنواع المشتركة لتوليد الموسيقى، ومساعدات التجاوز عند الفشل، والبحث عن الموفّر، وتحليل model-ref | + | `plugin-sdk/video-generation` | أنواع موفّر/طلب/نتيجة توليد الفيديو | + | `plugin-sdk/video-generation-core` | الأنواع المشتركة لتوليد الفيديو، ومساعدات التجاوز عند الفشل، والبحث عن الموفّر، وتحليل model-ref | + | `plugin-sdk/webhook-targets` | سجل أهداف Webhook ومساعدات تثبيت route | | `plugin-sdk/webhook-path` | مساعدات تطبيع مسار Webhook | | `plugin-sdk/web-media` | مساعدات مشتركة لتحميل الوسائط البعيدة/المحلية | | `plugin-sdk/zod` | إعادة تصدير `zod` لمستهلكي Plugin SDK | @@ -280,102 +280,111 @@ import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core"; - | المسار الفرعي | أهم التصديرات | + | Subpath | أهم التصديرات | | --- | --- | - | `plugin-sdk/memory-core` | سطح المساعدات المضمّن memory-core لمساعدات المدير/التكوين/الملف/CLI | - | `plugin-sdk/memory-core-engine-runtime` | واجهة وقت تشغيل فهرسة/بحث الذاكرة | + | `plugin-sdk/memory-core` | واجهة المساعدة المضمنة memory-core لمساعدات المدير/الإعدادات/الملفات/CLI | + | `plugin-sdk/memory-core-engine-runtime` | واجهة وقت التشغيل للفهرسة/البحث الخاصة بالذاكرة | | `plugin-sdk/memory-core-host-engine-foundation` | تصديرات محرك الأساس لمضيف الذاكرة | - | `plugin-sdk/memory-core-host-engine-embeddings` | عقود embeddings الخاصة بمضيف الذاكرة، والوصول إلى السجل، والمزوّد المحلي، والمساعدات العامة للدفعات/البعيد | + | `plugin-sdk/memory-core-host-engine-embeddings` | عقود تضمين مضيف الذاكرة، والوصول إلى السجل، والموفّر المحلي، والمساعدات العامة للدفعات/عن بُعد | | `plugin-sdk/memory-core-host-engine-qmd` | تصديرات محرك QMD لمضيف الذاكرة | | `plugin-sdk/memory-core-host-engine-storage` | تصديرات محرك التخزين لمضيف الذاكرة | - | `plugin-sdk/memory-core-host-multimodal` | مساعدات الوسائط المتعددة لمضيف الذاكرة | + | `plugin-sdk/memory-core-host-multimodal` | مساعدات متعددة الوسائط لمضيف الذاكرة | | `plugin-sdk/memory-core-host-query` | مساعدات الاستعلام لمضيف الذاكرة | | `plugin-sdk/memory-core-host-secret` | مساعدات الأسرار لمضيف الذاكرة | - | `plugin-sdk/memory-core-host-events` | مساعدات دفتر يوميات الأحداث لمضيف الذاكرة | - | `plugin-sdk/memory-core-host-status` | مساعدات الحالة لمضيف الذاكرة | + | `plugin-sdk/memory-core-host-events` | مساعدات سجل أحداث مضيف الذاكرة | + | `plugin-sdk/memory-core-host-status` | مساعدات حالة مضيف الذاكرة | | `plugin-sdk/memory-core-host-runtime-cli` | مساعدات وقت تشغيل CLI لمضيف الذاكرة | | `plugin-sdk/memory-core-host-runtime-core` | مساعدات وقت التشغيل الأساسية لمضيف الذاكرة | | `plugin-sdk/memory-core-host-runtime-files` | مساعدات الملفات/وقت التشغيل لمضيف الذاكرة | - | `plugin-sdk/memory-host-core` | اسم مستعار محايد للبائع لمساعدات وقت التشغيل الأساسية لمضيف الذاكرة | - | `plugin-sdk/memory-host-events` | اسم مستعار محايد للبائع لمساعدات دفتر يوميات الأحداث لمضيف الذاكرة | - | `plugin-sdk/memory-host-files` | اسم مستعار محايد للبائع لمساعدات الملفات/وقت التشغيل لمضيف الذاكرة | - | `plugin-sdk/memory-host-markdown` | مساعدات managed-markdown المشتركة للplugins المجاورة للذاكرة | - | `plugin-sdk/memory-host-search` | واجهة وقت تشغيل Active Memory للوصول إلى مدير البحث | - | `plugin-sdk/memory-host-status` | اسم مستعار محايد للبائع لمساعدات الحالة لمضيف الذاكرة | - | `plugin-sdk/memory-lancedb` | سطح المساعدات المضمّن memory-lancedb | + | `plugin-sdk/memory-host-core` | اسم بديل محايد للمورّد لمساعدات وقت التشغيل الأساسية لمضيف الذاكرة | + | `plugin-sdk/memory-host-events` | اسم بديل محايد للمورّد لمساعدات سجل أحداث مضيف الذاكرة | + | `plugin-sdk/memory-host-files` | اسم بديل محايد للمورّد لمساعدات ملفات/وقت تشغيل مضيف الذاكرة | + | `plugin-sdk/memory-host-markdown` | مساعدات managed-markdown مشتركة للـ Plugins المجاورة للذاكرة | + | `plugin-sdk/memory-host-search` | واجهة Active Memory لوقت التشغيل للوصول إلى مدير البحث | + | `plugin-sdk/memory-host-status` | اسم بديل محايد للمورّد لمساعدات حالة مضيف الذاكرة | + | `plugin-sdk/memory-lancedb` | واجهة المساعدة المضمنة memory-lancedb | - - | العائلة | المسارات الفرعية الحالية | الاستخدام المقصود | + + | الفئة | المسارات الفرعية الحالية | الاستخدام المقصود | | --- | --- | --- | - | Browser | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | مساعدات دعم Browser plugin المضمّن (`browser-support` يظل ملف التوافق) | - | Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | سطح المساعدات/وقت التشغيل المضمّن لـ Matrix | - | Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | سطح المساعدات/وقت التشغيل المضمّن لـ LINE | - | IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | سطح المساعدات المضمّن لـ IRC | - | مساعدات خاصة بالقنوات | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | seams التوافق/المساعدات الخاصة بالقنوات المضمّنة | - | مساعدات خاصة بالمصادقة/الplugin | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | seams مساعدات الميزات/الplugins المضمّنة؛ يصدّر `plugin-sdk/github-copilot-token` حاليًا `DEFAULT_COPILOT_API_BASE_URL` و`deriveCopilotApiBaseUrlFromToken` و`resolveCopilotApiToken` | + | المتصفح | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | مساعدات دعم Plugin المتصفح المضمنة (`browser-support` تبقى حاوية التوافق) | + | Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | واجهة المساعدة/وقت التشغيل المضمنة لـ Matrix | + | Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | واجهة المساعدة/وقت التشغيل المضمنة لـ LINE | + | IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | واجهة المساعدة المضمنة لـ IRC | + | مساعدات خاصة بالقنوات | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | واجهات التوافق/المساعدة المضمنة الخاصة بالقنوات | + | مساعدات خاصة بالمصادقة/Plugin | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | واجهات المساعدة المضمنة للميزات/Plugins؛ ويصدر `plugin-sdk/github-copilot-token` حاليًا `DEFAULT_COPILOT_API_BASE_URL` و`deriveCopilotApiBaseUrlFromToken` و`resolveCopilotApiToken` | -## واجهة API للتسجيل +## API التسجيل -تتلقى دالة callback ‏`register(api)` كائن `OpenClawPluginApi` بهذه +يتلقى رد النداء `register(api)` كائن `OpenClawPluginApi` بهذه الأساليب: ### تسجيل القدرات -| الأسلوب | ما الذي يسجّله | +| الأسلوب | ما الذي يسجله | | ------------------------------------------------ | ------------------------------------- | -| `api.registerProvider(...)` | الاستدلال النصي (LLM) | -| `api.registerAgentHarness(...)` | منفّذ وكيل منخفض المستوى تجريبي | -| `api.registerCliBackend(...)` | خلفية استدلال CLI محلية | -| `api.registerChannel(...)` | قناة مراسلة | -| `api.registerSpeechProvider(...)` | تحويل النص إلى كلام / توليف STT | -| `api.registerRealtimeTranscriptionProvider(...)` | نسخ فوري متدفق | -| `api.registerRealtimeVoiceProvider(...)` | جلسات صوتية فورية ثنائية الاتجاه | -| `api.registerMediaUnderstandingProvider(...)` | تحليل الصور/الصوت/الفيديو | -| `api.registerImageGenerationProvider(...)` | توليد الصور | -| `api.registerMusicGenerationProvider(...)` | توليد الموسيقى | -| `api.registerVideoGenerationProvider(...)` | توليد الفيديو | -| `api.registerWebFetchProvider(...)` | مزوّد Web fetch / scrape | -| `api.registerWebSearchProvider(...)` | بحث الويب | +| `api.registerProvider(...)` | الاستدلال النصي (LLM) | +| `api.registerAgentHarness(...)` | منفذ عامل منخفض المستوى تجريبي | +| `api.registerCliBackend(...)` | واجهة خلفية محلية للاستدلال في CLI | +| `api.registerChannel(...)` | قناة مراسلة | +| `api.registerSpeechProvider(...)` | تحويل النص إلى كلام / توليف STT | +| `api.registerRealtimeTranscriptionProvider(...)` | نسخ فوري متدفق | +| `api.registerRealtimeVoiceProvider(...)` | جلسات صوتية فورية ثنائية الاتجاه | +| `api.registerMediaUnderstandingProvider(...)` | تحليل الصور/الصوت/الفيديو | +| `api.registerImageGenerationProvider(...)` | توليد الصور | +| `api.registerMusicGenerationProvider(...)` | توليد الموسيقى | +| `api.registerVideoGenerationProvider(...)` | توليد الفيديو | +| `api.registerWebFetchProvider(...)` | موفّر جلب / كشط الويب | +| `api.registerWebSearchProvider(...)` | البحث على الويب | ### الأدوات والأوامر -| الأسلوب | ما الذي يسجّله | -| ------------------------------- | --------------------------------------------- | -| `api.registerTool(tool, opts?)` | أداة وكيل (مطلوبة أو `{ optional: true }`) | -| `api.registerCommand(def)` | أمر مخصص (يتجاوز LLM) | +| الأسلوب | ما الذي يسجله | +| ----------------------------- | ---------------------------------------------- | +| `api.registerTool(tool, opts?)` | أداة عامل (مطلوبة أو `{ optional: true }`) | +| `api.registerCommand(def)` | أمر مخصص (يتجاوز LLM) | ### البنية التحتية -| الأسلوب | ما الذي يسجّله | -| ---------------------------------------------- | --------------------------------------- | -| `api.registerHook(events, handler, opts?)` | hook حدث | -| `api.registerHttpRoute(params)` | نقطة نهاية HTTP في Gateway | -| `api.registerGatewayMethod(name, handler)` | أسلوب RPC في Gateway | -| `api.registerCli(registrar, opts?)` | أمر فرعي في CLI | -| `api.registerService(service)` | خدمة خلفية | -| `api.registerInteractiveHandler(registration)` | معالج تفاعلي | -| `api.registerMemoryPromptSupplement(builder)` | قسم prompt إضافي مجاور للذاكرة | -| `api.registerMemoryCorpusSupplement(adapter)` | corpus إضافي لبحث/قراءة الذاكرة | +| الأسلوب | ما الذي يسجله | +| ----------------------------------------------- | ------------------------------------ | +| `api.registerHook(events, handler, opts?)` | خطاف أحداث | +| `api.registerHttpRoute(params)` | نقطة نهاية HTTP في Gateway | +| `api.registerGatewayMethod(name, handler)` | أسلوب RPC في Gateway | +| `api.registerCli(registrar, opts?)` | أمر فرعي في CLI | +| `api.registerService(service)` | خدمة في الخلفية | +| `api.registerInteractiveHandler(registration)` | معالج تفاعلي | +| `api.registerEmbeddedExtensionFactory(factory)` | مصنع امتداد المشغّل المضمن في Pi | +| `api.registerMemoryPromptSupplement(builder)` | قسم إضافي للمطالبة مجاور للذاكرة | +| `api.registerMemoryCorpusSupplement(adapter)` | متن إضافي للبحث/القراءة في الذاكرة | -تظل مساحات أسماء الإدارة الأساسية المحجوزة (`config.*` و`exec.approvals.*` و`wizard.*`، -و`update.*`) دائمًا ضمن `operator.admin`، حتى لو حاول plugin تعيين -نطاق أضيق لأسلوب gateway. وفضّل البوادئ الخاصة بالplugin من أجل -الأساليب المملوكة لـ plugin. +تظل مساحات الأسماء الإدارية الأساسية المحجوزة (`config.*`, `exec.approvals.*`, `wizard.*`, +`update.*`) دائمًا `operator.admin`، حتى إذا حاول Plugin تعيين +نطاق أضيق لأسلوب Gateway. ويفضَّل استخدام بادئات خاصة بالـ plugin +للأساليب التي يملكها plugin. -### بيانات تسجيل CLI الوصفية +استخدم `api.registerEmbeddedExtensionFactory(...)` عندما يحتاج Plugin إلى +توقيت أحداث أصلي خاص بـ Pi أثناء التشغيلات المضمنة لـ OpenClaw، مثل إعادة كتابة +`tool_result` غير المتزامنة التي يجب أن تحدث قبل إصدار رسالة النتيجة النهائية للأداة. +هذه واجهة bundled-plugin اليوم: لا يمكن إلا للـ Plugins المضمنة تسجيل واحدة، ويجب +أن تعلن `contracts.embeddedExtensionFactories: ["pi"]` في +`openclaw.plugin.json`. واحتفظ بخطافات Plugin العادية في OpenClaw لكل ما +لا يتطلب هذه الواجهة منخفضة المستوى. -يقبل `api.registerCli(registrar, opts?)` نوعين من البيانات الوصفية ذات المستوى الأعلى: +### بيانات تعريف تسجيل CLI -- `commands`: جذور أوامر صريحة يملكها المسجل -- `descriptors`: واصفات أوامر وقت التحليل المستخدمة من أجل مساعدة CLI الجذرية، - والتوجيه، وتسجيل CLI الكسول للplugin +يقبل `api.registerCli(registrar, opts?)` نوعين من بيانات التعريف العليا: -إذا كنت تريد أن يظل أمر plugin محمّلًا بكسل في مسار CLI الجذري العادي، -فقدّم `descriptors` تغطي كل جذر أمر من المستوى الأعلى يكشفه هذا -المسجل. +- `commands`: جذور أوامر صريحة يملكها المسجِّل +- `descriptors`: واصفات أوامر وقت التحليل المستخدمة لمساعدة CLI الجذرية، + والتوجيه، وتسجيل CLI الكسول للـ plugin + +إذا كنت تريد أن يبقى أمر plugin محمّلًا كسولًا في المسار الجذري العادي لـ CLI، +فقدّم `descriptors` تغطي كل جذر أوامر من المستوى الأعلى يكشفه +ذلك المسجِّل. ```typescript api.registerCli( @@ -387,7 +396,7 @@ api.registerCli( descriptors: [ { name: "matrix", - description: "إدارة حسابات Matrix، والتحقق، والأجهزة، وحالة الملف الشخصي", + description: "إدارة حسابات Matrix والتحقق والأجهزة وحالة الملف الشخصي", hasSubcommands: true, }, ], @@ -396,133 +405,133 @@ api.registerCli( ``` استخدم `commands` وحده فقط عندما لا تحتاج إلى تسجيل CLI جذري كسول. -ما يزال مسار التوافق الفوري هذا مدعومًا، لكنه لا يثبت -عناصر نائبة مدعومة بـ descriptor من أجل التحميل الكسول وقت التحليل. +لا يزال مسار التوافق المتحمّس هذا مدعومًا، لكنه لا يثبت +عناصر نائبة مدعومة بالواصفات للتحميل الكسول وقت التحليل. -### تسجيل خلفية CLI +### تسجيل الواجهة الخلفية لـ CLI -يتيح `api.registerCliBackend(...)` لـ plugin امتلاك التكوين الافتراضي لخلفية -CLI محلية للذكاء الاصطناعي مثل `codex-cli`. +يتيح `api.registerCliBackend(...)` لPlugin امتلاك الإعداد الافتراضي لواجهة +خلفية محلية لـ CLI خاصة بالذكاء الاصطناعي مثل `codex-cli`. -- يصبح `id` الخاص بالخلفية بادئة المزوّد في مراجع النماذج مثل `codex-cli/gpt-5`. -- يستخدم `config` الخاص بالخلفية البنية نفسها لـ `agents.defaults.cliBackends.`. -- يظل تكوين المستخدم هو الفائز. يدمج OpenClaw القيمة `agents.defaults.cliBackends.` فوق - القيمة الافتراضية للplugin قبل تشغيل CLI. -- استخدم `normalizeConfig` عندما تحتاج الخلفية إلى عمليات إعادة كتابة توافقية بعد الدمج - (على سبيل المثال، تطبيع أشكال العلامات القديمة). +- يصبح `id` الخاص بالواجهة الخلفية هو بادئة الموفّر في مراجع النماذج مثل `codex-cli/gpt-5`. +- يستخدم `config` الخاص بالواجهة الخلفية البنية نفسها المستخدمة في `agents.defaults.cliBackends.`. +- يظل إعداد المستخدم هو الأعلى أولوية. يدمج OpenClaw `agents.defaults.cliBackends.` فوق + الإعداد الافتراضي للـ plugin قبل تشغيل CLI. +- استخدم `normalizeConfig` عندما تحتاج واجهة خلفية إلى إعادة كتابة للتوافق بعد الدمج + (مثل تطبيع أشكال الرايات القديمة). -### المنافذ الحصرية +### الفتحات الحصرية -| الأسلوب | ما الذي يسجّله | -| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `api.registerContextEngine(id, factory)` | محرك السياق (واحد نشط في كل مرة). تتلقى دالة callback ‏`assemble()` القيمتين `availableTools` و`citationsMode` بحيث يمكن للمحرك تخصيص الإضافات إلى prompt. | -| `api.registerMemoryCapability(capability)` | قدرة ذاكرة موحّدة | -| `api.registerMemoryPromptSection(builder)` | باني قسم prompt للذاكرة | -| `api.registerMemoryFlushPlan(resolver)` | محلّل خطة flush للذاكرة | -| `api.registerMemoryRuntime(runtime)` | مهايئ وقت تشغيل الذاكرة | +| الأسلوب | ما الذي يسجله | +| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `api.registerContextEngine(id, factory)` | محرك سياق (واحد نشط في كل مرة). يتلقى رد النداء `assemble()` كلًا من `availableTools` و`citationsMode` حتى يتمكن المحرك من تخصيص إضافات المطالبة. | +| `api.registerMemoryCapability(capability)` | قدرة ذاكرة موحدة | +| `api.registerMemoryPromptSection(builder)` | باني قسم مطالبة الذاكرة | +| `api.registerMemoryFlushPlan(resolver)` | محلل خطة تفريغ الذاكرة | +| `api.registerMemoryRuntime(runtime)` | مهايئ وقت تشغيل الذاكرة | -### مهايئات embedding الخاصة بالذاكرة +### مهايئات تضمين الذاكرة -| الأسلوب | ما الذي يسجّله | -| ---------------------------------------------- | ---------------------------------------------- | -| `api.registerMemoryEmbeddingProvider(adapter)` | مهايئ embedding للذاكرة من أجل plugin النشط | +| الأسلوب | ما الذي يسجله | +| --------------------------------------------- | ---------------------------------------------- | +| `api.registerMemoryEmbeddingProvider(adapter)` | مهايئ تضمين الذاكرة الخاص بالـ plugin النشط | -- تُعد `registerMemoryCapability` واجهة API الحصرية المفضلة لـ plugin الذاكرة. -- قد تكشف `registerMemoryCapability` أيضًا عن `publicArtifacts.listArtifacts(...)` - بحيث تتمكن plugins المصاحبة من استهلاك عناصر الذاكرة المُصدّرة عبر - `openclaw/plugin-sdk/memory-host-core` بدلًا من الوصول إلى التخطيط الخاص - الداخلي لـ plugin ذاكرة محدد. +- يُعد `registerMemoryCapability` هو API المفضل والحصري لـ plugin الذاكرة. +- قد يكشف `registerMemoryCapability` أيضًا عن `publicArtifacts.listArtifacts(...)` + حتى تتمكن Plugins المصاحبة من استهلاك عناصر الذاكرة المصدّرة عبر + `openclaw/plugin-sdk/memory-host-core` بدلًا من الوصول إلى + التخطيط الخاص الداخلي لـ plugin ذاكرة معيّن. - تُعد `registerMemoryPromptSection` و`registerMemoryFlushPlan` و - `registerMemoryRuntime` واجهات API حصرية متوافقة مع الإصدارات القديمة لـ plugins الذاكرة. -- تتيح `registerMemoryEmbeddingProvider` لـ plugin الذاكرة النشط تسجيل - معرّف embedding واحد أو أكثر (على سبيل المثال `openai` أو `gemini` أو - معرّف مخصص يحدده plugin). -- يتم حل تكوين المستخدم مثل `agents.defaults.memorySearch.provider` و + `registerMemoryRuntime` واجهات API حصرية ومتوافقة مع القديم لـ plugin الذاكرة. +- يتيح `registerMemoryEmbeddingProvider` لـ plugin الذاكرة النشط تسجيل + معرّف مهايئ تضمين واحد أو أكثر (مثل `openai` أو `gemini` أو معرّف مخصص + يعرّفه plugin). +- تُحل إعدادات المستخدم مثل `agents.defaults.memorySearch.provider` و `agents.defaults.memorySearch.fallback` مقابل معرّفات المهايئات المسجلة تلك. ### الأحداث ودورة الحياة -| الأسلوب | ما الذي يفعله | +| الأسلوب | ما الذي يفعله | | -------------------------------------------- | ----------------------------- | -| `api.on(hookName, handler, opts?)` | hook دورة حياة مطبّع | -| `api.onConversationBindingResolved(handler)` | callback لحل ارتباط المحادثة | +| `api.on(hookName, handler, opts?)` | خطاف دورة حياة مطبوع | +| `api.onConversationBindingResolved(handler)` | رد نداء لحل ربط المحادثة | -### دلالات قرارات hook +### دلالات قرارات الخطافات -- `before_tool_call`: تؤدي إعادة `{ block: true }` إلى قرار نهائي. وبمجرد أن يعيّن أي معالج هذه القيمة، يتم تخطي المعالجات ذات الأولوية الأقل. -- `before_tool_call`: تُعامل إعادة `{ block: false }` على أنها عدم وجود قرار (مثلها مثل حذف `block`)، وليس كتجاوز. -- `before_install`: تؤدي إعادة `{ block: true }` إلى قرار نهائي. وبمجرد أن يعيّن أي معالج هذه القيمة، يتم تخطي المعالجات ذات الأولوية الأقل. -- `before_install`: تُعامل إعادة `{ block: false }` على أنها عدم وجود قرار (مثلها مثل حذف `block`)، وليس كتجاوز. -- `reply_dispatch`: تؤدي إعادة `{ handled: true, ... }` إلى قرار نهائي. وبمجرد أن يدّعي أي معالج التوزيع، يتم تخطي المعالجات ذات الأولوية الأقل ومسار توزيع النموذج الافتراضي. -- `message_sending`: تؤدي إعادة `{ cancel: true }` إلى قرار نهائي. وبمجرد أن يعيّن أي معالج هذه القيمة، يتم تخطي المعالجات ذات الأولوية الأقل. -- `message_sending`: تُعامل إعادة `{ cancel: false }` على أنها عدم وجود قرار (مثلها مثل حذف `cancel`)، وليس كتجاوز. +- `before_tool_call`: تُعد إعادة `{ block: true }` نهائية. وبمجرد أن يعيّنها أي معالج، يتم تخطي المعالجات ذات الأولوية الأقل. +- `before_tool_call`: تُعامل إعادة `{ block: false }` على أنها عدم وجود قرار (مثل حذف `block`)، وليس على أنها تجاوز. +- `before_install`: تُعد إعادة `{ block: true }` نهائية. وبمجرد أن يعيّنها أي معالج، يتم تخطي المعالجات ذات الأولوية الأقل. +- `before_install`: تُعامل إعادة `{ block: false }` على أنها عدم وجود قرار (مثل حذف `block`)، وليس على أنها تجاوز. +- `reply_dispatch`: تُعد إعادة `{ handled: true, ... }` نهائية. وبمجرد أن يطالب أي معالج بالإرسال، يتم تخطي المعالجات ذات الأولوية الأقل ومسار الإرسال الافتراضي للنموذج. +- `message_sending`: تُعد إعادة `{ cancel: true }` نهائية. وبمجرد أن يعيّنها أي معالج، يتم تخطي المعالجات ذات الأولوية الأقل. +- `message_sending`: تُعامل إعادة `{ cancel: false }` على أنها عدم وجود قرار (مثل حذف `cancel`)، وليس على أنها تجاوز. ### حقول كائن API -| الحقل | النوع | الوصف | -| ------------------------ | ------------------------- | ------------------------------------------------------------------------------------------- | -| `api.id` | `string` | معرّف plugin | -| `api.name` | `string` | اسم العرض | -| `api.version` | `string?` | إصدار plugin (اختياري) | -| `api.description` | `string?` | وصف plugin (اختياري) | -| `api.source` | `string` | مسار مصدر plugin | -| `api.rootDir` | `string?` | الدليل الجذري لـ plugin (اختياري) | -| `api.config` | `OpenClawConfig` | snapshot التكوين الحالي (snapshot وقت التشغيل النشط في الذاكرة عند توفره) | -| `api.pluginConfig` | `Record` | التكوين الخاص بـ plugin من `plugins.entries..config` | -| `api.runtime` | `PluginRuntime` | [مساعدات وقت التشغيل](/ar/plugins/sdk-runtime) | -| `api.logger` | `PluginLogger` | logger ضمن النطاق (`debug` و`info` و`warn` و`error`) | -| `api.registrationMode` | `PluginRegistrationMode` | وضع التحميل الحالي؛ وتمثل `"setup-runtime"` نافذة بدء التشغيل/الإعداد الخفيفة قبل الإدخال الكامل | -| `api.resolvePath(input)` | `(string) => string` | حل المسار نسبةً إلى جذر plugin | +| الحقل | النوع | الوصف | +| ----------------------- | ------------------------- | ----------------------------------------------------------------------------------------- | +| `api.id` | `string` | معرّف Plugin | +| `api.name` | `string` | اسم العرض | +| `api.version` | `string?` | إصدار Plugin (اختياري) | +| `api.description` | `string?` | وصف Plugin (اختياري) | +| `api.source` | `string` | مسار مصدر Plugin | +| `api.rootDir` | `string?` | الدليل الجذري لـ Plugin (اختياري) | +| `api.config` | `OpenClawConfig` | لقطة الإعدادات الحالية (لقطة وقت تشغيل نشطة داخل الذاكرة عند توفرها) | +| `api.pluginConfig` | `Record` | إعدادات خاصة بـ Plugin من `plugins.entries..config` | +| `api.runtime` | `PluginRuntime` | [مساعدات وقت التشغيل](/ar/plugins/sdk-runtime) | +| `api.logger` | `PluginLogger` | مسجل ذو نطاق محدد (`debug`, `info`, `warn`, `error`) | +| `api.registrationMode` | `PluginRegistrationMode` | وضع التحميل الحالي؛ ويمثل `"setup-runtime"` نافذة بدء التشغيل/الإعداد الخفيفة قبل الإدخال الكامل | +| `api.resolvePath(input)` | `(string) => string` | حل المسار نسبةً إلى جذر Plugin | ## اصطلاح الوحدات الداخلية -داخل plugin الخاص بك، استخدم ملفات barrel محلية للاستيرادات الداخلية: +داخل Plugin الخاص بك، استخدم ملفات الحاوية المحلية للاستيرادات الداخلية: ``` my-plugin/ - api.ts # تصديرات عامة للمستهلكين الخارجيين - runtime-api.ts # تصديرات وقت تشغيل داخلية فقط - index.ts # نقطة إدخال plugin - setup-entry.ts # إدخال خفيف خاص بالإعداد فقط (اختياري) + api.ts # التصديرات العامة للمستهلكين الخارجيين + runtime-api.ts # تصديرات وقت التشغيل الداخلية فقط + index.ts # نقطة إدخال Plugin + setup-entry.ts # إدخال خفيف للإعداد فقط (اختياري) ``` - لا تستورد plugin الخاص بك أبدًا عبر `openclaw/plugin-sdk/` + لا تستورد Plugin الخاص بك عبر `openclaw/plugin-sdk/` من كود الإنتاج. وجّه الاستيرادات الداخلية عبر `./api.ts` أو - `./runtime-api.ts`. فمسار SDK هو العقد الخارجي فقط. + `./runtime-api.ts`. مسار SDK هو العقد الخارجي فقط. -تفضّل الآن الأسطح العامة للplugins المضمّنة المحمّلة عبر الواجهة (`api.ts` و`runtime-api.ts`، -و`index.ts`، و`setup-entry.ts`، وملفات الإدخال العامة المماثلة) -snapshot التكوين النشط لوقت التشغيل عندما يكون OpenClaw قيد التشغيل بالفعل. وإذا لم توجد -snapshot لوقت التشغيل بعد، فإنها تعود إلى ملف التكوين المحلول على القرص. +تفضّل الآن الأسطح العامة للـ bundled plugin المحمّلة عبر الواجهة (`api.ts`, `runtime-api.ts`, +`index.ts`, `setup-entry.ts`، وملفات الإدخال العامة المشابهة) +لقطة إعدادات وقت التشغيل النشطة عندما يكون OpenClaw قيد التشغيل بالفعل. وإذا لم تكن +لقطة وقت التشغيل موجودة بعد، فإنها تعود إلى ملف الإعدادات المحلول على القرص. -يمكن لplugins المزوّدين أيضًا كشف barrel عقد محلي ضيق خاص بالplugin عندما تكون مساعدة ما -مقصودة بوصفها خاصة بالمزوّد ولا تنتمي بعد إلى مسار فرعي عام في SDK. -المثال المضمّن الحالي: يحتفظ مزوّد Anthropic بمساعدات Claude stream الخاصة به -داخل seam عام خاص به في `api.ts` / `contract-api.ts` بدلًا من -ترقية منطق رؤوس Anthropic beta و`service_tier` إلى عقد عام -`plugin-sdk/*`. +يمكن أيضًا لـ provider plugins كشف حاوية عقد محلية خاصة بالـ plugin عندما يكون +المساعد خاصًا عمدًا بالموفّر ولا ينتمي بعد إلى مسار فرعي عام في SDK. +المثال المضمن الحالي: يحتفظ موفّر Anthropic +بمساعدات تدفق Claude في الواجهة العامة الخاصة به `api.ts` / `contract-api.ts` +بدلًا من ترقية منطق رأس Anthropic التجريبي و`service_tier` إلى +عقد عام في `plugin-sdk/*`. -أمثلة مضمّنة حالية أخرى: +أمثلة مضمنة حالية أخرى: -- `@openclaw/openai-provider`: يصدّر `api.ts` بُناة المزوّد، - ومساعدات النموذج الافتراضي، وبُناة المزوّد الفوري -- `@openclaw/openrouter-provider`: يصدّر `api.ts` باني المزوّد بالإضافة إلى - مساعدات الإعداد الأولي/التكوين +- `@openclaw/openai-provider`: يصدّر `api.ts` بُناة الموفّر، + ومساعدات النموذج الافتراضي، وبُناة الموفّر الفوري +- `@openclaw/openrouter-provider`: يصدّر `api.ts` باني الموفّر بالإضافة إلى + مساعدات التهيئة/الإعدادات - يجب أن يتجنب كود الإنتاج الخاص بالامتداد أيضًا استيراد - `openclaw/plugin-sdk/`. وإذا كانت المساعدة مشتركة فعلًا، فقم بترقيتها إلى مسار فرعي - محايد في SDK مثل `openclaw/plugin-sdk/speech` أو `.../provider-model-shared` أو سطح آخر - موجّه بالقدرات بدلًا من ربط pluginين معًا. + يجب أيضًا على كود إنتاج الامتدادات تجنب استيرادات `openclaw/plugin-sdk/`. + وإذا كان أحد المساعدات مشتركًا فعلًا، فقم بترقيته إلى مسار فرعي محايد في SDK + مثل `openclaw/plugin-sdk/speech` أو `.../provider-model-shared` أو أي + واجهة أخرى موجهة حسب القدرة بدلًا من ربط Plugins اثنين معًا. ## ذو صلة -- [نقاط الإدخال](/ar/plugins/sdk-entrypoints) — خيارات `definePluginEntry` و`defineChannelPluginEntry` -- [مساعدات وقت التشغيل](/ar/plugins/sdk-runtime) — المرجع الكامل لمساحة الأسماء `api.runtime` -- [الإعداد والتكوين](/ar/plugins/sdk-setup) — التغليف، وmanifests، ومخططات التكوين -- [الاختبار](/ar/plugins/sdk-testing) — أدوات الاختبار وقواعد lint -- [ترحيل SDK](/ar/plugins/sdk-migration) — الترحيل من الأسطح المهجورة -- [الأجزاء الداخلية لـ Plugin](/ar/plugins/architecture) — البنية العميقة ونموذج القدرات +- [Entry Points](/ar/plugins/sdk-entrypoints) — خيارات `definePluginEntry` و`defineChannelPluginEntry` +- [Runtime Helpers](/ar/plugins/sdk-runtime) — مرجع كامل لمساحة الأسماء `api.runtime` +- [Setup and Config](/ar/plugins/sdk-setup) — التغليف، والبيانات الوصفية، ومخططات الإعدادات +- [Testing](/ar/plugins/sdk-testing) — أدوات الاختبار وقواعد lint +- [SDK Migration](/ar/plugins/sdk-migration) — الترحيل من الأسطح المتقادمة +- [Plugin Internals](/ar/plugins/architecture) — البنية العميقة ونموذج القدرات diff --git a/docs/ar/providers/ollama.md b/docs/ar/providers/ollama.md index 78fe68719..f9dba14d7 100644 --- a/docs/ar/providers/ollama.md +++ b/docs/ar/providers/ollama.md @@ -1,25 +1,25 @@ --- read_when: - - أنت تريد تشغيل OpenClaw مع نماذج سحابية أو محلية عبر Ollama - - أنت تحتاج إلى إرشادات إعداد وتهيئة Ollama - - أنت تريد نماذج رؤية من Ollama لفهم الصور + - تريد تشغيل OpenClaw مع نماذج سحابية أو محلية عبر Ollama + - تحتاج إلى إرشادات إعداد Ollama وتهيئته + - تريد نماذج رؤية من Ollama لفهم الصور summary: شغّل OpenClaw مع Ollama (النماذج السحابية والمحلية) title: Ollama x-i18n: - generated_at: "2026-04-22T04:28:06Z" + generated_at: "2026-04-22T07:18:40Z" model: gpt-5.4 provider: openai - source_hash: 32623b6523f22930a5987fb22d2074f1e9bb274cc01ae1ad1837825cc04ec179 + source_hash: 704beed3bf988d6c2ad50b2a1533f6dcef655e44b34f23104827d2acb71b8655 source_path: providers/ollama.md workflow: 15 --- # Ollama -يتكامل OpenClaw مع API الأصلية لـ Ollama ‏(`/_api/chat`) للنماذج السحابية المستضافة وخوادم Ollama المحلية/المستضافة ذاتيًا. يمكنك استخدام Ollama بثلاثة أوضاع: `Cloud + Local` عبر مضيف Ollama يمكن الوصول إليه، أو `Cloud only` مقابل `https://ollama.com`، أو `Local only` مقابل مضيف Ollama يمكن الوصول إليه. +يتكامل OpenClaw مع واجهة API الأصلية الخاصة بـ Ollama (`/api/chat`) للنماذج السحابية المستضافة وخوادم Ollama المحلية/المستضافة ذاتيًا. يمكنك استخدام Ollama في ثلاثة أوضاع: `Cloud + Local` عبر مضيف Ollama يمكن الوصول إليه، أو `Cloud only` مقابل `https://ollama.com`، أو `Local only` مقابل مضيف Ollama يمكن الوصول إليه. -**مستخدمو Ollama البعيدون**: لا تستخدم عنوان URL المتوافق مع OpenAI من نوع `/v1` ‏(`http://host:11434/v1`) مع OpenClaw. فهذا يعطل استدعاء الأدوات وقد تُخرج النماذج JSON الأدوات الخام كنص عادي. استخدم عنوان URL الخاص بـ API الأصلية لـ Ollama بدلًا من ذلك: `baseUrl: "http://host:11434"` (من دون `/v1`). +**مستخدمو Ollama البعيد**: لا تستخدموا عنوان URL المتوافق مع OpenAI على `/v1` (`http://host:11434/v1`) مع OpenClaw. فهذا يعطّل استدعاء الأدوات وقد تُخرج النماذج JSON الأدوات الخام كنص عادي. استخدم عنوان URL الخاص بواجهة API الأصلية لـ Ollama بدلًا من ذلك: `baseUrl: "http://host:11434"` (من دون `/v1`). ## البدء @@ -27,24 +27,24 @@ x-i18n: اختر طريقة الإعداد والوضع المفضلين لديك. - - **الأفضل من أجل:** أسرع طريق إلى إعداد Ollama سحابي أو محلي يعمل. + + **الأفضل لـ:** أسرع طريق إلى إعداد Ollama سحابي أو محلي يعمل. - + ```bash openclaw onboard ``` - اختر **Ollama** من قائمة المزوّدين. + اختر **Ollama** من قائمة الموفّرين. - - **Cloud + Local** — مضيف Ollama محلي بالإضافة إلى نماذج سحابية موجّهة عبر ذلك المضيف + - **Cloud + Local** — مضيف Ollama محلي بالإضافة إلى نماذج سحابية تُوجَّه عبر ذلك المضيف - **Cloud only** — نماذج Ollama المستضافة عبر `https://ollama.com` - **Local only** — نماذج محلية فقط - يطلب `Cloud only` قيمة `OLLAMA_API_KEY` ويقترح القيم الافتراضية السحابية المستضافة. أما `Cloud + Local` و`Local only` فيطلبان عنوان URL الأساسي لـ Ollama، ويكتشفان النماذج المتاحة، ويسحبان النموذج المحلي المحدد تلقائيًا إذا لم يكن متاحًا بعد. ويتحقق `Cloud + Local` أيضًا مما إذا كان مضيف Ollama هذا قد سجّل الدخول للوصول السحابي. + يطلب `Cloud only` قيمة `OLLAMA_API_KEY` ويقترح افتراضيات سحابية مستضافة. يطلب كل من `Cloud + Local` و`Local only` عنوان URL الأساسي لـ Ollama، ويكتشفان النماذج المتاحة، ويجريان سحبًا تلقائيًا للنموذج المحلي المحدد إذا لم يكن متاحًا بعد. كما يتحقق `Cloud + Local` أيضًا مما إذا كان مضيف Ollama هذا قد سجّل الدخول للوصول السحابي. ```bash @@ -61,7 +61,7 @@ x-i18n: --accept-risk ``` - ويمكنك اختياريًا تحديد عنوان URL أساسي مخصص أو نموذج: + يمكنك اختياريًا تحديد عنوان URL أساسي مخصص أو نموذج: ```bash openclaw onboard --non-interactive \ @@ -73,8 +73,8 @@ x-i18n: - - **الأفضل من أجل:** تحكم كامل في الإعداد السحابي أو المحلي. + + **الأفضل لـ:** تحكم كامل في الإعداد السحابي أو المحلي. @@ -82,7 +82,7 @@ x-i18n: - **Cloud only**: استخدم `https://ollama.com` مع `OLLAMA_API_KEY` - **Local only**: ثبّت Ollama من [ollama.com/download](https://ollama.com/download) - + ```bash ollama pull gemma4 # أو @@ -92,16 +92,16 @@ x-i18n: ``` - بالنسبة إلى `Cloud only`، استخدم `OLLAMA_API_KEY` الحقيقي. أما في الإعدادات المعتمدة على المضيف، فأي قيمة مكانية تعمل: + بالنسبة إلى `Cloud only`، استخدم قيمة `OLLAMA_API_KEY` الحقيقية لديك. أما في الإعدادات المعتمدة على المضيف، فأي قيمة بديلة تعمل: ```bash - # سحابي + # السحابي export OLLAMA_API_KEY="your-ollama-api-key" - # محلي فقط + # المحلي فقط export OLLAMA_API_KEY="ollama-local" - # أو اضبطه في ملف الإعدادات + # أو اضبطه في ملف الإعداد openclaw config set models.providers.ollama.apiKey "OLLAMA_API_KEY" ``` @@ -111,7 +111,7 @@ x-i18n: openclaw models set ollama/gemma4 ``` - أو اضبط القيمة الافتراضية في الإعدادات: + أو اضبط الافتراضي في الإعداد: ```json5 { @@ -134,46 +134,46 @@ x-i18n: يستخدم `Cloud + Local` مضيف Ollama يمكن الوصول إليه كنقطة تحكم لكل من النماذج المحلية والسحابية. وهذا هو التدفق الهجين المفضل لدى Ollama. - استخدم **Cloud + Local** أثناء الإعداد. يطلب OpenClaw عنوان URL الأساسي لـ Ollama، ويكتشف النماذج المحلية من ذلك المضيف، ويتحقق مما إذا كان المضيف قد سجّل الدخول للوصول السحابي باستخدام `ollama signin`. وعندما يكون المضيف قد سجّل الدخول، يقترح OpenClaw أيضًا القيم السحابية الافتراضية المستضافة مثل `kimi-k2.5:cloud` و`minimax-m2.7:cloud` و`glm-5.1:cloud`. + استخدم **Cloud + Local** أثناء الإعداد. يطلب OpenClaw عنوان URL الأساسي لـ Ollama، ويكتشف النماذج المحلية من ذلك المضيف، ويتحقق مما إذا كان المضيف قد سجّل الدخول للوصول السحابي باستخدام `ollama signin`. وعندما يكون المضيف قد سجّل الدخول، يقترح OpenClaw أيضًا افتراضيات سحابية مستضافة مثل `kimi-k2.5:cloud` و`minimax-m2.7:cloud` و`glm-5.1:cloud`. - إذا لم يكن المضيف قد سجّل الدخول بعد، فسيُبقي OpenClaw الإعداد على الوضع المحلي فقط إلى أن تشغّل `ollama signin`. + إذا لم يكن المضيف قد سجّل الدخول بعد، فسيُبقي OpenClaw الإعداد في وضع محلي فقط إلى أن تشغّل `ollama signin`. - يعمل `Cloud only` مقابل API المستضافة من Ollama على `https://ollama.com`. + يعمل `Cloud only` مقابل واجهة API المستضافة الخاصة بـ Ollama على `https://ollama.com`. - استخدم **Cloud only** أثناء الإعداد. يطلب OpenClaw قيمة `OLLAMA_API_KEY`، ويضبط `baseUrl: "https://ollama.com"`، ويزرع قائمة النماذج السحابية المستضافة. لا يتطلب هذا المسار **خادم Ollama محليًا** أو `ollama signin`. + استخدم **Cloud only** أثناء الإعداد. يطلب OpenClaw قيمة `OLLAMA_API_KEY`، ويضبط `baseUrl: "https://ollama.com"`، ويهيّئ قائمة النماذج السحابية المستضافة. هذا المسار **لا** يتطلب خادم Ollama محليًا أو `ollama signin`. - تُملأ قائمة النماذج السحابية المعروضة أثناء `openclaw onboard` مباشرة من `https://ollama.com/api/tags`، بحد أقصى 500 إدخال، بحيث يعكس المنتقي الفهرس المستضاف الحالي بدلًا من بذرة ثابتة. وإذا تعذر الوصول إلى `ollama.com` أو لم يُرجع أي نماذج وقت الإعداد، فسيعود OpenClaw إلى الاقتراحات المضمّنة السابقة حتى يكتمل onboarding. + تُملأ قائمة النماذج السحابية المعروضة أثناء `openclaw onboard` مباشرة من `https://ollama.com/api/tags`، مع حد أقصى قدره 500 إدخال، بحيث يعكس المنتقي الفهرس المستضاف الحالي بدلًا من قائمة أولية ثابتة. وإذا تعذّر الوصول إلى `ollama.com` أو لم يُرجع أي نماذج وقت الإعداد، يعود OpenClaw إلى الاقتراحات الثابتة السابقة حتى يكتمل الإعداد الأولي. - في وضع المحلي فقط، يكتشف OpenClaw النماذج من نسخة Ollama المُعدّة. وهذا المسار مخصص لخوادم Ollama المحلية أو المستضافة ذاتيًا. + في وضع المحلي فقط، يكتشف OpenClaw النماذج من نسخة Ollama المضبوطة. هذا المسار مخصص لخوادم Ollama المحلية أو المستضافة ذاتيًا. - يقترح OpenClaw حاليًا `gemma4` بوصفه القيمة المحلية الافتراضية. + يقترح OpenClaw حاليًا `gemma4` بوصفه الافتراضي المحلي. -## اكتشاف النماذج (مزوّد ضمني) +## اكتشاف النماذج (موفّر ضمني) -عندما تضبط `OLLAMA_API_KEY` (أو ملف auth profile) و**لا** تعرّف `models.providers.ollama`، يكتشف OpenClaw النماذج من نسخة Ollama المحلية على `http://127.0.0.1:11434`. +عندما تضبط `OLLAMA_API_KEY` (أو ملف تعريف مصادقة) و**لا** تعرّف `models.providers.ollama`، يكتشف OpenClaw النماذج من نسخة Ollama المحلية على `http://127.0.0.1:11434`. | السلوك | التفاصيل | -| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| استعلام الفهرس | يستعلم عن `/api/tags` | -| اكتشاف الإمكانيات | يستخدم عمليات lookup من نوع `/api/show` بأفضل جهد لقراءة `contextWindow` واكتشاف الإمكانيات (بما في ذلك الرؤية) | -| نماذج الرؤية | تُعلَّم النماذج ذات إمكانية `vision` التي يُبلغ عنها `/api/show` على أنها قادرة على الصور (`input: ["text", "image"]`)، لذلك يحقن OpenClaw الصور تلقائيًا في prompt | -| اكتشاف reasoning | يعلّم `reasoning` باستخدام heuristic لاسم النموذج (`r1` و`reasoning` و`think`) | -| حدود الرموز | يضبط `maxTokens` على الحد الأقصى الافتراضي للرموز في Ollama المستخدم بواسطة OpenClaw | -| التكاليف | يضبط جميع التكاليف على `0` | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| استعلام الفهرس | يستعلم `/api/tags` | +| اكتشاف القدرات | يستخدم عمليات بحث `/api/show` بأفضل جهد لقراءة `contextWindow` واكتشاف القدرات (بما في ذلك الرؤية) | +| نماذج الرؤية | تُوسَم النماذج التي تُبلّغ عن قدرة `vision` عبر `/api/show` على أنها قادرة على التعامل مع الصور (`input: ["text", "image"]`)، لذا يحقن OpenClaw الصور تلقائيًا في الموجّه | +| اكتشاف الاستدلال | يوسم `reasoning` باستخدام أسلوب تقريبي يعتمد على اسم النموذج (`r1` و`reasoning` و`think`) | +| حدود الرموز | يضبط `maxTokens` على حد Ollama الافتراضي الأقصى للرموز الذي يستخدمه OpenClaw | +| التكاليف | يضبط جميع التكاليف على `0` | -وهذا يتجنب إدخالات النماذج اليدوية مع إبقاء الفهرس متوافقًا مع نسخة Ollama المحلية. +يؤدي هذا إلى تجنب إدخالات النماذج اليدوية مع إبقاء الفهرس متوافقًا مع نسخة Ollama المحلية. ```bash -# اعرف النماذج المتاحة +# اعرض النماذج المتاحة ollama list openclaw models list ``` @@ -187,12 +187,12 @@ ollama pull mistral سيُكتشف النموذج الجديد تلقائيًا ويصبح متاحًا للاستخدام. -إذا ضبطت `models.providers.ollama` صراحةً، فسيتم تخطي الاكتشاف التلقائي ويجب عليك تعريف النماذج يدويًا. راجع قسم الإعدادات الصريحة أدناه. +إذا ضبطت `models.providers.ollama` صراحةً، فسيُتجاوز الاكتشاف التلقائي ويجب عليك تعريف النماذج يدويًا. راجع قسم الإعداد الصريح أدناه. ## الرؤية ووصف الصور -يسجّل Plugin Ollama المجمّع Ollama بوصفه provider لفهم الوسائط قادرًا على الصور. ويتيح هذا لـ OpenClaw توجيه طلبات وصف الصور الصريحة والقيم الافتراضية المُعدّة لنموذج الصور عبر نماذج الرؤية المحلية أو المستضافة من Ollama. +تسجّل Plugin Ollama المضمّنة Ollama بوصفه موفّر فهم وسائط قادرًا على التعامل مع الصور. وهذا يتيح لـ OpenClaw توجيه طلبات وصف الصور الصريحة وافتراضيات نماذج الصور المضبوطة عبر نماذج رؤية Ollama المحلية أو المستضافة. بالنسبة إلى الرؤية المحلية، اسحب نموذجًا يدعم الصور: @@ -201,7 +201,7 @@ ollama pull qwen2.5vl:7b export OLLAMA_API_KEY="ollama-local" ``` -ثم تحقق باستخدام infer CLI: +ثم تحقّق باستخدام CLI الخاص بالاستدلال: ```bash openclaw infer image describe \ @@ -210,9 +210,9 @@ openclaw infer image describe \ --json ``` -يجب أن يكون `--model` مرجعًا كاملًا بصيغة ``. وعند ضبطه، يشغّل `openclaw infer image describe` ذلك النموذج مباشرةً بدلًا من تخطي الوصف لأن النموذج يدعم الرؤية أصلًا. +يجب أن تكون قيمة `--model` مرجعًا كاملًا بصيغة ``. عند ضبطها، يشغّل `openclaw infer image describe` هذا النموذج مباشرة بدلًا من تخطي الوصف لأن النموذج يدعم الرؤية الأصلية. -ولجعل Ollama نموذج فهم الصور الافتراضي للوسائط الواردة، اضبط `agents.defaults.imageModel`: +لجعل Ollama نموذج فهم الصور الافتراضي للوسائط الواردة، اضبط `agents.defaults.imageModel`: ```json5 { @@ -226,7 +226,7 @@ openclaw infer image describe \ } ``` -إذا عرّفت `models.providers.ollama.models` يدويًا، فعلّم نماذج الرؤية بدعم إدخال الصور: +إذا كنت تعرّف `models.providers.ollama.models` يدويًا، فوسّم نماذج الرؤية بدعم إدخال الصور: ```json5 { @@ -238,26 +238,26 @@ openclaw infer image describe \ } ``` -يرفض OpenClaw طلبات وصف الصور للنماذج التي لم تُعلَّم على أنها قادرة على الصور. ومع الاكتشاف الضمني، يقرأ OpenClaw ذلك من Ollama عندما يُبلغ `/api/show` عن إمكانية رؤية. +يرفض OpenClaw طلبات وصف الصور للنماذج التي لم تُوسَم على أنها قادرة على التعامل مع الصور. ومع الاكتشاف الضمني، يقرأ OpenClaw ذلك من Ollama عندما يبلّغ `/api/show` عن قدرة رؤية. -## الإعدادات +## الإعداد - أبسط مسار لتفعيل الوضع المحلي فقط هو عبر متغير بيئة: + أبسط مسار لتمكين الوضع المحلي فقط هو عبر متغير بيئة: ```bash export OLLAMA_API_KEY="ollama-local" ``` - إذا تم ضبط `OLLAMA_API_KEY`، فيمكنك حذف `apiKey` من إدخال المزوّد وسيملؤه OpenClaw لفحوصات التوفر. + إذا كانت `OLLAMA_API_KEY` مضبوطة، يمكنك حذف `apiKey` من إدخال الموفّر وسيملؤها OpenClaw لفحوصات التوفر. - استخدم الإعدادات الصريحة عندما تريد إعدادًا سحابيًا مستضافًا، أو عندما تعمل Ollama على مضيف/منفذ آخر، أو عندما تريد فرض نوافذ سياق أو قوائم نماذج محددة، أو عندما تريد تعريفات نماذج يدوية بالكامل. + استخدم الإعداد الصريح عندما تريد إعدادًا سحابيًا مستضافًا، أو عندما يعمل Ollama على مضيف/منفذ آخر، أو عندما تريد فرض نوافذ سياق أو قوائم نماذج محددة، أو عندما تريد تعريفات نماذج يدوية بالكامل. ```json5 { @@ -287,7 +287,7 @@ openclaw infer image describe \ - إذا كانت Ollama تعمل على مضيف أو منفذ مختلف (فالإعداد الصريح يعطل الاكتشاف التلقائي، لذا عرّف النماذج يدويًا): + إذا كان Ollama يعمل على مضيف أو منفذ مختلف (الإعداد الصريح يعطّل الاكتشاف التلقائي، لذا عرّف النماذج يدويًا): ```json5 { @@ -295,7 +295,7 @@ openclaw infer image describe \ providers: { ollama: { apiKey: "ollama-local", - baseUrl: "http://ollama-host:11434", // بدون /v1 - استخدم عنوان URL الخاص بـ API الأصلية لـ Ollama + baseUrl: "http://ollama-host:11434", // بدون /v1 - استخدم عنوان URL لواجهة API الأصلية لـ Ollama api: "ollama", // اضبطه صراحةً لضمان سلوك استدعاء الأدوات الأصلي }, }, @@ -304,7 +304,7 @@ openclaw infer image describe \ ``` - لا تضف `/v1` إلى عنوان URL. يستخدم المسار `/v1` الوضع المتوافق مع OpenAI، حيث لا يكون استدعاء الأدوات موثوقًا. استخدم عنوان Ollama الأساسي من دون لاحقة مسار. + لا تضف `/v1` إلى عنوان URL. يستخدم المسار `/v1` الوضع المتوافق مع OpenAI، حيث لا يكون استدعاء الأدوات موثوقًا. استخدم عنوان URL الأساسي لـ Ollama من دون لاحقة مسار. @@ -312,7 +312,7 @@ openclaw infer image describe \ ### اختيار النموذج -بمجرد الإعداد، تصبح جميع نماذج Ollama الخاصة بك متاحة: +بمجرد الإعداد، تصبح كل نماذج Ollama الخاصة بك متاحة: ```json5 { @@ -329,13 +329,13 @@ openclaw infer image describe \ ## Ollama Web Search -يدعم OpenClaw **Ollama Web Search** بوصفه provider `web_search` مجمّعًا. +يدعم OpenClaw **Ollama Web Search** بوصفه موفّر `web_search` مضمّنًا. -| الخاصية | التفاصيل | -| ----------- | ----------------------------------------------------------------------------------------------------------------- | -| المضيف | يستخدم مضيف Ollama المُعدّ لديك (`models.providers.ollama.baseUrl` عند ضبطه، وإلا `http://127.0.0.1:11434`) | -| المصادقة | بدون مفتاح | -| المتطلب | يجب أن تكون Ollama قيد التشغيل وقد تم تسجيل الدخول باستخدام `ollama signin` | +| الخاصية | التفاصيل | +| ----------- | ---------------------------------------------------------------------------------------------------------------------- | +| المضيف | يستخدم مضيف Ollama المضبوط لديك (`models.providers.ollama.baseUrl` عند ضبطه، وإلا `http://127.0.0.1:11434`) | +| المصادقة | لا يحتاج إلى مفتاح | +| المتطلب | يجب أن يكون Ollama قيد التشغيل وقد تم تسجيل الدخول إليه باستخدام `ollama signin` | اختر **Ollama Web Search** أثناء `openclaw onboard` أو `openclaw configure --section web`، أو اضبط: @@ -352,18 +352,18 @@ openclaw infer image describe \ ``` -للاطلاع على تفاصيل الإعداد والسلوك الكاملة، راجع [Ollama Web Search](/ar/tools/ollama-search). +للاطلاع على تفاصيل الإعداد والسلوك كاملةً، راجع [Ollama Web Search](/ar/tools/ollama-search). -## الإعدادات المتقدمة +## الإعداد المتقدم - **استدعاء الأدوات غير موثوق في الوضع المتوافق مع OpenAI.** استخدم هذا الوضع فقط إذا كنت تحتاج إلى تنسيق OpenAI لوكيل proxy ولا تعتمد على سلوك استدعاء الأدوات الأصلي. + **استدعاء الأدوات غير موثوق في الوضع المتوافق مع OpenAI.** استخدم هذا الوضع فقط إذا كنت تحتاج إلى تنسيق OpenAI لوكيل وسيط ولا تعتمد على سلوك استدعاء الأدوات الأصلي. - إذا كنت تحتاج إلى استخدام نقطة النهاية المتوافقة مع OpenAI بدلًا من ذلك (على سبيل المثال، خلف proxy لا يدعم إلا تنسيق OpenAI)، فاضبط `api: "openai-completions"` صراحةً: + إذا كنت بحاجة إلى استخدام نقطة النهاية المتوافقة مع OpenAI بدلًا من ذلك (على سبيل المثال، خلف وكيل وسيط لا يدعم إلا تنسيق OpenAI)، فاضبط `api: "openai-completions"` صراحةً: ```json5 { @@ -383,7 +383,7 @@ openclaw infer image describe \ قد لا يدعم هذا الوضع البث واستدعاء الأدوات في الوقت نفسه. وقد تحتاج إلى تعطيل البث باستخدام `params: { streaming: false }` في إعداد النموذج. - عند استخدام `api: "openai-completions"` مع Ollama، يحقن OpenClaw القيمة `options.num_ctx` افتراضيًا حتى لا تعود Ollama بصمت إلى نافذة سياق 4096. وإذا كان proxy/upstream لديك يرفض حقول `options` غير المعروفة، فعطّل هذا السلوك: + عند استخدام `api: "openai-completions"` مع Ollama، يحقن OpenClaw القيمة `options.num_ctx` افتراضيًا حتى لا يعود Ollama بصمت إلى نافذة سياق بحجم 4096. وإذا كان الوكيل الوسيط/المصدر العلوي لديك يرفض حقول `options` غير المعروفة، فعطّل هذا السلوك: ```json5 { @@ -404,9 +404,9 @@ openclaw infer image describe \ - بالنسبة إلى النماذج المكتشفة تلقائيًا، يستخدم OpenClaw نافذة السياق التي تُبلغ عنها Ollama عند توفرها، وإلا فإنه يعود إلى نافذة السياق الافتراضية لـ Ollama التي يستخدمها OpenClaw. + بالنسبة إلى النماذج المكتشفة تلقائيًا، يستخدم OpenClaw نافذة السياق التي يبلّغ عنها Ollama عندما تكون متاحة، وإلا فإنه يعود إلى نافذة سياق Ollama الافتراضية التي يستخدمها OpenClaw. - يمكنك تجاوز `contextWindow` و`maxTokens` في إعداد provider الصريح: + يمكنك تجاوز `contextWindow` و`maxTokens` في إعداد الموفّر الصريح: ```json5 { @@ -428,32 +428,32 @@ openclaw infer image describe \ - - يتعامل OpenClaw افتراضيًا مع النماذج التي تحمل أسماء مثل `deepseek-r1` أو `reasoning` أو `think` على أنها قادرة على reasoning. + + يتعامل OpenClaw مع النماذج التي تحمل أسماء مثل `deepseek-r1` أو `reasoning` أو `think` على أنها قادرة على الاستدلال افتراضيًا. ```bash ollama pull deepseek-r1:32b ``` - لا حاجة إلى أي إعداد إضافي -- إذ يعلّمها OpenClaw تلقائيًا. + لا حاجة إلى أي إعداد إضافي -- يوسمها OpenClaw تلقائيًا. - - Ollama مجانية وتعمل محليًا، لذلك يتم ضبط جميع تكاليف النماذج على $0. وينطبق هذا على كل من النماذج المكتشفة تلقائيًا والنماذج المعرّفة يدويًا. + + Ollama مجاني ويعمل محليًا، لذا تُضبط جميع تكاليف النماذج على $0. وينطبق هذا على كل من النماذج المكتشفة تلقائيًا والنماذج المعرّفة يدويًا. - يسجّل Plugin Ollama المجمّع provider لتضمينات الذاكرة من أجل - [البحث في الذاكرة](/ar/concepts/memory). ويستخدم عنوان URL الأساسي - ومفتاح API المُعدَّين لـ Ollama. + تسجّل Plugin Ollama المضمّنة موفّر تضمينات للذاكرة من أجل + [البحث في الذاكرة](/ar/concepts/memory). وهي تستخدم عنوان URL الأساسي + لـ Ollama ومفتاح API المضبوطين. - | الخاصية | القيمة | - | ------------- | ------------------- | + | الخاصية | القيمة | + | -------------- | ------------------- | | النموذج الافتراضي | `nomic-embed-text` | - | السحب التلقائي | نعم — يتم سحب نموذج التضمين تلقائيًا إذا لم يكن موجودًا محليًا | + | السحب التلقائي | نعم — يُسحب نموذج التضمين تلقائيًا إذا لم يكن موجودًا محليًا | - لاختيار Ollama بوصفه provider تضمينات البحث في الذاكرة: + لاختيار Ollama بوصفه موفّر تضمينات البحث في الذاكرة: ```json5 { @@ -467,11 +467,13 @@ openclaw infer image describe \ - - يستخدم تكامل Ollama في OpenClaw **API الأصلية لـ Ollama** ‏(`/_api/chat`) افتراضيًا، وهي تدعم البث واستدعاء الأدوات بالكامل في الوقت نفسه. ولا حاجة إلى أي إعداد خاص. + + يستخدم تكامل Ollama في OpenClaw **واجهة API الأصلية لـ Ollama** (`/api/chat`) افتراضيًا، وهي تدعم بالكامل البث واستدعاء الأدوات في الوقت نفسه. لا حاجة إلى أي إعداد خاص. + + بالنسبة إلى طلبات `/api/chat` الأصلية، يمرر OpenClaw أيضًا التحكم في التفكير مباشرةً إلى Ollama: إذ يرسل `/think off` و`openclaw agent --thinking off` القيمة العليا `think: false`، بينما ترسل مستويات التفكير غير `off` القيمة `think: true`. - إذا كنت تحتاج إلى استخدام نقطة النهاية المتوافقة مع OpenAI، فراجع قسم "الوضع القديم المتوافق مع OpenAI" أعلاه. قد لا يعمل البث واستدعاء الأدوات في الوقت نفسه في ذلك الوضع. + إذا كنت بحاجة إلى استخدام نقطة النهاية المتوافقة مع OpenAI، فراجع قسم "الوضع القديم المتوافق مع OpenAI" أعلاه. قد لا يعمل البث واستدعاء الأدوات في الوقت نفسه في ذلك الوضع. @@ -481,13 +483,13 @@ openclaw infer image describe \ - تأكد من أن Ollama قيد التشغيل وأنك قد ضبطت `OLLAMA_API_KEY` (أو auth profile)، وأنك **لم** تعرّف إدخال `models.providers.ollama` صريحًا: + تأكد من أن Ollama قيد التشغيل وأنك ضبطت `OLLAMA_API_KEY` (أو ملف تعريف مصادقة)، وأنك **لم** تعرّف إدخال `models.providers.ollama` صريحًا: ```bash ollama serve ``` - تحقق من أن API يمكن الوصول إليها: + تحقّق من أن واجهة API قابلة للوصول: ```bash curl http://localhost:11434/api/tags @@ -499,7 +501,7 @@ openclaw infer image describe \ إذا لم يكن نموذجك مدرجًا، فإما أن تسحب النموذج محليًا أو تعرّفه صراحةً في `models.providers.ollama`. ```bash - ollama list # اعرف ما هو مثبت + ollama list # اعرض ما هو مثبّت ollama pull gemma4 ollama pull gpt-oss:20b ollama pull llama3.3 # أو نموذج آخر @@ -508,10 +510,10 @@ openclaw infer image describe \ - تحقق من أن Ollama تعمل على المنفذ الصحيح: + تحقّق من أن Ollama يعمل على المنفذ الصحيح: ```bash - # تحقق مما إذا كانت Ollama قيد التشغيل + # تحقق مما إذا كان Ollama قيد التشغيل ps aux | grep ollama # أو أعد تشغيل Ollama @@ -528,16 +530,16 @@ openclaw infer image describe \ ## ذو صلة - - نظرة عامة على جميع providers ومراجع النماذج وسلوك failover. + + نظرة عامة على جميع الموفّرين، ومراجع النماذج، وسلوك تجاوز الفشل. - كيفية اختيار النماذج وإعدادها. + كيفية اختيار النماذج وتهيئتها. تفاصيل الإعداد والسلوك الكاملة للبحث على الويب المدعوم بواسطة Ollama. - - المرجع الكامل للإعدادات. + + المرجع الكامل للإعداد. diff --git a/docs/ar/providers/tencent.md b/docs/ar/providers/tencent.md new file mode 100644 index 000000000..a9b584735 --- /dev/null +++ b/docs/ar/providers/tencent.md @@ -0,0 +1,67 @@ +--- +read_when: + - تريد استخدام نماذج Tencent Hy مع OpenClaw + - تحتاج إلى إعداد مفتاح API الخاص بـ TokenHub +summary: إعداد Tencent Cloud TokenHub +title: Tencent Cloud (TokenHub) +x-i18n: + generated_at: "2026-04-22T07:18:55Z" + model: gpt-5.4 + provider: openai + source_hash: 04da073973792c55dc0c2d287bfc51187bb2128bbbd5c4a483f850adeea50ab5 + source_path: providers/tencent.md + workflow: 15 +--- + +# Tencent Cloud (TokenHub) + +يتيح مزود Tencent Cloud الوصول إلى نماذج Tencent Hy عبر نقطة نهاية TokenHub +(`tencent-tokenhub`). + +يستخدم المزود واجهة API متوافقة مع OpenAI. + +## البدء السريع + +```bash +openclaw onboard --auth-choice tokenhub-api-key +``` + +## مثال غير تفاعلي + +```bash +openclaw onboard --non-interactive \ + --mode local \ + --auth-choice tokenhub-api-key \ + --tokenhub-api-key "$TOKENHUB_API_KEY" \ + --skip-health \ + --accept-risk +``` + +## المزودون ونقاط النهاية + +| المزود | نقطة النهاية | حالة الاستخدام | +| ------------------ | ----------------------------- | ------------------------ | +| `tencent-tokenhub` | `tokenhub.tencentmaas.com/v1` | Hy عبر Tencent TokenHub | + +## النماذج المتاحة + +### tencent-tokenhub + +- **hy3-preview** — معاينة Hy3 ‏(سياق 256K، reasoning، افتراضي) + +## ملاحظات + +- تستخدم مراجع نماذج TokenHub الصيغة `tencent-tokenhub/`. +- تجاوز بيانات التسعير وبيانات السياق الوصفية في `models.providers` عند الحاجة. + +## ملاحظة حول البيئة + +إذا كانت Gateway تعمل كخدمة daemon ‏(`launchd/systemd`)، فتأكد من أن `TOKENHUB_API_KEY` +متاح لتلك العملية (على سبيل المثال، في `~/.openclaw/.env` أو عبر +`env.shellEnv`). + +## الوثائق ذات الصلة + +- [إعدادات OpenClaw](/ar/gateway/configuration) +- [مزودو النماذج](/ar/concepts/model-providers) +- [Tencent TokenHub](https://cloud.tencent.com/document/product/1823/130050) diff --git a/docs/ar/tools/index.md b/docs/ar/tools/index.md index 8be587c31..7d51beb7e 100644 --- a/docs/ar/tools/index.md +++ b/docs/ar/tools/index.md @@ -1,128 +1,129 @@ --- read_when: - - تريد فهم الأدوات التي يوفرها OpenClaw - - تحتاج إلى إعداد الأدوات أو السماح بها أو منعها - - أنت بصدد الاختيار بين الأدوات المدمجة وSkills وplugins -summary: 'نظرة عامة على أدوات OpenClaw وplugins: ما الذي يمكن للوكيل فعله وكيفية توسيعه' + - تريد فهم الأدوات التي يوفّرها OpenClaw + - تحتاج إلى تهيئة الأدوات أو السماح بها أو منعها + - أنت تقرر بين الأدوات المدمجة وSkills وPlugins +summary: 'نظرة عامة على أدوات OpenClaw وPlugins: ما الذي يمكن للوكيل فعله وكيفية توسيعه' title: الأدوات وPlugins x-i18n: - generated_at: "2026-04-06T03:13:30Z" + generated_at: "2026-04-22T07:18:58Z" model: gpt-5.4 provider: openai - source_hash: b2371239316997b0fe389bfa2ec38404e1d3e177755ad81ff8035ac583d9adeb + source_hash: 6edb9e13b72e6345554f25c8d8413d167a69501e6626828d9aa3aac6907cd092 source_path: tools/index.md workflow: 15 --- # الأدوات وPlugins -كل ما يفعله الوكيل خارج توليد النص يتم من خلال **الأدوات**. +كل ما يفعله الوكيل خارج نطاق توليد النص يتم عبر **الأدوات**. الأدوات هي الطريقة التي يقرأ بها الوكيل الملفات، ويشغّل الأوامر، ويتصفح الويب، ويرسل الرسائل، ويتفاعل مع الأجهزة. -## الأدوات والمهارات وplugins +## الأدوات وSkills وPlugins يحتوي OpenClaw على ثلاث طبقات تعمل معًا: - الأداة هي دالة مكتوبة النوع يمكن للوكيل استدعاؤها (مثل `exec` و`browser`، - و`web_search` و`message`). يوفّر OpenClaw مجموعة من **الأدوات المدمجة** ويمكن - للplugins تسجيل أدوات إضافية. + الأداة هي دالة typed يمكن للوكيل استدعاؤها (مثل `exec` و`browser` و + `web_search` و`message`). يأتي OpenClaw مع مجموعة من **الأدوات المدمجة** + ويمكن لـ Plugins تسجيل أدوات إضافية. - يرى الوكيل الأدوات على أنها تعريفات دوال مهيكلة تُرسل إلى API الخاصة بالنموذج. + يرى الوكيل الأدوات على أنها تعريفات دوال منظَّمة تُرسل إلى API النموذج. - - الـ skill هي ملف markdown ‏(`SKILL.md`) يُحقن في system prompt. - تمنح Skills الوكيل السياق، والقيود، والإرشادات خطوة بخطوة من أجل - استخدام الأدوات بفعالية. وتوجد Skills في مساحة العمل الخاصة بك، أو في مجلدات - مشتركة، أو تأتي ضمن plugins. + + الـ skill هو ملف markdown ‏(`SKILL.md`) يُحقن في system prompt. + تمنح Skills الوكيل سياقًا وقيودًا وإرشادات خطوة بخطوة من أجل + استخدام الأدوات بفعالية. توجد Skills في مساحة العمل لديك، أو في المجلدات + المشتركة، أو تأتي مضمّنة داخل Plugins. [مرجع Skills](/ar/tools/skills) | [إنشاء Skills](/ar/tools/creating-skills) - - الـ plugin هي حزمة يمكنها تسجيل أي مجموعة من القدرات: - القنوات، وموفّري النماذج، والأدوات، وSkills، والكلام، والنسخ الفوري، + + الـ Plugin هو حزمة يمكنها تسجيل أي مزيج من القدرات: + القنوات، وموفّرو النماذج، والأدوات، وSkills، والكلام، والنسخ الفوري، والصوت الفوري، وفهم الوسائط، وتوليد الصور، وتوليد الفيديو، - وجلب الويب، والبحث في الويب، وغير ذلك. بعض plugins تكون **core** (مرفقة مع - OpenClaw)، وأخرى تكون **خارجية** (منشورة على npm من قبل المجتمع). + وجلب الويب، والبحث على الويب، وغير ذلك. بعض Plugins **أساسية** (تأتي مع + OpenClaw)، وبعضها الآخر **خارجية** (ينشرها المجتمع على npm). - [تثبيت plugins وإعدادها](/ar/tools/plugin) | [ابنِ plugin خاصة بك](/ar/plugins/building-plugins) + [تثبيت Plugins وتهيئتها](/ar/tools/plugin) | [أنشئ Plugin خاصًا بك](/ar/plugins/building-plugins) ## الأدوات المدمجة -تأتي هذه الأدوات مع OpenClaw وتكون متاحة من دون تثبيت أي plugins: +تأتي هذه الأدوات مع OpenClaw وتكون متاحة من دون تثبيت أي Plugins: -| الأداة | ما الذي تفعله | الصفحة | -| ------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------- | -| `exec` / `process` | تشغيل أوامر shell، وإدارة العمليات في الخلفية | [Exec](/ar/tools/exec) | -| `code_execution` | تشغيل تحليل Python بعيد ومعزول | [Code Execution](/ar/tools/code-execution) | -| `browser` | التحكم في متصفح Chromium ‏(التنقل، والنقر، ولقطات الشاشة) | [Browser](/ar/tools/browser) | -| `web_search` / `x_search` / `web_fetch` | البحث في الويب، والبحث في منشورات X، وجلب محتوى الصفحات | [الويب](/ar/tools/web) | -| `read` / `write` / `edit` | إدخال/إخراج الملفات في مساحة العمل | | -| `apply_patch` | ترقيعات ملفات متعددة المقاطع | [Apply Patch](/ar/tools/apply-patch) | -| `message` | إرسال الرسائل عبر جميع القنوات | [Agent Send](/ar/tools/agent-send) | -| `canvas` | تشغيل Canvas الخاص بالعقدة ‏(present وeval وsnapshot) | | -| `nodes` | اكتشاف الأجهزة المقترنة واستهدافها | | -| `cron` / `gateway` | إدارة الوظائف المجدولة؛ وفحص gateway أو ترقيعها أو إعادة تشغيلها أو تحديثها | | -| `image` / `image_generate` | تحليل الصور أو توليدها | [توليد الصور](/ar/tools/image-generation) | -| `music_generate` | توليد مقاطع موسيقية | [توليد الموسيقى](/tools/music-generation) | -| `video_generate` | توليد الفيديوهات | [توليد الفيديو](/tools/video-generation) | -| `tts` | تحويل نص إلى كلام لمرة واحدة | [TTS](/ar/tools/tts) | -| `sessions_*` / `subagents` / `agents_list` | إدارة الجلسات، والحالة، وتنسيق الوكلاء الفرعيين | [الوكلاء الفرعيون](/ar/tools/subagents) | -| `session_status` | أداة قراءة خفيفة بأسلوب `/status` وتجاوز نموذج الجلسة | [أدوات الجلسة](/ar/concepts/session-tool) | +| الأداة | ما الذي تفعله | الصفحة | +| ------------------------------------------- | ------------------------------------------------------------------ | ------------------------------------------- | +| `exec` / `process` | تشغيل أوامر shell وإدارة العمليات في الخلفية | [Exec](/ar/tools/exec) | +| `code_execution` | تشغيل تحليل Python بعيد داخل بيئة معزولة | [Code Execution](/ar/tools/code-execution) | +| `browser` | التحكّم في متصفح Chromium (التنقل، النقر، لقطة شاشة) | [Browser](/ar/tools/browser) | +| `web_search` / `x_search` / `web_fetch` | البحث على الويب، والبحث في منشورات X، وجلب محتوى الصفحات | [الويب](/ar/tools/web) | +| `read` / `write` / `edit` | إدخال/إخراج الملفات في مساحة العمل | | +| `apply_patch` | ترقيعات ملفات متعددة المقاطع | [Apply Patch](/ar/tools/apply-patch) | +| `message` | إرسال الرسائل عبر جميع القنوات | [Agent Send](/ar/tools/agent-send) | +| `canvas` | تشغيل node Canvas ‏(عرض، eval، snapshot) | | +| `nodes` | اكتشاف الأجهزة المقترنة واستهدافها | | +| `cron` / `gateway` | إدارة المهام المجدولة؛ وفحص Gateway أو ترقيعه أو إعادة تشغيله أو تحديثه | | +| `image` / `image_generate` | تحليل الصور أو إنشاؤها | [Image Generation](/ar/tools/image-generation) | +| `music_generate` | إنشاء مقاطع موسيقية | [Music Generation](/ar/tools/music-generation) | +| `video_generate` | إنشاء مقاطع فيديو | [Video Generation](/ar/tools/video-generation) | +| `tts` | تحويل النص إلى كلام دفعة واحدة | [TTS](/ar/tools/tts) | +| `sessions_*` / `subagents` / `agents_list` | إدارة الجلسات، والحالة، وتنسيق الوكلاء الفرعيين | [Sub-agents](/ar/tools/subagents) | +| `session_status` | قراءة خفيفة على نمط `/status` وتجاوز نموذج الجلسة | [أدوات الجلسة](/ar/concepts/session-tool) | -بالنسبة إلى العمل على الصور، استخدم `image` للتحليل و`image_generate` للتوليد أو التحرير. إذا استهدفت `openai/*` أو `google/*` أو `fal/*` أو موفّر صور غير افتراضي آخر، فقم أولًا بإعداد المصادقة/مفتاح API الخاص بذلك الموفّر. +بالنسبة إلى العمل على الصور، استخدم `image` للتحليل و`image_generate` للإنشاء أو التحرير. إذا كنت تستهدف `openai/*` أو `google/*` أو `fal/*` أو موفّر صور غير افتراضي آخر، فقم أولًا بتهيئة auth/API key لذلك الموفّر. -بالنسبة إلى العمل على الموسيقى، استخدم `music_generate`. إذا استهدفت `google/*` أو `minimax/*` أو موفّر موسيقى غير افتراضي آخر، فقم أولًا بإعداد المصادقة/مفتاح API الخاص بذلك الموفّر. +بالنسبة إلى العمل الموسيقي، استخدم `music_generate`. إذا كنت تستهدف `google/*` أو `minimax/*` أو موفّر موسيقى غير افتراضي آخر، فقم أولًا بتهيئة auth/API key لذلك الموفّر. -بالنسبة إلى العمل على الفيديو، استخدم `video_generate`. إذا استهدفت `qwen/*` أو موفّر فيديو غير افتراضي آخر، فقم أولًا بإعداد المصادقة/مفتاح API الخاص بذلك الموفّر. +بالنسبة إلى العمل على الفيديو، استخدم `video_generate`. إذا كنت تستهدف `qwen/*` أو موفّر فيديو غير افتراضي آخر، فقم أولًا بتهيئة auth/API key لذلك الموفّر. -بالنسبة إلى توليد الصوت المدفوع بسير العمل، استخدم `music_generate` عندما -تسجّله plugin مثل ComfyUI. وهذا منفصل عن `tts`، التي هي تحويل النص إلى كلام. +بالنسبة إلى إنشاء الصوت المعتمد على سير العمل، استخدم `music_generate` عندما يقوم Plugin مثل +ComfyUI بتسجيله. وهذا منفصل عن `tts`، الذي يختص بتحويل النص إلى كلام. -`session_status` هي أداة الحالة/القراءة الخفيفة في مجموعة sessions. -فهي تجيب عن الأسئلة بأسلوب `/status` حول الجلسة الحالية ويمكنها -اختياريًا تعيين تجاوز نموذج على مستوى الجلسة؛ أما `model=default` فيزيل هذا -التجاوز. ومثل `/status`، يمكنها أن تملأ عدادات الرموز/cache الناقصة و -تسمية نموذج وقت التشغيل النشط انطلاقًا من أحدث إدخال استخدام في transcript. +الأداة `session_status` هي أداة الحالة/القراءة الخفيفة ضمن مجموعة الجلسات. +فهي تجيب عن أسئلة على نمط `/status` حول الجلسة الحالية، ويمكنها +اختياريًا تعيين تجاوز نموذج لكل جلسة؛ ويؤدي `model=default` إلى مسح ذلك +التجاوز. ومثل `/status`، يمكنها إكمال عدادات الرموز/التخزين المؤقت المتفرقة ووسم +النموذج النشط في Runtime من أحدث إدخال استخدام في السجل. -`gateway` هي أداة وقت التشغيل الخاصة بالمالك فقط لعمليات gateway: +الأداة `gateway` هي أداة Runtime مخصصة للمالك فقط لعمليات Gateway: -- `config.schema.lookup` من أجل شجرة إعدادات فرعية محددة بمسار قبل التعديلات -- `config.get` من أجل لقطة الإعدادات الحالية + hash -- `config.patch` من أجل تحديثات إعدادات جزئية مع إعادة التشغيل -- `config.apply` فقط من أجل استبدال الإعدادات كاملة -- `update.run` من أجل التحديث الذاتي الصريح + إعادة التشغيل +- `config.schema.lookup` للحصول على شجرة إعدادات فرعية بنطاق مسار واحد قبل التحرير +- `config.get` للحصول على لقطة الإعدادات الحالية + hash +- `config.patch` لتحديثات الإعدادات الجزئية مع إعادة التشغيل +- `config.apply` فقط للاستبدال الكامل للإعدادات +- `update.run` لتنفيذ التحديث الذاتي + إعادة التشغيل بشكل صريح -بالنسبة إلى التغييرات الجزئية، فضّل `config.schema.lookup` ثم `config.patch`. -واستخدم `config.apply` فقط عندما تقصد استبدال الإعدادات بالكامل. -كما ترفض الأداة أيضًا تغيير `tools.exec.ask` أو `tools.exec.security`؛ ويتم -تطبيع الأسماء المستعارة القديمة `tools.bash.*` إلى مسارات exec المحمية نفسها. +بالنسبة إلى التغييرات الجزئية، يُفضَّل استخدام `config.schema.lookup` ثم +`config.patch`. واستخدم `config.apply` فقط عندما تنوي عمدًا استبدال الإعدادات بالكامل. +وترفض الأداة أيضًا تغيير `tools.exec.ask` أو `tools.exec.security`؛ +كما تُطبَّع الأسماء المستعارة القديمة `tools.bash.*` إلى مسارات exec المحمية نفسها. -### الأدوات التي توفرها plugins +### الأدوات التي توفّرها Plugins -يمكن للplugins تسجيل أدوات إضافية. بعض الأمثلة: +يمكن لـ Plugins تسجيل أدوات إضافية. بعض الأمثلة: -- [Lobster](/ar/tools/lobster) — وقت تشغيل سير عمل مكتوب النوع مع موافقات قابلة للاستئناف -- [LLM Task](/ar/tools/llm-task) — خطوة LLM بصيغة JSON فقط من أجل المخرجات المهيكلة -- [Music Generation](/tools/music-generation) — أداة `music_generate` مشتركة مع موفّرين مدفوعين بسير العمل -- [Diffs](/ar/tools/diffs) — عارض فروق ومُصيّر لها -- [OpenProse](/ar/prose) — تنسيق سير عمل قائم على Markdown أولًا +- [Diffs](/ar/tools/diffs) — عارض ومُصيّر للاختلافات +- [LLM Task](/ar/tools/llm-task) — خطوة LLM تعتمد JSON فقط للمخرجات المنظَّمة +- [Lobster](/ar/tools/lobster) — Runtime لسير عمل typed مع موافقات قابلة للاستئناف +- [Music Generation](/ar/tools/music-generation) — أداة `music_generate` مشتركة مع موفّرين مدعومين بسير العمل +- [OpenProse](/ar/prose) — تنسيق سير العمل بأسلوب markdown-first +- [Tokenjuice](/ar/tools/tokenjuice) — نتائج مضغوطة لأداتي `exec` و`bash` كثيرة الضجيج -## إعداد الأدوات +## تهيئة الأدوات ### قوائم السماح والمنع -تحكم في الأدوات التي يمكن للوكيل استدعاؤها عبر `tools.allow` و`tools.deny` في -الإعدادات. ويفوز المنع دائمًا على السماح. +تحكّم في الأدوات التي يمكن للوكيل استدعاؤها عبر `tools.allow` / `tools.deny` في +الإعدادات. وتكون الأولوية دائمًا للمنع على السماح. ```json5 { @@ -135,50 +136,49 @@ x-i18n: ### ملفات تعريف الأدوات -يضبط `tools.profile` قائمة السماح الأساسية قبل تطبيق `allow`/`deny`. +يضبط `tools.profile` قائمة سماح أساسية قبل تطبيق `allow`/`deny`. التجاوز لكل وكيل: `agents.list[].tools.profile`. -| ملف التعريف | ما الذي يتضمنه | -| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -| `full` | بلا قيود (يماثل عدم الضبط) | -| `coding` | `group:fs`, `group:runtime`, `group:web`, `group:sessions`, `group:memory`, `cron`, `image`, `image_generate`, `music_generate`, `video_generate` | -| `messaging` | `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status` | -| `minimal` | `session_status` فقط | +| الملف التعريفي | ما الذي يتضمنه | +| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `full` | بلا قيود (مماثل لعدم التعيين) | +| `coding` | `group:fs`, `group:runtime`, `group:web`, `group:sessions`, `group:memory`, `cron`, `image`, `image_generate`, `music_generate`, `video_generate` | +| `messaging` | `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status` | +| `minimal` | `session_status` فقط | ### مجموعات الأدوات استخدم اختصارات `group:*` في قوائم السماح/المنع: -| المجموعة | الأدوات | -| ------------------ | ----------------------------------------------------------------------------------------------------------- | +| المجموعة | الأدوات | +| ------------------ | ---------------------------------------------------------------------------------------------------------- | | `group:runtime` | exec, process, code_execution (يُقبل `bash` كاسم مستعار لـ `exec`) | -| `group:fs` | read, write, edit, apply_patch | -| `group:sessions` | sessions_list, sessions_history, sessions_send, sessions_spawn, sessions_yield, subagents, session_status | -| `group:memory` | memory_search, memory_get | -| `group:web` | web_search, x_search, web_fetch | -| `group:ui` | browser, canvas | -| `group:automation` | cron, gateway | -| `group:messaging` | message | -| `group:nodes` | nodes | -| `group:agents` | agents_list | -| `group:media` | image, image_generate, music_generate, video_generate, tts | -| `group:openclaw` | جميع أدوات OpenClaw المدمجة (باستثناء أدوات plugin) | +| `group:fs` | read, write, edit, apply_patch | +| `group:sessions` | sessions_list, sessions_history, sessions_send, sessions_spawn, sessions_yield, subagents, session_status | +| `group:memory` | memory_search, memory_get | +| `group:web` | web_search, x_search, web_fetch | +| `group:ui` | browser, canvas | +| `group:automation` | cron, gateway | +| `group:messaging` | message | +| `group:nodes` | nodes | +| `group:agents` | agents_list | +| `group:media` | image, image_generate, music_generate, video_generate, tts | +| `group:openclaw` | جميع أدوات OpenClaw المدمجة (باستثناء أدوات Plugins) | -تعيد `sessions_history` عرض استدعاء مقيّدًا ومفلترًا لأسباب الأمان. فهي تزيل -وسوم التفكير، وهياكل ``، وحمولات XML النصية البسيطة الخاصة باستدعاءات الأدوات -(بما في ذلك `...`, -و`...`, و`...`, -و`...`, -وكتل استدعاءات الأدوات المقتطعة)، وهياكل استدعاءات الأدوات المخفّضة، -ورموز التحكم بالنموذج المتسربة بصيغة ASCII/العرض الكامل، -وXML استدعاءات الأدوات المشوهة الخاصة بـ MiniMax من نص المساعد، ثم تطبق -الإخفاء/الاقتطاع وإمكانية استخدام عناصر نائبة للصفوف كبيرة الحجم بدلًا من العمل -كتفريغ transcript خام. +تعيد `sessions_history` عرض استرجاع مقيّدًا ومفلترًا للسلامة. فهي تزيل +وسوم التفكير، وهيكل ``، وحمولات XML النصية العادية +لاستدعاء الأدوات (بما في ذلك `...`، +و`...`، و`...`، +و`...`، وكتل استدعاء الأدوات المقتطعة)، +وهيكل استدعاء الأدوات المخفّض، ورموز التحكم بالنموذج المسرّبة بتنسيق ASCII/العرض الكامل، +وXML استدعاء الأدوات غير الصحيح من MiniMax في نص المساعد، ثم تطبق +الإخفاء/الاقتطاع وربما عناصر نائبة للصفوف كبيرة الحجم بدلًا من التعامل معه +كإخراج خام للسجل. -### القيود الخاصة بكل موفّر +### قيود خاصة بالموفّر استخدم `tools.byProvider` لتقييد الأدوات لموفّرين محددين من دون -تغيير الإعدادات العامة الافتراضية: +تغيير الإعدادات الافتراضية العامة: ```json5 { diff --git a/docs/ar/tools/tokenjuice.md b/docs/ar/tools/tokenjuice.md new file mode 100644 index 000000000..770a3d1c0 --- /dev/null +++ b/docs/ar/tools/tokenjuice.md @@ -0,0 +1,83 @@ +--- +read_when: + - تريد نتائج أقصر لأداتي `exec` أو `bash` في OpenClaw + - تريد تفعيل Plugin tokenjuice المضمّن + - تحتاج إلى فهم ما الذي يغيّره tokenjuice وما الذي يتركه بصيغته الخام +summary: ضغط نتائج أدوات exec وbash المليئة بالضوضاء باستخدام Plugin مضمّن اختياري +title: Tokenjuice +x-i18n: + generated_at: "2026-04-22T07:19:10Z" + model: gpt-5.4 + provider: openai + source_hash: 9b9a1054c9b1cc62e43ac6d5904c7790f9b27d8e0d0700c9da6e287c00e91783 + source_path: tools/tokenjuice.md + workflow: 15 +--- + +# Tokenjuice + +`tokenjuice` هو Plugin مضمّن اختياري يضغط نتائج أدوات `exec` و`bash` +المليئة بالضوضاء بعد تنفيذ الأمر بالفعل. + +إنه يغيّر `tool_result` المُعاد، وليس الأمر نفسه. ولا يقوم Tokenjuice +بإعادة كتابة إدخال shell، أو إعادة تشغيل الأوامر، أو تغيير رموز الخروج. + +ينطبق هذا اليوم على عمليات التشغيل المضمّنة لـ Pi، حيث يربط tokenjuice نفسه +بمسار `tool_result` المضمّن ويقلّم المخرجات التي تعود إلى الجلسة. + +## تفعيل Plugin + +المسار السريع: + +```bash +openclaw config set plugins.entries.tokenjuice.enabled true +``` + +المكافئ: + +```bash +openclaw plugins enable tokenjuice +``` + +يشحن OpenClaw الـ Plugin بالفعل. ولا توجد خطوة منفصلة مثل `plugins install` +أو `tokenjuice install openclaw`. + +إذا كنت تفضّل تعديل الإعدادات مباشرةً: + +```json5 +{ + plugins: { + entries: { + tokenjuice: { + enabled: true, + }, + }, + }, +} +``` + +## ما الذي يغيّره tokenjuice + +- يضغط نتائج `exec` و`bash` المليئة بالضوضاء قبل إعادتها إلى الجلسة. +- يُبقي تنفيذ الأمر الأصلي من دون تغيير. +- يحافظ على قراءات محتوى الملفات الدقيقة والأوامر الأخرى التي ينبغي أن يتركها tokenjuice بصيغتها الخام. +- يظل اختياريًا: عطّل Plugin إذا كنت تريد مخرجات حرفية في كل مكان. + +## تحقّق من أنه يعمل + +1. فعّل Plugin. +2. ابدأ جلسة يمكنها استدعاء `exec`. +3. شغّل أمرًا مليئًا بالضوضاء مثل `git status`. +4. تحقّق من أن نتيجة الأداة المُعادة أقصر وأكثر تنظيمًا من مخرجات shell الخام. + +## تعطيل Plugin + +```bash +openclaw config set plugins.entries.tokenjuice.enabled false +``` + +أو: + +```bash +openclaw plugins disable tokenjuice +```