From 5bb2d575482e573e034b4f7b29a343c68945e692 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Wed, 15 Apr 2026 19:51:23 +0000 Subject: [PATCH] chore(i18n): refresh ar translations --- docs/ar/channels/matrix.md | 601 +++---- docs/ar/concepts/system-prompt.md | 225 +-- docs/ar/gateway/configuration-reference.md | 1884 +++++++++++--------- docs/ar/plugins/sdk-channel-plugins.md | 364 ++-- docs/ar/plugins/sdk-entrypoints.md | 224 ++- docs/ar/plugins/sdk-runtime.md | 182 +- docs/ar/plugins/sdk-setup.md | 393 ++-- docs/ar/plugins/sdk-testing.md | 96 +- docs/ar/reference/token-use.md | 188 +- 9 files changed, 2177 insertions(+), 1980 deletions(-) diff --git a/docs/ar/channels/matrix.md b/docs/ar/channels/matrix.md index 2c43aa121..63afdc0cf 100644 --- a/docs/ar/channels/matrix.md +++ b/docs/ar/channels/matrix.md @@ -1,57 +1,57 @@ --- read_when: - إعداد Matrix في OpenClaw - - تهيئة التشفير من الطرف إلى الطرف (E2EE) والتحقق في Matrix + - تهيئة التشفير التام بين الطرفين (E2EE) والتحقق في Matrix summary: حالة دعم Matrix، والإعداد، وأمثلة التهيئة title: Matrix x-i18n: - generated_at: "2026-04-15T07:17:44Z" + generated_at: "2026-04-15T19:41:37Z" model: gpt-5.4 provider: openai - source_hash: 631f6fdcfebc23136c1a66b04851a25c047535d13cceba5650b8b421bc3afcf8 + source_hash: bd730bb9d0c8a548ee48b20931b3222e9aa1e6e95f1390b0c236645e03f3576d source_path: channels/matrix.md workflow: 15 --- # Matrix -Matrix هو Plugin قناة مضمّن لـ OpenClaw. -وهو يستخدم `matrix-js-sdk` الرسمي ويدعم الرسائل الخاصة، والغرف، وسلاسل الرسائل، والوسائط، والتفاعلات، والاستطلاعات، والموقع، والتشفير من الطرف إلى الطرف. +Matrix هو Plugin قناة مدمج في OpenClaw. +يستخدم `matrix-js-sdk` الرسمي ويدعم الرسائل الخاصة، والغرف، وسلاسل الرسائل، والوسائط، والتفاعلات، والاستطلاعات، والموقع، والتشفير التام بين الطرفين (E2EE). -## Plugin مضمّن +## Plugin المدمج -يأتي Matrix كـ Plugin مضمّن في إصدارات OpenClaw الحالية، لذلك لا تحتاج -عمليات البناء المجمّعة العادية إلى تثبيت منفصل. +يأتي Matrix كـ Plugin مدمج في إصدارات OpenClaw الحالية، لذلك لا تحتاج +البنيات المجمعة العادية إلى تثبيت منفصل. -إذا كنت تستخدم إصدارًا أقدم أو تثبيتًا مخصصًا يستبعد Matrix، فثبّته +إذا كنت تستخدم إصدارًا أقدم أو تثبيتًا مخصصًا لا يتضمن Matrix، فثبّته يدويًا: -التثبيت من npm: +ثبّت من npm: ```bash openclaw plugins install @openclaw/matrix ``` -التثبيت من نسخة محلية: +ثبّت من نسخة محلية: ```bash openclaw plugins install ./path/to/local/matrix-plugin ``` -راجع [Plugins](/ar/tools/plugin) لمعرفة سلوك Plugins وقواعد التثبيت. +راجع [Plugins](/ar/tools/plugin) لمعرفة سلوك Plugin وقواعد التثبيت. ## الإعداد 1. تأكد من أن Plugin Matrix متاح. - - إصدارات OpenClaw المجمّعة الحالية تتضمنه بالفعل. - - يمكن لعمليات التثبيت الأقدم/المخصصة إضافته يدويًا باستخدام الأوامر أعلاه. -2. أنشئ حساب Matrix على الخادم المنزلي الخاص بك. + - إصدارات OpenClaw المجمعة الحالية تتضمنه بالفعل. + - يمكن للتثبيتات الأقدم/المخصصة إضافته يدويًا باستخدام الأوامر أعلاه. +2. أنشئ حساب Matrix على خادمك المنزلي. 3. هيّئ `channels.matrix` باستخدام أحد الخيارين: - `homeserver` + `accessToken`، أو - `homeserver` + `userId` + `password`. 4. أعد تشغيل Gateway. -5. ابدأ رسالة خاصة مع البوت أو ادعه إلى غرفة. - - لا تعمل دعوات Matrix الجديدة إلا عندما يسمح بها `channels.matrix.autoJoin`. +5. ابدأ رسالة خاصة مع البوت أو قم بدعوته إلى غرفة. + - دعوات Matrix الجديدة تعمل فقط عندما يسمح `channels.matrix.autoJoin` بذلك. مسارات الإعداد التفاعلية: @@ -65,25 +65,25 @@ openclaw configure --section channels - عنوان URL للخادم المنزلي - طريقة المصادقة: رمز وصول أو كلمة مرور - معرّف المستخدم (لمصادقة كلمة المرور فقط) -- اسم الجهاز الاختياري -- ما إذا كان يجب تمكين التشفير من الطرف إلى الطرف -- ما إذا كان يجب إعداد وصول الغرف والانضمام التلقائي للدعوات +- اسم جهاز اختياري +- ما إذا كان يجب تمكين التشفير التام بين الطرفين (E2EE) +- ما إذا كان يجب تهيئة الوصول إلى الغرف والانضمام التلقائي للدعوات -السلوكيات الأساسية للمعالج: +سلوكيات المعالج الأساسية: -- إذا كانت متغيرات بيئة مصادقة Matrix موجودة بالفعل ولم يكن لهذا الحساب مصادقة محفوظة في الإعدادات بعد، فسيعرض المعالج اختصارًا لاستخدام البيئة للإبقاء على المصادقة في متغيرات البيئة. -- تتم تسوية أسماء الحسابات إلى معرّف الحساب. على سبيل المثال، يتحول `Ops Bot` إلى `ops-bot`. -- تقبل إدخالات قائمة السماح للرسائل الخاصة `@user:server` مباشرةً؛ ولا تعمل أسماء العرض إلا عندما يعثر البحث المباشر في الدليل على تطابق واحد دقيق. -- تقبل إدخالات قائمة السماح للغرف معرّفات الغرف والأسماء المستعارة مباشرةً. يُفضَّل `!room:server` أو `#alias:server`؛ ويتم تجاهل الأسماء غير المحلولة وقت التشغيل عند حل قائمة السماح. -- في وضع قائمة السماح للانضمام التلقائي للدعوات، استخدم فقط أهداف دعوات مستقرة: `!roomId:server` أو `#alias:server` أو `*`. يتم رفض أسماء الغرف العادية. -- لحل أسماء الغرف قبل الحفظ، استخدم `openclaw channels resolve --channel matrix "Project Room"`. +- إذا كانت متغيرات بيئة مصادقة Matrix موجودة بالفعل ولم يكن لهذا الحساب مصادقة محفوظة بالفعل في الإعدادات، فسيعرض المعالج اختصارًا لمتغيرات البيئة للإبقاء على المصادقة في متغيرات البيئة. +- تُطبّع أسماء الحسابات إلى معرّف الحساب. على سبيل المثال، يتحول `Ops Bot` إلى `ops-bot`. +- تقبل إدخالات قائمة السماح للرسائل الخاصة `@user:server` مباشرةً؛ ولا تعمل الأسماء المعروضة إلا عندما يعثر البحث المباشر في الدليل على تطابق واحد دقيق. +- تقبل إدخالات قائمة السماح للغرف معرّفات الغرف والأسماء المستعارة مباشرةً. فضّل `!room:server` أو `#alias:server`؛ ويتم تجاهل الأسماء غير المحلولة أثناء التشغيل عند تحليل قائمة السماح. +- في وضع قائمة السماح للانضمام التلقائي للدعوات، استخدم فقط أهداف الدعوات الثابتة: `!roomId:server` أو `#alias:server` أو `*`. تُرفض أسماء الغرف العادية. +- لتحليل أسماء الغرف قبل الحفظ، استخدم `openclaw channels resolve --channel matrix "Project Room"`. -القيمة الافتراضية لـ `channels.matrix.autoJoin` هي `off`. +تكون القيمة الافتراضية لـ `channels.matrix.autoJoin` هي `off`. -إذا تركته غير مضبوط، فلن ينضم البوت إلى الغرف المدعو إليها أو إلى دعوات الرسائل الخاصة الجديدة، لذلك لن يظهر في المجموعات الجديدة أو الرسائل الخاصة المدعو إليها ما لم تنضم يدويًا أولًا. +إذا تركته دون تعيين، فلن ينضم البوت إلى الغرف المدعو إليها أو الدعوات الجديدة بأسلوب الرسائل الخاصة، لذلك لن يظهر في المجموعات الجديدة أو الرسائل الخاصة المدعو إليها ما لم تنضم يدويًا أولًا. -اضبط `autoJoin: "allowlist"` مع `autoJoinAllowlist` لتقييد الدعوات التي يقبلها، أو اضبط `autoJoin: "always"` إذا كنت تريده أن ينضم إلى كل دعوة. +عيّن `autoJoin: "allowlist"` مع `autoJoinAllowlist` لتقييد الدعوات التي يقبلها، أو عيّن `autoJoin: "always"` إذا كنت تريد منه الانضمام إلى كل دعوة. في وضع `allowlist`، لا يقبل `autoJoinAllowlist` إلا `!roomId:server` أو `#alias:server` أو `*`. @@ -118,7 +118,7 @@ openclaw configure --section channels } ``` -إعداد أساسي باستخدام الرمز المميز: +إعداد بسيط يعتمد على الرمز المميز: ```json5 { @@ -133,7 +133,7 @@ openclaw configure --section channels } ``` -إعداد باستخدام كلمة المرور (يتم تخزين الرمز المميز مؤقتًا بعد تسجيل الدخول): +إعداد يعتمد على كلمة المرور (يتم تخزين الرمز المميز مؤقتًا بعد تسجيل الدخول): ```json5 { @@ -149,11 +149,11 @@ openclaw configure --section channels } ``` -يخزن Matrix بيانات الاعتماد المخزنة مؤقتًا في `~/.openclaw/credentials/matrix/`. +يخزن Matrix بيانات الاعتماد المؤقتة في `~/.openclaw/credentials/matrix/`. يستخدم الحساب الافتراضي `credentials.json`؛ وتستخدم الحسابات المسماة `credentials-.json`. -عند وجود بيانات اعتماد مخزنة مؤقتًا هناك، يتعامل OpenClaw مع Matrix على أنه مُهيأ لأغراض الإعداد وdoctor واكتشاف حالة القناة، حتى إذا لم تكن المصادقة الحالية مضبوطة مباشرةً في الإعدادات. +عند وجود بيانات اعتماد مخزنة مؤقتًا هناك، يتعامل OpenClaw مع Matrix على أنه مُهيأ لعمليات الإعداد وdoctor واكتشاف حالة القناة، حتى إذا لم تكن المصادقة الحالية مضبوطة مباشرةً في الإعدادات. -مكافئات متغيرات البيئة (تُستخدم عندما لا يكون مفتاح الإعداد مضبوطًا): +المكافئات من متغيرات البيئة (تُستخدم عندما لا يكون مفتاح الإعداد معيّنًا): - `MATRIX_HOMESERVER` - `MATRIX_ACCESS_TOKEN` @@ -162,7 +162,7 @@ openclaw configure --section channels - `MATRIX_DEVICE_ID` - `MATRIX_DEVICE_NAME` -للحسابات غير الافتراضية، استخدم متغيرات البيئة ذات النطاق الخاص بالحساب: +للحسابات غير الافتراضية، استخدم متغيرات بيئة على مستوى الحساب: - `MATRIX__HOMESERVER` - `MATRIX__ACCESS_TOKEN` @@ -176,19 +176,19 @@ openclaw configure --section channels - `MATRIX_OPS_HOMESERVER` - `MATRIX_OPS_ACCESS_TOKEN` -لمعرّف الحساب المطبّع `ops-bot`، استخدم: +وبالنسبة إلى معرّف الحساب المطبّع `ops-bot`، استخدم: - `MATRIX_OPS_X2D_BOT_HOMESERVER` - `MATRIX_OPS_X2D_BOT_ACCESS_TOKEN` -يقوم Matrix بتهريب علامات الترقيم في معرّفات الحسابات لإبقاء متغيرات البيئة ذات النطاق الخاص خالية من التعارضات. -على سبيل المثال، يتحول `-` إلى `_X2D_`، لذا يتم تعيين `ops-prod` إلى `MATRIX_OPS_X2D_PROD_*`. +يهرب Matrix علامات الترقيم في معرّفات الحسابات للحفاظ على عدم تعارض متغيرات البيئة المحددة بالنطاق. +على سبيل المثال، تتحول `-` إلى `_X2D_`، لذلك يُحوَّل `ops-prod` إلى `MATRIX_OPS_X2D_PROD_*`. -لا يعرض المعالج التفاعلي اختصار متغيرات البيئة إلا عندما تكون متغيرات بيئة المصادقة هذه موجودة بالفعل ولا تكون مصادقة Matrix محفوظة في الإعدادات للحساب المحدد. +لا يعرض المعالج التفاعلي اختصار متغيرات البيئة إلا عندما تكون متغيرات بيئة المصادقة هذه موجودة بالفعل ولا يكون الحساب المحدد لديه بالفعل مصادقة Matrix محفوظة في الإعدادات. ## مثال على التهيئة -هذا إعداد أساسي عملي مع اقتران الرسائل الخاصة، وقائمة سماح للغرف، وتمكين التشفير من الطرف إلى الطرف: +هذا إعداد أساسي عملي يتضمن إقران الرسائل الخاصة، وقائمة سماح للغرف، وتمكين التشفير التام بين الطرفين (E2EE): ```json5 { @@ -223,16 +223,16 @@ openclaw configure --section channels } ``` -ينطبق `autoJoin` على جميع دعوات Matrix، بما في ذلك دعوات نمط الرسائل الخاصة. لا يستطيع OpenClaw -تصنيف الغرفة المدعو إليها بشكل موثوق على أنها رسالة خاصة أو مجموعة في وقت الدعوة، لذلك تمر كل الدعوات عبر `autoJoin` -أولًا. يتم تطبيق `dm.policy` بعد انضمام البوت وتصنيف الغرفة على أنها رسالة خاصة. +ينطبق `autoJoin` على جميع دعوات Matrix، بما في ذلك الدعوات بأسلوب الرسائل الخاصة. لا يمكن لـ OpenClaw +تصنيف الغرفة المدعو إليها بشكل موثوق على أنها رسالة خاصة أو مجموعة عند وقت الدعوة، لذلك تمر جميع الدعوات عبر `autoJoin` +أولًا. يُطبَّق `dm.policy` بعد انضمام البوت وتصنيف الغرفة على أنها رسالة خاصة. ## معاينات البث -بث الردود في Matrix اختياري. +بث الردود في Matrix يتم عبر الاشتراك الاختياري. -اضبط `channels.matrix.streaming` على `"partial"` عندما تريد أن يرسل OpenClaw معاينة مباشرة واحدة -للرد، ويعدّل هذه المعاينة في مكانها بينما يقوم النموذج بإنشاء النص، ثم ينهيها عند اكتمال +عيّن `channels.matrix.streaming` إلى `"partial"` عندما تريد أن يرسل OpenClaw معاينة مباشرة واحدة +للرد، ويحرر تلك المعاينة في مكانها أثناء توليد النموذج للنص، ثم يثبتها عند اكتمال الرد: ```json5 @@ -246,35 +246,35 @@ openclaw configure --section channels ``` - `streaming: "off"` هو الإعداد الافتراضي. ينتظر OpenClaw الرد النهائي ويرسله مرة واحدة. -- `streaming: "partial"` ينشئ رسالة معاينة واحدة قابلة للتحرير لكتلة المساعد الحالية باستخدام رسائل Matrix النصية العادية. يحافظ هذا على سلوك الإشعارات القديم في Matrix القائم على المعاينة أولًا، لذا قد تُرسل التطبيقات القياسية إشعارًا عند أول نص معاينة متدفق بدلًا من الكتلة المكتملة. +- `streaming: "partial"` ينشئ رسالة معاينة واحدة قابلة للتحرير لكتلة المساعد الحالية باستخدام رسائل Matrix النصية العادية. يحافظ ذلك على سلوك الإشعارات القديم في Matrix القائم على المعاينة أولًا، لذا قد ترسل التطبيقات القياسية إشعارًا عند أول نص معاينة متدفق بدلًا من الكتلة النهائية المكتملة. - `streaming: "quiet"` ينشئ إشعار معاينة هادئًا واحدًا قابلًا للتحرير لكتلة المساعد الحالية. استخدم هذا فقط عندما تهيئ أيضًا قواعد دفع للمستلمين من أجل تعديلات المعاينات النهائية. -- `blockStreaming: true` يمكّن رسائل تقدم Matrix المنفصلة. عند تمكين بث المعاينة، يحتفظ Matrix بالمسودة الحية للكتلة الحالية ويحافظ على الكتل المكتملة كرسائل منفصلة. -- عند تشغيل بث المعاينة وإيقاف `blockStreaming`، يقوم Matrix بتحرير المسودة الحية في مكانها وينهي الحدث نفسه عند اكتمال الكتلة أو الدور. +- يفعّل `blockStreaming: true` رسائل تقدم منفصلة في Matrix. وعند تمكين بث المعاينة، يحتفظ Matrix بالمسودة المباشرة للكتلة الحالية ويحافظ على الكتل المكتملة كرسائل منفصلة. +- عندما يكون بث المعاينة قيد التشغيل ويكون `blockStreaming` متوقفًا، يحرر Matrix المسودة المباشرة في مكانها ويثبت الحدث نفسه عند انتهاء الكتلة أو الدور. - إذا لم تعد المعاينة تتسع في حدث Matrix واحد، يوقف OpenClaw بث المعاينة ويعود إلى التسليم النهائي العادي. -- ما زالت ردود الوسائط ترسل المرفقات بشكل طبيعي. إذا تعذر إعادة استخدام معاينة قديمة بأمان، فسيقوم OpenClaw بحذفها قبل إرسال رد الوسائط النهائي. -- تكلف تعديلات المعاينة استدعاءات إضافية إلى Matrix API. اترك البث معطّلًا إذا كنت تريد السلوك الأكثر تحفظًا من ناحية حدود المعدل. +- لا تزال ردود الوسائط ترسل المرفقات بشكل عادي. وإذا لم يعد من الآمن إعادة استخدام معاينة قديمة، يقوم OpenClaw بحذفها قبل إرسال رد الوسائط النهائي. +- تكلف تعديلات المعاينة طلبات إضافية إلى Matrix API. اترك البث متوقفًا إذا كنت تريد السلوك الأكثر تحفظًا فيما يتعلق بحدود المعدل. -لا يقوم `blockStreaming` بتمكين معاينات المسودات بمفرده. +لا يفعّل `blockStreaming` معاينات المسودات بمفرده. استخدم `streaming: "partial"` أو `streaming: "quiet"` لتعديلات المعاينة؛ ثم أضف `blockStreaming: true` فقط إذا كنت تريد أيضًا أن تظل كتل المساعد المكتملة مرئية كرسائل تقدم منفصلة. -إذا كنت بحاجة إلى إشعارات Matrix القياسية من دون قواعد دفع مخصصة، فاستخدم `streaming: "partial"` لسلوك المعاينة أولًا أو اترك `streaming` معطّلًا للتسليم النهائي فقط. عند استخدام `streaming: "off"`: +إذا كنت تحتاج إلى إشعارات Matrix القياسية من دون قواعد دفع مخصصة، فاستخدم `streaming: "partial"` لسلوك المعاينة أولًا أو اترك `streaming` متوقفًا للتسليم النهائي فقط. مع `streaming: "off"`: - يرسل `blockStreaming: true` كل كتلة مكتملة كرسالة Matrix عادية مُرسِلة للإشعارات. -- يرسل `blockStreaming: false` الرد المكتمل النهائي فقط كرسالة Matrix عادية مُرسِلة للإشعارات. +- يرسل `blockStreaming: false` الرد النهائي المكتمل فقط كرسالة Matrix عادية مُرسِلة للإشعارات. ### قواعد دفع مستضافة ذاتيًا للمعاينات الهادئة النهائية -إذا كنت تشغّل بنية Matrix التحتية الخاصة بك وتريد أن ترسل المعاينات الهادئة إشعارًا فقط عند اكتمال كتلة أو -الرد النهائي، فاضبط `streaming: "quiet"` وأضف قاعدة دفع لكل مستخدم من أجل تعديلات المعاينات النهائية. +إذا كنت تشغّل بنية Matrix الخاصة بك وتريد أن ترسل المعاينات الهادئة إشعارًا فقط عند اكتمال كتلة أو +الرد النهائي، فعيّن `streaming: "quiet"` وأضف قاعدة دفع لكل مستخدم مستلم لتعديلات المعاينة النهائية. -يكون هذا عادة إعدادًا على مستوى المستخدم المستلم، وليس تغييرًا عامًا في إعدادات الخادم المنزلي: +يكون هذا عادةً إعدادًا على مستوى المستخدم المستلم، وليس تغييرًا عامًا في إعدادات الخادم المنزلي: -خريطة سريعة قبل أن تبدأ: +خريطة سريعة قبل البدء: - المستخدم المستلم = الشخص الذي يجب أن يتلقى الإشعار - مستخدم البوت = حساب Matrix الخاص بـ OpenClaw الذي يرسل الرد - استخدم رمز وصول المستخدم المستلم في استدعاءات API أدناه -- طابق `sender` في قاعدة الدفع مع MXID الكامل لمستخدم البوت +- طابِق `sender` في قاعدة الدفع مع MXID الكامل لمستخدم البوت 1. هيّئ OpenClaw لاستخدام المعاينات الهادئة: @@ -289,11 +289,11 @@ openclaw configure --section channels ``` 2. تأكد من أن حساب المستلم يتلقى بالفعل إشعارات دفع Matrix العادية. لا تعمل - قواعد المعاينات الهادئة إلا إذا كان لذلك المستخدم pushers/devices عاملة بالفعل. + قواعد المعاينات الهادئة إلا إذا كان لدى هذا المستخدم بالفعل pushers/أجهزة عاملة. 3. احصل على رمز وصول المستخدم المستلم. - استخدم رمز المستخدم المتلقي، وليس رمز البوت. - - غالبًا ما يكون إعادة استخدام رمز جلسة عميل موجودة هو الأسهل. + - عادةً ما تكون إعادة استخدام رمز جلسة عميل موجودة هي الأسهل. - إذا كنت بحاجة إلى إصدار رمز جديد، يمكنك تسجيل الدخول عبر Matrix Client-Server API القياسي: ```bash @@ -310,7 +310,7 @@ curl -sS -X POST \ }' ``` -4. تحقق من أن حساب المستلم لديه بالفعل pushers: +4. تحقّق من أن حساب المستلم لديه بالفعل pushers: ```bash curl -sS \ @@ -318,10 +318,10 @@ curl -sS \ "https://matrix.example.org/_matrix/client/v3/pushers" ``` -إذا لم يُرجع هذا أي pushers/devices نشطة، فأصلح إشعارات Matrix العادية أولًا قبل إضافة +إذا أعاد هذا الاستدعاء عدم وجود pushers/أجهزة نشطة، فأصلح إشعارات Matrix العادية أولًا قبل إضافة قاعدة OpenClaw أدناه. -يضع OpenClaw علامة على تعديلات المعاينات النهائية النصية فقط بالقيمة التالية: +يضع OpenClaw علامة على تعديلات المعاينات النهائية النصية فقط باستخدام: ```json { @@ -329,7 +329,7 @@ curl -sS \ } ``` -5. أنشئ قاعدة دفع override لكل حساب مستلم يجب أن يتلقى هذه الإشعارات: +5. أنشئ قاعدة دفع من نوع override لكل حساب مستلم يجب أن يتلقى هذه الإشعارات: ```bash curl -sS -X PUT \ @@ -361,21 +361,21 @@ curl -sS -X PUT \ استبدل هذه القيم قبل تشغيل الأمر: -- `https://matrix.example.org`: عنوان URL الأساسي للخادم المنزلي لديك +- `https://matrix.example.org`: عنوان URL الأساسي لخادمك المنزلي - `$USER_ACCESS_TOKEN`: رمز وصول المستخدم المتلقي - `openclaw-finalized-preview-botname`: معرّف قاعدة فريد لهذا البوت لهذا المستخدم المتلقي -- `@bot:example.org`: MXID بوت Matrix الخاص بـ OpenClaw لديك، وليس MXID المستخدم المتلقي +- `@bot:example.org`: معرّف MXID لبوت Matrix الخاص بـ OpenClaw، وليس MXID الخاص بالمستخدم المتلقي -مهم لإعدادات تعدد البوتات: +مهم لإعدادات البوتات المتعددة: -- تتم فهرسة قواعد الدفع باستخدام `ruleId`. تؤدي إعادة تشغيل `PUT` على معرّف القاعدة نفسه إلى تحديث تلك القاعدة فقط. -- إذا كان يجب على مستخدم مستلم واحد تلقي إشعارات من عدة حسابات Matrix bot خاصة بـ OpenClaw، فأنشئ قاعدة واحدة لكل bot مع معرّف قاعدة فريد لكل تطابق `sender`. +- تُفهرس قواعد الدفع بواسطة `ruleId`. تؤدي إعادة تشغيل `PUT` على معرّف القاعدة نفسه إلى تحديث تلك القاعدة فقط. +- إذا كان على مستخدم مستلم واحد تلقي إشعارات لعدة حسابات بوت Matrix خاصة بـ OpenClaw، فأنشئ قاعدة واحدة لكل بوت مع معرّف قاعدة فريد لكل تطابق `sender`. - نمط بسيط لذلك هو `openclaw-finalized-preview-`، مثل `openclaw-finalized-preview-ops` أو `openclaw-finalized-preview-support`. -يتم تقييم القاعدة مقابل مرسل الحدث: +تُقيَّم القاعدة على مرسل الحدث: -- صادق باستخدام رمز المستخدم المستلم -- طابق `sender` مع MXID الخاص ببوت OpenClaw +- صادِق باستخدام رمز المستخدم المستلم +- طابِق `sender` مع MXID الخاص ببوت OpenClaw 6. تحقّق من وجود القاعدة: @@ -385,8 +385,8 @@ curl -sS \ "https://matrix.example.org/_matrix/client/v3/pushrules/global/override/openclaw-finalized-preview-botname" ``` -7. اختبر ردًا متدفقًا. في الوضع الهادئ، يجب أن تعرض الغرفة معاينة مسودة هادئة، ويجب أن يرسل - التعديل النهائي في مكانه إشعارًا واحدًا عند اكتمال الكتلة أو الدور. +7. اختبر ردًا متدفقًا. في الوضع الهادئ، يجب أن تُظهر الغرفة مسودة معاينة هادئة، ويجب أن يرسل + التعديل النهائي في المكان نفسه إشعارًا واحدًا عند انتهاء الكتلة أو الدور. إذا احتجت إلى إزالة القاعدة لاحقًا، فاحذف معرّف القاعدة نفسه باستخدام رمز المستخدم المستلم: @@ -398,33 +398,33 @@ curl -sS -X DELETE \ ملاحظات: -- أنشئ القاعدة باستخدام رمز وصول المستخدم المستلم، وليس رمز bot. -- يتم إدراج قواعد `override` الجديدة المعرّفة من قبل المستخدم قبل قواعد الكتم الافتراضية، لذلك لا حاجة إلى أي معامل ترتيب إضافي. -- يؤثر هذا فقط في تعديلات المعاينات النصية النهائية التي يستطيع OpenClaw إنهاءها بأمان في مكانها. أما بدائل الوسائط وبدائل المعاينات القديمة فتستمر في استخدام تسليم Matrix العادي. +- أنشئ القاعدة باستخدام رمز وصول المستخدم المستلم، وليس رمز البوت. +- تُدرج قواعد `override` الجديدة المعرّفة من قبل المستخدم قبل قواعد المنع الافتراضية، لذلك لا حاجة إلى معلمة ترتيب إضافية. +- يؤثر هذا فقط على تعديلات المعاينة النصية فقط التي يمكن لـ OpenClaw إنهاؤها بأمان في المكان نفسه. أما بدائل الوسائط وبدائل المعاينات القديمة فتظل تستخدم تسليم Matrix العادي. - إذا أظهر `GET /_matrix/client/v3/pushers` عدم وجود pushers، فهذا يعني أن المستخدم لا يملك بعد تسليم دفع Matrix عاملًا لهذا الحساب/الجهاز. #### Synapse بالنسبة إلى Synapse، يكون الإعداد أعلاه كافيًا عادةً بمفرده: -- لا يلزم أي تغيير خاص في `homeserver.yaml` لإشعارات معاينات OpenClaw النهائية. +- لا يلزم إجراء تغيير خاص في `homeserver.yaml` لإشعارات معاينة OpenClaw النهائية. - إذا كان نشر Synapse لديك يرسل بالفعل إشعارات دفع Matrix العادية، فإن رمز المستخدم + استدعاء `pushrules` أعلاه هما خطوة الإعداد الأساسية. -- إذا كنت تشغّل Synapse خلف reverse proxy أو workers، فتأكد من أن `/_matrix/client/.../pushrules/` يصل إلى Synapse بشكل صحيح. -- إذا كنت تشغّل Synapse workers، فتأكد من أن pushers سليمة. تتم معالجة تسليم الدفع بواسطة العملية الرئيسية أو `synapse.app.pusher` / workers الخاصة بـ pusher المهيأة. +- إذا كنت تشغّل Synapse خلف وكيل عكسي أو workers، فتأكد من أن `/_matrix/client/.../pushrules/` يصل إلى Synapse بشكل صحيح. +- إذا كنت تشغّل Synapse workers، فتأكد من أن pushers تعمل بشكل سليم. تتم معالجة تسليم الدفع بواسطة العملية الرئيسية أو `synapse.app.pusher` / workers المهيأة للدفع. #### Tuwunel -بالنسبة إلى Tuwunel، استخدم تدفق الإعداد نفسه واستدعاء API الخاص بـ push-rule الموضح أعلاه: +بالنسبة إلى Tuwunel، استخدم تدفق الإعداد نفسه واستدعاء API الخاص بـ push-rule المعروض أعلاه: -- لا يلزم أي إعداد خاص بـ Tuwunel لمؤشر المعاينة النهائية نفسه. -- إذا كانت إشعارات Matrix العادية تعمل بالفعل لذلك المستخدم، فإن رمز المستخدم + استدعاء `pushrules` أعلاه هما خطوة الإعداد الأساسية. -- إذا بدا أن الإشعارات تختفي بينما يكون المستخدم نشطًا على جهاز آخر، فتحقق مما إذا كان `suppress_push_when_active` مُمكّنًا. أضاف Tuwunel هذا الخيار في Tuwunel 1.4.2 بتاريخ 12 سبتمبر 2025، ويمكنه عمدًا كتم الإشعارات إلى الأجهزة الأخرى أثناء نشاط أحد الأجهزة. +- لا يلزم أي إعداد خاص بـ Tuwunel لعلامة المعاينة النهائية نفسها. +- إذا كانت إشعارات Matrix العادية تعمل بالفعل لهذا المستخدم، فإن رمز المستخدم + استدعاء `pushrules` أعلاه هما خطوة الإعداد الأساسية. +- إذا بدا أن الإشعارات تختفي بينما يكون المستخدم نشطًا على جهاز آخر، فتحقق مما إذا كان `suppress_push_when_active` ممكّنًا. أضاف Tuwunel هذا الخيار في Tuwunel 1.4.2 بتاريخ 12 سبتمبر 2025، ويمكنه عمدًا منع إشعارات الدفع إلى الأجهزة الأخرى بينما يكون أحد الأجهزة نشطًا. -## غرف bot إلى bot +## غرف بوت إلى بوت -بشكل افتراضي، يتم تجاهل رسائل Matrix الواردة من حسابات Matrix OpenClaw الأخرى المهيأة. +افتراضيًا، يتم تجاهل رسائل Matrix الواردة من حسابات OpenClaw Matrix الأخرى المهيأة. -استخدم `allowBots` عندما تريد عمدًا حركة مرور Matrix بين الوكلاء: +استخدم `allowBots` عندما تريد عمدًا حركة Matrix بين الوكلاء: ```json5 { @@ -441,17 +441,17 @@ curl -sS -X DELETE \ } ``` -- يقبل `allowBots: true` الرسائل من حسابات Matrix bot الأخرى المهيأة في الغرف المسموح بها والرسائل الخاصة. -- يقبل `allowBots: "mentions"` تلك الرسائل فقط عندما تذكر هذا bot بوضوح داخل الغرف. وتبقى الرسائل الخاصة مسموحًا بها. +- يقبل `allowBots: true` الرسائل من حسابات Matrix bot الأخرى المهيأة في الغرف والرسائل الخاصة المسموح بها. +- يقبل `allowBots: "mentions"` هذه الرسائل فقط عندما تذكر هذا البوت بشكل مرئي في الغرف. وتظل الرسائل الخاصة مسموحًا بها. - يتجاوز `groups..allowBots` الإعداد على مستوى الحساب لغرفة واحدة. -- ما زال OpenClaw يتجاهل الرسائل من معرّف مستخدم Matrix نفسه لتجنب حلقات الرد الذاتي. -- لا يوفّر Matrix هنا علامة bot أصلية؛ ويتعامل OpenClaw مع "مكتوب بواسطة bot" على أنه "مرسل بواسطة حساب Matrix آخر مهيأ على Gateway OpenClaw هذا". +- يواصل OpenClaw تجاهل الرسائل من معرّف مستخدم Matrix نفسه لتجنب حلقات الرد الذاتي. +- لا يوفّر Matrix هنا علامة bot أصلية؛ ويتعامل OpenClaw مع "مؤلف بواسطة bot" على أنه "مرسل بواسطة حساب Matrix مهيأ آخر على Gateway OpenClaw هذا". استخدم قوائم سماح صارمة للغرف ومتطلبات الذكر عند تمكين حركة bot إلى bot في الغرف المشتركة. ## التشفير والتحقق -في الغرف المشفرة (E2EE)، تستخدم أحداث الصور الصادرة `thumbnail_file` بحيث يتم تشفير معاينات الصور إلى جانب المرفق الكامل. أما الغرف غير المشفرة فتستمر في استخدام `thumbnail_url` العادي. لا يلزم أي إعداد — يكتشف Plugin حالة E2EE تلقائيًا. +في الغرف المشفرة (E2EE)، تستخدم أحداث الصور الصادرة `thumbnail_file` بحيث تُشفّر معاينات الصور مع المرفق الكامل. أما الغرف غير المشفرة فتظل تستخدم `thumbnail_url` العادي. لا حاجة إلى أي إعداد — إذ يكتشف Plugin حالة E2EE تلقائيًا. تمكين التشفير: @@ -469,92 +469,92 @@ curl -sS -X DELETE \ } ``` -التحقق من حالة التحقق: +تحقق من حالة التحقق: ```bash openclaw matrix verify status ``` -حالة مفصّلة (تشخيصات كاملة): +حالة تفصيلية (تشخيصات كاملة): ```bash openclaw matrix verify status --verbose ``` -تضمين مفتاح الاسترداد المخزن في مخرجات قابلة للقراءة آليًا: +ضمّن مفتاح الاسترداد المخزن في المخرجات القابلة للقراءة آليًا: ```bash openclaw matrix verify status --include-recovery-key --json ``` -تهيئة حالة cross-signing والتحقق: +تهيئة التوقيع المتبادل وحالة التحقق: ```bash openclaw matrix verify bootstrap ``` -تشخيصات bootstrap مفصلة: +تشخيصات bootstrap التفصيلية: ```bash openclaw matrix verify bootstrap --verbose ``` -فرض إعادة تعيين جديدة لهوية cross-signing قبل bootstrap: +افرض إعادة تعيين جديدة لهوية التوقيع المتبادل قبل bootstrap: ```bash openclaw matrix verify bootstrap --force-reset-cross-signing ``` -تحقق من هذا الجهاز باستخدام مفتاح استرداد: +تحقّق من هذا الجهاز باستخدام مفتاح استرداد: ```bash openclaw matrix verify device "" ``` -تفاصيل مفصلة للتحقق من الجهاز: +تفاصيل التحقق من الجهاز بشكل تفصيلي: ```bash openclaw matrix verify device "" --verbose ``` -التحقق من سلامة النسخ الاحتياطي لمفاتيح الغرف: +تحقق من سلامة النسخ الاحتياطي لمفاتيح الغرف: ```bash openclaw matrix verify backup status ``` -تشخيصات مفصلة لسلامة النسخ الاحتياطي: +تشخيصات سلامة النسخ الاحتياطي بشكل تفصيلي: ```bash openclaw matrix verify backup status --verbose ``` -استعادة مفاتيح الغرف من النسخة الاحتياطية على الخادم: +استعد مفاتيح الغرف من النسخة الاحتياطية على الخادم: ```bash openclaw matrix verify backup restore ``` -تشخيصات مفصلة للاستعادة: +تشخيصات الاستعادة بشكل تفصيلي: ```bash openclaw matrix verify backup restore --verbose ``` احذف النسخة الاحتياطية الحالية على الخادم وأنشئ خط أساس جديدًا للنسخ الاحتياطي. إذا تعذر -تحميل مفتاح النسخ الاحتياطي المخزن بشكل سليم، فيمكن لإعادة التعيين هذه أيضًا إعادة إنشاء التخزين السري بحيث -تتمكن عمليات البدء البارد المستقبلية من تحميل مفتاح النسخ الاحتياطي الجديد: +تحميل مفتاح النسخة الاحتياطية المخزن بشكل سليم، فقد تؤدي إعادة التعيين هذه أيضًا إلى إعادة إنشاء التخزين السري بحيث +تتمكن عمليات البدء الباردة المستقبلية من تحميل مفتاح النسخة الاحتياطية الجديد: ```bash openclaw matrix verify backup reset --yes ``` -تكون جميع أوامر `verify` موجزة بشكل افتراضي (بما في ذلك تسجيل SDK الداخلي الهادئ) ولا تعرض تشخيصات مفصلة إلا مع `--verbose`. -استخدم `--json` للحصول على مخرجات كاملة قابلة للقراءة آليًا عند الاستخدام في السكربتات. +تكون جميع أوامر `verify` موجزة افتراضيًا (بما في ذلك تسجيل SDK الداخلي الهادئ)، ولا تعرض تشخيصات مفصلة إلا مع `--verbose`. +استخدم `--json` للحصول على مخرجات كاملة قابلة للقراءة آليًا عند البرمجة النصية. -في إعدادات الحسابات المتعددة، تستخدم أوامر Matrix CLI حساب Matrix الافتراضي الضمني ما لم تمرر `--account `. -إذا قمت بتهيئة عدة حسابات مسماة، فاضبط `channels.matrix.defaultAccount` أولًا وإلا ستتوقف عمليات CLI الضمنية هذه وتطلب منك اختيار حساب صراحةً. -استخدم `--account` كلما أردت أن تستهدف عمليات التحقق أو الجهاز حسابًا مسمى بشكل صريح: +في إعدادات الحسابات المتعددة، تستخدم أوامر Matrix CLI الحساب الافتراضي الضمني لـ Matrix ما لم تمرر `--account `. +إذا هيأت عدة حسابات مسماة، فعيّن `channels.matrix.defaultAccount` أولًا وإلا ستتوقف عمليات CLI الضمنية تلك وتطلب منك اختيار حساب بشكل صريح. +استخدم `--account` كلما أردت أن تستهدف عمليات التحقق أو الأجهزة حسابًا مسمى بشكل صريح: ```bash openclaw matrix verify status --account assistant @@ -562,43 +562,43 @@ openclaw matrix verify backup restore --account assistant openclaw matrix devices list --account assistant ``` -عندما يكون التشفير معطّلًا أو غير متاح لحساب مسمى، تشير تحذيرات Matrix وأخطاء التحقق إلى مفتاح إعداد هذا الحساب، مثل `channels.matrix.accounts.assistant.encryption`. +عندما يكون التشفير معطّلًا أو غير متاح لحساب مسمى، تشير تحذيرات Matrix وأخطاء التحقق إلى مفتاح إعدادات ذلك الحساب، مثل `channels.matrix.accounts.assistant.encryption`. -### ما معنى "مُتحقَّق منه" +### ما معنى "تم التحقق" -يتعامل OpenClaw مع جهاز Matrix هذا على أنه مُتحقَّق منه فقط عندما يتم التحقق منه بواسطة هوية cross-signing الخاصة بك. -عمليًا، يعرض `openclaw matrix verify status --verbose` ثلاث إشارات ثقة: +يتعامل OpenClaw مع جهاز Matrix هذا على أنه تم التحقق منه فقط عندما يكون متحققًا منه بواسطة هوية التوقيع المتبادل الخاصة بك. +عمليًا، يكشف `openclaw matrix verify status --verbose` عن ثلاث إشارات ثقة: - `Locally trusted`: هذا الجهاز موثوق من قبل العميل الحالي فقط -- `Cross-signing verified`: يفيد SDK بأن الجهاز مُتحقَّق منه عبر cross-signing -- `Signed by owner`: تم توقيع الجهاز بواسطة مفتاح self-signing الخاص بك +- `Cross-signing verified`: يفيد SDK بأن الجهاز متحقق منه عبر التوقيع المتبادل +- `Signed by owner`: الجهاز موقَّع بواسطة مفتاح التوقيع الذاتي الخاص بك -تصبح قيمة `Verified by owner` هي `yes` فقط عند وجود تحقق cross-signing أو توقيع من المالك. -ولا تكفي الثقة المحلية وحدها لكي يعامل OpenClaw الجهاز على أنه مُتحقَّق منه بالكامل. +تصبح `Verified by owner` مساوية لـ `yes` فقط عند وجود تحقق بالتوقيع المتبادل أو توقيع من المالك. +أما الثقة المحلية وحدها فلا تكفي ليعتبر OpenClaw الجهاز متحققًا منه بالكامل. ### ما الذي يفعله bootstrap الأمر `openclaw matrix verify bootstrap` هو أمر الإصلاح والإعداد لحسابات Matrix المشفرة. وهو ينفذ كل ما يلي بالترتيب: -- يهيّئ التخزين السري، مع إعادة استخدام مفتاح استرداد موجود متى أمكن -- يهيّئ cross-signing ويرفع مفاتيح cross-signing العامة الناقصة -- يحاول تعليم الجهاز الحالي وتوقيعه عبر cross-signing -- ينشئ نسخة احتياطية جديدة لمفاتيح الغرف على جهة الخادم إذا لم تكن موجودة بالفعل +- يهيئ التخزين السري، مع إعادة استخدام مفتاح استرداد موجود متى أمكن +- يهيئ التوقيع المتبادل ويرفع مفاتيح التوقيع المتبادل العامة الناقصة +- يحاول تعليم الجهاز الحالي وتوقيعه عبر التوقيع المتبادل +- ينشئ نسخة احتياطية جديدة لمفاتيح الغرف على الخادم إذا لم تكن موجودة بالفعل -إذا كان الخادم المنزلي يتطلب مصادقة تفاعلية لرفع مفاتيح cross-signing، يحاول OpenClaw الرفع أولًا من دون مصادقة، ثم باستخدام `m.login.dummy`، ثم باستخدام `m.login.password` عندما تكون `channels.matrix.password` مهيأة. +إذا كان الخادم المنزلي يتطلب مصادقة تفاعلية لرفع مفاتيح التوقيع المتبادل، يحاول OpenClaw الرفع أولًا من دون مصادقة، ثم باستخدام `m.login.dummy`، ثم باستخدام `m.login.password` عندما تكون `channels.matrix.password` مهيأة. -استخدم `--force-reset-cross-signing` فقط عندما تريد عمدًا تجاهل هوية cross-signing الحالية وإنشاء هوية جديدة. +استخدم `--force-reset-cross-signing` فقط عندما تريد عمدًا تجاهل هوية التوقيع المتبادل الحالية وإنشاء هوية جديدة. إذا كنت تريد عمدًا تجاهل النسخة الاحتياطية الحالية لمفاتيح الغرف وبدء خط أساس جديد للنسخ الاحتياطي للرسائل المستقبلية، فاستخدم `openclaw matrix verify backup reset --yes`. -افعل ذلك فقط عندما تكون موافقًا على أن السجل المشفر القديم غير القابل للاسترداد سيبقى -غير متاح، وأن OpenClaw قد يعيد إنشاء التخزين السري إذا تعذر تحميل سر النسخ الاحتياطي الحالي -بأمان. +افعل ذلك فقط عندما تقبل أن السجل المشفر القديم غير القابل للاسترداد سيظل +غير متاح وأن OpenClaw قد يعيد إنشاء التخزين السري إذا تعذر تحميل +سر النسخة الاحتياطية الحالي بأمان. ### خط أساس جديد للنسخ الاحتياطي -إذا كنت تريد الإبقاء على الرسائل المشفرة المستقبلية عاملة وتقبل فقدان السجل القديم غير القابل للاسترداد، فشغّل هذه الأوامر بالترتيب: +إذا كنت تريد الإبقاء على الرسائل المشفرة المستقبلية تعمل وتقبل فقدان السجل القديم غير القابل للاسترداد، فشغّل هذه الأوامر بالترتيب: ```bash openclaw matrix verify backup reset --yes @@ -610,39 +610,40 @@ openclaw matrix verify status ### سلوك بدء التشغيل -عندما تكون `encryption: true`، تكون القيمة الافتراضية لـ Matrix في `startupVerification` هي `"if-unverified"`. -عند بدء التشغيل، إذا كان هذا الجهاز ما يزال غير متحقق منه، فسيطلب Matrix التحقق الذاتي في عميل Matrix آخر، -وسيتخطى الطلبات المكررة عندما يكون أحدها قيد الانتظار بالفعل، ويطبق فترة تهدئة محلية قبل إعادة المحاولة بعد إعادة التشغيل. -تعاد محاولة الطلبات الفاشلة أسرع افتراضيًا من إنشاء الطلبات الناجحة. -اضبط `startupVerification: "off"` لتعطيل طلبات بدء التشغيل التلقائية، أو عدّل `startupVerificationCooldownHours` +عندما تكون `encryption: true`، يضبط Matrix القيمة الافتراضية لـ `startupVerification` على `"if-unverified"`. +عند بدء التشغيل، إذا ظل هذا الجهاز غير متحقق منه، فسيطلب Matrix التحقق الذاتي في عميل Matrix آخر، +ويتجاوز الطلبات المكررة ما دام أحدها معلقًا بالفعل، ويطبّق فترة تهدئة محلية قبل إعادة المحاولة بعد إعادة التشغيل. +وتُعاد محاولة الطلبات الفاشلة أسرع من إنشاء الطلبات الناجح افتراضيًا. +عيّن `startupVerification: "off"` لتعطيل طلبات بدء التشغيل التلقائية، أو اضبط `startupVerificationCooldownHours` إذا كنت تريد نافذة إعادة محاولة أقصر أو أطول. -ينفذ بدء التشغيل أيضًا تمريرة bootstrap مشفرة متحفظة تلقائيًا. -تحاول هذه التمريرة أولًا إعادة استخدام التخزين السري الحالي وهوية cross-signing الحالية، وتتجنب إعادة تعيين cross-signing ما لم تشغّل تدفق إصلاح bootstrap صريحًا. +ينفّذ بدء التشغيل أيضًا تمريرة bootstrap تشفيرية محافظة تلقائيًا. +تحاول هذه التمريرة أولًا إعادة استخدام التخزين السري الحالي وهوية التوقيع المتبادل الحالية، وتتجنب إعادة تعيين التوقيع المتبادل ما لم تشغّل تدفق إصلاح bootstrap صريحًا. -إذا اكتشف بدء التشغيل حالة bootstrap معطوبة وكانت `channels.matrix.password` مهيأة، يمكن لـ OpenClaw محاولة مسار إصلاح أكثر صرامة. -إذا كان الجهاز الحالي موقّعًا بالفعل من المالك، فسيحافظ OpenClaw على تلك الهوية بدلًا من إعادة تعيينها تلقائيًا. +إذا وجد بدء التشغيل مع ذلك حالة bootstrap معطّلة، يمكن لـ OpenClaw محاولة مسار إصلاح محروس حتى عندما لا تكون `channels.matrix.password` مهيأة. +إذا كان الخادم المنزلي يتطلب UIA قائمًا على كلمة المرور لهذا الإصلاح، يسجل OpenClaw تحذيرًا ويحافظ على عدم جعل بدء التشغيل فادحًا بدلًا من إيقاف البوت. +إذا كان الجهاز الحالي موقّعًا بالفعل من المالك، يحافظ OpenClaw على تلك الهوية بدلًا من إعادة تعيينها تلقائيًا. -راجع [Matrix migration](/ar/install/migrating-matrix) لمعرفة تدفق الترقية الكامل والقيود وأوامر الاسترداد ورسائل الترحيل الشائعة. +راجع [ترحيل Matrix](/ar/install/migrating-matrix) للحصول على تدفق الترقية الكامل، والقيود، وأوامر الاسترداد، ورسائل الترحيل الشائعة. ### إشعارات التحقق -ينشر Matrix إشعارات دورة حياة التحقق مباشرةً داخل غرفة الرسائل الخاصة الصارمة الخاصة بالتحقق كرسائل `m.notice`. +ينشر Matrix إشعارات دورة حياة التحقق مباشرةً في غرفة التحقق ذات الرسائل الخاصة الصارمة كرسائل `m.notice`. ويشمل ذلك: - إشعارات طلب التحقق -- إشعارات جاهزية التحقق (مع إرشاد صريح "تحقق عبر emoji") +- إشعارات جاهزية التحقق (مع إرشادات صريحة "تحقق عبر الرموز التعبيرية") - إشعارات بدء التحقق واكتماله -- تفاصيل SAS (emoji والأرقام العشرية) عند توفرها +- تفاصيل SAS (الرموز التعبيرية والأرقام العشرية) عند توفرها -تتم متابعة طلبات التحقق الواردة من عميل Matrix آخر وقبولها تلقائيًا بواسطة OpenClaw. -وفي تدفقات التحقق الذاتي، يبدأ OpenClaw أيضًا تدفق SAS تلقائيًا عندما يصبح التحقق عبر emoji متاحًا ويؤكد جانبه بنفسه. -أما طلبات التحقق من مستخدم/جهاز Matrix آخر، فيقبل OpenClaw الطلب تلقائيًا ثم ينتظر أن يستمر تدفق SAS بشكل طبيعي. -وما زلت بحاجة إلى مقارنة SAS المكوّن من emoji أو الأرقام العشرية في عميل Matrix لديك وتأكيد "They match" هناك لإكمال التحقق. +تُتتبّع طلبات التحقق الواردة من عميل Matrix آخر ويقبلها OpenClaw تلقائيًا. +وبالنسبة إلى تدفقات التحقق الذاتي، يبدأ OpenClaw أيضًا تدفق SAS تلقائيًا عندما يصبح التحقق عبر الرموز التعبيرية متاحًا ويؤكد جانبه بنفسه. +أما بالنسبة إلى طلبات التحقق من مستخدم/جهاز Matrix آخر، فيقبل OpenClaw الطلب تلقائيًا ثم ينتظر أن يستمر تدفق SAS بشكل طبيعي. +ولا يزال يتعين عليك مقارنة SAS الرمزي أو العشري في عميل Matrix لديك وتأكيد "إنها متطابقة" هناك لإكمال التحقق. -لا يقبل OpenClaw التدفقات المكررة التي يبدأها بنفسه بشكل أعمى. ويتخطى بدء التشغيل إنشاء طلب جديد عندما يكون طلب التحقق الذاتي قيد الانتظار بالفعل. +لا يقبل OpenClaw تلقائيًا التدفقات المكررة التي يبدأها بنفسه بشكل أعمى. ويتجاوز بدء التشغيل إنشاء طلب جديد عندما يكون طلب تحقق ذاتي معلقًا بالفعل. -لا تتم إعادة توجيه إشعارات التحقق الخاصة بالبروتوكول/النظام إلى مسار دردشة الوكيل، لذلك لا تنتج `NO_REPLY`. +لا تُمرر إشعارات بروتوكول/نظام التحقق إلى مسار دردشة الوكيل، لذلك لا تنتج `NO_REPLY`. ### نظافة الأجهزة @@ -653,7 +654,7 @@ openclaw matrix verify status openclaw matrix devices list ``` -أزل أجهزة OpenClaw Matrix القديمة باستخدام: +أزل أجهزة OpenClaw Matrix القديمة غير المستخدمة باستخدام: ```bash openclaw matrix devices prune-stale @@ -661,15 +662,15 @@ openclaw matrix devices prune-stale ### مخزن التشفير -يستخدم Matrix E2EE مسار التشفير Rust الرسمي في `matrix-js-sdk` على Node، مع `fake-indexeddb` كطبقة IndexedDB بديلة. تُحفَظ حالة التشفير في ملف snapshot (`crypto-idb-snapshot.json`) وتُستعاد عند بدء التشغيل. يُعد ملف snapshot حالة تشغيل حساسة ويتم تخزينه بأذونات ملفات مقيّدة. +يستخدم Matrix E2EE مسار التشفير Rust الرسمي في `matrix-js-sdk` على Node، مع `fake-indexeddb` كطبقة IndexedDB بديلة. تُحفَظ حالة التشفير في ملف لقطة (`crypto-idb-snapshot.json`) وتُستعاد عند بدء التشغيل. ويُعد ملف اللقطة هذا حالة تشغيل حساسة تُخزَّن بأذونات ملفات مقيّدة. -توجد حالة التشغيل المشفرة تحت جذور لكل حساب ولكل مستخدم بحسب تجزئة الرمز المميز في +توجد حالة التشغيل المشفرة تحت جذور لكل حساب ولكل مستخدم ولكل تجزئة رمز مميز في `~/.openclaw/matrix/accounts//__//`. -ويحتوي هذا الدليل على مخزن المزامنة (`bot-storage.json`) ومخزن التشفير (`crypto/`)، -وملف مفتاح الاسترداد (`recovery-key.json`)، وsnapshot لـ IndexedDB (`crypto-idb-snapshot.json`)، -وربط سلاسل الرسائل (`thread-bindings.json`)، وحالة التحقق عند بدء التشغيل (`startup-verification.json`). -عندما يتغير الرمز المميز بينما تبقى هوية الحساب نفسها، يعيد OpenClaw استخدام أفضل جذر موجود -لهذا الثلاثي account/homeserver/user بحيث تظل حالة المزامنة السابقة، وحالة التشفير، وروابط سلاسل الرسائل، +ويحتوي هذا الدليل على مخزن المزامنة (`bot-storage.json`)، ومخزن التشفير (`crypto/`)، +وملف مفتاح الاسترداد (`recovery-key.json`)، ولقطة IndexedDB (`crypto-idb-snapshot.json`)، +وروابط سلاسل الرسائل (`thread-bindings.json`)، وحالة التحقق عند بدء التشغيل (`startup-verification.json`). +وعندما يتغير الرمز المميز بينما تظل هوية الحساب نفسها، يعيد OpenClaw استخدام أفضل جذر موجود +لهذه الثلاثية account/homeserver/user بحيث تظل حالة المزامنة السابقة، وحالة التشفير، وروابط سلاسل الرسائل، وحالة التحقق عند بدء التشغيل مرئية. ## إدارة الملف الشخصي @@ -683,43 +684,43 @@ openclaw matrix profile set --avatar-url https://cdn.example.org/avatar.png أضف `--account ` عندما تريد استهداف حساب Matrix مسمى بشكل صريح. -يقبل Matrix عناوين URL للصورة الرمزية بصيغة `mxc://` مباشرةً. وعندما تمرر عنوان URL للصورة الرمزية بصيغة `http://` أو `https://`، يقوم OpenClaw أولًا برفعه إلى Matrix ثم يخزن عنوان `mxc://` الناتج مرة أخرى في `channels.matrix.avatarUrl` (أو تجاوز الحساب المحدد). +يقبل Matrix عناوين URL للصور الرمزية من نوع `mxc://` مباشرةً. وعند تمرير عنوان URL للصورة الرمزية من نوع `http://` أو `https://`، يرفعها OpenClaw أولًا إلى Matrix ثم يخزن عنوان `mxc://` الناتج مرة أخرى في `channels.matrix.avatarUrl` (أو في تجاوز الحساب المحدد). ## سلاسل الرسائل -يدعم Matrix سلاسل Matrix الأصلية لكل من الردود التلقائية وعمليات الإرسال عبر أدوات الرسائل. +يدعم Matrix سلاسل رسائل Matrix الأصلية لكل من الردود التلقائية وعمليات الإرسال عبر أداة الرسائل. -- يحتفظ `dm.sessionScope: "per-user"` (الافتراضي) بتوجيه Matrix DM على نطاق المرسل، بحيث يمكن لعدة غرف DM مشاركة جلسة واحدة عندما تُحل إلى النظير نفسه. -- يعزل `dm.sessionScope: "per-room"` كل غرفة Matrix DM داخل مفتاح جلسة خاص بها مع الاستمرار في استخدام مصادقة DM العادية وفحوصات قائمة السماح. -- تظل روابط محادثات Matrix الصريحة لها الأولوية على `dm.sessionScope`، لذلك تحتفظ الغرف وسلاسل الرسائل المرتبطة بالجلسة المستهدفة التي تم اختيارها. -- يجعل `threadReplies: "off"` الردود على المستوى الأعلى ويحافظ على الرسائل الواردة ضمن سلاسل الرسائل على جلسة الرسالة الأصلية. -- يرد `threadReplies: "inbound"` داخل سلسلة رسائل فقط عندما تكون الرسالة الواردة موجودة بالفعل في تلك السلسلة. -- يجعل `threadReplies: "always"` ردود الغرف ضمن سلسلة رسائل جذرها الرسالة المحفزة ويوجّه تلك المحادثة عبر الجلسة المطابقة ذات نطاق سلسلة الرسائل بدءًا من أول رسالة محفزة. -- يتجاوز `dm.threadReplies` الإعداد الأعلى مستوى للرسائل الخاصة فقط. على سبيل المثال، يمكنك إبقاء سلاسل الغرف معزولة مع إبقاء الرسائل الخاصة مسطحة. +- يحافظ `dm.sessionScope: "per-user"` (الافتراضي) على توجيه الرسائل الخاصة في Matrix ضمن نطاق المرسل، بحيث يمكن لعدة غرف رسائل خاصة مشاركة جلسة واحدة عندما تُحل إلى النظير نفسه. +- يعزل `dm.sessionScope: "per-room"` كل غرفة رسائل خاصة في Matrix داخل مفتاح جلسة خاص بها مع الاستمرار في استخدام المصادقة العادية للرسائل الخاصة وفحوصات قائمة السماح. +- لا تزال روابط محادثات Matrix الصريحة تتغلب على `dm.sessionScope`، لذلك تحتفظ الغرف وسلاسل الرسائل المرتبطة بجلسة الهدف المختارة لها. +- يُبقي `threadReplies: "off"` الردود في المستوى الأعلى، ويُبقي الرسائل الواردة ضمن سلسلة الرسائل على جلسة الرسالة الأصلية. +- يرد `threadReplies: "inbound"` داخل سلسلة الرسائل فقط عندما تكون الرسالة الواردة موجودة بالفعل في تلك السلسلة. +- يُبقي `threadReplies: "always"` ردود الغرف داخل سلسلة رسائل جذرها الرسالة المُشغِّلة، ويوجه تلك المحادثة عبر الجلسة المطابقة ذات النطاق الخاص بسلسلة الرسائل بدءًا من أول رسالة مُشغِّلة. +- يتجاوز `dm.threadReplies` الإعداد الأعلى مستوى للرسائل الخاصة فقط. على سبيل المثال، يمكنك إبقاء سلاسل رسائل الغرف معزولة مع إبقاء الرسائل الخاصة مسطحة. - تتضمن الرسائل الواردة ضمن سلاسل الرسائل رسالة جذر السلسلة كسياق إضافي للوكيل. -- ترث عمليات الإرسال عبر أدوات الرسائل سلسلة Matrix الحالية تلقائيًا عندما يكون الهدف هو الغرفة نفسها، أو هدف مستخدم DM نفسه، ما لم يتم توفير `threadId` صريح. -- لا يعمل إعادة استخدام هدف مستخدم DM للجلسة نفسها إلا عندما تثبت بيانات تعريف الجلسة الحالية وجود النظير نفسه في DM وعلى حساب Matrix نفسه؛ وإلا يعود OpenClaw إلى التوجيه العادي على نطاق المستخدم. -- عندما يكتشف OpenClaw أن غرفة Matrix DM تتصادم مع غرفة DM أخرى على جلسة Matrix DM المشتركة نفسها، فإنه ينشر `m.notice` لمرة واحدة في تلك الغرفة مع مخرج `/focus` عند تمكين روابط سلاسل الرسائل وتلميح `dm.sessionScope`. -- يتم دعم روابط سلاسل الرسائل أثناء التشغيل في Matrix. تعمل أوامر `/focus` و`/unfocus` و`/agents` و`/session idle` و`/session max-age` و`/acp spawn` المرتبط بسلسلة رسائل في غرف Matrix والرسائل الخاصة. -- ينشئ `/focus` على مستوى غرفة/DM في Matrix سلسلة Matrix جديدة ويربطها بالجلسة المستهدفة عندما تكون `threadBindings.spawnSubagentSessions=true`. -- يؤدي تشغيل `/focus` أو `/acp spawn --thread here` داخل سلسلة Matrix موجودة إلى ربط تلك السلسلة الحالية بدلًا من ذلك. +- ترث عمليات الإرسال عبر أداة الرسائل سلسلة رسائل Matrix الحالية تلقائيًا عندما يكون الهدف هو الغرفة نفسها، أو هدف مستخدم الرسائل الخاصة نفسه، ما لم يُوفَّر `threadId` صريح. +- لا يُفعَّل إعادة استخدام هدف مستخدم الرسائل الخاصة ضمن الجلسة نفسها إلا عندما تثبت بيانات تعريف الجلسة الحالية أنه النظير نفسه للرسائل الخاصة على حساب Matrix نفسه؛ وإلا يعود OpenClaw إلى التوجيه العادي ذي النطاق الخاص بالمستخدم. +- عندما يرى OpenClaw أن غرفة رسائل خاصة في Matrix تتعارض مع غرفة رسائل خاصة أخرى على جلسة Matrix DM المشتركة نفسها، فإنه ينشر `m.notice` لمرة واحدة في تلك الغرفة مع مخرج `/focus` عند تمكين روابط سلاسل الرسائل وتلميح `dm.sessionScope`. +- تُدعَم روابط سلاسل الرسائل أثناء التشغيل في Matrix. وتعمل `/focus` و`/unfocus` و`/agents` و`/session idle` و`/session max-age` و`/acp spawn` المرتبط بسلسلة رسائل في غرف Matrix ورسائلها الخاصة. +- يؤدي `/focus` في المستوى الأعلى لغرفة/رسالة خاصة في Matrix إلى إنشاء سلسلة رسائل Matrix جديدة وربطها بالجلسة المستهدفة عندما تكون `threadBindings.spawnSubagentSessions=true`. +- يؤدي تشغيل `/focus` أو `/acp spawn --thread here` داخل سلسلة رسائل Matrix موجودة إلى ربط سلسلة الرسائل الحالية تلك بدلًا من ذلك. ## روابط محادثات ACP -يمكن تحويل غرف Matrix والرسائل الخاصة وسلاسل Matrix الموجودة إلى مساحات عمل ACP دائمة دون تغيير سطح الدردشة. +يمكن تحويل غرف Matrix والرسائل الخاصة وسلاسل رسائل Matrix الحالية إلى مساحات عمل ACP دائمة من دون تغيير واجهة الدردشة. تدفق سريع للمشغّل: -- شغّل `/acp spawn codex --bind here` داخل رسالة Matrix الخاصة، أو الغرفة، أو سلسلة الرسائل الموجودة التي تريد الاستمرار في استخدامها. -- في رسالة Matrix خاصة أو غرفة من المستوى الأعلى، يبقى DM/الغرفة الحالية هي سطح الدردشة وتُوجَّه الرسائل المستقبلية إلى جلسة ACP التي تم إنشاؤها. -- داخل سلسلة Matrix موجودة، يربط `--bind here` تلك السلسلة الحالية في مكانها. +- شغّل `/acp spawn codex --bind here` داخل الرسالة الخاصة أو الغرفة أو سلسلة الرسائل الحالية في Matrix التي تريد الاستمرار في استخدامها. +- في رسالة خاصة أو غرفة Matrix من المستوى الأعلى، تظل الرسالة الخاصة/الغرفة الحالية هي واجهة الدردشة وتُوجَّه الرسائل المستقبلية إلى جلسة ACP المنشأة. +- داخل سلسلة رسائل Matrix موجودة، يربط `--bind here` سلسلة الرسائل الحالية هذه في مكانها. - يعيد `/new` و`/reset` تعيين جلسة ACP المرتبطة نفسها في مكانها. -- يغلق `/acp close` جلسة ACP ويزيل الرابط. +- يغلق `/acp close` جلسة ACP ويزيل الربط. ملاحظات: -- لا ينشئ `--bind here` سلسلة Matrix فرعية. -- تكون `threadBindings.spawnAcpSessions` مطلوبة فقط مع `/acp spawn --thread auto|here`، حيث يحتاج OpenClaw إلى إنشاء سلسلة Matrix فرعية أو ربطها. +- لا ينشئ `--bind here` سلسلة رسائل Matrix فرعية. +- لا تكون `threadBindings.spawnAcpSessions` مطلوبة إلا لـ `/acp spawn --thread auto|here`، حيث يحتاج OpenClaw إلى إنشاء سلسلة رسائل Matrix فرعية أو ربطها. ### تهيئة ربط سلاسل الرسائل @@ -731,35 +732,35 @@ openclaw matrix profile set --avatar-url https://cdn.example.org/avatar.png - `threadBindings.spawnSubagentSessions` - `threadBindings.spawnAcpSessions` -إشارات الإنشاء المرتبط بسلسلة الرسائل في Matrix اختيارية: +أعلام الإنشاء المرتبط بسلاسل الرسائل في Matrix اختيارية: -- اضبط `threadBindings.spawnSubagentSessions: true` للسماح لـ `/focus` من المستوى الأعلى بإنشاء سلاسل Matrix جديدة وربطها. -- اضبط `threadBindings.spawnAcpSessions: true` للسماح لـ `/acp spawn --thread auto|here` بربط جلسات ACP بسلاسل Matrix. +- عيّن `threadBindings.spawnSubagentSessions: true` للسماح لـ `/focus` في المستوى الأعلى بإنشاء سلاسل رسائل Matrix جديدة وربطها. +- عيّن `threadBindings.spawnAcpSessions: true` للسماح لـ `/acp spawn --thread auto|here` بربط جلسات ACP بسلاسل رسائل Matrix. ## التفاعلات -يدعم Matrix إجراءات التفاعل الصادرة، وإشعارات التفاعل الواردة، وتفاعلات التأكيد الواردة. +يدعم Matrix إجراءات التفاعل الصادرة، وإشعارات التفاعل الواردة، وتفاعلات الإقرار الواردة. -- يتم ضبط أدوات التفاعل الصادر بواسطة `channels["matrix"].actions.reactions`. +- تخضع أدوات التفاعل الصادرة إلى `channels["matrix"].actions.reactions`. - يضيف `react` تفاعلًا إلى حدث Matrix محدد. -- يسرد `reactions` ملخص التفاعلات الحالي لحدث Matrix محدد. -- يؤدي `emoji=""` إلى إزالة تفاعلات حساب bot نفسه على ذلك الحدث. -- يؤدي `remove: true` إلى إزالة تفاعل emoji المحدد فقط من حساب bot. +- يعرض `reactions` ملخص التفاعلات الحالي لحدث Matrix محدد. +- يزيل `emoji=""` تفاعلات حساب البوت نفسه على ذلك الحدث. +- يزيل `remove: true` تفاعل الرمز التعبيري المحدد فقط من حساب البوت. -يستخدم نطاق تفاعلات التأكيد ترتيب الحل القياسي في OpenClaw: +يستخدم نطاق تفاعلات الإقرار ترتيب التحليل القياسي في OpenClaw: - `channels["matrix"].accounts..ackReaction` - `channels["matrix"].ackReaction` - `messages.ackReaction` -- الرجوع إلى emoji هوية الوكيل +- الرجوع إلى الرمز التعبيري الخاص بهوية الوكيل -يُحل نطاق تفاعلات التأكيد بهذا الترتيب: +ويُحل نطاق تفاعل الإقرار بهذا الترتيب: - `channels["matrix"].accounts..ackReactionScope` - `channels["matrix"].ackReactionScope` - `messages.ackReactionScope` -يُحل وضع إشعارات التفاعل بهذا الترتيب: +ويُحل وضع إشعارات التفاعل بهذا الترتيب: - `channels["matrix"].accounts..reactionNotifications` - `channels["matrix"].reactionNotifications` @@ -767,28 +768,28 @@ openclaw matrix profile set --avatar-url https://cdn.example.org/avatar.png السلوك: -- يقوم `reactionNotifications: "own"` بتمرير أحداث `m.reaction` المضافة عندما تستهدف رسائل Matrix صادرة عن bot. -- يقوم `reactionNotifications: "off"` بتعطيل أحداث نظام التفاعل. -- لا تتم محاكاة إزالة التفاعلات كأحداث نظام لأن Matrix يعرضها كعمليات redact، وليس كعمليات إزالة `m.reaction` مستقلة. +- يمرر `reactionNotifications: "own"` أحداث `m.reaction` المضافة عندما تستهدف رسائل Matrix التي ألّفها البوت. +- يعطّل `reactionNotifications: "off"` أحداث نظام التفاعل. +- لا تُحوَّل إزالة التفاعلات إلى أحداث نظام اصطناعية لأن Matrix يعرضها كعمليات حذف redactions، وليس كإزالة مستقلة لـ `m.reaction`. ## سياق السجل -- يتحكم `channels.matrix.historyLimit` في عدد رسائل الغرف الأخيرة التي يتم تضمينها كـ `InboundHistory` عندما تؤدي رسالة غرفة Matrix إلى تشغيل الوكيل. ويعود إلى `messages.groupChat.historyLimit`؛ وإذا لم يتم ضبط الاثنين، فالقيمة الافتراضية الفعلية هي `0`. اضبط `0` للتعطيل. -- يكون سجل غرف Matrix خاصًا بالغرفة فقط. وتستمر الرسائل الخاصة في استخدام سجل الجلسة العادي. -- يكون سجل غرف Matrix معلّقًا فقط: يخزّن OpenClaw رسائل الغرف التي لم تؤدِّ إلى رد بعد، ثم يلتقط snapshot لتلك النافذة عند وصول mention أو محفز آخر. -- لا يتم تضمين رسالة التحفيز الحالية في `InboundHistory`؛ بل تبقى في متن الرسالة الواردة الرئيسي لذلك الدور. -- تعيد إعادة محاولة الحدث نفسه في Matrix استخدام snapshot السجل الأصلي بدلًا من الانجراف إلى رسائل الغرفة الأحدث. +- يتحكم `channels.matrix.historyLimit` في عدد رسائل الغرفة الأخيرة المضمّنة كـ `InboundHistory` عندما تؤدي رسالة غرفة Matrix إلى تشغيل الوكيل. ويعود إلى `messages.groupChat.historyLimit`؛ وإذا لم يكن أيٌّ منهما معيّنًا، تكون القيمة الفعالة الافتراضية `0`. عيّن `0` للتعطيل. +- يكون سجل غرف Matrix خاصًا بالغرف فقط. وتواصل الرسائل الخاصة استخدام سجل الجلسة العادي. +- يكون سجل غرف Matrix خاصًا بالرسائل المعلّقة فقط: يضع OpenClaw رسائل الغرفة التي لم تُطلِق ردًا بعد في مخزن مؤقت، ثم يلتقط لقطة لتلك النافذة عند وصول ذكر أو مُشغِّل آخر. +- لا تُضمَّن رسالة التشغيل الحالية في `InboundHistory`؛ بل تبقى في متن الرسالة الواردة الرئيسي لذلك الدور. +- تعيد محاولات الحدث نفسه في Matrix استخدام لقطة السجل الأصلية بدلًا من الانجراف إلى رسائل غرف أحدث. -## ظهور السياق +## إظهار السياق -يدعم Matrix عنصر التحكم المشترك `contextVisibility` للسياق الإضافي للغرفة، مثل نص الرد الذي تم جلبه، وجذور سلاسل الرسائل، والسجل المعلق. +يدعم Matrix عنصر التحكم المشترك `contextVisibility` للسياق الإضافي للغرف مثل نصوص الردود المجلبة، وجذور سلاسل الرسائل، والسجل المعلّق. -- `contextVisibility: "all"` هو الافتراضي. يتم الاحتفاظ بالسياق الإضافي كما تم استلامه. -- يقوم `contextVisibility: "allowlist"` بتصفية السياق الإضافي إلى المرسلين المسموح بهم وفقًا لفحوصات قائمة السماح النشطة للغرفة/المستخدم. +- `contextVisibility: "all"` هو الإعداد الافتراضي. يُحتفَظ بالسياق الإضافي كما تم استلامه. +- يرشّح `contextVisibility: "allowlist"` السياق الإضافي إلى المرسلين المسموح لهم بموجب فحوصات قائمة السماح النشطة للغرفة/المستخدم. - يعمل `contextVisibility: "allowlist_quote"` مثل `allowlist`، لكنه يحتفظ مع ذلك برد مقتبس صريح واحد. -يؤثر هذا الإعداد في ظهور السياق الإضافي، وليس في ما إذا كانت الرسالة الواردة نفسها يمكن أن تؤدي إلى رد. -ويظل تفويض التحفيز ناتجًا عن إعدادات `groupPolicy` و`groups` و`groupAllowFrom` وسياسات الرسائل الخاصة. +يؤثر هذا الإعداد في ظهور السياق الإضافي، وليس في ما إذا كانت الرسالة الواردة نفسها يمكن أن تُطلق ردًا. +ولا تزال صلاحية التشغيل تأتي من إعدادات `groupPolicy` و`groups` و`groupAllowFrom` وسياسات الرسائل الخاصة. ## سياسة الرسائل الخاصة والغرف @@ -813,22 +814,22 @@ openclaw matrix profile set --avatar-url https://cdn.example.org/avatar.png } ``` -راجع [Groups](/ar/channels/groups) لمعرفة سلوك تقييد mentions وقائمة السماح. +راجع [Groups](/ar/channels/groups) لمعرفة سلوك تقييد الذكر وقائمة السماح. -مثال اقتران لرسائل Matrix الخاصة: +مثال على الإقران لرسائل Matrix الخاصة: ```bash openclaw pairing list matrix openclaw pairing approve matrix ``` -إذا استمر مستخدم Matrix غير المعتمد في مراسلتك قبل الموافقة، يعيد OpenClaw استخدام رمز الاقتران المعلّق نفسه وقد يرسل رد تذكير مرة أخرى بعد فترة تهدئة قصيرة بدلًا من إنشاء رمز جديد. +إذا استمر مستخدم Matrix غير المعتمد في مراسلتك قبل الموافقة، يعيد OpenClaw استخدام رمز الإقران المعلّق نفسه وقد يرسل رد تذكير مرة أخرى بعد فترة تهدئة قصيرة بدلًا من إنشاء رمز جديد. -راجع [Pairing](/ar/channels/pairing) لمعرفة تدفق اقتران الرسائل الخاصة المشترك وتخطيط التخزين. +راجع [Pairing](/ar/channels/pairing) لمعرفة تدفق إقران الرسائل الخاصة المشترك وتخطيط التخزين. ## إصلاح الغرفة المباشرة -إذا أصبحت حالة الرسائل المباشرة غير متزامنة، فقد ينتهي الأمر بـ OpenClaw إلى وجود تعيينات `m.direct` قديمة تشير إلى غرف فردية قديمة بدلًا من DM الحي. افحص التعيين الحالي لنظير باستخدام: +إذا خرجت حالة الرسائل المباشرة عن التزامن، فقد ينتهي الأمر بـ OpenClaw مع تعيينات `m.direct` قديمة تشير إلى غرف فردية قديمة بدلًا من الرسالة الخاصة النشطة. افحص التعيين الحالي لنظير باستخدام: ```bash openclaw matrix direct inspect --user-id @alice:example.org @@ -842,53 +843,53 @@ openclaw matrix direct repair --user-id @alice:example.org تدفق الإصلاح: -- يفضّل DM صارمًا 1:1 تم تعيينه بالفعل في `m.direct` -- يعود إلى أي DM صارم 1:1 منضم إليه حاليًا مع ذلك المستخدم -- ينشئ غرفة مباشرة جديدة ويعيد كتابة `m.direct` إذا لم توجد DM سليمة +- يفضّل رسالة خاصة صارمة 1:1 مُعيّنة بالفعل في `m.direct` +- يعود إلى أي رسالة خاصة صارمة 1:1 منضم إليها حاليًا مع ذلك المستخدم +- ينشئ غرفة مباشرة جديدة ويعيد كتابة `m.direct` إذا لم توجد رسالة خاصة سليمة -لا يحذف تدفق الإصلاح الغرف القديمة تلقائيًا. بل يختار DM السليمة فقط ويحدّث التعيين بحيث تستهدف عمليات الإرسال الجديدة في Matrix، وإشعارات التحقق، وتدفقات الرسائل المباشرة الأخرى، الغرفة الصحيحة مرة أخرى. +لا يحذف تدفق الإصلاح الغرف القديمة تلقائيًا. فهو يختار فقط الرسالة الخاصة السليمة ويحدّث التعيين بحيث تستهدف عمليات الإرسال الجديدة في Matrix، وإشعارات التحقق، وتدفقات الرسائل المباشرة الأخرى الغرفة الصحيحة مرة أخرى. -## موافقات Exec +## موافقات exec يمكن أن يعمل Matrix كعميل موافقة أصلي لحساب Matrix. وتظل -عناصر توجيه DM/القناة الأصلية موجودة تحت تهيئة موافقات exec: +عناصر تحكم التوجيه الأصلية للرسائل الخاصة/القنوات موجودة تحت تهيئة موافقات exec: - `channels.matrix.execApprovals.enabled` -- `channels.matrix.execApprovals.approvers` (اختياري؛ يرجع إلى `channels.matrix.dm.allowFrom`) +- `channels.matrix.execApprovals.approvers` (اختياري؛ يعود إلى `channels.matrix.dm.allowFrom`) - `channels.matrix.execApprovals.target` (`dm` | `channel` | `both`، الافتراضي: `dm`) - `channels.matrix.execApprovals.agentFilter` - `channels.matrix.execApprovals.sessionFilter` -يجب أن يكون الموافقون معرّفات مستخدمي Matrix مثل `@owner:example.org`. يقوم Matrix بتمكين الموافقات الأصلية تلقائيًا عندما تكون `enabled` غير مضبوطة أو `"auto"` ويمكن حل موافق واحد على الأقل. تستخدم موافقات Exec `execApprovals.approvers` أولًا ويمكنها الرجوع إلى `channels.matrix.dm.allowFrom`. وتفوض موافقات Plugin عبر `channels.matrix.dm.allowFrom`. اضبط `enabled: false` لتعطيل Matrix كعميل موافقة أصلي صراحةً. وإلا ستعود طلبات الموافقة إلى مسارات موافقة مهيأة أخرى أو إلى سياسة الرجوع الخاصة بالموافقة. +يجب أن يكون الموافقون معرّفات مستخدمي Matrix مثل `@owner:example.org`. يفعّل Matrix الموافقات الأصلية تلقائيًا عندما تكون `enabled` غير معيّنة أو `"auto"` ويُمكن تحليل موافق واحد على الأقل. تستخدم موافقات exec أولًا `execApprovals.approvers` ويمكن أن تعود إلى `channels.matrix.dm.allowFrom`. وتُخوِّل موافقات Plugin عبر `channels.matrix.dm.allowFrom`. عيّن `enabled: false` لتعطيل Matrix كعميل موافقة أصلي بشكل صريح. وإلا تعود طلبات الموافقة إلى مسارات الموافقة المهيأة الأخرى أو إلى سياسة الرجوع للموافقة. -يدعم التوجيه الأصلي في Matrix نوعَي الموافقة: +يدعم التوجيه الأصلي في Matrix كلا نوعي الموافقات: -- تتحكم `channels.matrix.execApprovals.*` في وضع التوزيع الأصلي للرسائل الخاصة/القنوات لمطالبات الموافقة في Matrix. -- تستخدم موافقات Exec مجموعة الموافقين الخاصة بـ exec من `execApprovals.approvers` أو `channels.matrix.dm.allowFrom`. +- يتحكم `channels.matrix.execApprovals.*` في وضع التوزيع الأصلي للرسائل الخاصة/القنوات لطلبات الموافقة في Matrix. +- تستخدم موافقات exec مجموعة الموافقين الخاصة بالتنفيذ من `execApprovals.approvers` أو `channels.matrix.dm.allowFrom`. - تستخدم موافقات Plugin قائمة السماح للرسائل الخاصة في Matrix من `channels.matrix.dm.allowFrom`. -- تنطبق اختصارات التفاعل في Matrix وتحديثات الرسائل على كل من موافقات exec وPlugin. +- تنطبق اختصارات التفاعل في Matrix وتحديثات الرسائل على موافقات exec وموافقات Plugin معًا. قواعد التسليم: -- يرسل `target: "dm"` مطالبات الموافقة إلى الرسائل الخاصة للموافقين -- يرسل `target: "channel"` المطالبة مرة أخرى إلى غرفة Matrix أو الرسالة الخاصة الأصلية -- يرسل `target: "both"` إلى الرسائل الخاصة للموافقين وإلى غرفة Matrix أو الرسالة الخاصة الأصلية +- يرسل `target: "dm"` طلبات الموافقة إلى الرسائل الخاصة للموافقين +- يرسل `target: "channel"` الطلب مرة أخرى إلى غرفة أو رسالة Matrix الأصلية +- يرسل `target: "both"` إلى الرسائل الخاصة للموافقين وإلى غرفة أو رسالة Matrix الأصلية -تُنشئ مطالبات الموافقة في Matrix اختصارات تفاعل على رسالة الموافقة الأساسية: +تزرع طلبات الموافقة في Matrix اختصارات تفاعل على رسالة الموافقة الأساسية: -- `✅` = سماح مرة واحدة -- `❌` = رفض -- `♾️` = سماح دائم عندما يكون هذا القرار مسموحًا به وفق سياسة exec الفعلية +- `✅` = السماح مرة واحدة +- `❌` = الرفض +- `♾️` = السماح دائمًا عندما يكون هذا القرار مسموحًا به بموجب سياسة exec الفعالة -يمكن للموافقين التفاعل على تلك الرسالة أو استخدام أوامر الشرطة المائلة البديلة: `/approve allow-once` أو `/approve allow-always` أو `/approve deny`. +يمكن للموافقين التفاعل على تلك الرسالة أو استخدام أوامر الشرطة المائلة الاحتياطية: `/approve allow-once` أو `/approve allow-always` أو `/approve deny`. -يمكن فقط للموافقين الذين تم حلهم الموافقة أو الرفض. بالنسبة إلى موافقات exec، يتضمن التسليم عبر القناة نص الأمر، لذا لا تمكّن `channel` أو `both` إلا في الغرف الموثوقة. +يمكن فقط للموافقين الذين تم تحليلهم الموافقة أو الرفض. وبالنسبة إلى موافقات exec، يتضمن التسليم عبر القناة نص الأمر، لذلك لا تفعّل `channel` أو `both` إلا في الغرف الموثوقة. -تجاوز لكل حساب: +التجاوز على مستوى الحساب: - `channels.matrix.accounts..execApprovals` -الوثائق ذات الصلة: [Exec approvals](/ar/tools/exec-approvals) +الوثائق ذات الصلة: [موافقات Exec](/ar/tools/exec-approvals) ## حسابات متعددة @@ -920,24 +921,24 @@ openclaw matrix direct repair --user-id @alice:example.org } ``` -تعمل القيم في `channels.matrix` على المستوى الأعلى كقيم افتراضية للحسابات المسماة ما لم يقم حساب ما بتجاوزها. +تعمل القيم ذات المستوى الأعلى في `channels.matrix` كقيم افتراضية للحسابات المسماة ما لم يقم حساب ما بتجاوزها. يمكنك تقييد إدخالات الغرف الموروثة بحساب Matrix واحد باستخدام `groups..account`. -تظل الإدخالات التي لا تحتوي على `account` مشتركة بين جميع حسابات Matrix، كما أن الإدخالات التي تحتوي على `account: "default"` تستمر في العمل عندما يكون الحساب الافتراضي مهيأ مباشرةً على `channels.matrix.*` في المستوى الأعلى. -لا تؤدي القيم الافتراضية الجزئية المشتركة للمصادقة إلى إنشاء حساب افتراضي ضمني منفصل بمفردها. لا ينشئ OpenClaw حساب `default` في المستوى الأعلى إلا عندما تكون لدى هذا الحساب الافتراضي مصادقة حديثة (`homeserver` مع `accessToken`، أو `homeserver` مع `userId` و`password`)؛ ويمكن أن تظل الحسابات المسماة قابلة للاكتشاف من خلال `homeserver` مع `userId` عندما تلبّي بيانات الاعتماد المخزنة مؤقتًا المصادقة لاحقًا. -إذا كان لدى Matrix بالفعل حساب مسمى واحد بالضبط، أو كان `defaultAccount` يشير إلى مفتاح حساب مسمى موجود، فإن ترقية الإصلاح/الإعداد من حساب واحد إلى حسابات متعددة تحافظ على ذلك الحساب بدلًا من إنشاء إدخال `accounts.default` جديد. يتم نقل مفاتيح مصادقة/bootstrap الخاصة بـ Matrix فقط إلى ذلك الحساب المُرقّى؛ وتبقى مفاتيح سياسة التسليم المشتركة في المستوى الأعلى. -اضبط `defaultAccount` عندما تريد أن يفضّل OpenClaw حساب Matrix مسمى واحدًا للتوجيه الضمني، والفحص، وعمليات CLI. -إذا كانت هناك عدة حسابات Matrix مهيأة وكان أحد معرّفات الحسابات هو `default`، فإن OpenClaw يستخدم ذلك الحساب ضمنيًا حتى إذا لم يكن `defaultAccount` مضبوطًا. -إذا قمت بتهيئة عدة حسابات مسماة، فاضبط `defaultAccount` أو مرّر `--account ` لأوامر CLI التي تعتمد على اختيار الحساب الضمني. -مرّر `--account ` إلى `openclaw matrix verify ...` و`openclaw matrix devices ...` عندما تريد تجاوز هذا الاختيار الضمني لأمر واحد. +تظل الإدخالات التي لا تحتوي على `account` مشتركة بين جميع حسابات Matrix، كما تظل الإدخالات التي تحتوي على `account: "default"` تعمل عندما يكون الحساب الافتراضي مهيأ مباشرةً على المستوى الأعلى في `channels.matrix.*`. +لا تؤدي القيم الافتراضية المشتركة الجزئية للمصادقة إلى إنشاء حساب افتراضي ضمني منفصل بمفردها. لا يُنشئ OpenClaw الحساب الأعلى مستوى `default` إلا عندما تكون لهذا الافتراضي مصادقة حديثة (`homeserver` مع `accessToken`، أو `homeserver` مع `userId` و`password`)؛ ويمكن للحسابات المسماة أن تظل قابلة للاكتشاف من خلال `homeserver` مع `userId` عندما تلبّي بيانات الاعتماد المخزنة مؤقتًا المصادقة لاحقًا. +إذا كان Matrix يحتوي بالفعل على حساب مسمى واحد بالضبط، أو كان `defaultAccount` يشير إلى مفتاح حساب مسمى موجود، فإن ترقية الإصلاح/الإعداد من حساب واحد إلى حسابات متعددة تحافظ على ذلك الحساب بدلًا من إنشاء إدخال جديد `accounts.default`. ولا تُنقل إلى ذلك الحساب المُرقّى إلا مفاتيح مصادقة/Bootstrap الخاصة بـ Matrix؛ وتبقى مفاتيح سياسات التسليم المشتركة في المستوى الأعلى. +عيّن `defaultAccount` عندما تريد من OpenClaw تفضيل حساب Matrix مسمى واحد للتوجيه الضمني، والاستقصاء، وعمليات CLI. +إذا كانت عدة حسابات Matrix مهيأة وكان أحد معرّفات الحسابات هو `default`، فسيستخدم OpenClaw هذا الحساب ضمنيًا حتى لو لم يكن `defaultAccount` معيّنًا. +إذا قمت بتهيئة عدة حسابات مسماة، فعيّن `defaultAccount` أو مرّر `--account ` لأوامر CLI التي تعتمد على اختيار الحساب الضمني. +مرّر `--account ` إلى `openclaw matrix verify ...` و`openclaw matrix devices ...` عندما تريد تجاوز هذا الاختيار الضمني لحساب لأمر واحد. -راجع [Configuration reference](/ar/gateway/configuration-reference#multi-account-all-channels) لمعرفة النمط المشترك للحسابات المتعددة. +راجع [مرجع التهيئة](/ar/gateway/configuration-reference#multi-account-all-channels) لمعرفة نمط الحسابات المتعددة المشترك. -## الخوادم المنزلية الخاصة/ضمن الشبكة المحلية +## الخوادم المنزلية الخاصة/خوادم LAN -بشكل افتراضي، يمنع OpenClaw خوادم Matrix المنزلية الخاصة/الداخلية للحماية من SSRF ما لم -تفعّل ذلك صراحةً لكل حساب. +افتراضيًا، يمنع OpenClaw الخوادم المنزلية الخاصة/الداخلية لـ Matrix للحماية من SSRF ما لم +تقم بتفعيلها صراحةً لكل حساب. -إذا كان الخادم المنزلي يعمل على localhost، أو عنوان IP ضمن LAN/Tailscale، أو اسم مضيف داخلي، فقم بتمكين +إذا كان خادمك المنزلي يعمل على localhost أو عنوان IP لشبكة LAN/Tailscale أو اسم مضيف داخلي، ففعّل `network.dangerouslyAllowPrivateNetwork` لذلك الحساب في Matrix: ```json5 @@ -964,12 +965,12 @@ openclaw matrix account add \ --access-token syt_ops_xxx ``` -يسمح هذا التفعيل فقط بالأهداف الخاصة/الداخلية الموثوقة. أما الخوادم المنزلية العامة غير المشفرة مثل -`http://matrix.example.org:8008` فتظل محظورة. ويُفضَّل استخدام `https://` كلما أمكن. +يسمح هذا التفعيل الاختياري فقط بالأهداف الخاصة/الداخلية الموثوقة. أما الخوادم المنزلية العامة غير المشفرة مثل +`http://matrix.example.org:8008` فتظل محظورة. ويفضَّل استخدام `https://` كلما أمكن. -## تمرير حركة Matrix عبر proxy +## توجيه حركة Matrix عبر Proxy -إذا كان نشر Matrix لديك يحتاج إلى HTTP(S) proxy صريح للصادر، فاضبط `channels.matrix.proxy`: +إذا كان نشر Matrix لديك يحتاج إلى Proxy صريح لحركة HTTP(S) الصادرة، فعيّن `channels.matrix.proxy`: ```json5 { @@ -983,22 +984,22 @@ openclaw matrix account add \ } ``` -يمكن للحسابات المسماة تجاوز القيمة الافتراضية في المستوى الأعلى باستخدام `channels.matrix.accounts..proxy`. -ويستخدم OpenClaw إعداد proxy نفسه لكل من حركة Matrix أثناء التشغيل وعمليات فحص حالة الحساب. +يمكن للحسابات المسماة تجاوز الإعداد الافتراضي الأعلى مستوى باستخدام `channels.matrix.accounts..proxy`. +يستخدم OpenClaw إعداد Proxy نفسه لحركة Matrix أثناء التشغيل ولاستقصاءات حالة الحساب. -## حل الأهداف +## تحليل الهدف -يقبل Matrix صيغ الأهداف التالية في أي موضع يطلب منك فيه OpenClaw هدف غرفة أو مستخدم: +يقبل Matrix صيغ الأهداف التالية في كل مكان يطلب منك فيه OpenClaw هدف غرفة أو مستخدم: - المستخدمون: `@user:server` أو `user:@user:server` أو `matrix:user:@user:server` - الغرف: `!room:server` أو `room:!room:server` أو `matrix:room:!room:server` - الأسماء المستعارة: `#alias:server` أو `channel:#alias:server` أو `matrix:channel:#alias:server` -يستخدم البحث الحي في الدليل حساب Matrix المسجل دخوله: +يستخدم البحث المباشر في الدليل حساب Matrix المسجّل دخوله: -- تستعلم عمليات بحث المستخدمين من دليل مستخدمي Matrix على ذلك الخادم المنزلي. -- تقبل عمليات بحث الغرف معرّفات الغرف الصريحة والأسماء المستعارة مباشرةً، ثم تعود إلى البحث في أسماء الغرف المنضم إليها لذلك الحساب. -- البحث في أسماء الغرف المنضم إليها هو جهد أفضل. إذا تعذر حل اسم غرفة إلى معرّف أو اسم مستعار، فسيتم تجاهله أثناء حل قائمة السماح وقت التشغيل. +- تستعلم عمليات البحث عن المستخدمين من دليل مستخدمي Matrix على ذلك الخادم المنزلي. +- تقبل عمليات البحث عن الغرف معرّفات الغرف والأسماء المستعارة الصريحة مباشرةً، ثم تعود إلى البحث في أسماء الغرف المنضم إليها لذلك الحساب. +- يكون البحث باسم الغرفة المنضم إليها على أساس أفضل جهد. وإذا تعذر تحليل اسم غرفة إلى معرّف أو اسم مستعار، فسيتم تجاهله أثناء التشغيل عند تحليل قائمة السماح. ## مرجع التهيئة @@ -1006,63 +1007,63 @@ openclaw matrix account add \ - `name`: تسمية اختيارية للحساب. - `defaultAccount`: معرّف الحساب المفضّل عند تهيئة عدة حسابات Matrix. - `homeserver`: عنوان URL للخادم المنزلي، مثل `https://matrix.example.org`. -- `network.dangerouslyAllowPrivateNetwork`: السماح لهذا الحساب في Matrix بالاتصال بخوادم منزلية خاصة/داخلية. فعّل هذا عندما يُحل الخادم المنزلي إلى `localhost` أو عنوان IP ضمن LAN/Tailscale أو مضيف داخلي مثل `matrix-synapse`. -- `proxy`: عنوان URL اختياري لـ HTTP(S) proxy لحركة Matrix. ويمكن للحسابات المسماة تجاوز القيمة الافتراضية في المستوى الأعلى باستخدام `proxy` الخاصة بها. +- `network.dangerouslyAllowPrivateNetwork`: السماح لهذا الحساب في Matrix بالاتصال بالخوادم المنزلية الخاصة/الداخلية. فعّل هذا عندما يُحل الخادم المنزلي إلى `localhost` أو عنوان IP لشبكة LAN/Tailscale أو مضيف داخلي مثل `matrix-synapse`. +- `proxy`: عنوان URL اختياري لـ HTTP(S) Proxy لحركة Matrix. ويمكن للحسابات المسماة تجاوز الإعداد الافتراضي الأعلى مستوى باستخدام `proxy` خاص بها. - `userId`: معرّف مستخدم Matrix الكامل، مثل `@bot:example.org`. -- `accessToken`: رمز وصول للمصادقة المعتمدة على الرمز. تُدعم القيم النصية الصريحة وقيم SecretRef في `channels.matrix.accessToken` و`channels.matrix.accounts..accessToken` عبر مزودي env/file/exec. راجع [Secrets Management](/ar/gateway/secrets). -- `password`: كلمة المرور لتسجيل الدخول المعتمد على كلمة المرور. تُدعم القيم النصية الصريحة وقيم SecretRef. +- `accessToken`: رمز وصول للمصادقة المستندة إلى الرمز. القيم النصية الصريحة وقيم SecretRef مدعومة في `channels.matrix.accessToken` و`channels.matrix.accounts..accessToken` عبر موفري env/file/exec. راجع [إدارة الأسرار](/ar/gateway/secrets). +- `password`: كلمة مرور لتسجيل الدخول المستند إلى كلمة المرور. القيم النصية الصريحة وقيم SecretRef مدعومة. - `deviceId`: معرّف جهاز Matrix صريح. - `deviceName`: اسم عرض الجهاز لتسجيل الدخول بكلمة المرور. -- `avatarUrl`: عنوان URL للصورة الرمزية الذاتية المخزنة لمزامنة الملف الشخصي وتحديثات `profile set`. +- `avatarUrl`: عنوان URL المخزن للصورة الرمزية الذاتية لمزامنة الملف الشخصي وتحديثات `profile set`. - `initialSyncLimit`: الحد الأقصى لعدد الأحداث التي يتم جلبها أثناء مزامنة بدء التشغيل. - `encryption`: تمكين E2EE. -- `allowlistOnly`: عندما تكون قيمته `true`، يقوم بترقية سياسة الغرف `open` إلى `allowlist`، ويفرض جميع سياسات الرسائل الخاصة النشطة باستثناء `disabled` (بما في ذلك `pairing` و`open`) إلى `allowlist`. ولا يؤثر في سياسات `disabled`. -- `allowBots`: السماح بالرسائل من حسابات Matrix OpenClaw الأخرى المهيأة (`true` أو `"mentions"`). +- `allowlistOnly`: عندما تكون `true`، تتم ترقية سياسة الغرف `open` إلى `allowlist`، وتُفرَض جميع سياسات الرسائل الخاصة النشطة باستثناء `disabled` (بما في ذلك `pairing` و`open`) إلى `allowlist`. ولا يؤثر ذلك في سياسات `disabled`. +- `allowBots`: السماح بالرسائل من حسابات OpenClaw Matrix الأخرى المهيأة (`true` أو `"mentions"`). - `groupPolicy`: `open` أو `allowlist` أو `disabled`. -- `contextVisibility`: وضع ظهور سياق الغرفة الإضافي (`all` أو `allowlist` أو `allowlist_quote`). -- `groupAllowFrom`: قائمة سماح لمعرّفات المستخدمين لحركة الغرف. يجب أن تكون الإدخالات معرّفات مستخدمي Matrix كاملة؛ ويتم تجاهل الأسماء غير المحلولة وقت التشغيل. -- `historyLimit`: الحد الأقصى لرسائل الغرف التي تُضمَّن كسياق سجل للمجموعة. ويعود إلى `messages.groupChat.historyLimit`؛ وإذا لم يتم ضبط الاثنين، فالقيمة الافتراضية الفعلية هي `0`. اضبط `0` للتعطيل. +- `contextVisibility`: وضع إظهار سياق الغرفة الإضافي (`all` أو `allowlist` أو `allowlist_quote`). +- `groupAllowFrom`: قائمة سماح لمعرّفات المستخدمين لحركة الغرف. يجب أن تكون الإدخالات معرّفات مستخدمي Matrix كاملة؛ وتُتجاهل الأسماء غير المحلولة أثناء التشغيل. +- `historyLimit`: الحد الأقصى لرسائل الغرف المضمنة كسياق سجل للمجموعة. ويعود إلى `messages.groupChat.historyLimit`؛ وإذا لم يكن أيٌّ منهما معيّنًا، تكون القيمة الفعالة الافتراضية `0`. عيّن `0` للتعطيل. - `replyToMode`: `off` أو `first` أو `all` أو `batched`. -- `markdown`: تهيئة اختيارية لتصيير Markdown للنصوص الصادرة في Matrix. -- `streaming`: `off` (الافتراضي)، أو `"partial"`، أو `"quiet"`، أو `true`، أو `false`. تؤدي `"partial"` و`true` إلى تمكين تحديثات المسودات بأسلوب المعاينة أولًا باستخدام رسائل Matrix النصية العادية. وتستخدم `"quiet"` إشعارات معاينة غير مُرسِلة للتنبيه لإعدادات push-rule المستضافة ذاتيًا. ويكافئ `false` القيمة `"off"`. -- `blockStreaming`: تؤدي القيمة `true` إلى تمكين رسائل تقدم منفصلة لكتل المساعد المكتملة أثناء نشاط بث معاينة المسودة. +- `markdown`: تهيئة اختيارية لعرض Markdown لنص Matrix الصادر. +- `streaming`: `off` (الافتراضي) أو `"partial"` أو `"quiet"` أو `true` أو `false`. يفعّل `"partial"` و`true` تحديثات المسودات بنمط المعاينة أولًا باستخدام رسائل Matrix النصية العادية. ويستخدم `"quiet"` إشعارات معاينة غير مُرسِلة للإشعار لإعدادات push-rule المستضافة ذاتيًا. ويكافئ `false` القيمة `"off"`. +- `blockStreaming`: يفعّل `true` رسائل تقدم منفصلة لكتل المساعد المكتملة أثناء نشاط بث معاينة المسودات. - `threadReplies`: `off` أو `inbound` أو `always`. - `threadBindings`: تجاوزات لكل قناة لتوجيه الجلسات المرتبطة بسلاسل الرسائل ودورة حياتها. - `startupVerification`: وضع طلب التحقق الذاتي التلقائي عند بدء التشغيل (`if-unverified` أو `off`). - `startupVerificationCooldownHours`: فترة التهدئة قبل إعادة محاولة طلبات التحقق التلقائي عند بدء التشغيل. -- `textChunkLimit`: حجم تجزئة الرسائل الصادرة بعدد الأحرف (يُطبّق عندما تكون `chunkMode` هي `length`). -- `chunkMode`: تقوم `length` بتقسيم الرسائل حسب عدد الأحرف؛ وتقوم `newline` بالتقسيم عند حدود الأسطر. -- `responsePrefix`: سلسلة اختيارية تُسبق بها جميع الردود الصادرة لهذه القناة. -- `ackReaction`: تجاوز اختياري لتفاعل التأكيد لهذه القناة/الحساب. -- `ackReactionScope`: تجاوز اختياري لنطاق تفاعل التأكيد (`group-mentions` أو `group-all` أو `direct` أو `all` أو `none` أو `off`). +- `textChunkLimit`: حجم أجزاء الرسالة الصادرة بالأحرف (يُطبَّق عندما يكون `chunkMode` هو `length`). +- `chunkMode`: يقسّم `length` الرسائل حسب عدد الأحرف؛ ويقسّم `newline` عند حدود الأسطر. +- `responsePrefix`: سلسلة اختيارية تسبق جميع الردود الصادرة لهذه القناة. +- `ackReaction`: تجاوز اختياري لتفاعل الإقرار لهذه القناة/الحساب. +- `ackReactionScope`: تجاوز اختياري لنطاق تفاعل الإقرار (`group-mentions` أو `group-all` أو `direct` أو `all` أو `none` أو `off`). - `reactionNotifications`: وضع إشعارات التفاعل الواردة (`own` أو `off`). -- `mediaMaxMb`: الحد الأقصى لحجم الوسائط بالميغابايت للإرسال الصادر ومعالجة الوسائط الواردة. -- `autoJoin`: سياسة الانضمام التلقائي للدعوات (`always` أو `allowlist` أو `off`). الافتراضي: `off`. تنطبق على جميع دعوات Matrix، بما في ذلك دعوات نمط الرسائل الخاصة. -- `autoJoinAllowlist`: الغرف/الأسماء المستعارة المسموح بها عندما تكون `autoJoin` هي `allowlist`. يتم حل إدخالات الأسماء المستعارة إلى معرّفات غرف أثناء معالجة الدعوات؛ ولا يثق OpenClaw في حالة الاسم المستعار التي تدّعيها الغرفة المدعو إليها. -- `dm`: كتلة سياسة الرسائل الخاصة (`enabled` أو `policy` أو `allowFrom` أو `sessionScope` أو `threadReplies`). -- `dm.policy`: يتحكم في وصول الرسائل الخاصة بعد أن ينضم OpenClaw إلى الغرفة ويصنّفها على أنها DM. ولا يغيّر ما إذا كانت الدعوة تُضم تلقائيًا. -- `dm.allowFrom`: يجب أن تكون الإدخالات معرّفات مستخدمي Matrix كاملة ما لم تكن قد قمت بالفعل بحلّها عبر البحث الحي في الدليل. -- `dm.sessionScope`: `per-user` (الافتراضي) أو `per-room`. استخدم `per-room` عندما تريد أن تحتفظ كل غرفة Matrix DM بسياق منفصل حتى لو كان النظير هو نفسه. -- `dm.threadReplies`: تجاوز لسياسة سلاسل الرسائل خاص بالرسائل الخاصة (`off` أو `inbound` أو `always`). وهو يتجاوز إعداد `threadReplies` في المستوى الأعلى لكل من موضع الرد وعزل الجلسة في الرسائل الخاصة. -- `execApprovals`: تسليم موافقات exec الأصلي في Matrix (`enabled` أو `approvers` أو `target` أو `agentFilter` أو `sessionFilter`). -- `execApprovals.approvers`: معرّفات مستخدمي Matrix المسموح لهم بالموافقة على طلبات exec. وهو اختياري عندما تحدد `dm.allowFrom` الموافقين بالفعل. +- `mediaMaxMb`: الحد الأقصى لحجم الوسائط بالميغابايت لعمليات الإرسال الصادرة ومعالجة الوسائط الواردة. +- `autoJoin`: سياسة الانضمام التلقائي للدعوات (`always` أو `allowlist` أو `off`). الافتراضي: `off`. وتنطبق على جميع دعوات Matrix، بما في ذلك الدعوات بأسلوب الرسائل الخاصة. +- `autoJoinAllowlist`: الغرف/الأسماء المستعارة المسموح بها عندما تكون `autoJoin` هي `allowlist`. وتُحل إدخالات الأسماء المستعارة إلى معرّفات غرف أثناء معالجة الدعوة؛ ولا يثق OpenClaw في حالة الاسم المستعار التي تدّعيها الغرفة المدعو إليها. +- `dm`: كتلة سياسة الرسائل الخاصة (`enabled` و`policy` و`allowFrom` و`sessionScope` و`threadReplies`). +- `dm.policy`: يتحكم في الوصول إلى الرسائل الخاصة بعد انضمام OpenClaw إلى الغرفة وتصنيفها على أنها رسالة خاصة. ولا يغيّر ما إذا كانت الدعوة ستنضم تلقائيًا. +- `dm.allowFrom`: يجب أن تكون الإدخالات معرّفات مستخدمي Matrix كاملة ما لم تكن قد حللتها بالفعل عبر البحث المباشر في الدليل. +- `dm.sessionScope`: `per-user` (الافتراضي) أو `per-room`. استخدم `per-room` عندما تريد أن تحتفظ كل غرفة رسائل خاصة في Matrix بسياق منفصل حتى لو كان النظير هو نفسه. +- `dm.threadReplies`: تجاوز لسياسة سلاسل الرسائل خاص بالرسائل الخاصة (`off` أو `inbound` أو `always`). ويتجاوز الإعداد الأعلى مستوى `threadReplies` لكل من موضع الرد وعزل الجلسة في الرسائل الخاصة. +- `execApprovals`: تسليم موافقات exec الأصلي في Matrix (`enabled` و`approvers` و`target` و`agentFilter` و`sessionFilter`). +- `execApprovals.approvers`: معرّفات مستخدمي Matrix المسموح لهم بالموافقة على طلبات exec. وهو اختياري عندما يحدّد `dm.allowFrom` الموافقين بالفعل. - `execApprovals.target`: `dm | channel | both` (الافتراضي: `dm`). -- `accounts`: تجاوزات مسماة لكل حساب. وتعمل قيم `channels.matrix` في المستوى الأعلى كقيم افتراضية لهذه الإدخالات. -- `groups`: خريطة سياسات لكل غرفة. يُفضَّل استخدام معرّفات الغرف أو الأسماء المستعارة؛ ويتم تجاهل أسماء الغرف غير المحلولة وقت التشغيل. وتستخدم هوية الجلسة/المجموعة معرّف الغرفة الثابت بعد الحل. -- `groups..account`: تقييد إدخال غرفة موروث واحد بحساب Matrix محدد في إعدادات الحسابات المتعددة. -- `groups..allowBots`: تجاوز على مستوى الغرفة للمرسلين من bots المهيأة (`true` أو `"mentions"`). +- `accounts`: تجاوزات مسماة لكل حساب. وتعمل القيم ذات المستوى الأعلى في `channels.matrix` كقيم افتراضية لهذه الإدخالات. +- `groups`: خريطة سياسات لكل غرفة. فضّل معرّفات الغرف أو الأسماء المستعارة؛ وتُتجاهل أسماء الغرف غير المحلولة أثناء التشغيل. وتستخدم هوية الجلسة/المجموعة معرّف الغرفة الثابت بعد التحليل. +- `groups..account`: قصر إدخال غرفة موروث واحد على حساب Matrix محدد في إعدادات الحسابات المتعددة. +- `groups..allowBots`: تجاوز على مستوى الغرفة للمرسلين من البوتات المهيأة (`true` أو `"mentions"`). - `groups..users`: قائمة سماح للمرسلين لكل غرفة. -- `groups..tools`: تجاوزات سماح/منع للأدوات لكل غرفة. -- `groups..autoReply`: تجاوز على مستوى الغرفة لتقييد mentions. تؤدي `true` إلى تعطيل متطلبات mention لتلك الغرفة؛ وتؤدي `false` إلى فرضها مجددًا. -- `groups..skills`: مرشح Skills اختياري على مستوى الغرفة. +- `groups..tools`: تجاوزات السماح/المنع للأدوات لكل غرفة. +- `groups..autoReply`: تجاوز لتقييد الذكر على مستوى الغرفة. تؤدي `true` إلى تعطيل متطلبات الذكر لتلك الغرفة؛ وتعيد `false` فرضها. +- `groups..skills`: عامل تصفية Skills اختياري على مستوى الغرفة. - `groups..systemPrompt`: مقتطف system prompt اختياري على مستوى الغرفة. - `rooms`: اسم مستعار قديم لـ `groups`. -- `actions`: تقييد الأدوات لكل إجراء (`messages` أو `reactions` أو `pins` أو `profile` أو `memberInfo` أو `channelInfo` أو `verification`). +- `actions`: تقييد الأدوات لكل إجراء (`messages` و`reactions` و`pins` و`profile` و`memberInfo` و`channelInfo` و`verification`). ## ذو صلة -- [Channels Overview](/ar/channels) — جميع القنوات المدعومة -- [Pairing](/ar/channels/pairing) — مصادقة الرسائل الخاصة وتدفق الاقتران -- [Groups](/ar/channels/groups) — سلوك دردشة المجموعات وتقييد mentions -- [Channel Routing](/ar/channels/channel-routing) — توجيه الجلسات للرسائل -- [Security](/ar/gateway/security) — نموذج الوصول والتقوية +- [نظرة عامة على القنوات](/ar/channels) — جميع القنوات المدعومة +- [الإقران](/ar/channels/pairing) — مصادقة الرسائل الخاصة وتدفق الإقران +- [المجموعات](/ar/channels/groups) — سلوك دردشة المجموعات وتقييد الذكر +- [توجيه القناة](/ar/channels/channel-routing) — توجيه الجلسات للرسائل +- [الأمان](/ar/gateway/security) — نموذج الوصول والتحصين diff --git a/docs/ar/concepts/system-prompt.md b/docs/ar/concepts/system-prompt.md index 000a033dc..9d901dd05 100644 --- a/docs/ar/concepts/system-prompt.md +++ b/docs/ar/concepts/system-prompt.md @@ -1,103 +1,104 @@ --- read_when: - - تحرير نص مطالبة النظام أو قائمة الأدوات أو أقسام الوقت/نبضات القلب - - تغيير تهيئة مساحة العمل أو سلوك حقن Skills -summary: ما الذي تتضمنه مطالبة نظام OpenClaw وكيف يتم تجميعها -title: مطالبة النظام + - تحرير نص موجه النظام، أو قائمة الأدوات، أو أقسام الوقت/Heartbeat + - تغيير سلوك تهيئة مساحة العمل أو حقن Skills +summary: ما الذي يحتويه موجه نظام OpenClaw وكيف يتم تجميعه +title: موجه النظام x-i18n: - generated_at: "2026-04-12T07:15:29Z" + generated_at: "2026-04-15T19:41:40Z" model: gpt-5.4 provider: openai - source_hash: 057f01aac51f7737b5223f61f5d55e552d9011232aebb130426e269d8f6c257f + source_hash: c740e4646bc4980567338237bfb55126af0df72499ca00a48e4848d9a3608ab4 source_path: concepts/system-prompt.md workflow: 15 --- -# مطالبة النظام +# موجه النظام -يبني OpenClaw مطالبة نظام مخصصة لكل تشغيل وكيل. المطالبة **مملوكة لـ OpenClaw** ولا تستخدم المطالبة الافتراضية لـ pi-coding-agent. +يبني OpenClaw موجه نظام مخصصًا لكل تشغيل وكيل. الموجه **مملوك لـ OpenClaw** ولا يستخدم الموجه الافتراضي الخاص بـ pi-coding-agent. -يتم تجميع المطالبة بواسطة OpenClaw وحقنها في كل تشغيل وكيل. +يتم تجميع الموجه بواسطة OpenClaw وحقنه في كل تشغيل وكيل. -يمكن لإضافات الموفر المساهمة بإرشادات مطالبة تراعي التخزين المؤقت دون استبدال -مطالبة OpenClaw الكاملة المملوكة له. يمكن لوقت تشغيل الموفر أن: +يمكن لإضافات الموفر المساهمة بإرشادات موجه تراعي الذاكرة المؤقتة دون استبدال +موجه OpenClaw الكامل المملوك له. يمكن لبيئة تشغيل الموفر القيام بما يلي: -- يستبدل مجموعة صغيرة من الأقسام الأساسية المسمّاة (`interaction_style`, +- استبدال مجموعة صغيرة من الأقسام الأساسية المسماة (`interaction_style`, `tool_call_style`, `execution_bias`) -- يحقن **بادئة مستقرة** فوق حد التخزين المؤقت للمطالبة -- يحقن **لاحقة ديناميكية** أسفل حد التخزين المؤقت للمطالبة +- حقن **بادئة مستقرة** فوق حد الذاكرة المؤقتة للموجه +- حقن **لاحقة ديناميكية** أسفل حد الذاكرة المؤقتة للموجه -استخدم المساهمات المملوكة للموفر من أجل الضبط الخاص بعائلات النماذج. أبقِ -تعديل المطالبة القديم `before_prompt_build` للتوافق أو لتغييرات المطالبة -العالمية فعلًا، وليس لسلوك الموفر العادي. +استخدم المساهمات المملوكة للموفر من أجل الضبط الخاص بعائلة النموذج. أبقِ +التعديل القديم للموجه عبر `before_prompt_build` من أجل التوافق أو تغييرات +الموجه العامة فعلًا، وليس لسلوك الموفر المعتاد. ## البنية -المطالبة مضغوطة عمدًا وتستخدم أقسامًا ثابتة: +الموجه مضغوط عمدًا ويستخدم أقسامًا ثابتة: -- **الأدوات**: تذكير بمصدر الحقيقة للأدوات المهيكلة بالإضافة إلى إرشادات وقت التشغيل لاستخدام الأدوات. -- **السلامة**: تذكير قصير بالضوابط لتجنب السلوك الساعي إلى السلطة أو تجاوز الإشراف. -- **Skills** (عند توفرها): يوضح للنموذج كيفية تحميل تعليمات Skill عند الطلب. +- **الأدوات**: تذكير بالمصدر المرجعي المنظم للأدوات بالإضافة إلى إرشادات وقت التشغيل لاستخدام الأدوات. +- **السلامة**: تذكير قصير بالضوابط لتجنب السلوك الساعي إلى القوة أو تجاوز الإشراف. +- **Skills** (عند توفرها): يوضح للنموذج كيفية تحميل تعليمات المهارات عند الطلب. - **التحديث الذاتي لـ OpenClaw**: كيفية فحص الإعدادات بأمان باستخدام - `config.schema.lookup`، وترقيع الإعدادات باستخدام `config.patch`، واستبدال - الإعدادات كاملة باستخدام `config.apply`، وتشغيل `update.run` فقط عند طلب - صريح من المستخدم. كما أن أداة `gateway` المخصصة للمالك فقط ترفض أيضًا إعادة + `config.schema.lookup`، وتصحيح الإعدادات باستخدام `config.patch`، واستبدال + الإعدادات بالكامل باستخدام `config.apply`، وتشغيل `update.run` فقط عند طلب + المستخدم الصريح. كما أن أداة `gateway` المخصصة للمالك فقط ترفض أيضًا إعادة كتابة `tools.exec.ask` / `tools.exec.security`، بما في ذلك الأسماء - المستعارة القديمة `tools.bash.*` التي تُطبَّع إلى مسارات التنفيذ المحمية هذه. + المستعارة القديمة `tools.bash.*` التي تُطبَّع إلى مسارات exec المحمية تلك. - **مساحة العمل**: دليل العمل (`agents.defaults.workspace`). -- **التوثيق**: المسار المحلي إلى مستندات OpenClaw (المستودع أو حزمة npm) ومتى يجب قراءتها. +- **التوثيق**: المسار المحلي إلى وثائق OpenClaw (المستودع أو حزمة npm) ومتى يجب قراءتها. - **ملفات مساحة العمل (محقونة)**: يشير إلى أن ملفات التهيئة الأولية مضمنة أدناه. -- **Sandbox** (عند التمكين): يشير إلى بيئة تشغيل معزولة، ومسارات العزل، وما إذا كان التنفيذ المرتفع الصلاحيات متاحًا. +- **Sandbox** (عند التمكين): يشير إلى بيئة تشغيل معزولة، ومسارات sandbox، وما إذا كان التنفيذ المرتفع الصلاحيات متاحًا. - **التاريخ والوقت الحاليان**: الوقت المحلي للمستخدم، والمنطقة الزمنية، وتنسيق الوقت. -- **وسوم الرد**: صياغة اختيارية لوسوم الرد لموفري الخدمة المدعومين. -- **نبضات القلب**: مطالبة نبضات القلب وسلوك الإقرار، عندما تكون نبضات القلب مفعلة للوكيل الافتراضي. -- **وقت التشغيل**: المضيف، ونظام التشغيل، وNode، والنموذج، وجذر المستودع (عند اكتشافه)، ومستوى التفكير (سطر واحد). -- **الاستدلال**: مستوى الرؤية الحالي + تلميح تبديل `/reasoning`. +- **وسوم الرد**: صياغة وسوم الرد الاختيارية للموفرين المدعومين. +- **Heartbeats**: موجه Heartbeat وسلوك الإقرار، عندما تكون Heartbeats مفعلة للوكيل الافتراضي. +- **وقت التشغيل**: المضيف، ونظام التشغيل، وnode، والنموذج، وجذر المستودع (عند اكتشافه)، ومستوى التفكير (سطر واحد). +- **الاستدلال**: مستوى الرؤية الحالي + تلميح تبديل /reasoning. يتضمن قسم الأدوات أيضًا إرشادات وقت التشغيل للأعمال طويلة التشغيل: -- استخدم cron للمتابعة المستقبلية (`تحقق لاحقًا`، والتذكيرات، والعمل المتكرر) - بدلًا من حلقات النوم في `exec`، أو حيل التأخير `yieldMs`، أو الاستطلاع +- استخدم Cron للمتابعة المستقبلية (`check back later`، والتذكيرات، والأعمال المتكررة) + بدلًا من حلقات السكون عبر `exec`، أو حيل التأخير `yieldMs`، أو الاستطلاع المتكرر لـ `process` - استخدم `exec` / `process` فقط للأوامر التي تبدأ الآن وتستمر في العمل في الخلفية -- عندما تكون خاصية التنبيه التلقائي عند الاكتمال مفعلة، ابدأ الأمر مرة واحدة - واعتمد على مسار التنبيه القائم على الدفع عندما يُخرج ناتجًا أو يفشل -- استخدم `process` للسجلات أو الحالة أو الإدخال أو التدخل عندما تحتاج إلى +- عند تمكين التنبيه التلقائي عند الاكتمال، ابدأ الأمر مرة واحدة ثم اعتمد على + مسار التنبيه المعتمد على الدفع عندما يصدر مخرجات أو يفشل +- استخدم `process` للسجلات، أو الحالة، أو الإدخال، أو التدخل عندما تحتاج إلى فحص أمر قيد التشغيل -- إذا كانت المهمة أكبر، ففضّل `sessions_spawn`؛ إذ إن اكتمال الوكيل الفرعي - قائم على الدفع ويُعلن تلقائيًا للطالب -- لا تستطلع `subagents list` / `sessions_list` في حلقة لمجرد انتظار +- إذا كانت المهمة أكبر، ففضّل `sessions_spawn`; يكتمل الوكيل الفرعي بأسلوب + قائم على الدفع ويعلن تلقائيًا الرجوع إلى الطالب +- لا تستطلع `subagents list` / `sessions_list` في حلقة فقط لانتظار الاكتمال -عندما تكون أداة `update_plan` التجريبية مفعلة، يوضح قسم الأدوات أيضًا -للنموذج أن يستخدمها فقط للأعمال متعددة الخطوات غير البسيطة، وأن يبقي خطوة -واحدة فقط بحالة `in_progress`، وأن يتجنب تكرار الخطة كاملة بعد كل تحديث. +عند تمكين الأداة التجريبية `update_plan`، يوضح قسم الأدوات أيضًا للنموذج أن +يستخدمها فقط للأعمال غير التافهة متعددة الخطوات، وأن يُبقي خطوة واحدة فقط +`in_progress`، وأن يتجنب تكرار الخطة كاملة بعد كل تحديث. -ضوابط السلامة في مطالبة النظام إرشادية. فهي توجه سلوك النموذج لكنها لا تفرض -السياسة. استخدم سياسة الأدوات، وموافقات التنفيذ، والعزل، وقوائم سماح القنوات -للفرض الصارم؛ إذ يمكن للمشغلين تعطيل هذه الأمور عن قصد. +ضوابط السلامة في موجه النظام إرشادية. فهي توجه سلوك النموذج لكنها لا تفرض سياسة. استخدم سياسة الأدوات، وموافقات exec، وsandboxing، وقوائم السماح الخاصة بالقنوات من أجل الفرض الصارم؛ ويمكن للمشغلين تعطيل هذه الأمور عمدًا. -في القنوات التي تحتوي على بطاقات/أزرار موافقة أصلية، توضح مطالبة وقت التشغيل -الآن للوكيل أن يعتمد أولًا على واجهة الموافقة الأصلية تلك. ويجب ألا يتضمن أمر -`/approve` يدويًا إلا عندما تشير نتيجة الأداة إلى أن موافقات الدردشة غير +في القنوات التي تحتوي على بطاقات/أزرار موافقة أصلية، يوجه موجه وقت التشغيل الآن +الوكيل إلى الاعتماد أولًا على واجهة الموافقة الأصلية هذه. ولا ينبغي أن يتضمن +أمر `/approve` يدويًا إلا عندما تشير نتيجة الأداة إلى أن موافقات الدردشة غير متاحة أو أن الموافقة اليدوية هي المسار الوحيد. -## أوضاع المطالبة +## أوضاع الموجه -يمكن لـ OpenClaw عرض مطالبات نظام أصغر للوكلاء الفرعيين. يضبط وقت التشغيل +يمكن لـ OpenClaw عرض موجهات نظام أصغر للوكلاء الفرعيين. يحدد وقت التشغيل `promptMode` لكل تشغيل (وليس إعدادًا ظاهرًا للمستخدم): -- `full` (الافتراضي): يتضمن جميع الأقسام أعلاه. -- `minimal`: يُستخدم للوكلاء الفرعيين؛ ويحذف **Skills** و**استدعاء الذاكرة** و**التحديث الذاتي لـ OpenClaw** و**أسماء النماذج المستعارة** و**هوية المستخدم** و**وسوم الرد** و**المراسلة** و**الردود الصامتة** و**نبضات القلب**. تظل الأدوات و**السلامة** ومساحة العمل وSandbox والتاريخ والوقت الحاليان (عند توفرهما) ووقت التشغيل والسياق المحقون متاحة. -- `none`: يعيد فقط سطر الهوية الأساسي. +- `full` (افتراضي): يتضمن جميع الأقسام أعلاه. +- `minimal`: يُستخدم للوكلاء الفرعيين؛ ويحذف **Skills**، و**استدعاء الذاكرة**، و**التحديث الذاتي لـ OpenClaw**، و**أسماء النماذج المستعارة**، و**هوية المستخدم**، و**وسوم الرد**، + و**المراسلة**، و**الردود الصامتة**، و**Heartbeats**. وتظل الأدوات، و**السلامة**، + ومساحة العمل، وSandbox، والتاريخ والوقت الحاليان (عند معرفتهما)، ووقت التشغيل، والسياق + المحقون متاحة. +- `none`: يعيد سطر الهوية الأساسي فقط. -عندما يكون `promptMode=minimal`، تُوسم المطالبات الإضافية المحقونة باسم **سياق الوكيل الفرعي** بدلًا من **سياق الدردشة الجماعية**. +عندما يكون `promptMode=minimal`، تُسمى الموجهات الإضافية المحقونة **سياق الوكيل +الفرعي** بدلًا من **سياق الدردشة الجماعية**. -## حقن تهيئة مساحة العمل الأولية +## حقن تهيئة مساحة العمل -تُقص ملفات التهيئة الأولية وتُلحق تحت **سياق المشروع** بحيث يرى النموذج -الهوية وسياق الملف الشخصي من دون الحاجة إلى قراءتها صراحةً: +تُقص ملفات التهيئة الأولية وتُلحق تحت **سياق المشروع** حتى يرى النموذج سياق الهوية والملف الشخصي دون الحاجة إلى قراءات صريحة: - `AGENTS.md` - `SOUL.md` @@ -108,70 +109,68 @@ x-i18n: - `BOOTSTRAP.md` (فقط في مساحات العمل الجديدة تمامًا) - `MEMORY.md` عند وجوده، وإلا `memory.md` كبديل بأحرف صغيرة -تُحقن جميع هذه الملفات **في نافذة السياق** في كل دور ما لم تنطبق بوابة خاصة -بملف معين. ويُحذف `HEARTBEAT.md` في التشغيلات العادية عندما تكون نبضات القلب -معطلة للوكيل الافتراضي أو عندما تكون -`agents.defaults.heartbeat.includeSystemPromptSection` مساوية لـ false. اجعل -الملفات المحقونة موجزة — وخاصة `MEMORY.md`، الذي قد ينمو بمرور الوقت ويؤدي إلى -استخدام سياق أعلى من المتوقع وإلى ضغط أكثر تكرارًا. +كل هذه الملفات **تُحقن داخل نافذة السياق** في كل دورة ما لم +تنطبق بوابة خاصة بالملف. يُحذف `HEARTBEAT.md` في التشغيلات العادية عندما تكون +Heartbeats معطلة للوكيل الافتراضي أو عندما يكون +`agents.defaults.heartbeat.includeSystemPromptSection` يساوي false. أبقِ الملفات +المحقونة موجزة — خاصة `MEMORY.md`، الذي يمكن أن ينمو مع الوقت ويؤدي إلى +استخدام سياق أعلى من المتوقع وCompaction أكثر تكرارًا. -> **ملاحظة:** ملفات `memory/*.md` اليومية **ليست** جزءًا من سياق مشروع -> التهيئة الأولية العادي. ففي الأدوار العادية يُصار إلى الوصول إليها عند -> الطلب عبر أداتي `memory_search` و`memory_get`، لذلك لا تُحتسب ضمن نافذة -> السياق ما لم يقرأها النموذج صراحةً. وتُعد أدوار `/new` و`/reset` المجردة -> الاستثناء: إذ يمكن لوقت التشغيل أن يسبق مؤخرات الذاكرة اليومية كسياق -> بدء لمرة واحدة لذلك الدور الأول. +> **ملاحظة:** ملفات `memory/*.md` اليومية **ليست** جزءًا من سياق المشروع +> الافتراضي للتهيئة الأولية. ففي الدورات العادية يتم الوصول إليها عند الطلب عبر +> أداتي `memory_search` و`memory_get`، لذلك لا تُحتسب ضمن نافذة السياق +> ما لم يقرأها النموذج صراحةً. وتمثل دورات `/new` و`/reset` المجردة +> الاستثناء: إذ يمكن لوقت التشغيل أن يسبق ذاكرة يومية حديثة +> ككتلة سياق بدء لمرة واحدة لتلك الدورة الأولى. -تُقتطع الملفات الكبيرة مع علامة. ويُتحكم في الحد الأقصى للحجم لكل ملف بواسطة -`agents.defaults.bootstrapMaxChars` (الافتراضي: 20000). كما يُحدد سقف لإجمالي -محتوى التهيئة الأولية المحقون عبر الملفات بواسطة -`agents.defaults.bootstrapTotalMaxChars` (الافتراضي: 150000). وتحقن الملفات -المفقودة علامة قصيرة تشير إلى فقدان الملف. وعند حدوث اقتطاع، يمكن لـ OpenClaw -حقن كتلة تحذير في سياق المشروع؛ تحكم في ذلك باستخدام -`agents.defaults.bootstrapPromptTruncationWarning` (`off` أو `once` أو `always`؛ -والافتراضي: `once`). +تُقتطع الملفات الكبيرة مع علامة. ويُتحكم في الحد الأقصى لحجم كل ملف عبر +`agents.defaults.bootstrapMaxChars` (الافتراضي: 20000). كما أن إجمالي محتوى +التهيئة الأولية المحقون عبر الملفات مقيّد بواسطة +`agents.defaults.bootstrapTotalMaxChars` +(الافتراضي: 150000). وتحقن الملفات المفقودة علامة قصيرة تدل على فقدان الملف. وعند حدوث الاقتطاع، +يمكن لـ OpenClaw حقن كتلة تحذير في سياق المشروع؛ ويمكن التحكم في ذلك عبر +`agents.defaults.bootstrapPromptTruncationWarning` (`off`, `once`, `always`; +الافتراضي: `once`). -تقوم جلسات الوكيل الفرعي بحقن `AGENTS.md` و`TOOLS.md` فقط (وتُرشَّح ملفات -التهيئة الأولية الأخرى لإبقاء سياق الوكيل الفرعي صغيرًا). +جلسات الوكيل الفرعي تحقن فقط `AGENTS.md` و`TOOLS.md` (تُرشَّح ملفات التهيئة الأولية الأخرى +لإبقاء سياق الوكيل الفرعي صغيرًا). -يمكن للخطافات الداخلية اعتراض هذه الخطوة عبر `agent:bootstrap` لتعديل ملفات -التهيئة الأولية المحقونة أو استبدالها (على سبيل المثال استبدال `SOUL.md` -بشخصية بديلة). +يمكن للخطافات الداخلية اعتراض هذه الخطوة عبر `agent:bootstrap` لتعديل أو استبدال +ملفات التهيئة الأولية المحقونة (على سبيل المثال استبدال `SOUL.md` بشخصية بديلة). -إذا كنت تريد أن تجعل الوكيل يبدو أقل عمومية، فابدأ من +إذا كنت تريد جعل الوكيل يبدو أقل عمومية، فابدأ من [دليل شخصية SOUL.md](/ar/concepts/soul). -لفحص مقدار مساهمة كل ملف محقون (الخام مقابل المحقون، والاقتطاع، إضافةً إلى -العبء الإضافي لمخطط الأداة)، استخدم `/context list` أو `/context detail`. -راجع [السياق](/ar/concepts/context). +لفحص مقدار مساهمة كل ملف محقون (الخام مقابل المحقون، والاقتطاع، بالإضافة إلى حمل مخطط الأداة)، استخدم `/context list` أو `/context detail`. راجع [السياق](/ar/concepts/context). ## التعامل مع الوقت -تتضمن مطالبة النظام قسم **التاريخ والوقت الحاليان** مخصصًا عندما تكون المنطقة -الزمنية للمستخدم معروفة. وللحفاظ على ثبات التخزين المؤقت للمطالبة، فهي تتضمن -الآن فقط **المنطقة الزمنية** (من دون ساعة ديناميكية أو تنسيق وقت). +يتضمن موجه النظام قسمًا مخصصًا بعنوان **التاريخ والوقت الحاليان** عندما تكون +المنطقة الزمنية للمستخدم معروفة. وللحفاظ على استقرار الذاكرة المؤقتة للموجه، فهو الآن +يتضمن فقط **المنطقة الزمنية** (من دون ساعة ديناميكية أو تنسيق وقت). -استخدم `session_status` عندما يحتاج الوكيل إلى الوقت الحالي؛ إذ تتضمن بطاقة -الحالة سطرًا للطابع الزمني. ويمكن للأداة نفسها أيضًا تعيين تجاوز نموذج لكل -جلسة اختياريًا (`model=default` يمسحه). +استخدم `session_status` عندما يحتاج الوكيل إلى الوقت الحالي؛ +تتضمن بطاقة الحالة سطر طابع زمني. ويمكن للأداة نفسها أيضًا تعيين +تجاوز نموذج خاص بكل جلسة (`model=default` يمسحه). اضبط ذلك باستخدام: - `agents.defaults.userTimezone` - `agents.defaults.timeFormat` (`auto` | `12` | `24`) -راجع [التاريخ والوقت](/ar/date-time) للاطلاع على التفاصيل الكاملة للسلوك. +راجع [التاريخ والوقت](/ar/date-time) للحصول على التفاصيل الكاملة للسلوك. ## Skills عندما تكون هناك Skills مؤهلة، يحقن OpenClaw **قائمة Skills متاحة** مضغوطة -(`formatSkillsForPrompt`) تتضمن **مسار الملف** لكل Skill. وتوجه المطالبة -النموذج إلى استخدام `read` لتحميل SKILL.md من الموقع المدرج (مساحة العمل، أو -المدار، أو المضمن). وإذا لم تكن هناك Skills مؤهلة، فيُحذف قسم Skills. +(`formatSkillsForPrompt`) تتضمن **مسار الملف** لكل Skill. وتوجّه +الموجه النموذج لاستخدام `read` لتحميل ملف SKILL.md في الموقع المدرج +(مساحة العمل، أو المُدار، أو المضمّن). وإذا لم توجد Skills مؤهلة، فيُحذف قسم +Skills. -تشمل الأهلية بوابات بيانات Skill الوصفية، وفحوصات بيئة/إعدادات وقت التشغيل، -وقائمة السماح الفعلية لـ Skills الخاصة بالوكيل عندما تكون -`agents.defaults.skills` أو `agents.list[].skills` مضبوطة. +تشمل الأهلية بوابات بيانات تعريف Skill، وفحوصات بيئة التشغيل/الإعدادات، +وقائمة السماح الفعلية لمهارات الوكيل عند ضبط `agents.defaults.skills` أو +`agents.list[].skills`. ``` @@ -183,14 +182,26 @@ x-i18n: ``` -يحافظ هذا على صغر حجم المطالبة الأساسية مع الاستمرار في تمكين استخدام Skills -المستهدف. +يبقي هذا الموجه الأساسي صغيرًا مع الاستمرار في تمكين استخدام Skills المستهدفة. + +تعود ملكية ميزانية قائمة Skills إلى نظام Skills الفرعي: + +- الافتراضي العام: `skills.limits.maxSkillsPromptChars` +- تجاوز لكل وكيل: `agents.list[].skillsLimits.maxSkillsPromptChars` + +تستخدم المقاطع المحدودة العامة لوقت التشغيل سطحًا مختلفًا: + +- `agents.defaults.contextLimits.*` +- `agents.list[].contextLimits.*` + +يبقي هذا الفصل تحديد حجم Skills منفصلًا عن تحديد حجم القراءة/الحقن في وقت التشغيل مثل +`memory_get`، ونتائج الأدوات الحية، وتحديثات AGENTS.md بعد Compaction. ## التوثيق -عند توفره، تتضمن مطالبة النظام قسم **التوثيق** الذي يشير إلى -دليل مستندات OpenClaw المحلي (إما `docs/` في مساحة عمل المستودع أو مستندات -حزمة npm المضمنة)، ويذكر أيضًا النسخة العامة المعكوسة، والمستودع المصدري، -ومجتمع Discord، وClawHub ([https://clawhub.ai](https://clawhub.ai)) لاكتشاف Skills. وتوجه المطالبة النموذج إلى الرجوع إلى المستندات المحلية أولًا -لسلوك OpenClaw أو الأوامر أو الإعدادات أو البنية، وإلى تشغيل -`openclaw status` بنفسه عند الإمكان (ولا يسأل المستخدم إلا عندما يفتقر إلى الوصول). +عند توفره، يتضمن موجه النظام قسم **التوثيق** الذي يشير إلى +دليل وثائق OpenClaw المحلي (إما `docs/` في مساحة عمل المستودع أو وثائق حزمة npm +المضمنة)، كما يذكر أيضًا النسخة العامة المطابقة، ومستودع المصدر، وDiscord المجتمع، +وClawHub ([https://clawhub.ai](https://clawhub.ai)) لاكتشاف Skills. ويوجه الموجه النموذج إلى الرجوع إلى +الوثائق المحلية أولًا فيما يخص سلوك OpenClaw، أو الأوامر، أو الإعدادات، أو +البنية، وأن يشغّل `openclaw status` بنفسه عندما يكون ذلك ممكنًا (ولا يسأل المستخدم إلا عند عدم توفر الوصول). diff --git a/docs/ar/gateway/configuration-reference.md b/docs/ar/gateway/configuration-reference.md index c247399cc..4f849de4b 100644 --- a/docs/ar/gateway/configuration-reference.md +++ b/docs/ar/gateway/configuration-reference.md @@ -1,70 +1,70 @@ --- read_when: - - تحتاج إلى دلالات الإعدادات الدقيقة على مستوى الحقول أو إلى القيم الافتراضية - - أنت تتحقق من صحة كتل إعدادات القناة أو النموذج أو Gateway أو الأداة + - تحتاج إلى دلالات الإعدادات الدقيقة على مستوى الحقول أو القيم الافتراضية. + - أنت تتحقق من صحة كتل إعدادات القنوات أو النماذج أو Gateway أو الأدوات. summary: مرجع إعدادات Gateway لمفاتيح OpenClaw الأساسية، والقيم الافتراضية، وروابط إلى مراجع الأنظمة الفرعية المخصصة title: مرجع الإعدادات x-i18n: - generated_at: "2026-04-15T14:40:30Z" + generated_at: "2026-04-15T19:41:37Z" model: gpt-5.4 provider: openai - source_hash: 7a4da3b41d0304389bd6359aac1185c231e529781b607656ab352f8a8104bdba + source_hash: 2bdb0f3e56e4a4d767fb4d6150526ae9b3926ef5b213b458001f41d02762436d 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 المجمّعة عند توفرها -- يعيد `config.schema.lookup` عقدة مخطط واحدة مقيّدة بمسار واحد لأدوات الاستكشاف التفصيلي +- يطبع `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/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.` غير موجودة)، فإن سياسة المجموعات أثناء التشغيل تعود إلى `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.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` الاختياري هذا الاختيار الافتراضي الاحتياطي للحساب عندما يطابق معرّف حساب مُعدًّا. -- ينقل `openclaw doctor` دليل مصادقة Baileys القديم ذي الحساب الواحد إلى `whatsapp/default`. -- تجاوزات لكل حساب: `channels.whatsapp.accounts..sendReadReceipts` و`channels.whatsapp.accounts..dmPolicy` و`channels.whatsapp.accounts..allowFrom`. +- تفترض الأوامر الصادرة الحساب `default` إذا كان موجوداً؛ وإلا فسيُستخدم أول معرّف حساب مضبوط (بعد الفرز). +- يتجاوز `channels.whatsapp.defaultAccount` الاختياري اختيار الحساب الافتراضي الاحتياطي ذلك عندما يطابق معرّف حساب مضبوطاً. +- ينقل `openclaw doctor` دليل المصادقة القديم أحادي الحساب لـ Baileys إلى `whatsapp/default`. +- التجاوزات لكل حساب: `channels.whatsapp.accounts..sendReadReceipts` و`channels.whatsapp.accounts..dmPolicy` و`channels.whatsapp.accounts..allowFrom`. @@ -202,7 +202,7 @@ x-i18n: historyLimit: 50, replyToMode: "first", // off | first | all | batched linkPreview: true, - streaming: "partial", // off | partial | block | progress (الافتراضي: off؛ فعّل ذلك صراحةً لتجنّب حدود المعدّل الخاصة بتعديل المعاينات) + streaming: "partial", // off | partial | block | progress (default: off; opt in explicitly to avoid preview-edit rate limits) actions: { reactions: true, sendMessage: true }, reactionNotifications: "own", // off | own | all mediaMaxMb: 100, @@ -225,11 +225,11 @@ x-i18n: } ``` -- رمز البوت: `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). +- رمز البوت: `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` (وتعمل في المحادثات المباشرة والجماعية). - سياسة إعادة المحاولة: راجع [سياسة إعادة المحاولة](/ar/concepts/retry). @@ -286,7 +286,7 @@ x-i18n: historyLimit: 20, textChunkLimit: 2000, chunkMode: "length", // length | newline - streaming: "off", // off | partial | block | progress (يُطابِق progress إلى partial على Discord) + streaming: "off", // off | partial | block | progress (progress maps to partial on Discord) maxLinesPerMessage: 17, ui: { components: { @@ -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 ذلك الرمز المميّز لهذا الاستدعاء؛ بينما تظل إعدادات إعادة المحاولة/السياسات الخاصة بالحساب مأخوذة من الحساب المحدد في اللقطة النشطة أثناء التشغيل. -- يتجاوز `channels.discord.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُعدًّا. -- استخدم `user:` (رسالة خاصة) أو `channel:` (قناة guild) كأهداف للتسليم؛ وتُرفض المعرّفات الرقمية المجردة. -- تكون الأسماء المختصرة لـ guild بأحرف صغيرة مع استبدال المسافات بـ `-`؛ وتستخدم مفاتيح القنوات الاسم المختصر (من دون `#`). يُفضَّل استخدام معرّفات guild. -- تُتجاهل الرسائل التي يكتبها البوت افتراضيًا. يفعّل `allowBots: true` قبولها؛ واستخدم `allowBots: "mentions"` لقبول رسائل البوت التي تذكر البوت فقط (مع استمرار تصفية رسائل البوت نفسه). -- يقوم `channels.discord.guilds..ignoreOtherMentions` (وتجاوزات القنوات) بإسقاط الرسائل التي تذكر مستخدمًا آخر أو دورًا آخر ولكنها لا تذكر البوت (باستثناء @everyone/@here). -- يقوم `maxLinesPerMessage` (الافتراضي 17) بتقسيم الرسائل الطويلة عموديًا حتى عندما تكون أقل من 2000 حرف. +- الرمز المميّز: `channels.discord.token`، مع `DISCORD_BOT_TOKEN` كقيمة احتياطية للحساب الافتراضي. +- تستخدم الاستدعاءات الصادرة المباشرة التي توفّر `token` صريحاً لـ Discord ذلك الرمز المميّز في الاستدعاء؛ بينما تظل إعدادات إعادة المحاولة/السياسة الخاصة بالحساب مأخوذة من الحساب المحدد في اللقطة النشطة لوقت التشغيل. +- يتجاوز `channels.discord.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مضبوطاً. +- استخدم `user:` ‏(رسالة مباشرة) أو `channel:` ‏(قناة guild) لأهداف التسليم؛ تُرفض المعرّفات الرقمية الخام. +- تكون أسماء slug الخاصة بـ guild بأحرف صغيرة مع استبدال المسافات بـ `-`؛ وتستخدم مفاتيح القنوات الاسم المحوّل إلى slug ‏(من دون `#`). يُفضَّل استخدام معرّفات 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` للتعطيل) + - `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). + - `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` حالة التوفر أثناء التشغيل بحالة حضور البوت (سليم => online، متدهور => idle، مستنزف => dnd) ويسمح بتجاوزات اختيارية لنص الحالة. -- يعيد `channels.discord.dangerouslyAllowNameMatching` تفعيل المطابقة بحسب الاسم/الوسم القابل للتغيير (وضع توافق طارئ). -- `channels.discord.execApprovals`: تسليم موافقات exec الأصلية في Discord وتخويل الموافقين. - - `enabled`: `true` أو `false` أو `"auto"` (الافتراضي). في الوضع التلقائي، تُفعَّل موافقات exec عندما يمكن حلّ الموافقين من `approvers` أو `commands.ownerAllowFrom`. - - `approvers`: معرّفات مستخدمي Discord المسموح لهم بالموافقة على طلبات exec. تعود إلى `commands.ownerAllowFrom` عند الحذف. +- تمرِّر `channels.discord.voice.daveEncryption` و`channels.discord.voice.decryptionFailureTolerance` إلى خيارات DAVE في `@discordjs/voice` ‏(`true` و`24` افتراضياً). +- يحاول OpenClaw أيضاً استعادة استقبال الصوت عبر مغادرة جلسة الصوت ثم إعادة الانضمام إليها بعد تكرار حالات فشل فك التشفير. +- يُعد `channels.discord.streaming` مفتاح وضع البث القياسي. وتُرحَّل تلقائياً القيم القديمة `streamMode` وقيم `streaming` المنطقية. +- يربط `channels.discord.autoPresence` حالة التوفّر وقت التشغيل بحضور البوت (سليم => online، متدهور => idle، exhausted => dnd) ويسمح بتجاوزات اختيارية لنص الحالة. +- يعيد `channels.discord.dangerouslyAllowNameMatching` تفعيل المطابقة بالأسماء/الوسوم القابلة للتغيير (وضع توافق طارئ). +- `channels.discord.execApprovals`: تسليم موافقات exec الأصلية في Discord وتفويض الموافقين. + - `enabled`: ‏`true` أو `false` أو `"auto"` ‏(الافتراضي). في الوضع التلقائي، تُفعَّل موافقات exec عندما يمكن حل الموافقين من `approvers` أو `commands.ownerAllowFrom`. + - `approvers`: معرّفات مستخدمي Discord المسموح لهم بالموافقة على طلبات exec. وتعود القيمة إلى `commands.ownerAllowFrom` عند حذفها. - `agentFilter`: قائمة سماح اختيارية لمعرّفات الوكلاء. احذفها لتمرير الموافقات لجميع الوكلاء. - - `sessionFilter`: أنماط اختيارية لمفاتيح الجلسات (سلسلة فرعية أو regex). - - `target`: مكان إرسال طلبات الموافقة. يرسل `"dm"` (الافتراضي) إلى الرسائل الخاصة للموافقين، ويرسل `"channel"` إلى القناة الأصلية، ويرسل `"both"` إلى الاثنين. عندما يتضمن الهدف `"channel"`، لا تكون الأزرار قابلة للاستخدام إلا من قبل الموافقين الذين تم حلّهم. - - `cleanupAfterResolve`: عندما تكون قيمته `true`، يحذف رسائل الموافقة الخاصة بعد الموافقة أو الرفض أو انتهاء المهلة. + - `sessionFilter`: أنماط مفاتيح الجلسات الاختيارية (substring أو regex). + - `target`: مكان إرسال مطالبات الموافقة. يرسل `"dm"` ‏(الافتراضي) إلى الرسائل المباشرة للموافق، ويرسل `"channel"` إلى القناة الأصلية، ويرسل `"both"` إلى الاثنين معاً. وعندما يتضمن الهدف `"channel"`، لا تكون الأزرار قابلة للاستخدام إلا من قبل الموافقين الذين تم حلهم. + - `cleanupAfterResolve`: عند ضبطه على `true`، يحذف رسائل الموافقة المباشرة بعد الموافقة أو الرفض أو انتهاء المهلة. -**أوضاع إشعارات التفاعل:** `off` (لا شيء)، و`own` (رسائل البوت، الافتراضي)، و`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`. -- استخدم `spaces/` أو `users/` كأهداف للتسليم. -- يعيد `channels.googlechat.dangerouslyAllowNameMatching` تفعيل مطابقة البريد الإلكتروني القابلة للتغيير (وضع توافق طارئ). +- JSON لحساب الخدمة: مضمن (`serviceAccount`) أو معتمد على ملف (`serviceAccountFile`). +- كما أن SecretRef لحساب الخدمة مدعوم أيضاً (`serviceAccountRef`). +- القيم الاحتياطية من البيئة: `GOOGLE_CHAT_SERVICE_ACCOUNT` أو `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. +- استخدم `spaces/` أو `users/` لأهداف التسليم. +- يعيد `channels.googlechat.dangerouslyAllowNameMatching` تفعيل المطابقة بعناوين البريد الإلكتروني القابلة للتغيير (وضع توافق طارئ). ### Slack @@ -464,35 +464,35 @@ x-i18n: } ``` -- **وضع Socket** يتطلب كِلا `botToken` و`appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` كبديل من البيئة للحساب الافتراضي). -- **وضع HTTP** يتطلب `botToken` بالإضافة إلى `signingSecret` (على الجذر أو لكل حساب). +- يتطلب **Socket mode** كلاً من `botToken` و`appToken` ‏(`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` كقيمة احتياطية من البيئة للحساب الافتراضي). +- يتطلب **HTTP mode** ‏`botToken` بالإضافة إلى `signingSecret` ‏(على المستوى الجذري أو لكل حساب). - تقبل `botToken` و`appToken` و`signingSecret` و`userToken` سلاسل نصية صريحة أو كائنات SecretRef. -- تكشف لقطات حساب Slack عن حقول مصدر/حالة لكل بيانات الاعتماد مثل +- تعرض لقطات حساب Slack حقول مصدر/حالة لكل بيانات اعتماد مثل `botTokenSource` و`botTokenStatus` و`appTokenStatus`، وفي وضع HTTP، - `signingSecretStatus`. تعني `configured_unavailable` أن الحساب - مُعدّ عبر SecretRef لكن مسار الأمر/التشغيل الحالي لم يتمكن + `signingSecretStatus`. وتعني `configured_unavailable` أن الحساب + مضبوط عبر SecretRef لكن مسار الأمر/وقت التشغيل الحالي لم يتمكن من حل قيمة السر. -- يحظر `configWrites: false` عمليات كتابة الإعدادات التي يبدأها Slack. -- يتجاوز `channels.slack.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُعدًّا. -- المفتاح القياسي لوضع البث في Slack هو `channels.slack.streaming.mode`. ويتحكم `channels.slack.streaming.nativeTransport` في ناقل البث الأصلي لـ Slack. وتُنقل تلقائيًا القيم القديمة `streamMode` وقيم `streaming` المنطقية و`nativeStreaming`. -- استخدم `user:` (رسالة خاصة) أو `channel:` كأهداف للتسليم. +- يحظر `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 بالإضافة إلى حالة الخيط بأسلوب Slack assistant "is typing..." هدف رد داخل خيط. تبقى الرسائل الخاصة ذات المستوى الأعلى خارج الخيط افتراضيًا، لذلك تستخدم `typingReaction` أو التسليم العادي بدلًا من المعاينة بأسلوب الخيط. -- تضيف `typingReaction` تفاعلًا مؤقتًا إلى رسالة Slack الواردة أثناء تشغيل الرد، ثم تزيله عند الاكتمال. استخدم رمزًا مختصرًا لإيموجي 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 الواردة أثناء تنفيذ الرد، ثم تزيله عند الاكتمال. استخدم shortcode لرمز Slack التعبيري مثل `"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 | مفعّل | قائمة الإيموجي المخصصة | +| ------------ | ------- | ---------------------- | +| reactions | مفعّل | التفاعل + سرد التفاعلات | +| messages | مفعّل | قراءة/إرسال/تحرير/حذف | +| pins | مفعّل | تثبيت/إلغاء تثبيت/سرد | +| memberInfo | مفعّل | معلومات العضو | +| emojiList | مفعّل | قائمة الرموز التعبيرية المخصصة | ### Mattermost @@ -516,7 +516,7 @@ x-i18n: native: true, // opt-in nativeSkills: true, callbackPath: "/api/channels/mattermost/command", - // عنوان URL صريح اختياري لبيئات النشر العامة/ذات الوكيل العكسي + // Optional explicit URL for reverse-proxy/public deployments callbackUrl: "https://gateway.example.com/api/channels/mattermost/command", }, textChunkLimit: 4000, @@ -526,23 +526,23 @@ x-i18n: } ``` -أوضاع الدردشة: `oncall` (الرد عند @-mention، وهو الافتراضي)، و`onmessage` (كل رسالة)، و`onchar` (الرسائل التي تبدأ ببادئة تشغيل). +أوضاع الدردشة: `oncall` ‏(الرد عند @-mention، الافتراضي)، و`onmessage` ‏(كل رسالة)، و`onchar` ‏(الرسائل التي تبدأ ببادئة المشغّل). عند تفعيل الأوامر الأصلية في Mattermost: -- يجب أن يكون `commands.callbackPath` مسارًا (على سبيل المثال `/api/channels/mattermost/command`) وليس عنوان URL كاملًا. +- يجب أن يكون `commands.callbackPath` مساراً (على سبيل المثال `/api/channels/mattermost/command`) وليس عنوان URL كاملاً. - يجب أن يُحل `commands.callbackUrl` إلى نقطة نهاية Gateway الخاصة بـ OpenClaw وأن يكون قابلاً للوصول من خادم Mattermost. -- تُوثّق استدعاءات slash الأصلية الراجعة باستخدام الرموز المميّزة الخاصة بكل أمر - التي يعيدها Mattermost أثناء تسجيل أوامر slash. إذا فشل التسجيل أو لم - تُفعَّل أي أوامر، يرفض OpenClaw الاستدعاءات الراجعة برسالة +- تتم مصادقة استدعاءات slash الأصلية باستخدام الرموز المميزة لكل أمر التي يعيدها + Mattermost أثناء تسجيل أوامر slash. إذا فشل التسجيل أو لم تُفعَّل أي + أوامر، يرفض OpenClaw الاستدعاءات مع `Unauthorized: invalid command token.` -- بالنسبة إلى مضيفي الاستدعاء الراجع من النوع private/tailnet/internal، قد يتطلب 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 +551,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 +563,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,8 +587,8 @@ x-i18n: ``` - مسارات المفاتيح الأساسية المغطاة هنا: `channels.bluebubbles` و`channels.bluebubbles.dmPolicy`. -- يتجاوز `channels.bluebubbles.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُعدًّا. -- يمكن لإدخالات `bindings[]` على المستوى الأعلى مع `type: "acp"` ربط محادثات BlueBubbles بجلسات ACP دائمة. استخدم BlueBubbles handle أو سلسلة الهدف (`chat_id:*` أو `chat_guid:*` أو `chat_identifier:*`) في `match.peer.id`. دلالات الحقول المشتركة: [وكلاء ACP](/ar/tools/acp-agents#channel-specific-settings). +- يتجاوز `channels.bluebubbles.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مضبوطاً. +- يمكن لإدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` ربط محادثات BlueBubbles بجلسات ACP دائمة. استخدم BlueBubbles handle أو سلسلة target ‏(`chat_id:*` أو `chat_guid:*` أو `chat_identifier:*`) في `match.peer.id`. دلالات الحقول المشتركة: [وكلاء ACP](/ar/tools/acp-agents#channel-specific-settings). - إعداد قناة BlueBubbles الكامل موثّق في [BlueBubbles](/ar/channels/bluebubbles). ### iMessage @@ -617,17 +617,17 @@ 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. +- يُفضَّل استخدام أهداف `chat_id:`. استخدم `imsg chats --limit 20` لسرد الدردشات. +- يمكن أن يشير `cliPath` إلى SSH wrapper؛ اضبط `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 دائمة. استخدم handle مُطبّعًا أو هدف دردشة صريحًا (`chat_id:*` أو `chat_guid:*` أو `chat_identifier:*`) في `match.peer.id`. دلالات الحقول المشتركة: [وكلاء ACP](/ar/tools/acp-agents#channel-specific-settings). +- يستخدم SCP التحقق الصارم من مفتاح المضيف، لذا تأكد من أن مفتاح مضيف relay موجود مسبقاً في `~/.ssh/known_hosts`. +- `channels.imessage.configWrites`: السماح أو الرفض لعمليات كتابة الإعدادات التي تبدأ من iMessage. +- يمكن لإدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` ربط محادثات iMessage بجلسات ACP دائمة. استخدم handle مطبعاً أو هدف دردشة صريحاً (`chat_id:*` أو `chat_guid:*` أو `chat_identifier:*`) في `match.peer.id`. دلالات الحقول المشتركة: [وكلاء ACP](/ar/tools/acp-agents#channel-specific-settings). - + ```bash #!/usr/bin/env bash @@ -638,7 +638,7 @@ exec ssh -T gateway-host imsg "$@" ### Matrix -تتم إدارة Matrix عبر extension وتُضبط ضمن `channels.matrix`. +يعمل Matrix عبر extension ويُضبط ضمن `channels.matrix`. ```json5 { @@ -668,25 +668,25 @@ exec ssh -T gateway-host imsg "$@" } ``` -- تستخدم مصادقة الرمز `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`. +- تستخدم مصادقة الرمز المميز `accessToken`؛ وتستخدم مصادقة كلمة المرور `userId` + `password`. +- يمرّر `channels.matrix.proxy` حركة HTTP الخاصة بـ Matrix عبر HTTP(S) proxy صريح. ويمكن للحسابات المسمّاة تجاوزه عبر `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`: أنماط اختيارية لمفاتيح الجلسات (سلسلة فرعية أو regex). - - `target`: مكان إرسال طلبات الموافقة. `"dm"` (الافتراضي)، أو `"channel"` (الغرفة الأصلية)، أو `"both"`. + - `sessionFilter`: أنماط مفاتيح الجلسات الاختيارية (substring أو regex). + - `target`: مكان إرسال مطالبات الموافقة. `"dm"` ‏(الافتراضي) أو `"channel"` ‏(الغرفة الأصلية) أو `"both"`. - تجاوزات لكل حساب: `channels.matrix.accounts..execApprovals`. -- يتحكم `channels.matrix.dm.sessionScope` في كيفية تجميع رسائل Matrix الخاصة ضمن الجلسات: يشارك `per-user` (الافتراضي) حسب النظير الموجَّه، بينما يعزل `per-room` كل غرفة رسائل خاصة على حدة. -- تستخدم فحوصات الحالة في Matrix وعمليات البحث المباشر في الدليل سياسة الوكيل نفسها المستخدمة لحركة التشغيل. -- إعداد Matrix الكامل، وقواعد الاستهداف، وأمثلة الإعداد موثقة في [Matrix](/ar/channels/matrix). +- يتحكم `channels.matrix.dm.sessionScope` في كيفية تجميع الرسائل المباشرة في Matrix ضمن الجلسات: `per-user` ‏(الافتراضي) يشارك حسب النظير الموجّه، بينما `per-room` يعزل كل غرفة رسالة مباشرة. +- تستخدم مجسات حالة Matrix وعمليات البحث الحية في الدليل سياسة proxy نفسها الخاصة بحركة وقت التشغيل. +- إعداد Matrix الكامل وقواعد الاستهداف وأمثلة الإعداد موثقة في [Matrix](/ar/channels/matrix). ### Microsoft Teams -تتم إدارة Microsoft Teams عبر extension وتُضبط ضمن `channels.msteams`. +يعمل Microsoft Teams عبر extension ويُضبط ضمن `channels.msteams`. ```json5 { @@ -702,11 +702,11 @@ exec ssh -T gateway-host imsg "$@" ``` - مسارات المفاتيح الأساسية المغطاة هنا: `channels.msteams` و`channels.msteams.configWrites`. -- إعداد Teams الكامل (بيانات الاعتماد، وWebhook، وسياسة الرسائل الخاصة/المجموعات، والتجاوزات لكل فريق/قناة) موثّق في [Microsoft Teams](/ar/channels/msteams). +- إعداد Teams الكامل (بيانات الاعتماد، وWebhook، وسياسة الرسائل المباشرة/المجموعات، والتجاوزات لكل فريق/قناة) موثّق في [Microsoft Teams](/ar/channels/msteams). ### IRC -تتم إدارة IRC عبر extension وتُضبط ضمن `channels.irc`. +يعمل IRC عبر extension ويُضبط ضمن `channels.irc`. ```json5 { @@ -728,8 +728,8 @@ exec ssh -T gateway-host imsg "$@" ``` - مسارات المفاتيح الأساسية المغطاة هنا: `channels.irc` و`channels.irc.dmPolicy` و`channels.irc.configWrites` و`channels.irc.nickserv.*`. -- يتجاوز `channels.irc.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُعدًّا. -- إعداد قناة IRC الكامل (المضيف/المنفذ/TLS/القنوات/قوائم السماح/تقييد الذكر) موثّق في [IRC](/ar/channels/irc). +- يتجاوز `channels.irc.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مضبوطاً. +- إعداد قناة IRC الكامل (host/port/TLS/channels/allowlists/mention gating) موثّق في [IRC](/ar/channels/irc). ### تعدد الحسابات (جميع القنوات) @@ -754,28 +754,28 @@ exec ssh -T gateway-host imsg "$@" } ``` -- يُستخدم `default` عند حذف `accountId` (CLI + التوجيه). -- لا تُطبّق رموز البيئة إلا على الحساب **الافتراضي**. +- يُستخدم `default` عند حذف `accountId` ‏(CLI + التوجيه). +- تنطبق رموز البيئة فقط على الحساب **الافتراضي**. - تنطبق إعدادات القناة الأساسية على جميع الحسابات ما لم يتم تجاوزها لكل حساب. - استخدم `bindings[].match.accountId` لتوجيه كل حساب إلى وكيل مختلف. -- إذا أضفت حسابًا غير افتراضي عبر `openclaw channels add` (أو عبر onboarding للقناة) بينما لا تزال تستخدم إعداد قناة من المستوى الأعلى بحساب واحد، فإن OpenClaw ينقل أولًا القيم العلوية ذات الحساب الواحد والمقيّدة بالحساب إلى خريطة حسابات القناة حتى يستمر الحساب الأصلي في العمل. تنقل معظم القنوات هذه القيم إلى `channels..accounts.default`؛ ويمكن لـ Matrix بدلًا من ذلك الحفاظ على هدف مسمّى/افتراضي موجود ومطابق. -- تستمر الارتباطات الحالية الخاصة بالقناة فقط (من دون `accountId`) في مطابقة الحساب الافتراضي؛ وتبقى الارتباطات المقيّدة بالحساب اختيارية. -- يقوم `openclaw doctor --fix` أيضًا بإصلاح الأشكال المختلطة عبر نقل القيم العلوية ذات الحساب الواحد والمقيّدة بالحساب إلى الحساب المُرقّى المختار لتلك القناة. تستخدم معظم القنوات `accounts.default`؛ ويمكن لـ Matrix بدلًا من ذلك الحفاظ على هدف مسمّى/افتراضي موجود ومطابق. +- إذا أضفت حساباً غير افتراضي عبر `openclaw channels add` ‏(أو onboarding للقناة) بينما لا تزال على إعداد قناة أحادي الحساب على المستوى الأعلى، فإن OpenClaw يرقّي أولاً القيم أحادية الحساب على المستوى الأعلى ذات النطاق الحسابي إلى خريطة حسابات القناة بحيث يستمر الحساب الأصلي في العمل. تنقل معظم القنوات هذه القيم إلى `channels..accounts.default`؛ ويمكن لـ Matrix بدلاً من ذلك الاحتفاظ بهدف مسمّى/افتراضي موجود ومطابق. +- تستمر ارتباطات القنوات الحالية فقط (من دون `accountId`) في مطابقة الحساب الافتراضي؛ وتظل الارتباطات ذات النطاق الحسابي اختيارية. +- يقوم `openclaw doctor --fix` أيضاً بإصلاح الأشكال المختلطة عبر نقل القيم أحادية الحساب على المستوى الأعلى ذات النطاق الحسابي إلى الحساب المُرقّى المختار لتلك القناة. تستخدم معظم القنوات `accounts.default`؛ ويمكن لـ Matrix بدلاً من ذلك الاحتفاظ بهدف مسمّى/افتراضي موجود ومطابق. -### قنوات extension الأخرى +### قنوات extension أخرى -تُضبط العديد من قنوات extension على شكل `channels.` وتُوثَّق في صفحات القنوات المخصصة لها (مثل Feishu وMatrix وLINE وNostr وZalo وNextcloud Talk وSynology Chat وTwitch). +تُضبط العديد من قنوات extension كـ `channels.` وتوثَّق في صفحات القنوات المخصصة لها (على سبيل المثال Feishu وMatrix وLINE وNostr وZalo وNextcloud Talk وSynology Chat وTwitch). راجع فهرس القنوات الكامل: [القنوات](/ar/channels). -### تقييد الذكر في دردشات المجموعات +### تقييد الإشارة في الدردشات الجماعية -تكون رسائل المجموعات افتراضيًا **مطلِبة للذكر** (ذكر عبر البيانات الوصفية أو عبر أنماط regex آمنة). ينطبق ذلك على دردشات مجموعات WhatsApp وTelegram وDiscord وGoogle Chat وiMessage. +تتطلب رسائل المجموعات افتراضياً **وجود إشارة** (إشارة ضمن البيانات الوصفية أو أنماط regex آمنة). ينطبق ذلك على دردشات المجموعات في WhatsApp وTelegram وDiscord وGoogle Chat وiMessage. -**أنواع الذكر:** +**أنواع الإشارات:** -- **الذكر عبر البيانات الوصفية**: إشارات @ الأصلية في المنصة. تُتجاهل في وضع الدردشة الذاتية في WhatsApp. -- **أنماط النص**: أنماط regex آمنة ضمن `agents.list[].groupChat.mentionPatterns`. تُتجاهل الأنماط غير الصالحة والتكرار المتداخل غير الآمن. -- لا يُفرض تقييد الذكر إلا عندما يكون الاكتشاف ممكنًا (الذكر الأصلي أو وجود نمط واحد على الأقل). +- **إشارات البيانات الوصفية**: إشارات @-mention الأصلية للمنصة. يتم تجاهلها في وضع الدردشة الذاتية في WhatsApp. +- **أنماط النص**: أنماط regex آمنة في `agents.list[].groupChat.mentionPatterns`. يتم تجاهل الأنماط غير الصالحة والتكرار المتداخل غير الآمن. +- لا يُفرض تقييد الإشارة إلا عندما يكون الاكتشاف ممكناً (إشارات أصلية أو وجود نمط واحد على الأقل). ```json5 { @@ -788,9 +788,9 @@ exec ssh -T gateway-host imsg "$@" } ``` -يضبط `messages.groupChat.historyLimit` القيمة الافتراضية العامة. ويمكن للقنوات تجاوزها باستخدام `channels..historyLimit` (أو لكل حساب). اضبط القيمة على `0` للتعطيل. +يضبط `messages.groupChat.historyLimit` القيمة الافتراضية العامة. ويمكن للقنوات تجاوزها عبر `channels..historyLimit` ‏(أو لكل حساب). اضبط `0` للتعطيل. -#### حدود سجل الرسائل الخاصة +#### حدود سجل الرسائل المباشرة ```json5 { @@ -805,13 +805,13 @@ exec ssh -T gateway-host imsg "$@" } ``` -آلية الحل: تجاوز لكل رسالة خاصة → افتراضي المزوّد → بلا حد (الاحتفاظ بكل شيء). +آلية الحل: تجاوز لكل رسالة مباشرة → افتراضي الموفّر → بلا حد (الاحتفاظ بكل شيء). المدعوم: `telegram` و`whatsapp` و`discord` و`slack` و`signal` و`imessage` و`msteams`. #### وضع الدردشة الذاتية -أدرج رقمك الخاص في `allowFrom` لتفعيل وضع الدردشة الذاتية (يتجاهل إشارات @ الأصلية، ويرد فقط على أنماط النص): +ضمّن رقمك الخاص في `allowFrom` لتفعيل وضع الدردشة الذاتية (يتجاهل إشارات @-mention الأصلية، ويستجيب فقط لأنماط النص): ```json5 { @@ -861,38 +861,38 @@ exec ssh -T gateway-host imsg "$@" -- تهيّئ هذه الكتلة أسطح الأوامر. لفهرس الأوامر الحالي المضمّن + المجمّع، راجع [أوامر الشرطة المائلة](/ar/tools/slash-commands). -- هذه الصفحة هي **مرجع لمفاتيح الإعدادات**، وليست فهرس الأوامر الكامل. الأوامر المملوكة للقنوات/Plugin مثل QQ Bot ‏`/bot-ping` و`/bot-help` و`/bot-logs`، وLINE ‏`/card`، وdevice-pair ‏`/pair`، وmemory ‏`/dreaming`، وphone-control ‏`/phone`، وTalk ‏`/voice` موثقة في صفحات القنوات/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`. +- تضبط هذه الكتلة أسطح الأوامر. لفهرس الأوامر الحالي المدمج + المضمّن، راجع [أوامر الشرطة المائلة](/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` إدخالات إضافية إلى قائمة بوت Telegram. - يفعّل `bash: true` الأمر `! ` لصدفة المضيف. ويتطلب `tools.elevated.enabled` وأن يكون المرسل ضمن `tools.elevated.allowFrom.`. -- يفعّل `config: true` الأمر `/config` (لقراءة/كتابة `openclaw.json`). بالنسبة إلى عملاء Gateway ‏`chat.send`، تتطلب كتابات `/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....`). +- يفعّل `config: true` الأمر `/config` ‏(لقراءة/كتابة `openclaw.json`). وبالنسبة إلى عملاء Gateway ‏`chat.send`، تتطلب أيضاً عمليات الكتابة الدائمة عبر `/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"` إلى تجزئة معرّفات المالك في موجّه النظام. اضبط `ownerDisplaySecret` للتحكم في التجزئة. -- يكون `allowFrom` لكل مزوّد. وعند ضبطه، يصبح **مصدر التفويض الوحيد** (ويتم تجاهل قوائم السماح/الاقتران الخاصة بالقناة و`useAccessGroups`). -- يسمح `useAccessGroups: false` للأوامر بتجاوز سياسات مجموعات الوصول عندما لا يكون `allowFrom` مضبوطًا. +- `ownerAllowFrom` هي قائمة السماح الصريحة للمالك لأوامر/أدوات المالك فقط. وهي منفصلة عن `allowFrom`. +- يقوم `ownerDisplay: "hash"` بتجزئة معرّفات المالك في system prompt. اضبط `ownerDisplaySecret` للتحكم في التجزئة. +- `allowFrom` خاص بكل موفّر. عند ضبطه، يكون هو **مصدر التفويض الوحيد** (ويتم تجاهل قوائم السماح/الاقتران الخاصة بالقنوات و`useAccessGroups`). +- يسمح `useAccessGroups: false` للأوامر بتجاوز سياسات مجموعات الوصول عندما لا يكون `allowFrom` مضبوطاً. - خريطة وثائق الأوامر: - - الفهرس المضمّن + المجمّع: [أوامر الشرطة المائلة](/ar/tools/slash-commands) + - الفهرس المدمج + المضمّن: [أوامر الشرطة المائلة](/ar/tools/slash-commands) - أسطح الأوامر الخاصة بالقنوات: [القنوات](/ar/channels) - - أوامر QQ Bot: [QQ Bot](/ar/channels/qqbot) + - أوامر QQ Bot: ‏[QQ Bot](/ar/channels/qqbot) - أوامر الاقتران: [الاقتران](/ar/channels/pairing) - - أمر البطاقة في LINE: [LINE](/ar/channels/line) + - أمر البطاقة في LINE: ‏[LINE](/ar/channels/line) - Dreaming للذاكرة: [Dreaming](/ar/concepts/dreaming) --- -## الإعدادات الافتراضية للوكيل +## القيم الافتراضية للوكلاء ### `agents.defaults.workspace` @@ -906,7 +906,7 @@ exec ssh -T gateway-host imsg "$@" ### `agents.defaults.repoRoot` -جذر مستودع اختياري يظهر في سطر Runtime في موجّه النظام. إذا لم يُضبط، يكتشفه OpenClaw تلقائيًا عبر الصعود من مساحة العمل. +جذر المستودع الاختياري المعروض في سطر Runtime ضمن system prompt. إذا لم يُضبط، يكتشفه OpenClaw تلقائياً عبر الصعود من مساحة العمل. ```json5 { @@ -916,7 +916,7 @@ exec ssh -T gateway-host imsg "$@" ### `agents.defaults.skills` -قائمة سماح افتراضية اختيارية لـ Skills للوكلاء الذين لا يضبطون +قائمة السماح الافتراضية الاختيارية لـ Skills للوكلاء الذين لا يضبطون `agents.list[].skills`. ```json5 @@ -926,17 +926,17 @@ exec ssh -T gateway-host imsg "$@" list: [ { id: "writer" }, // يرث github وweather { id: "docs", skills: ["docs-search"] }, // يستبدل القيم الافتراضية - { id: "locked-down", skills: [] }, // بلا Skills + { id: "locked-down", skills: [] }, // بدون 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` @@ -950,9 +950,9 @@ exec ssh -T gateway-host imsg "$@" ### `agents.defaults.contextInjection` -يتحكم في وقت إدراج ملفات bootstrap الخاصة بمساحة العمل في موجّه النظام. الافتراضي: `"always"`. +يتحكم في وقت حقن ملفات bootstrap الخاصة بمساحة العمل في system prompt. الافتراضي: `"always"`. -- `"continuation-skip"`: تتخطى دورات الاستكمال الآمنة (بعد اكتمال رد المساعد) إعادة إدراج bootstrap الخاص بمساحة العمل، مما يقلل حجم الموجّه. وتظل عمليات Heartbeat وإعادات المحاولة بعد Compaction تعيد بناء السياق. +- `"continuation-skip"`: تتخطى أدوار المتابعة الآمنة (بعد اكتمال رد من المساعد) إعادة حقن bootstrap الخاص بمساحة العمل، مما يقلل حجم prompt. تظل عمليات Heartbeat وعمليات إعادة المحاولة بعد Compaction تعيد بناء السياق. ```json5 { @@ -962,7 +962,7 @@ exec ssh -T gateway-host imsg "$@" ### `agents.defaults.bootstrapMaxChars` -الحد الأقصى للأحرف لكل ملف bootstrap في مساحة العمل قبل الاقتطاع. الافتراضي: `20000`. +الحد الأقصى لعدد الأحرف لكل ملف bootstrap في مساحة العمل قبل الاقتطاع. الافتراضي: `20000`. ```json5 { @@ -972,7 +972,7 @@ exec ssh -T gateway-host imsg "$@" ### `agents.defaults.bootstrapTotalMaxChars` -الحد الأقصى لإجمالي الأحرف المُدرجة عبر جميع ملفات bootstrap الخاصة بمساحة العمل. الافتراضي: `150000`. +الحد الأقصى لإجمالي الأحرف المحقونة عبر جميع ملفات bootstrap في مساحة العمل. الافتراضي: `150000`. ```json5 { @@ -982,12 +982,12 @@ exec ssh -T gateway-host imsg "$@" ### `agents.defaults.bootstrapPromptTruncationWarning` -يتحكم في نص التحذير المرئي للوكيل عندما يتم اقتطاع سياق bootstrap. +يتحكم في نص التحذير المرئي للوكيل عند اقتطاع سياق bootstrap. الافتراضي: `"once"`. -- `"off"`: لا يُدرج نص التحذير في موجّه النظام مطلقًا. -- `"once"`: يدرج التحذير مرة واحدة لكل بصمة اقتطاع فريدة (موصى به). -- `"always"`: يدرج التحذير في كل تشغيل عندما يوجد اقتطاع. +- `"off"`: عدم حقن نص التحذير في system prompt مطلقاً. +- `"once"`: حقن التحذير مرة واحدة لكل توقيع اقتطاع فريد (مستحسن). +- `"always"`: حقن التحذير في كل تشغيل عند وجود اقتطاع. ```json5 { @@ -995,13 +995,149 @@ exec ssh -T gateway-host imsg "$@" } ``` +### خريطة ملكية ميزانية السياق + +يحتوي OpenClaw على عدة ميزانيات كبيرة الحجم لـ prompt/السياق، وهي +مقسّمة عمداً حسب النظام الفرعي بدلاً من تمريرها جميعاً عبر إعداد +عام واحد. + +- `agents.defaults.bootstrapMaxChars` / + `agents.defaults.bootstrapTotalMaxChars`: + حقن bootstrap العادي لمساحة العمل. +- `agents.defaults.startupContext.*`: + التمهيد الأولي لمرة واحدة في `/new` و`/reset`، بما في ذلك ملفات + `memory/*.md` اليومية الحديثة. +- `skills.limits.*`: + قائمة Skills المضغوطة المحقونة في system prompt. +- `agents.defaults.contextLimits.*`: + مقتطفات وقت التشغيل المحدودة والكتل المملوكة لوقت التشغيل المحقونة. +- `memory.qmd.limits.*`: + حجم مقتطفات البحث المفهرس في الذاكرة والحقن. + +استخدم التجاوز المطابق لكل وكيل فقط عندما يحتاج وكيل واحد إلى +ميزانية مختلفة: + +- `agents.list[].skillsLimits.maxSkillsPromptChars` +- `agents.list[].contextLimits.*` + +#### `agents.defaults.startupContext` + +يتحكم في التمهيد الأولي عند أول دور، والمحقون في تشغيلات `/new` و`/reset` +العادية. + +```json5 +{ + agents: { + defaults: { + startupContext: { + enabled: true, + applyOn: ["new", "reset"], + dailyMemoryDays: 2, + maxFileBytes: 16384, + maxFileChars: 1200, + maxTotalChars: 2800, + }, + }, + }, +} +``` + +#### `agents.defaults.contextLimits` + +القيم الافتراضية المشتركة لأسطح سياق وقت التشغيل المحدودة. + +```json5 +{ + agents: { + defaults: { + contextLimits: { + memoryGetMaxChars: 12000, + memoryGetDefaultLines: 120, + toolResultMaxChars: 16000, + postCompactionMaxChars: 1800, + }, + }, + }, +} +``` + +- `memoryGetMaxChars`: الحد الافتراضي لمقتطف `memory_get` قبل إضافة + بيانات وصفية للاقتطاع وإشعار المتابعة. +- `memoryGetDefaultLines`: نافذة الأسطر الافتراضية لـ `memory_get` عند + حذف `lines`. +- `toolResultMaxChars`: الحد المستخدم لنتائج الأدوات الحية للنتائج + المحفوظة واستعادة الفائض. +- `postCompactionMaxChars`: حد مقتطف `AGENTS.md` المستخدم أثناء حقن + التحديث بعد Compaction. + +#### `agents.list[].contextLimits` + +تجاوز لكل وكيل لإعدادات `contextLimits` المشتركة. ترث الحقول المحذوفة +من `agents.defaults.contextLimits`. + +```json5 +{ + agents: { + defaults: { + contextLimits: { + memoryGetMaxChars: 12000, + toolResultMaxChars: 16000, + }, + }, + list: [ + { + id: "tiny-local", + contextLimits: { + memoryGetMaxChars: 6000, + toolResultMaxChars: 8000, + }, + }, + ], + }, +} +``` + +#### `skills.limits.maxSkillsPromptChars` + +الحد العام لقائمة Skills المضغوطة المحقونة في system prompt. لا +يؤثر هذا في قراءة ملفات `SKILL.md` عند الطلب. + +```json5 +{ + skills: { + limits: { + maxSkillsPromptChars: 18000, + }, + }, +} +``` + +#### `agents.list[].skillsLimits.maxSkillsPromptChars` + +تجاوز لكل وكيل لميزانية prompt الخاصة بـ Skills. + +```json5 +{ + agents: { + list: [ + { + id: "tiny-local", + skillsLimits: { + maxSkillsPromptChars: 6000, + }, + }, + ], + }, +} +``` + ### `agents.defaults.imageMaxDimensionPx` -الحد الأقصى لحجم البكسل لأطول ضلع في الصورة داخل كتل صور السجل/الأداة قبل استدعاءات المزوّد. +أقصى حجم بالبكسل لأطول ضلع في الصورة ضمن كتل الصور في السجل/الأدوات قبل استدعاءات الموفّر. الافتراضي: `1200`. -تقلل القيم الأقل عادةً من استخدام رموز الرؤية وحجم حمولة الطلب في التشغيلات التي تتضمن كثيرًا من لقطات الشاشة. -وتحافظ القيم الأعلى على مزيد من التفاصيل البصرية. +تؤدي القيم الأقل عادةً إلى تقليل استخدام vision-token وحجم حمولة الطلب في التشغيلات التي تكثر فيها لقطات الشاشة. +وتحافظ القيم الأعلى على قدر أكبر من التفاصيل البصرية. ```json5 { @@ -1011,7 +1147,7 @@ exec ssh -T gateway-host imsg "$@" ### `agents.defaults.userTimezone` -المنطقة الزمنية لسياق موجّه النظام (وليس للطوابع الزمنية للرسائل). وتعود إلى المنطقة الزمنية للمضيف إذا لم تُضبط. +المنطقة الزمنية لسياق system prompt ‏(وليست للطوابع الزمنية للرسائل). وتعود إلى المنطقة الزمنية للمضيف عند عدم ضبطها. ```json5 { @@ -1021,7 +1157,7 @@ exec ssh -T gateway-host imsg "$@" ### `agents.defaults.timeFormat` -تنسيق الوقت في موجّه النظام. الافتراضي: `auto` (تفضيل نظام التشغيل). +تنسيق الوقت في system prompt. الافتراضي: `auto` ‏(تفضيل نظام التشغيل). ```json5 { @@ -1059,7 +1195,7 @@ exec ssh -T gateway-host imsg "$@" primary: "anthropic/claude-opus-4-6", fallbacks: ["openai/gpt-5.4-mini"], }, - params: { cacheRetention: "long" }, // معلمات المزوّد الافتراضية العامة + params: { cacheRetention: "long" }, // global default provider params embeddedHarness: { runtime: "auto", // auto | pi | registered harness id, e.g. codex fallback: "pi", // pi | none @@ -1078,49 +1214,49 @@ exec ssh -T gateway-host imsg "$@" } ``` -- يقبل `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-1` لـ OpenAI Images. - - إذا اخترت مزودًا/نموذجًا مباشرةً، فاضبط أيضًا مصادقة/مفتاح API المطابق للمزوّد (على سبيل المثال `GEMINI_API_KEY` أو `GOOGLE_API_KEY` لـ `google/*`، و`OPENAI_API_KEY` لـ `openai/*`، و`FAL_KEY` لـ `fal/*`). - - إذا حُذف، فلا يزال `image_generate` قادرًا على استنتاج افتراضي مزوّد مدعوم بالمصادقة. فهو يحاول أولًا المزوّد الافتراضي الحالي، ثم بقية مزوّدي توليد الصور المسجّلين بترتيب معرّف المزوّد. -- يقبل `musicGenerationModel` إما سلسلة (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). - - يُستخدم بواسطة قدرة توليد الموسيقى المشتركة وبواسطة الأداة المضمّنة `music_generate`. +- `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-1` لـ OpenAI Images. + - إذا حددت موفّراً/نموذجاً مباشرة، فاضبط أيضاً المصادقة/مفتاح 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` قادرًا على استنتاج افتراضي مزوّد مدعوم بالمصادقة. فهو يحاول أولًا المزوّد الافتراضي الحالي، ثم بقية مزوّدي توليد الموسيقى المسجّلين بترتيب معرّف المزوّد. - - إذا اخترت مزودًا/نموذجًا مباشرةً، فاضبط أيضًا مصادقة/مفتاح API المطابق للمزوّد. -- يقبل `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` قادرًا على استنتاج افتراضي مزوّد مدعوم بالمصادقة. فهو يحاول أولًا المزوّد الافتراضي الحالي، ثم بقية مزوّدي توليد الفيديو المسجّلين بترتيب معرّف المزوّد. - - إذا اخترت مزودًا/نموذجًا مباشرةً، فاضبط أيضًا مصادقة/مفتاح API المطابق للمزوّد. - - يدعم مزوّد توليد الفيديو Qwen المجمّع حتى 1 فيديو ناتج، و1 صورة إدخال، و4 مقاطع فيديو إدخال، ومدة 10 ثوانٍ، وخيارات على مستوى المزوّد مثل `size` و`aspectRatio` و`resolution` و`audio` و`watermark`. -- يقبل `pdfModel` إما سلسلة (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). + - إذا حُذف، فلا يزال `video_generate` قادراً على استنتاج موفّر افتراضي مدعوم بالمصادقة. حيث يجرّب أولاً الموفّر الافتراضي الحالي، ثم بقية موفّري توليد الفيديو المسجلين بترتيب معرّف الموفّر. + - إذا حددت موفّراً/نموذجاً مباشرة، فاضبط أيضاً المصادقة/مفتاح API المطابق للموفّر. + - يدعم موفّر توليد الفيديو المضمّن Qwen حتى فيديو خرج واحد، وصورة دخل واحدة، و4 مقاطع فيديو دخل، ومدة 10 ثوانٍ، وخيارات على مستوى الموفّر لـ `size` و`aspectRatio` و`resolution` و`audio` و`watermark`. +- `pdfModel`: يقبل إما سلسلة (`"provider/model"`) أو كائناً (`{ primary, fallbacks }`). - يُستخدم بواسطة أداة `pdf` لتوجيه النموذج. - - إذا حُذف، تعود أداة PDF إلى `imageModel`، ثم إلى نموذج الجلسة/النموذج الافتراضي الذي تم حلّه. -- `pdfMaxBytesMb`: حد حجم PDF الافتراضي لأداة `pdf` عندما لا يُمرَّر `maxBytesMb` وقت الاستدعاء. -- `pdfMaxPages`: الحد الأقصى الافتراضي للصفحات التي يأخذها وضع الاستخراج الاحتياطي في أداة `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`). إذا حذفت المزوّد، فإن 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. +- `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"` للسماح لـ harnesses المسجلة من Plugin بالمطالبة بالنماذج المدعومة، أو `runtime: "pi"` لفرض harness ‏PI المدمج، أو معرّف harness مسجّل مثل `runtime: "codex"`. اضبط `fallback: "none"` لتعطيل الرجوع التلقائي إلى PI. +- تحفظ أدوات كتابة الإعدادات التي تعدّل هذه الحقول (على سبيل المثال `/models set` و`/models set-image` وأوامر إضافة/إزالة الاحتياطي) نموذج الكائن القياسي وتحافظ على قوائم الاحتياطي الحالية متى أمكن. +- `maxConcurrent`: الحد الأقصى لتشغيلات الوكلاء المتوازية عبر الجلسات (مع بقاء كل جلسة متسلسلة). الافتراضي: 4. ### `agents.defaults.embeddedHarness` -يتحكم `embeddedHarness` في المُنفّذ منخفض المستوى الذي يشغّل أدوار الوكيل المضمّنة. -ينبغي أن تحافظ معظم البيئات على القيمة الافتراضية `{ runtime: "auto", fallback: "pi" }`. -استخدمه عندما يوفّر Plugin موثوق native harness، مثل -Codex app-server harness المجمّع. +يتحكم `embeddedHarness` في أي منفّذ منخفض المستوى يشغّل أدوار الوكيل المضمّن. +يجب أن تحتفظ معظم البيئات بالقيمة الافتراضية `{ runtime: "auto", fallback: "pi" }`. +استخدمه عندما يوفّر Plugin موثوق harness أصلياً، مثل harness +خادم تطبيق Codex المضمّن. ```json5 { @@ -1136,34 +1272,34 @@ Codex app-server harness المجمّع. } ``` -- `runtime`: ‏`"auto"` أو `"pi"` أو معرّف plugin harness مسجّل. يسجّل Plugin Codex المجمّع المعرّف `codex`. -- `fallback`: ‏`"pi"` أو `"none"`. تُبقي `"pi"` على PI harness المضمّن كبديل توافق. وتجعل `"none"` اختيار plugin harness المفقود أو غير المدعوم يفشل بدلًا من استخدام PI بصمت. +- `runtime`: ‏`"auto"` أو `"pi"` أو معرّف harness مسجّل من Plugin. يسجّل Plugin ‏Codex المضمّن `codex`. +- `fallback`: ‏`"pi"` أو `"none"`. تُبقي `"pi"` harness ‏PI المدمج كخيار احتياطي للتوافق. وتجعل `"none"` اختيار harness المفقود أو غير المدعوم يفشل بدلاً من استخدام 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 فما تزال تستخدم إعدادات المزوّد/النموذج الخاصة بها. +- يتحكم هذا فقط في harness الدردشة المضمّنة. بينما تظل توليد الوسائط والرؤية وPDF والموسيقى والفيديو وTTS تستخدم إعدادات الموفّر/النموذج الخاصة بها. -**اختصارات الأسماء المستعارة المضمّنة** (تنطبق فقط عندما يكون النموذج ضمن `agents.defaults.models`): +**اختصارات alias المدمجة** (تنطبق فقط عندما يكون النموذج موجوداً في `agents.defaults.models`): -| الاسم المستعار | النموذج | -| -------------- | ------- | -| `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` | +| 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` | | `gemini-flash-lite` | `google/gemini-3.1-flash-lite-preview` | -تفوز الأسماء المستعارة التي تضبطها أنت دائمًا على القيم الافتراضية. +تتغلب الأسماء المستعارة التي تضبطها دائماً على القيم الافتراضية. -تفعّل نماذج 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` عندما لا يكون مستوى التفكير مضبوطًا صراحةً. +تفعّل نماذج 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 { @@ -1191,13 +1327,13 @@ Codex app-server harness المجمّع. } ``` -- واجهات CLI الخلفية مخصّصة للنص أولًا؛ وتكون الأدوات دائمًا معطّلة. -- تكون الجلسات مدعومة عندما يكون `sessionArg` مضبوطًا. -- يكون تمرير الصور مدعومًا عندما يقبل `imageArg` مسارات ملفات. +- واجهات CLI الخلفية موجّهة للنص أولاً؛ وتكون الأدوات معطلة دائماً. +- تكون الجلسات مدعومة عند ضبط `sessionArg`. +- تمرير الصور مدعوم عندما يقبل `imageArg` مسارات الملفات. ### `agents.defaults.systemPromptOverride` -استبدل موجّه النظام الكامل الذي يجمعه OpenClaw بسلسلة ثابتة. يُضبط على المستوى الافتراضي (`agents.defaults.systemPromptOverride`) أو لكل وكيل (`agents.list[].systemPromptOverride`). تكون القيم لكل وكيل ذات أولوية أعلى؛ ويتم تجاهل القيمة الفارغة أو التي تحتوي على مسافات فقط. وهو مفيد لتجارب الموجّهات المضبوطة. +استبدل system prompt الكامل الذي يجمعه OpenClaw بسلسلة ثابتة. يُضبط على المستوى الافتراضي (`agents.defaults.systemPromptOverride`) أو لكل وكيل (`agents.list[].systemPromptOverride`). تكون القيم لكل وكيل ذات أولوية؛ ويتم تجاهل القيمة الفارغة أو التي تحتوي على مسافات فقط. وهو مفيد لتجارب prompt المضبوطة. ```json5 { @@ -1218,16 +1354,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 يُحذف من موجّه النظام - lightContext: false, // الافتراضي: false؛ تجعل true تحتفظ فقط بـ HEARTBEAT.md من ملفات bootstrap الخاصة بمساحة العمل - 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, @@ -1238,15 +1374,15 @@ Codex app-server harness المجمّع. } ``` -- `every`: سلسلة مدة (ms/s/m/h). الافتراضي: `30m` (مصادقة API-key) أو `1h` (مصادقة OAuth). اضبطها على `0m` للتعطيل. -- `includeSystemPromptSection`: عندما تكون false، يحذف قسم Heartbeat من موجّه النظام ويتخطى إدراج `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 أدوار وكيل كاملة — والفواصل الأقصر تستهلك رموزًا أكثر. +- `every`: سلسلة مدة (`ms/s/m/h`). الافتراضي: `30m` ‏(مصادقة مفتاح API) أو `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 من نحو 100 ألف إلى 2-5 آلاف رمز. +- لكل وكيل: اضبط `agents.list[].heartbeat`. عندما يعرّف أي وكيل `heartbeat`، **يشغَّل Heartbeat لهؤلاء الوكلاء فقط**. +- تشغّل Heartbeat أدوار وكلاء كاملة — لذا تؤدي الفواصل الأقصر إلى استهلاك مزيد من الرموز. ### `agents.defaults.compaction` @@ -1256,19 +1392,19 @@ 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: "احتفظ بمعرّفات النشر، ومعرّفات التذاكر، وأزواج host:port كما هي تمامًا.", // يُستخدم عندما تكون 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 a brief notice when compaction starts (default: false) memoryFlush: { enabled: true, softThresholdTokens: 6000, - systemPrompt: "تقترب الجلسة من Compaction. خزّن الذكريات الدائمة الآن.", - prompt: "اكتب أي ملاحظات دائمة في memory/YYYY-MM-DD.md؛ وردّ بالرمز الصامت الدقيق NO_REPLY إذا لم يكن هناك شيء لتخزينه.", + systemPrompt: "Session nearing compaction. Store durable memories now.", + prompt: "Write any lasting notes to memory/YYYY-MM-DD.md; reply with the exact silent token NO_REPLY if nothing to store.", }, }, }, @@ -1276,19 +1412,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. +- `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 صامتًا. -- `memoryFlush`: دور وكيل صامت قبل Compaction التلقائي لتخزين الذكريات الدائمة. ويتم تخطيه عندما تكون مساحة العمل للقراءة فقط. +- `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. +- `memoryFlush`: دور وكيل صامت قبل Compaction التلقائي لتخزين الذكريات الدائمة. يتم تخطيه عندما تكون مساحة العمل للقراءة فقط. ### `agents.defaults.contextPruning` -يقوم بتقليم **نتائج الأدوات القديمة** من السياق الموجود في الذاكرة قبل الإرسال إلى LLM. ولا **يعدّل** سجل الجلسة على القرص. +يقوم بتقليم **نتائج الأدوات القديمة** من السياق الموجود في الذاكرة قبل إرسالها إلى LLM. ولا **يعدّل** سجل الجلسة على القرص. ```json5 { @@ -1296,13 +1432,13 @@ 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, minPrunableToolChars: 50000, softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 }, - hardClear: { enabled: true, placeholder: "[تم مسح محتوى نتيجة أداة قديمة]" }, + hardClear: { enabled: true, placeholder: "[Old tool result content cleared]" }, tools: { deny: ["browser", "canvas"] }, }, }, @@ -1312,25 +1448,25 @@ Codex app-server harness المجمّع. -- يفعّل `mode: "cache-ttl"` عمليات التقليم. -- يتحكم `ttl` في عدد المرات التي يمكن بعدها تشغيل التقليم مرة أخرى (بعد آخر لمسة لذاكرة التخزين المؤقت). -- تقوم عملية التقليم أولًا بقص نتائج الأدوات كبيرة الحجم قصًا خفيفًا، ثم تمسح نتائج الأدوات الأقدم مسحًا كاملًا إذا لزم الأمر. +- يؤدي `mode: "cache-ttl"` إلى تفعيل تمريرات التقليم. +- يتحكم `ttl` في عدد المرات التي يمكن بعدها تشغيل التقليم مجدداً (بعد آخر لمسة للذاكرة المؤقتة). +- يقوم التقليم أولاً باقتطاع نتائج الأدوات الكبيرة اقتطاعاً ليناً، ثم بمسح نتائج الأدوات الأقدم مسحاً صارماً عند الحاجة. -**القص الخفيف** يحتفظ بالبداية + النهاية ويُدرج `...` في المنتصف. +**الاقتطاع اللين** يحتفظ بالبداية + النهاية ويُدرج `...` في الوسط. -**المسح الكامل** يستبدل نتيجة الأداة بالكامل بالنص البديل. +**المسح الصارم** يستبدل نتيجة الأداة بالكامل بالعنصر النائب. ملاحظات: -- لا يتم قص/مسح كتل الصور أبدًا. -- تعتمد النِّسب على الأحرف (تقريبية)، لا على عدد الرموز الدقيق. -- إذا وُجد أقل من `keepLastAssistants` من رسائل المساعد، يتم تخطي التقليم. +- لا يتم اقتطاع/مسح كتل الصور أبداً. +- تعتمد النِّسب على عدد الأحرف (تقريبياً)، وليس على أعداد الرموز الدقيقة. +- إذا وُجدت رسائل مساعد أقل من `keepLastAssistants`، يتم تخطي التقليم. -راجع [Session Pruning](/ar/concepts/session-pruning) لتفاصيل السلوك. +راجع [Session Pruning](/ar/concepts/session-pruning) للحصول على تفاصيل السلوك. -### البث على شكل كتل +### بث الكتل ```json5 { @@ -1340,17 +1476,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) لسلوك + تفاصيل التجزئة. +راجع [Streaming](/ar/concepts/streaming) لمعرفة تفاصيل السلوك + التجزئة. ### مؤشرات الكتابة @@ -1365,8 +1501,8 @@ Codex app-server harness المجمّع. } ``` -- القيم الافتراضية: `instant` للمحادثات المباشرة/الإشارات، و`message` لمحادثات المجموعات غير المشار فيها. -- تجاوزات لكل جلسة: `session.typingMode` و`session.typingIntervalSeconds`. +- القيم الافتراضية: `instant` للدردشات المباشرة/الإشارات، و`message` للدردشات الجماعية غير المذكور فيها البوت. +- تجاوزات كل جلسة: `session.typingMode` و`session.typingIntervalSeconds`. راجع [Typing Indicators](/ar/concepts/typing-indicators). @@ -1374,7 +1510,7 @@ Codex app-server harness المجمّع. ### `agents.defaults.sandbox` -إعدادات sandbox اختيارية للوكيل المضمّن. راجع [Sandboxing](/ar/gateway/sandboxing) للدليل الكامل. +العزل الاختياري للوكيل المضمّن. راجع [Sandboxing](/ar/gateway/sandboxing) للحصول على الدليل الكامل. ```json5 { @@ -1420,7 +1556,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" }, @@ -1469,46 +1605,46 @@ Codex app-server harness المجمّع. } ``` - + **الواجهة الخلفية:** - `docker`: وقت تشغيل Docker محلي (الافتراضي) -- `ssh`: وقت تشغيل بعيد عام مدعوم عبر SSH +- `ssh`: وقت تشغيل بعيد عام مدعوم بـ SSH - `openshell`: وقت تشغيل OpenShell -عند اختيار `backend: "openshell"`، تنتقل الإعدادات الخاصة بوقت التشغيل إلى +عند تحديد `backend: "openshell"`، تنتقل الإعدادات الخاصة بوقت التشغيل إلى `plugins.entries.openshell.config`. -**إعداد واجهة SSH الخلفية:** +**إعداد الواجهة الخلفية SSH:** - `target`: هدف SSH بصيغة `user@host[:port]` - `command`: أمر عميل SSH ‏(الافتراضي: `ssh`) -- `workspaceRoot`: جذر بعيد مطلق يُستخدم لمساحات العمل بحسب النطاق +- `workspaceRoot`: الجذر البعيد المطلق المستخدم لمساحات العمل بحسب النطاق - `identityFile` / `certificateFile` / `knownHostsFile`: ملفات محلية موجودة تُمرَّر إلى OpenSSH -- `identityData` / `certificateData` / `knownHostsData`: محتويات مضمّنة أو SecretRefs يقوم OpenClaw بتحويلها إلى ملفات مؤقتة وقت التشغيل -- `strictHostKeyChecking` / `updateHostKeys`: عناصر تحكم في سياسة مفاتيح المضيف الخاصة بـ OpenSSH +- `identityData` / `certificateData` / `knownHostsData`: محتويات مضمنة أو SecretRefs يقوم OpenClaw بتحويلها إلى ملفات مؤقتة وقت التشغيل +- `strictHostKeyChecking` / `updateHostKeys`: إعدادات سياسة مفاتيح المضيف في OpenSSH **أسبقية مصادقة SSH:** -- تتقدّم `identityData` على `identityFile` -- تتقدّم `certificateData` على `certificateFile` -- تتقدّم `knownHostsData` على `knownHostsFile` -- يتم حل قيم `*Data` المدعومة بـ SecretRef من لقطة وقت تشغيل الأسرار النشطة قبل بدء جلسة sandbox +- تتغلب `identityData` على `identityFile` +- تتغلب `certificateData` على `certificateFile` +- تتغلب `knownHostsData` على `knownHostsFile` +- تُحل القيم `*Data` المدعومة بـ SecretRef من لقطة وقت التشغيل النشطة للأسرار قبل بدء جلسة Sandbox -**سلوك واجهة SSH الخلفية:** +**سلوك الواجهة الخلفية SSH:** - يزرع مساحة العمل البعيدة مرة واحدة بعد الإنشاء أو إعادة الإنشاء -- ثم يُبقي مساحة عمل SSH البعيدة هي المرجع الأساسي +- ثم يحافظ على مساحة عمل SSH البعيدة بوصفها الحالة القياسية - يوجّه `exec` وأدوات الملفات ومسارات الوسائط عبر SSH -- لا يزامن التغييرات البعيدة إلى المضيف تلقائيًا -- لا يدعم حاويات متصفح sandbox +- لا يزامن التغييرات البعيدة تلقائياً إلى المضيف +- لا يدعم حاويات متصفح Sandbox -**الوصول إلى مساحة العمل:** +**وصول مساحة العمل:** -- `none`: مساحة عمل sandbox لكل نطاق ضمن `~/.openclaw/sandboxes` -- `ro`: مساحة عمل sandbox عند `/workspace`، مع تركيب مساحة عمل الوكيل للقراءة فقط عند `/agent` -- `rw`: تركيب مساحة عمل الوكيل للقراءة/الكتابة عند `/workspace` +- `none`: مساحة عمل Sandbox بحسب النطاق تحت `~/.openclaw/sandboxes` +- `ro`: مساحة عمل Sandbox عند `/workspace`، مع تركيب مساحة عمل الوكيل للقراءة فقط عند `/agent` +- `rw`: تُركَّب مساحة عمل الوكيل للقراءة والكتابة عند `/workspace` **النطاق:** @@ -1516,7 +1652,7 @@ Codex app-server harness المجمّع. - `agent`: حاوية + مساحة عمل واحدة لكل وكيل (الافتراضي) - `shared`: حاوية ومساحة عمل مشتركتان (من دون عزل بين الجلسات) -**إعداد Plugin OpenShell:** +**إعداد Plugin ‏OpenShell:** ```json5 { @@ -1529,10 +1665,10 @@ Codex app-server harness المجمّع. from: "openclaw", remoteWorkspaceDir: "/sandbox", remoteAgentWorkspaceDir: "/agent", - gateway: "lab", // اختياري - gatewayEndpoint: "https://lab.example", // اختياري + gateway: "lab", // optional + gatewayEndpoint: "https://lab.example", // optional policy: "strict", // optional OpenShell policy id - providers: ["openai"], // اختياري + providers: ["openai"], // optional autoProviders: true, timeoutSeconds: 120, }, @@ -1544,30 +1680,30 @@ Codex app-server harness المجمّع. **وضع OpenShell:** -- `mirror`: زرع البعيد من المحلي قبل `exec`، ثم المزامنة العكسية بعد `exec`؛ وتبقى مساحة العمل المحلية هي المرجع الأساسي -- `remote`: زرع البعيد مرة واحدة عند إنشاء sandbox، ثم إبقاء مساحة العمل البعيدة هي المرجع الأساسي +- `mirror`: يزرع البعيد من المحلي قبل `exec`، ثم يزامن العودة بعد `exec`؛ وتبقى مساحة العمل المحلية هي الحالة القياسية +- `remote`: يزرع البعيد مرة واحدة عند إنشاء Sandbox، ثم يحافظ على مساحة العمل البعيدة بوصفها الحالة القياسية -في وضع `remote`، لا تتم مزامنة التعديلات المحلية على المضيف التي تتم خارج OpenClaw إلى sandbox تلقائيًا بعد خطوة الزرع. -النقل يتم عبر SSH إلى sandbox الخاص بـ OpenShell، لكن Plugin يملك دورة حياة sandbox والمزامنة العكسية الاختيارية. +في وضع `remote`، لا تُزامن تعديلات المضيف المحلية التي تتم خارج OpenClaw تلقائياً إلى Sandbox بعد خطوة الزرع. +يكون النقل عبر SSH إلى Sandbox الخاص بـ OpenShell، لكن Plugin يمتلك دورة حياة Sandbox ومزامنة mirror الاختيارية. -يعمل **`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/*` ضمن مساحة العمل النشطة. +تُجهَّز **المرفقات الواردة** ضمن `media/inbound/*` في مساحة العمل النشطة. -يقوم **`docker.binds`** بتركيب أدلة إضافية من المضيف؛ ويتم دمج عمليات التركيب العامة وتلك الخاصة بكل وكيل. +يقوم **`docker.binds`** بتركيب أدلة مضيف إضافية؛ ويتم دمج bind العامة وتلك الخاصة بكل وكيل. -**متصفح sandbox** ‏(`sandbox.browser.enabled`): ‏Chromium + CDP داخل حاوية. يتم إدراج رابط noVNC في موجّه النظام. ولا يتطلب `browser.enabled` في `openclaw.json`. -يستخدم وصول المراقبة عبر noVNC مصادقة VNC افتراضيًا، ويُصدر OpenClaw رابط رمز مميّز قصير العمر (بدلًا من كشف كلمة المرور في الرابط المشترك). +**متصفح Sandbox** ‏(`sandbox.browser.enabled`): ‏Chromium + CDP داخل حاوية. يتم حقن عنوان URL الخاص بـ noVNC في system prompt. ولا يتطلب `browser.enabled` في `openclaw.json`. +يستخدم وصول المراقبة عبر noVNC مصادقة VNC افتراضياً، ويصدر OpenClaw عنوان URL برمز مميز قصير العمر (بدلاً من كشف كلمة المرور في عنوان URL المشترك). -- يؤدي `allowHostControl: false` (الافتراضي) إلى منع الجلسات المعزولة من استهداف متصفح المضيف. -- تكون القيمة الافتراضية لـ `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` ‏(الافتراضي) إلى حظر الجلسات المعزولة من استهداف متصفح المضيف. +- القيمة الافتراضية لـ `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` @@ -1584,31 +1720,31 @@ Codex app-server harness المجمّع. - `--renderer-process-limit=2` - `--no-zygote` - `--metrics-recording-only` - - `--disable-extensions` (مفعّل افتراضيًا) - - يتم تفعيل `--disable-3d-apis` و`--disable-software-rasterizer` و`--disable-gpu` - افتراضيًا، ويمكن تعطيلها باستخدام - `OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0` إذا كان استخدام WebGL/الرسوم ثلاثية الأبعاد يتطلب ذلك. - - يعيد `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` تفعيل الإضافات إذا كانت - سيرتك تعتمد عليها. - - يمكن تغيير `--renderer-process-limit=2` باستخدام + - `--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` عبر `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`؛ اضبطه على `0` لاستخدام حد العمليات الافتراضي في Chromium. - بالإضافة إلى `--no-sandbox` و`--disable-setuid-sandbox` عند تفعيل `noSandbox`. - تمثل القيم الافتراضية خط الأساس لصورة الحاوية؛ استخدم صورة متصفح مخصصة مع - entrypoint مخصص لتغيير الإعدادات الافتراضية للحاوية. + entrypoint مخصص لتغيير القيم الافتراضية للحاوية. -يتوفر عزل المتصفح و`sandbox.docker.binds` في Docker فقط. +يقتصر عزل المتصفح و`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 { @@ -1620,13 +1756,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", // تجاوز مستوى التفكير الافتراضي لكل وكيل - reasoningDefault: "on", // تجاوز إظهار الاستدلال الافتراضي لكل وكيل - 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", @@ -1658,26 +1794,26 @@ 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`: تجاوز اختياري لمستوى التفكير الافتراضي لكل وكيل (`off | minimal | low | medium | high | xhigh | adaptive`). ويتجاوز `agents.defaults.thinkingDefault` لهذا الوكيل عندما لا يكون هناك تجاوز لكل رسالة أو لكل جلسة. -- `reasoningDefault`: تجاوز اختياري لإظهار الاستدلال الافتراضي لكل وكيل (`on | off | stream`). ويُطبَّق عندما لا يكون هناك تجاوز للاستدلال لكل رسالة أو لكل جلسة. -- `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). +- `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`). ويتجاوز `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 واحد. راجع [تعدد الوكلاء](/ar/concepts/multi-agent). +شغّل عدة وكلاء معزولين داخل Gateway واحد. راجع [متعدد الوكلاء](/ar/concepts/multi-agent). ```json5 { @@ -1694,31 +1830,31 @@ 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 المذكور أعلاه. +بالنسبة إلى إدخالات `type: "acp"`، يحل OpenClaw حسب هوية المحادثة الدقيقة (`match.channel` + الحساب + `match.peer.id`) ولا يستخدم ترتيب مستويات route binding أعلاه. -### ملفات وصول لكل وكيل +### ملفات تعريف الوصول لكل وكيل - + ```json5 { @@ -1811,7 +1947,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري -راجع [Multi-Agent Sandbox & Tools](/ar/tools/multi-agent-sandbox-tools) لتفاصيل الأولوية. +راجع [Sandbox والأدوات في بيئة متعددة الوكلاء](/ar/tools/multi-agent-sandbox-tools) لمعرفة تفاصيل الأسبقية. --- @@ -1837,22 +1973,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", // قديم (يستخدم وقت التشغيل دائمًا "main") + mainKey: "main", // legacy (runtime always uses "main") agentToAgent: { maxPingPongTurns: 5 }, sendPolicy: { rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }], @@ -1864,35 +2000,35 @@ 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 جلسة خيط جديدة بدلًا من وراثة سجل المحادثة من الأصل. - - اضبطها على `0` لتعطيل هذا الحارس والسماح دائمًا بالتفريع من الأصل. -- **`mainKey`**: حقل قديم. يستخدم وقت التشغيل دائمًا `"main"` لدلو الدردشة المباشرة الرئيسي. -- **`agentToAgent.maxPingPongTurns`**: الحد الأقصى لأدوار الرد المتبادل بين الوكلاء أثناء تبادلات الوكيل إلى الوكيل (عدد صحيح، المجال: `0`–`5`). تؤدي القيمة `0` إلى تعطيل سلسلة ping-pong. -- **`sendPolicy`**: المطابقة حسب `channel`، أو `chatType` (`direct|group|channel`، مع الاسم المستعار القديم `dm`)، أو `keyPrefix`، أو `rawKeyPrefix`. وأول رفض يفوز. -- **`maintenance`**: عناصر التحكم في تنظيف مخزن الجلسات + الاحتفاظ. - - `mode`: يؤدي `warn` إلى إصدار تحذيرات فقط؛ ويطبّق `enforce` التنظيف. +- **`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`**: حقل قديم. يستخدم وقت التشغيل دائماً `"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`). + - `maxEntries`: الحد الأقصى لعدد الإدخالات في `sessions.json` ‏(الافتراضي `500`). - `rotateBytes`: تدوير `sessions.json` عندما يتجاوز هذا الحجم (الافتراضي `10mb`). - - `resetArchiveRetention`: مدة الاحتفاظ بأرشيفات النصوص `*.reset.`. ويكون افتراضيًا مساويًا لـ `pruneAfter`؛ واضبطه على `false` للتعطيل. - - `maxDiskBytes`: ميزانية قرص اختيارية لدليل الجلسات. في وضع `warn` يسجل تحذيرات؛ وفي وضع `enforce` يزيل أقدم العناصر/الجلسات أولًا. - - `highWaterBytes`: هدف اختياري بعد تنظيف الميزانية. ويكون افتراضيًا `80%` من `maxDiskBytes`. -- **`threadBindings`**: القيم الافتراضية العامة لميزات الجلسات المرتبطة بالخيط. - - `enabled`: المفتاح الافتراضي الرئيسي (يمكن للمزوّدين تجاوزه؛ ويستخدم Discord ‏`channels.discord.threadBindings.enabled`) - - `idleHours`: الإلغاء التلقائي الافتراضي للتركيز بعد عدم النشاط بالساعات (`0` يعطّل؛ ويمكن للمزوّدين تجاوزه) - - `maxAgeHours`: الحد الأقصى الصارم الافتراضي للعمر بالساعات (`0` يعطّل؛ ويمكن للمزوّدين تجاوزه) + - `resetArchiveRetention`: مدة الاحتفاظ بأرشيفات transcript ذات الصيغة `*.reset.`. وتعود افتراضياً إلى `pruneAfter`؛ واضبط `false` لتعطيلها. + - `maxDiskBytes`: ميزانية قرص اختيارية لدليل الجلسات. في وضع `warn` تسجل تحذيرات؛ وفي وضع `enforce` تزيل أقدم العناصر/الجلسات أولاً. + - `highWaterBytes`: هدف اختياري بعد تنظيف الميزانية. وتعود افتراضياً إلى `80%` من `maxDiskBytes`. +- **`threadBindings`**: القيم الافتراضية العامة لميزات الجلسات المرتبطة بالخيوط. + - `enabled`: مفتاح افتراضي رئيسي (يمكن للموفّرين تجاوزه؛ ويستخدم Discord القيمة `channels.discord.threadBindings.enabled`) + - `idleHours`: القيمة الافتراضية لإلغاء التركيز التلقائي بسبب عدم النشاط بالساعات (`0` للتعطيل؛ ويمكن للموفّرين تجاوزها) + - `maxAgeHours`: القيمة الافتراضية للحد الأقصى الصارم للعمر بالساعات (`0` للتعطيل؛ ويمكن للموفّرين تجاوزها) @@ -1903,7 +2039,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, @@ -1918,7 +2054,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري }, }, inbound: { - debounceMs: 2000, // 0 يعطّل + debounceMs: 2000, // 0 disables byChannel: { whatsapp: 5000, slack: 1500, @@ -1928,38 +2064,38 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -### بادئة الاستجابة +### بادئة الرد -تجاوزات لكل قناة/حساب: `channels..responsePrefix` و`channels..accounts..responsePrefix`. +التجاوزات لكل قناة/حساب: `channels..responsePrefix` و`channels..accounts..responsePrefix`. -آلية الحل (الأكثر تحديدًا يفوز): الحساب → القناة → العام. تؤدي القيمة `""` إلى التعطيل وإيقاف التسلسل. وتقوم `"auto"` باشتقاق `[{identity.name}]`. +آلية الحل (الأكثر تحديداً يفوز): الحساب → القناة → العام. تؤدي `""` إلى التعطيل وإيقاف التسلسل. وتستخرج `"auto"` القيمة `[{identity.name}]`. **متغيرات القالب:** -| المتغير | الوصف | المثال | -| ------- | ------ | ------- | -| `{model}` | الاسم المختصر للنموذج | `claude-opus-4-6` | -| `{modelFull}` | معرّف النموذج الكامل | `anthropic/claude-opus-4-6` | -| `{provider}` | اسم المزوّد | `anthropic` | -| `{thinkingLevel}` | مستوى التفكير الحالي | `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` الخاص بالوكيل النشط، وإلا فالقيمة `"👀"`. اضبطه على `""` للتعطيل. -- تجاوزات لكل قناة: `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` لتفعيل تفاعلات الحالة الخاصة بدورة الحياة. +- يعود افتراضياً إلى `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` لتفعيل تفاعلات الحالة الدورية. ### إزالة الارتداد للرسائل الواردة -يجمع الرسائل النصية السريعة من المرسل نفسه في دور وكيل واحد. وتُفرَّغ الوسائط/المرفقات فورًا. وتتجاوز أوامر التحكم إزالة الارتداد. +يجمع الرسائل النصية السريعة من المرسل نفسه في دور وكيل واحد. وتؤدي الوسائط/المرفقات إلى التفريغ فوراً. وتتجاوز أوامر التحكم إزالة الارتداد. ### TTS ‏(تحويل النص إلى كلام) @@ -2002,18 +2138,18 @@ 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` (تفعيل اختياري). +- يتحكم `auto` في وضع TTS التلقائي الافتراضي: `off` أو `always` أو `inbound` أو `tagged`. ويمكن للأمر `/tts on|off` تجاوز التفضيلات المحلية، ويعرض `/tts status` الحالة الفعلية. +- يتجاوز `summaryModel` القيمة `agents.defaults.model.primary` للملخص التلقائي. +- يكون `modelOverrides` مفعّلاً افتراضياً؛ وتعود القيمة الافتراضية لـ `modelOverrides.allowProvider` إلى `false` ‏(اشتراك اختياري). - تعود مفاتيح API إلى `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 ويخفف التحقق من النموذج/الصوت. +- يتجاوز `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 { @@ -2037,13 +2173,13 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -- يجب أن يطابق `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` إلا عندما لا يكون أي مفتاح API لـ Talk مهيّأ. -- يتيح `providers.*.voiceAliases` لتوجيهات Talk استخدام أسماء ودّية. -- يتحكم `silenceTimeoutMs` في مدة انتظار وضع Talk بعد صمت المستخدم قبل إرسال النص المفرّغ. وعند عدم ضبطه، يحتفظ بنافذة التوقف الافتراضية الخاصة بالمنصة (`700 ms` على macOS وAndroid، و`900 ms` على iOS). +- يجب أن تطابق `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` فقط عندما لا يكون مفتاح API الخاص بـ Talk مضبوطاً. +- يتيح `providers.*.voiceAliases` لتوجيهات Talk استخدام أسماء ودية. +- يتحكم `silenceTimeoutMs` في المدة التي ينتظرها وضع Talk بعد صمت المستخدم قبل أن يرسل transcript. وعند عدم ضبطه، يحتفظ بنافذة التوقف الافتراضية للمنصة (`700 ms على macOS وAndroid، و900 ms على iOS`). --- @@ -2053,35 +2189,35 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري يضبط `tools.profile` قائمة سماح أساسية قبل `tools.allow`/`tools.deny`: -تضبط عملية onboarding المحلية الإعدادات المحلية الجديدة افتراضيًا على `tools.profile: "coding"` عندما لا تكون مضبوطة (مع الحفاظ على ملفات التعريف الصريحة الموجودة). +تضبط عملية onboarding المحلية الإعدادات المحلية الجديدة افتراضياً على `tools.profile: "coding"` عند عدم الضبط (مع الحفاظ على ملفات التعريف الصريحة الحالية). -| ملف التعريف | يتضمن | -| ----------- | ------- | -| `minimal` | `session_status` فقط | +| ملف التعريف | يتضمن | +| ----------- | ------------------------------------------------------------------------------------------------------------------------------- | +| `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` | بلا تقييد (مثل غير المضبوط) | +| `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: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 الخاصة بالمزوّدات) | +| `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` | جميع الأدوات المدمجة (باستثناء إضافات الموفّر) | ### `tools.allow` / `tools.deny` -سياسة السماح/المنع العامة للأدوات (المنع يفوز). غير حساسة لحالة الأحرف، وتدعم أحرف البدل `*`. وتُطبَّق حتى عندما يكون Docker sandbox معطّلًا. +سياسة السماح/الرفض العامة للأدوات (الرفض يفوز). غير حساسة لحالة الأحرف، وتدعم محارف البدل `*`. وتُطبّق حتى عندما يكون Docker sandbox معطلاً. ```json5 { @@ -2091,7 +2227,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ### `tools.byProvider` -تقييد إضافي للأدوات لمزوّدات أو نماذج محددة. الترتيب: ملف التعريف الأساسي → ملف تعريف المزوّد → السماح/المنع. +تقيّد الأدوات أكثر لموفّرين أو نماذج محددة. الترتيب: ملف التعريف الأساسي → ملف تعريف الموفّر → السماح/الرفض. ```json5 { @@ -2107,7 +2243,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ### `tools.elevated` -يتحكم في وصول `exec` المرتفع خارج sandbox: +يتحكم في وصول exec المرتفع خارج Sandbox: ```json5 { @@ -2123,9 +2259,9 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -- لا يمكن للتجاوز لكل وكيل (`agents.list[].tools.elevated`) إلا أن يقيّد أكثر. -- يخزن `/elevated on|off|ask|full` الحالة لكل جلسة؛ بينما تنطبق التوجيهات المضمّنة على رسالة واحدة. -- يتجاوز `exec` المرتفع العزل في sandbox ويستخدم مسار الهروب المُعدّ (`gateway` افتراضيًا، أو `node` عندما يكون هدف exec هو `node`). +- لا يمكن للتجاوز لكل وكيل (`agents.list[].tools.elevated`) إلا أن يفرض مزيداً من التقييد. +- يخزّن `/elevated on|off|ask|full` الحالة لكل جلسة؛ بينما تنطبق التوجيهات المضمنة على رسالة واحدة. +- يتجاوز `exec` المرتفع العزل ويستخدم مسار الهروب المضبوط (`gateway` افتراضياً، أو `node` عندما يكون هدف exec هو `node`). ### `tools.exec` @@ -2149,8 +2285,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 { @@ -2171,13 +2307,13 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -- `historySize`: الحد الأقصى لسجل استدعاءات الأدوات المحتفظ به لتحليل الحلقات. -- `warningThreshold`: عتبة النمط المتكرر من دون تقدم لإصدار التحذيرات. +- `historySize`: الحد الأقصى لسجل استدعاءات الأدوات المحتفَظ به لتحليل الحلقات. +- `warningThreshold`: عتبة نمط التكرار من دون تقدم لإطلاق التحذيرات. - `criticalThreshold`: عتبة تكرار أعلى لحظر الحلقات الحرجة. - `globalCircuitBreakerThreshold`: عتبة إيقاف صارمة لأي تشغيل من دون تقدم. -- `detectors.genericRepeat`: التحذير عند تكرار استدعاءات الأداة نفسها/المعاملات نفسها. -- `detectors.knownPollNoProgress`: التحذير/الحظر على أدوات polling المعروفة (`process.poll` و`command_status` وغيرها). -- `detectors.pingPong`: التحذير/الحظر على أنماط الأزواج المتناوبة من دون تقدم. +- `detectors.genericRepeat`: التحذير من تكرار استدعاءات الأداة نفسها/الوسائط نفسها. +- `detectors.knownPollNoProgress`: التحذير/الحظر لأدوات الاستطلاع المعروفة (`process.poll` و`command_status` وما إلى ذلك). +- `detectors.pingPong`: التحذير/الحظر لأنماط الأزواج المتناوبة من دون تقدم. - إذا كانت `warningThreshold >= criticalThreshold` أو `criticalThreshold >= globalCircuitBreakerThreshold`، يفشل التحقق. ### `tools.web` @@ -2188,14 +2324,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, @@ -2212,7 +2348,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ### `tools.media` -يهيّئ فهم الوسائط الواردة (الصورة/الصوت/الفيديو): +يضبط فهم الوسائط الواردة (الصورة/الصوت/الفيديو): ```json5 { @@ -2220,7 +2356,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, @@ -2246,30 +2382,30 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري -**إدخال المزوّد** (`type: "provider"` أو عند الحذف): +**إدخال الموفّر** (`type: "provider"` أو عند الحذف): -- `provider`: معرّف مزوّد API ‏(`openai` أو `anthropic` أو `google`/`gemini` أو `groq` وغير ذلك) +- `provider`: معرّف موفّر API ‏(`openai` أو `anthropic` أو `google`/`gemini` أو `groq`، وما إلى ذلك) - `model`: تجاوز معرّف النموذج -- `profile` / `preferredProfile`: اختيار ملف تعريف `auth-profiles.json` +- `profile` / `preferredProfile`: اختيار ملف `auth-profiles.json` **إدخال CLI** (`type: "cli"`): -- `command`: الملف التنفيذي المراد تشغيله -- `args`: معاملات بقوالب (تدعم `{{MediaPath}}` و`{{Prompt}}` و`{{MaxChars}}` وغير ذلك) +- `command`: الملف التنفيذي المطلوب تشغيله +- `args`: وسائط قالبية (تدعم `{{MediaPath}}` و`{{Prompt}}` و`{{MaxChars}}`، وما إلى ذلك) **الحقول المشتركة:** -- `capabilities`: قائمة اختيارية (`image` أو `audio` أو `video`). القيم الافتراضية: `openai`/`anthropic`/`minimax` ← صورة، و`google` ← صورة+صوت+فيديو، و`groq` ← صوت. +- `capabilities`: قائمة اختيارية (`image` و`audio` و`video`). القيم الافتراضية: `openai`/`anthropic`/`minimax` → صورة، و`google` → صورة+صوت+فيديو، و`groq` → صوت. - `prompt` و`maxChars` و`maxBytes` و`timeoutSeconds` و`language`: تجاوزات لكل إدخال. - تعود حالات الفشل إلى الإدخال التالي. -تتبع مصادقة المزوّد الترتيب القياسي: `auth-profiles.json` → متغيرات البيئة → `models.providers.*.apiKey`. +تتبع مصادقة الموفّر الترتيب القياسي: `auth-profiles.json` → متغيرات البيئة → `models.providers.*.apiKey`. **حقول الإكمال غير المتزامن:** -- `asyncCompletion.directSend`: عندما تكون `true`، تحاول مهام - `music_generate` و`video_generate` غير المتزامنة المكتملة أولًا التسليم المباشر إلى القناة. الافتراضي: `false` - (مسار legacy requester-session wake/model-delivery). +- `asyncCompletion.directSend`: عند ضبطه على `true`، تحاول مهام + `music_generate` و`video_generate` غير المتزامنة المكتملة التسليم المباشر إلى القناة أولاً. الافتراضي: `false` + (مسار التنبيه/تسليم النموذج القديم لجلسة الطالب). @@ -2290,7 +2426,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري يتحكم في الجلسات التي يمكن استهدافها بواسطة أدوات الجلسات (`sessions_list` و`sessions_history` و`sessions_send`). -الافتراضي: `tree` (الجلسة الحالية + الجلسات التي أنشأتها، مثل الوكلاء الفرعيين). +الافتراضي: `tree` ‏(الجلسة الحالية + الجلسات التي أنشأتها، مثل الوكلاء الفرعيين). ```json5 { @@ -2307,24 +2443,24 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري - `self`: مفتاح الجلسة الحالية فقط. - `tree`: الجلسة الحالية + الجلسات التي أنشأتها الجلسة الحالية (الوكلاء الفرعيون). -- `agent`: أي جلسة تنتمي إلى معرّف الوكيل الحالي (وقد يشمل ذلك مستخدمين آخرين إذا كنت تشغّل جلسات لكل مرسل تحت معرّف الوكيل نفسه). -- `all`: أي جلسة. ولا يزال الاستهداف عبر الوكلاء يتطلب `tools.agentToAgent`. -- تقييد sandbox: عندما تكون الجلسة الحالية داخل sandbox وكانت `agents.defaults.sandbox.sessionToolsVisibility="spawned"`، تُفرض القيمة `tree` على الرؤية حتى لو كانت `tools.sessions.visibility="all"`. +- `agent`: أي جلسة تنتمي إلى معرّف الوكيل الحالي (قد يشمل مستخدمين آخرين إذا كنت تشغّل جلسات لكل مرسل تحت معرّف الوكيل نفسه). +- `all`: أي جلسة. وما زال الاستهداف عبر الوكلاء يتطلب `tools.agentToAgent`. +- قيد Sandbox: عندما تكون الجلسة الحالية داخل Sandbox وتكون `agents.defaults.sandbox.sessionToolsVisibility="spawned"`، تُفرض القيمة `tree` على الرؤية حتى لو كانت `tools.sessions.visibility="all"`. ### `tools.sessions_spawn` -يتحكم في دعم المرفقات المضمّنة لـ `sessions_spawn`. +يتحكم في دعم المرفقات المضمنة لـ `sessions_spawn`. ```json5 { 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" }, }, }, @@ -2334,21 +2470,21 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ملاحظات: - المرفقات مدعومة فقط لـ `runtime: "subagent"`. ويرفض وقت تشغيل ACP هذه المرفقات. -- تُحوَّل الملفات إلى مساحة عمل الابن ضمن `.openclaw/attachments//` مع ملف `.manifest.json`. -- يتم تلقائيًا حجب محتوى المرفقات من حفظ السجل. -- يتم التحقق من مدخلات Base64 باستخدام فحوصات صارمة للأبجدية/الحشو وحارس حجم قبل فك الترميز. -- أذونات الملفات هي `0700` للأدلة و`0600` للملفات. -- يتبع التنظيف سياسة `cleanup`: تقوم `delete` دائمًا بإزالة المرفقات؛ بينما تحتفظ `keep` بها فقط عندما تكون `retainOnSessionKeep: true`. +- تُجسّد الملفات في مساحة العمل الفرعية عند `.openclaw/attachments//` مع ملف `.manifest.json`. +- يُحجب محتوى المرفقات تلقائياً من حفظ transcript. +- يتم التحقق من مدخلات Base64 بفحوصات صارمة للأبجدية/الحشو مع حاجز لحجم ما قبل فك الترميز. +- تكون أذونات الملفات `0700` للأدلة و`0600` للملفات. +- يتبع التنظيف سياسة `cleanup`: حيث يؤدي `delete` دائماً إلى إزالة المرفقات؛ بينما يحتفظ `keep` بها فقط عندما تكون `retainOnSessionKeep: true`. ### `tools.experimental` -أعلام الأدوات المضمّنة التجريبية. تكون معطّلة افتراضيًا ما لم تُطبَّق قاعدة تفعيل تلقائي صارمة لوكيلية GPT-5. +إشارات الأدوات المدمجة التجريبية. تكون معطلة افتراضياً ما لم تُطبّق قاعدة تمكين تلقائي صارمة للوكيل في GPT-5. ```json5 { tools: { experimental: { - planTool: true, // تفعيل update_plan التجريبية + planTool: true, // enable experimental update_plan }, }, } @@ -2356,9 +2492,9 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ملاحظات: -- `planTool`: يفعّل الأداة المنظَّمة `update_plan` لتتبع العمل غير البسيط متعدد الخطوات. -- الافتراضي: `false` ما لم تكن `agents.defaults.embeddedPi.executionContract` (أو تجاوز لكل وكيل) مضبوطة على `"strict-agentic"` لتشغيل من عائلة OpenAI أو OpenAI Codex GPT-5. اضبطه على `true` لفرض تشغيل الأداة خارج ذلك النطاق، أو على `false` للإبقاء عليها معطّلة حتى في تشغيلات strict-agentic GPT-5. -- عند التفعيل، يضيف موجّه النظام أيضًا إرشادات استخدام بحيث يستخدمها النموذج فقط في الأعمال الجوهرية ويحافظ على خطوة واحدة فقط كحد أقصى في حالة `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` @@ -2378,21 +2514,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", @@ -2417,51 +2553,51 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ``` - استخدم `authHeader: true` + `headers` لاحتياجات المصادقة المخصصة. -- تجاوز جذر إعدادات الوكيل باستخدام `OPENCLAW_AGENT_DIR` (أو `PI_CODING_AGENT_DIR`، وهو اسم مستعار قديم لمتغير بيئة). -- أسبقية الدمج لمعرّفات المزوّد المطابقة: +- تجاوز جذر إعدادات الوكيل عبر `OPENCLAW_AGENT_DIR` ‏(أو `PI_CODING_AGENT_DIR`، وهو اسم بديل قديم لمتغير بيئة). +- أسبقية الدمج لمعرّفات الموفّرين المتطابقة: - تفوز قيم `baseUrl` غير الفارغة في `models.json` الخاصة بالوكيل. - - تفوز قيم `apiKey` غير الفارغة الخاصة بالوكيل فقط عندما لا يكون ذلك المزوّد مُدارًا عبر SecretRef في سياق الإعدادات/ملف المصادقة الحالي. - - يتم تحديث قيم `apiKey` للمزوّدات المُدارة عبر SecretRef من علامات المصدر (`ENV_VAR_NAME` لمراجع env، و`secretref-managed` لمراجع file/exec) بدلًا من حفظ الأسرار المحلولة. - - يتم تحديث قيم ترويسات المزوّدات المُدارة عبر SecretRef من علامات المصدر (`secretref-env:ENV_VAR_NAME` لمراجع env، و`secretref-managed` لمراجع file/exec). - - تعود قيم `apiKey`/`baseUrl` الفارغة أو المحذوفة في الوكيل إلى `models.providers` في الإعدادات. - - تستخدم قيم `contextWindow`/`maxTokens` للنموذج المطابق القيمة الأعلى بين الإعداد الصريح وقيم الفهرس الضمنية. - - يحافظ `contextTokens` للنموذج المطابق على حد وقت التشغيل الصريح عندما يكون موجودًا؛ استخدمه لتقييد السياق الفعلي من دون تغيير بيانات النموذج الأصلية. + - تفوز قيم `apiKey` غير الفارغة الخاصة بالوكيل فقط عندما لا يكون ذلك الموفّر مُداراً عبر SecretRef في سياق الإعدادات/ملف المصادقة الحالي. + - تُحدَّث قيم `apiKey` الخاصة بالموفّرين المُدارين عبر SecretRef من علامات المصدر (`ENV_VAR_NAME` لمراجع البيئة، و`secretref-managed` لمراجع الملف/exec) بدلاً من حفظ الأسرار المحلولة. + - تُحدَّث قيم رؤوس الموفّرين المُدارة عبر SecretRef من علامات المصدر (`secretref-env:ENV_VAR_NAME` لمراجع البيئة، و`secretref-managed` لمراجع الملف/exec). + - تعود قيم `apiKey`/`baseUrl` الفارغة أو المفقودة الخاصة بالوكيل إلى `models.providers` في الإعدادات. + - تستخدم القيم المتطابقة للنموذج `contextWindow`/`maxTokens` القيمة الأعلى بين الإعدادات الصريحة وقيم الفهرس الضمنية. + - يحافظ `contextTokens` للنموذج المتطابق على حد وقت تشغيل صريح عند وجوده؛ استخدمه لتقييد السياق الفعلي من دون تغيير بيانات النموذج الأصلية. - استخدم `models.mode: "replace"` عندما تريد أن تعيد الإعدادات كتابة `models.json` بالكامل. - - يكون حفظ العلامات معتمدًا على المصدر: تُكتب العلامات من لقطة إعدادات المصدر النشطة (قبل الحل)، وليس من قيم الأسرار المحلولة وقت التشغيل. + - حفظ العلامات يعتمد على المصدر بوصفه صاحب الحقيقة: تُكتب العلامات من لقطة إعدادات المصدر النشطة (قبل الحل)، وليس من قيم الأسرار المحلولة وقت التشغيل. -### تفاصيل حقول المزوّد +### تفاصيل حقول الموفّر -- `models.mode`: سلوك فهرس المزوّد (`merge` أو `replace`). -- `models.providers`: خريطة المزوّدات المخصصة مفهرسة بحسب معرّف المزوّد. -- `models.providers.*.api`: مكيّف الطلب (`openai-completions` أو `openai-responses` أو `anthropic-messages` أو `google-generative-ai` وغير ذلك). -- `models.providers.*.apiKey`: بيانات اعتماد المزوّد (يُفضَّل استخدام 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.*.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. الأوضاع: `"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.*.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`: إدخالات فهرس النماذج الصريحة الخاصة بالموفّر. +- `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`: تلميح توافق اختياري لنقاط نهاية chat المتوافقة مع OpenAI والتي تقبل النصوص فقط. عندما تكون `true`، يقوم OpenClaw بتسطيح مصفوفات `messages[].content` النصية البحتة إلى سلاسل نصية عادية قبل إرسال الطلب. +- `models.providers.*.models.*.compat.supportsDeveloperRole`: تلميح توافق اختياري. بالنسبة إلى `api: "openai-completions"` مع `baseUrl` غير أصلي وغير فارغ (`host` ليس `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`: مرشح اختياري لمعرّف المزوّد للاكتشاف الموجّه. -- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: فترة polling لتحديث الاكتشاف. +- `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`: الحد الاحتياطي الأقصى لرموز الإخراج للنماذج المكتشفة. +- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: الحد الأقصى الاحتياطي لرموز الخرج للنماذج المكتشفة. -### أمثلة على المزوّدات +### أمثلة على الموفّرين - + ```json5 { @@ -2495,7 +2631,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -استخدم `cerebras/zai-glm-4.7` مع Cerebras؛ واستخدم `zai/glm-4.7` مع Z.AI مباشرةً. +استخدم `cerebras/zai-glm-4.7` مع Cerebras؛ واستخدم `zai/glm-4.7` مع Z.AI مباشرة. @@ -2512,11 +2648,11 @@ 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`. - + ```json5 { @@ -2529,15 +2665,15 @@ 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` -- بالنسبة إلى نقطة النهاية العامة، عرّف مزودًا مخصصًا مع تجاوز `baseUrl`. +- بالنسبة إلى نقطة النهاية العامة، عرّف موفّراً مخصصاً مع تجاوز `baseUrl`. - + ```json5 { @@ -2574,9 +2710,9 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري بالنسبة إلى نقطة نهاية الصين: `baseUrl: "https://api.moonshot.cn/v1"` أو `openclaw onboard --auth-choice moonshot-api-key-cn`. -تعلن نقاط نهاية Moonshot الأصلية عن توافق استخدام البث على ناقل -`openai-completions` المشترك، ويعتمد OpenClaw في ذلك على قدرات نقطة النهاية -وليس على معرّف المزوّد المضمّن وحده. +تعلن نقاط نهاية Moonshot الأصلية توافق استخدام البث على النقل المشترك +`openai-completions`، ويعتمد OpenClaw في ذلك على قدرات نقطة النهاية +وليس على معرّف الموفّر المدمج وحده. @@ -2594,11 +2730,11 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -متوافق مع Anthropic، ومزوّد مضمّن. الاختصار: `openclaw onboard --auth-choice kimi-code-api-key`. +متوافق مع Anthropic، وهو موفّر مدمج. الاختصار: `openclaw onboard --auth-choice kimi-code-api-key`. - + ```json5 { @@ -2633,11 +2769,11 @@ 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`. - + ```json5 { @@ -2676,9 +2812,9 @@ 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 تفكير MiniMax -افتراضيًا ما لم تضبط `thinking` بنفسك صراحةً. ويعيد `/fast on` أو +يفترض فهرس النماذج القيمة M2.7 فقط. +في مسار البث المتوافق مع Anthropic، يعطّل OpenClaw التفكير في MiniMax +افتراضياً ما لم تضبط `thinking` بنفسك صراحةً. ويعيد `/fast on` أو `params.fastMode: true` كتابة `MiniMax-M2.7` إلى `MiniMax-M2.7-highspeed`. @@ -2686,7 +2822,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري -راجع [النماذج المحلية](/ar/gateway/local-models). باختصار: شغّل نموذجًا محليًا كبيرًا عبر LM Studio Responses API على عتاد قوي؛ واحتفظ بالنماذج المستضافة مدمجةً كبديل احتياطي. +راجع [النماذج المحلية](/ar/gateway/local-models). باختصار: شغّل نموذجاً محلياً كبيراً عبر LM Studio Responses API على عتاد قوي؛ واحتفظ بالنماذج المستضافة مدمجة كاحتياط. @@ -2707,7 +2843,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 }, @@ -2717,14 +2853,14 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -- `allowBundled`: قائمة سماح اختيارية لـ Skills المجمّعة فقط (ولا تتأثر Skills المُدارة/الخاصة بمساحة العمل). -- `load.extraDirs`: جذور Skills مشتركة إضافية (أدنى أولوية). -- `install.preferBrew`: عندما تكون true، تُفضَّل أدوات التثبيت عبر Homebrew عندما يكون `brew` - متاحًا قبل الرجوع إلى أنواع التثبيت الأخرى. +- `allowBundled`: قائمة سماح اختيارية لـ Skills المضمّنة فقط (ولا تتأثر Skills المُدارة/الخاصة بمساحة العمل). +- `load.extraDirs`: جذور Skills مشتركة إضافية (أدنى أسبقية). +- `install.preferBrew`: عند ضبطه على true، يفضّل مثبّتات Homebrew عندما تكون `brew` متاحة + قبل الرجوع إلى أنواع المثبّتات الأخرى. - `install.nodeManager`: تفضيل مثبّت Node لمواصفات `metadata.openclaw.install` (`npm` | `pnpm` | `yarn` | `bun`). - يؤدي `entries..enabled: false` إلى تعطيل Skill حتى لو كانت مضمّنة/مثبّتة. -- `entries..apiKey`: وسيلة مريحة لـ Skills التي تعلن متغير بيئة أساسيًا (سلسلة نصية صريحة أو كائن SecretRef). +- `entries..apiKey`: وسيلة مريحة لـ Skills التي تعرّف متغير بيئة أساسي (سلسلة نصية صريحة أو كائن SecretRef). --- @@ -2752,47 +2888,47 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -- يُحمَّل من `~/.openclaw/extensions` و`/.openclaw/extensions` بالإضافة إلى `plugins.load.paths`. -- يقبل الاكتشاف Plugins OpenClaw الأصلية بالإضافة إلى حزم Codex المتوافقة وحزم Claude، بما في ذلك حزم Claude ذات التخطيط الافتراضي من دون manifest. +- يتم التحميل من `~/.openclaw/extensions` و`/.openclaw/extensions` بالإضافة إلى `plugins.load.paths`. +- يقبل الاكتشاف إضافات OpenClaw الأصلية بالإضافة إلى حزم Codex المتوافقة وحزم Claude، بما في ذلك حزم Claude ذات التخطيط الافتراضي من دون manifest. - **تتطلب تغييرات الإعدادات إعادة تشغيل Gateway.** -- `allow`: قائمة سماح اختيارية (لا تُحمَّل إلا Plugins المدرجة). ويفوز `deny`. -- `plugins.entries..apiKey`: حقل مريح لمفتاح API على مستوى Plugin (عندما يكون مدعومًا من Plugin). +- `allow`: قائمة سماح اختيارية (تُحمَّل فقط الإضافات المدرجة). ويفوز `deny`. +- `plugins.entries..apiKey`: حقل مريح لمفتاح API على مستوى Plugin (عندما يدعمه Plugin). - `plugins.entries..env`: خريطة متغيرات بيئة ضمن نطاق Plugin. -- `plugins.entries..hooks.allowPromptInjection`: عندما تكون `false`، يمنع core الخطاف `before_prompt_build` ويتجاهل الحقول المعدِّلة للموجّه من `before_agent_start` القديم، مع الحفاظ على `modelOverride` و`providerOverride` القديمين. وينطبق ذلك على خطافات Plugin الأصلية وعلى أدلة الخطافات التي توفرها الحزم المدعومة. -- `plugins.entries..subagent.allowModelOverride`: يثق صراحةً بهذا Plugin لطلب تجاوزات `provider` و`model` لكل تشغيل في عمليات الوكلاء الفرعيين الخلفية. -- `plugins.entries..subagent.allowedModels`: قائمة سماح اختيارية لأهداف `provider/model` القياسية لتجاوزات الوكلاء الفرعيين الموثوق بها. استخدم `"*"` فقط عندما تريد عمدًا السماح بأي نموذج. -- `plugins.entries..config`: كائن إعدادات يعرّفه Plugin (ويتحقق منه مخطط Plugin الأصلي في OpenClaw عند توفره). -- `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`: عنوان API الأساسي لـ Firecrawl (الافتراضي: `https://api.firecrawl.dev`). +- `plugins.entries..hooks.allowPromptInjection`: عندما تكون `false`، يمنع core الخطاف `before_prompt_build` ويتجاهل الحقول المعدِّلة للـ prompt من `before_agent_start` القديم، مع الحفاظ على `modelOverride` و`providerOverride` القديمين. وينطبق ذلك على خطافات Plugin الأصلية وأدلة الخطافات التي توفّرها الحزم المدعومة. +- `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. + - `apiKey`: مفتاح API الخاص بـ Firecrawl ‏(يقبل SecretRef). ويعود احتياطياً إلى `plugins.entries.firecrawl.config.webSearch.apiKey` أو `tools.web.fetch.firecrawl.apiKey` القديم أو متغير البيئة `FIRECRAWL_API_KEY`. + - `baseUrl`: عنوان API الأساسي لـ Firecrawl ‏(الافتراضي: `https://api.firecrawl.dev`). - `onlyMainContent`: استخراج المحتوى الرئيسي فقط من الصفحات (الافتراضي: `true`). - - `maxAgeMs`: أقصى عمر لذاكرة التخزين المؤقت بالمللي ثانية (الافتراضي: `172800000` / يومان). + - `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`: تفعيل موفّر 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 * * *"` افتراضيًا). - - تعد سياسة المراحل والعتبات من تفاصيل التنفيذ (وليست مفاتيح إعدادات موجهة للمستخدم). + - `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 المفعّلة أن تساهم بإعدادات Pi مضمّنة افتراضية من `settings.json`؛ ويطبّق OpenClaw هذه القيم كإعدادات وكيل منظّفة، وليس كتصحيحات خام لإعدادات OpenClaw. -- `plugins.slots.memory`: اختر معرّف Plugin الذاكرة النشط، أو `"none"` لتعطيل Plugins الذاكرة. -- `plugins.slots.contextEngine`: اختر معرّف Plugin محرك السياق النشط؛ والافتراضي هو `"legacy"` ما لم تثبّت محركًا آخر وتحدده. -- `plugins.installs`: بيانات تعريف التثبيت التي يديرها CLI وتُستخدم بواسطة `openclaw plugins update`. +- يمكن أيضاً لإضافات حزم Claude المفعّلة أن تساهم في القيم الافتراضية المضمّنة لـ Pi من `settings.json`؛ ويطبّق OpenClaw هذه القيم كإعدادات وكيل مُنقّاة، وليس كتصحيحات إعدادات خام لـ OpenClaw. +- `plugins.slots.memory`: اختر معرّف Plugin الذاكرة النشط، أو `"none"` لتعطيل إضافات الذاكرة. +- `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 على التعديلات اليدوية. -راجع [Plugin](/ar/tools/plugin). +راجع [Plugins](/ar/tools/plugin). --- -## المتصفح +## Browser ```json5 { @@ -2801,8 +2937,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"], }, @@ -2829,32 +2965,32 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ``` - يؤدي `evaluateEnabled: false` إلى تعطيل `act:evaluate` و`wait --fn`. -- يكون `ssrfPolicy.dangerouslyAllowPrivateNetwork` معطّلًا عند عدم ضبطه، لذلك يبقى تنقل المتصفح صارمًا افتراضيًا. -- اضبط `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` فقط عندما تثق عمدًا في تنقل المتصفح إلى الشبكات الخاصة. -- في الوضع الصارم، تخضع نقاط نهاية ملفات تعريف CDP البعيدة (`profiles.*.cdpUrl`) لنفس حظر الشبكات الخاصة أثناء فحوصات الوصول/الاكتشاف. -- يظل `ssrfPolicy.allowPrivateNetwork` مدعومًا كاسم مستعار قديم. +- يكون `ssrfPolicy.dangerouslyAllowPrivateNetwork` معطلاً عند عدم ضبطه، لذلك يبقى تنقل Browser صارماً افتراضياً. +- اضبط `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` فقط عندما تثق عمداً في تنقل Browser داخل الشبكة الخاصة. +- في الوضع الصارم، تخضع نقاط نهاية ملفات تعريف CDP البعيدة (`profiles.*.cdpUrl`) للحظر نفسه الخاص بالشبكات الخاصة أثناء فحوصات الوصول/الاكتشاف. +- يظل `ssrfPolicy.allowPrivateNetwork` مدعوماً كاسم بديل قديم. - في الوضع الصارم، استخدم `ssrfPolicy.hostnameAllowlist` و`ssrfPolicy.allowedHostnames` للاستثناءات الصريحة. -- تكون ملفات التعريف البعيدة في وضع attach-only (ويتم تعطيل البدء/الإيقاف/إعادة التعيين). +- تكون ملفات التعريف البعيدة attach-only ‏(بدء/إيقاف/إعادة تعيين معطلة). - يقبل `profiles.*.cdpUrl` القيم `http://` و`https://` و`ws://` و`wss://`. - استخدم HTTP(S) عندما تريد من OpenClaw اكتشاف `/json/version`؛ واستخدم WS(S) - عندما يزوّدك المزوّد بعنوان DevTools WebSocket مباشر. -- تكون ملفات تعريف `existing-session` خاصة بالمضيف فقط وتستخدم Chrome MCP بدلًا من CDP. + استخدم HTTP(S) عندما تريد أن يكتشف OpenClaw المسار `/json/version`؛ واستخدم WS(S) + عندما يوفّر لك المزوّد عنوان DevTools WebSocket مباشراً. +- تكون ملفات تعريف `existing-session` مخصصة للمضيف فقط وتستخدم Chrome MCP بدلاً من CDP. - يمكن لملفات تعريف `existing-session` ضبط `userDataDir` لاستهداف - ملف تعريف متصفح معيّن قائم على Chromium مثل Brave أو Edge. -- تحتفظ ملفات تعريف `existing-session` بالقيود الحالية لمسار Chrome MCP: - إجراءات تعتمد على اللقطات/المراجع بدلًا من استهداف محددات CSS، وخطافات رفع - ملف واحد، ومن دون تجاوزات لمهلات مربعات الحوار، ومن دون `wait --load networkidle`، ولا - `responsebody` أو تصدير PDF أو اعتراض التنزيلات أو الإجراءات الدفعية. -- تقوم ملفات تعريف `openclaw` المحلية المُدارة بتعيين `cdpPort` و`cdpUrl` تلقائيًا؛ ولا + ملف تعريف محدد لمتصفح قائم على Chromium مثل Brave أو Edge. +- تحتفظ ملفات تعريف `existing-session` بقيود مسار Chrome MCP الحالية: + إجراءات معتمدة على اللقطة/المرجع بدلاً من الاستهداف عبر CSS selector، وخطافات رفع ملف واحد، + ومن دون تجاوزات لمهلة الحوارات، ومن دون `wait --load networkidle`، + أو `responsebody`، أو تصدير PDF، أو اعتراض التنزيل، أو الإجراءات الدفعية. +- تعيّن ملفات تعريف `openclaw` المحلية المُدارة القيمتين `cdpPort` و`cdpUrl` تلقائياً؛ ولا تضبط `cdpUrl` صراحةً إلا لـ CDP البعيد. -- ترتيب الاكتشاف التلقائي: المتصفح الافتراضي إذا كان قائمًا على Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary. +- ترتيب الاكتشاف التلقائي: المتصفح الافتراضي إذا كان قائماً على Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary. - خدمة التحكم: loopback فقط (المنفذ مشتق من `gateway.port`، والافتراضي `18791`). -- يقوم `extraArgs` بإلحاق أعلام تشغيل إضافية ببدء Chromium المحلي (مثل - `--disable-gpu`، أو تغيير حجم النافذة، أو أعلام التصحيح). +- يضيف `extraArgs` إشارات تشغيل إضافية إلى بدء Chromium المحلي (على سبيل المثال + `--disable-gpu` أو تحديد حجم النافذة أو إشارات التصحيح). --- -## واجهة المستخدم +## UI ```json5 { @@ -2862,14 +2998,14 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري seamColor: "#FF4500", assistant: { name: "OpenClaw", - avatar: "CB", // إيموجي، نص قصير، URL لصورة، أو data URI + avatar: "CB", // emoji, short text, image URL, or data URI }, }, } ``` -- `seamColor`: لون التمييز لواجهة التطبيق الأصلية (مثل تلوين فقاعة Talk Mode، وما إلى ذلك). -- `assistant`: تجاوز لهوية Control UI. ويعود إلى هوية الوكيل النشط. +- `seamColor`: لون التمييز لعناصر واجهة التطبيق الأصلية (مثل تلوين فقاعة Talk Mode، وما إلى ذلك). +- `assistant`: تجاوز هوية Control UI. ويعود احتياطياً إلى هوية الوكيل النشط. --- @@ -2884,8 +3020,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, @@ -2903,9 +3039,9 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري basePath: "/openclaw", // root: "dist/control-ui", // embedSandbox: "scripts", // strict | scripts | trusted - // allowExternalEmbedUrls: false, // خطير: السماح بعناوين تضمين خارجية مطلقة http(s) - // allowedOrigins: ["https://control.example.com"], // مطلوب لـ Control UI غير loopback - // dangerouslyAllowHostHeaderOriginFallback: false, // وضع خطير للرجوع إلى الأصل عبر ترويسة Host + // 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, }, @@ -2916,12 +3052,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: { @@ -2938,51 +3074,51 @@ 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**: الربط الافتراضي `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"`. وينشئ معالج onboarding رمزًا مميّزًا افتراضيًا. -- إذا كانت كل من `gateway.auth.token` و`gateway.auth.password` مهيأتين (بما في ذلك SecretRefs)، فاضبط `gateway.auth.mode` صراحةً إلى `token` أو `password`. وتفشل عمليات البدء وتثبيت/إصلاح الخدمة عندما يكون كلاهما مهيأً ويكون الوضع غير مضبوط. -- `gateway.auth.mode: "none"`: وضع صريح بلا مصادقة. استخدمه فقط في إعدادات local loopback الموثوق بها؛ وهذا الخيار غير معروض عمدًا في موجّهات onboarding. -- `gateway.auth.mode: "trusted-proxy"`: فوّض المصادقة إلى reverse proxy واعٍ بالهوية وثق في ترويسات الهوية القادمة من `gateway.trustedProxies` (راجع [Trusted Proxy Auth](/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 العادي في 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`: قائمة سماح صريحة لأصول المتصفح لاتصالات Gateway WebSocket. وهي مطلوبة عندما يُتوقَّع عملاء متصفح من أصول غير loopback. -- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: وضع خطير يفعّل الرجوع إلى الأصل عبر ترويسة Host لعمليات النشر التي تعتمد عمدًا على سياسة الأصل القائمة على ترويسة Host. -- `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 الأساسي للـ relay الخارجي الخاص بـ APNs والمستخدم بواسطة إصدارات 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`: عتبة المقبس الراكد بالدقائق. اجعلها أكبر من أو مساوية لـ `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 أو تحقن ترويسات العميل المُعاد توجيهها. أدرج فقط الوكلاء الذين تتحكم بهم. وتظل إدخالات 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. +- `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`)، وليس أسماء host البديلة (`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"`. ويولّد معالج onboarding رمزاً مميزاً افتراضياً. +- إذا كان كل من `gateway.auth.token` و`gateway.auth.password` مضبوطين (بما في ذلك SecretRefs)، فاضبط `gateway.auth.mode` صراحةً على `token` أو `password`. وتفشل عمليات بدء التشغيل وتثبيت/إصلاح الخدمة عندما يكون الاثنان مضبوطين ويكون الوضع غير مضبوط. +- `gateway.auth.mode: "none"`: وضع صريح من دون مصادقة. استخدمه فقط لإعدادات local loopback الموثوقة؛ وهذا الوضع غير معروض عمداً في مطالبات onboarding. +- `gateway.auth.mode: "trusted-proxy"`: فوّض المصادقة إلى reverse proxy مدرك للهوية واثق برؤوس الهوية من `gateway.trustedProxies` ‏(راجع [مصادقة Trusted Proxy](/ar/gateway/trusted-proxy-auth)). ويتوقع هذا الوضع مصدراً proxy **غير loopback**؛ ولا تستوفي reverse proxyات loopback على المضيف نفسه مصادقة 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 ذات الأصل browser-origin مع تعطيل إعفاء loopback (كإجراء دفاعي إضافي ضد هجمات brute force على localhost من المتصفح). +- على loopback، تُعزل حالات القفل ذات الأصل browser-origin لكل قيمة `Origin` + مطبَّعة، لذلك لا تؤدي الإخفاقات المتكررة من أصل localhost واحد تلقائياً + إلى قفل أصل مختلف. +- `tailscale.mode`: ‏`serve` ‏(ضمن tailnet فقط، مع bind loopback) أو `funnel` ‏(عام، ويتطلب مصادقة). +- `controlUi.allowedOrigins`: قائمة سماح صريحة لأصول browser-origin لاتصالات 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 أو تحقن رؤوس العميل المُمرَّر. أدرج فقط الوكلاء الذين تتحكم فيهم. وتظل إدخالات loopback صالحة لإعدادات الوكيل/الاكتشاف المحلي على المضيف نفسه (على سبيل المثال 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 -- 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` @@ -2990,12 +3126,12 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري - `gateway.http.endpoints.responses.images.urlAllowlist` تُعامل قوائم السماح الفارغة على أنها غير مضبوطة؛ استخدم `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 على مضيف واحد باستخدام منافذ وأدلة حالة فريدة: +شغّل عدة Gateway على مضيف واحد مع منافذ وأدلة حالة فريدة: ```bash OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \ @@ -3003,9 +3139,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). +راجع [Gateway متعددة](/ar/gateway/multiple-gateways). ### `gateway.tls` @@ -3023,11 +3159,11 @@ openclaw gateway --port 19001 } ``` -- `enabled`: يفعّل إنهاء TLS عند مستمع Gateway ‏(HTTPS/WSS) (الافتراضي: `false`). -- `autoGenerate`: ينشئ تلقائيًا زوج شهادة/مفتاح ذاتي التوقيع محلي عندما لا تكون ملفات صريحة مهيأة؛ للاستخدام المحلي/التطوير فقط. -- `certPath`: مسار نظام الملفات لملف شهادة TLS. -- `keyPath`: مسار نظام الملفات لملف المفتاح الخاص بـ TLS؛ ويجب تقييد أذوناته. -- `caPath`: مسار اختياري لحزمة CA من أجل تحقق العميل أو سلاسل الثقة المخصصة. +- `enabled`: يفعّل إنهاء TLS عند مستمع Gateway ‏(HTTPS/WSS) ‏(الافتراضي: `false`). +- `autoGenerate`: يولّد تلقائياً زوج شهادة/مفتاح محلي موقّع ذاتياً عندما لا تكون الملفات الصريحة مضبوطة؛ للاستخدام المحلي/التطويري فقط. +- `certPath`: مسار نظام الملفات إلى ملف شهادة TLS. +- `keyPath`: مسار نظام الملفات إلى ملف المفتاح الخاص لـ TLS؛ وحافظ على تقييد أذوناته. +- `caPath`: مسار اختياري إلى حزمة CA للتحقق من العميل أو سلاسل الثقة المخصصة. ### `gateway.reload` @@ -3043,17 +3179,17 @@ openclaw gateway --port 19001 } ``` -- `mode`: يتحكم في كيفية تطبيق تعديلات الإعدادات أثناء وقت التشغيل. +- `mode`: يتحكم في كيفية تطبيق تعديلات الإعدادات وقت التشغيل. - `"off"`: تجاهل التعديلات الحية؛ وتتطلب التغييرات إعادة تشغيل صريحة. - - `"restart"`: أعد تشغيل عملية Gateway دائمًا عند تغيير الإعدادات. + - `"restart"`: أعد تشغيل عملية Gateway دائماً عند تغيير الإعدادات. - `"hot"`: طبّق التغييرات داخل العملية من دون إعادة تشغيل. - - `"hybrid"` (الافتراضي): حاول أولًا إعادة التحميل الحي؛ ثم ارجع إلى إعادة التشغيل إذا لزم الأمر. -- `debounceMs`: نافذة إزالة الارتداد بالمللي ثانية قبل تطبيق تغييرات الإعدادات (عدد صحيح غير سالب). -- `deferralTimeoutMs`: أقصى وقت بالمللي ثانية لانتظار العمليات الجارية قبل فرض إعادة التشغيل (الافتراضي: `300000` = 5 دقائق). + - `"hybrid"` ‏(الافتراضي): حاول أولاً إعادة التحميل السريع؛ ثم ارجع إلى إعادة التشغيل عند الحاجة. +- `debounceMs`: نافذة إزالة الارتداد بالميلي ثانية قبل تطبيق تغييرات الإعدادات (عدد صحيح غير سالب). +- `deferralTimeoutMs`: الحد الأقصى للوقت بالميلي ثانية لانتظار العمليات الجارية قبل فرض إعادة التشغيل (الافتراضي: `300000` = 5 دقائق). --- -## الخطافات +## Hooks ```json5 { @@ -3087,36 +3223,36 @@ openclaw gateway --port 19001 ``` المصادقة: `Authorization: Bearer ` أو `x-openclaw-token: `. -وتُرفض رموز hook المميزة في سلسلة الاستعلام. +تُرفض رموز hook المميزة في سلسلة الاستعلام. ملاحظات التحقق والأمان: -- يتطلب `hooks.enabled=true` قيمة غير فارغة لـ `hooks.token`. -- يجب أن يكون `hooks.token` **مختلفًا** عن `gateway.auth.token`؛ ويُرفض إعادة استخدام رمز Gateway. -- لا يمكن أن تكون `hooks.path` هي `/`؛ استخدم مسارًا فرعيًا مخصصًا مثل `/hooks`. -- إذا كانت `hooks.allowRequestSessionKey=true`، فقَيِّد `hooks.allowedSessionKeyPrefixes` (مثل `["hook:"]`). +- يتطلب `hooks.enabled=true` قيمة `hooks.token` غير فارغة. +- يجب أن تكون `hooks.token` **مختلفة** عن `gateway.auth.token`؛ ويُرفض إعادة استخدام رمز Gateway المميز. +- لا يمكن أن تكون `hooks.path` هي `/`؛ استخدم مساراً فرعياً مخصصاً مثل `/hooks`. +- إذا كانت `hooks.allowRequestSessionKey=true`، فقيد `hooks.allowedSessionKeyPrefixes` (على سبيل المثال `["hook:"]`). **نقاط النهاية:** -- `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` +- `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` -- يطابق `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` (وتُرفض المسارات المطلقة وعمليات التنقل عبر المسار). +- يمكن أن يشير `transform` إلى وحدة JS/TS تعيد إجراء hook. + - يجب أن يكون `transform.module` مساراً نسبياً ويبقى ضمن `hooks.transformsDir` (وتُرفض المسارات المطلقة وعمليات الاجتياز). - يوجّه `agentId` إلى وكيل محدد؛ وتعود المعرّفات غير المعروفة إلى الوكيل الافتراضي. -- `allowedAgentIds`: يقيّد التوجيه الصريح (`*` أو الحذف = السماح للجميع، و`[]` = منع الجميع). +- `allowedAgentIds`: يقيّد التوجيه الصريح (`*` أو الحذف = السماح للجميع، و`[]` = رفض الجميع). - `defaultSessionKey`: مفتاح جلسة ثابت اختياري لتشغيلات وكيل hook من دون `sessionKey` صريح. -- `allowRequestSessionKey`: السماح لمتصلّي `/hooks/agent` بضبط `sessionKey` (الافتراضي: `false`). -- `allowedSessionKeyPrefixes`: قائمة سماح اختيارية للبادئات لقيم `sessionKey` الصريحة (في الطلب + التعيين)، مثل `["hook:"]`. +- `allowRequestSessionKey`: يسمح لمتصلّي `/hooks/agent` بتعيين `sessionKey` ‏(الافتراضي: `false`). +- `allowedSessionKeyPrefixes`: قائمة سماح اختيارية للبادئات الخاصة بقيم `sessionKey` الصريحة (في الطلب + التعيين)، مثل `["hook:"]`. - يؤدي `deliver: true` إلى إرسال الرد النهائي إلى قناة؛ وتكون القيمة الافتراضية لـ `channel` هي `last`. -- يتجاوز `model` قيمة LLM لتشغيل هذا hook (ويجب أن يكون مسموحًا به إذا كان فهرس النماذج مضبوطًا). +- يتجاوز `model` قيمة LLM لهذا التشغيل من hook ‏(ويجب أن يكون مسموحاً به إذا كان فهرس النموذج مضبوطاً). @@ -3143,35 +3279,35 @@ 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 host ```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"` (الافتراضي). -- الروابط غير loopback: تتطلب مسارات canvas مصادقة Gateway (token/password/trusted-proxy)، تمامًا مثل أسطح HTTP الأخرى في Gateway. -- عادةً لا ترسل Node WebViews ترويسات مصادقة؛ وبعد إقران Node واتصاله، يعلن Gateway عن عناوين قدرة ضمن نطاق Node للوصول إلى canvas/A2UI. -- ترتبط عناوين القدرة بجلسة WS النشطة الخاصة بـ Node وتنتهي صلاحيتها بسرعة. ولا يُستخدم الرجوع الاحتياطي القائم على IP. -- يحقن عميل live-reload في HTML المقدَّم. -- ينشئ تلقائيًا ملف `index.html` ابتدائيًا عندما يكون المسار فارغًا. -- كما يقدّم A2UI عند `/__openclaw__/a2ui/`. +- محلي فقط: احتفظ بـ `gateway.bind: "loopback"` ‏(الافتراضي). +- مع قيم bind غير loopback: تتطلب مسارات canvas مصادقة Gateway ‏(token/password/trusted-proxy)، مثل بقية أسطح HTTP الخاصة بـ Gateway. +- لا ترسل Node WebViews عادةً رؤوس المصادقة؛ وبعد إقران node واتصاله، يعلن Gateway عناوين URL لقدرات ضمن نطاق node للوصول إلى canvas/A2UI. +- ترتبط عناوين URL الخاصة بالقدرات بجلسة WS النشطة لـ node وتنتهي صلاحيتها بسرعة. ولا يُستخدم الاحتياط المعتمد على IP. +- يحقن عميل live-reload في HTML المقدمة. +- ينشئ تلقائياً ملف `index.html` ابتدائياً عند الفراغ. +- يقدّم أيضاً A2UI عند `/__openclaw__/a2ui/`. - تتطلب التغييرات إعادة تشغيل Gateway. -- عطّل live reload للأدلة الكبيرة أو عند أخطاء `EMFILE`. +- عطّل live reload للأدلة الكبيرة أو عند ظهور أخطاء `EMFILE`. --- @@ -3189,9 +3325,9 @@ 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) @@ -3203,7 +3339,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`. @@ -3211,7 +3347,7 @@ openclaw gateway --port 19001 ## البيئة -### `env` (متغيرات بيئة مضمّنة) +### `env` ‏(متغيرات البيئة المضمّنة) ```json5 { @@ -3228,14 +3364,14 @@ openclaw gateway --port 19001 } ``` -- لا تُطبَّق متغيرات البيئة المضمّنة إلا إذا كانت بيئة العملية تفتقد المفتاح. -- ملفات `.env`: ‏`.env` في CWD و`~/.openclaw/.env` (ولا يطغى أيٌّ منهما على المتغيرات الموجودة). -- `shellEnv`: يستورد المفاتيح المتوقعة المفقودة من ملف تعريف shell الخاص بتسجيل الدخول. +- لا تُطبّق متغيرات البيئة المضمنة إلا إذا كانت بيئة العملية تفتقد المفتاح. +- ملفات `.env`: ملف `.env` في CWD + `~/.openclaw/.env` ‏(ولا يطغى أي منهما على المتغيرات الموجودة). +- `shellEnv`: يستورد المفاتيح المتوقعة المفقودة من ملف profile الخاص بصدفة تسجيل الدخول. - راجع [البيئة](/ar/help/environment) لمعرفة الأسبقية الكاملة. -### الاستبدال بمتغيرات البيئة +### استبدال متغيرات البيئة -أشر إلى متغيرات البيئة في أي سلسلة إعدادات باستخدام `${VAR_NAME}`: +أشِر إلى متغيرات البيئة في أي سلسلة إعدادات باستخدام `${VAR_NAME}`: ```json5 { @@ -3245,20 +3381,20 @@ openclaw gateway --port 19001 } ``` -- لا تُطابق إلا الأسماء بالأحرف الكبيرة: `[A-Z_][A-Z0-9_]*`. -- تؤدي المتغيرات المفقودة/الفارغة إلى خطأ عند تحميل الإعدادات. -- استخدم `$${VAR}` للحصول على `${VAR}` حرفيًا. +- تتم مطابقة الأسماء الكبيرة فقط: `[A-Z_][A-Z0-9_]*`. +- تؤدي المتغيرات المفقودة/الفارغة إلى إطلاق خطأ عند تحميل الإعدادات. +- استخدم `$${VAR}` للهروب إلى `${VAR}` حرفياً. - يعمل ذلك مع `$include`. --- ## الأسرار -مراجع الأسرار إضافية: فما تزال القيم النصية الصريحة تعمل. +تُعد مراجع الأسرار إضافةً تراكمية: ما زالت القيم النصية الصريحة تعمل. ### `SecretRef` -استخدم شكل كائن واحد: +استخدم شكلاً واحداً للكائن: ```json5 { source: "env" | "file" | "exec", provider: "default", id: "..." } @@ -3267,10 +3403,10 @@ 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`) +- نمط `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`) ### سطح بيانات الاعتماد المدعوم @@ -3278,13 +3414,13 @@ openclaw gateway --port 19001 - تستهدف `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", @@ -3308,13 +3444,13 @@ openclaw gateway --port 19001 ملاحظات: -- يدعم مزوّد `file` النمطين `mode: "json"` و`mode: "singleValue"` (ويجب أن تكون قيمة `id` هي `"value"` في نمط singleValue). -- يتطلب مزوّد `exec` مسار `command` مطلقًا ويستخدم حمولات البروتوكول عبر stdin/stdout. -- افتراضيًا، تُرفض مسارات الأوامر الرمزية. اضبط `allowSymlinkCommand: true` للسماح بمسارات symlink مع التحقق من المسار الهدف المحلول. -- إذا كانت `trustedDirs` مضبوطة، فإن فحص الدليل الموثوق يُطبَّق على المسار الهدف المحلول. -- تكون بيئة الابن في `exec` محدودة افتراضيًا؛ مرّر المتغيرات المطلوبة صراحةً باستخدام `passEnv`. -- تُحل مراجع الأسرار وقت التفعيل إلى لقطة داخل الذاكرة، ثم لا تقرأ مسارات الطلب سوى من تلك اللقطة. -- يُطبّق ترشيح السطح النشط أثناء التفعيل: تؤدي المراجع غير المحلولة على الأسطح المفعّلة إلى فشل البدء/إعادة التحميل، بينما يتم تخطي الأسطح غير النشطة مع تشخيصات. +- يدعم موفّر `file` الوضعين `mode: "json"` و`mode: "singleValue"` ‏(ويجب أن تكون `id` هي `"value"` في وضع singleValue). +- يتطلب موفّر `exec` مسار `command` مطلقاً ويستخدم حمولات البروتوكول على stdin/stdout. +- تُرفض مسارات الأوامر الرمزية افتراضياً. اضبط `allowSymlinkCommand: true` للسماح بمسارات الروابط الرمزية مع التحقق من مسار الهدف المحلول. +- إذا كان `trustedDirs` مضبوطاً، فسيُطبّق فحص الدليل الموثوق على مسار الهدف المحلول. +- تكون بيئة الابن في `exec` محدودة افتراضياً؛ ومرّر المتغيرات المطلوبة صراحةً عبر `passEnv`. +- تُحل مراجع الأسرار وقت التفعيل إلى لقطة داخل الذاكرة، ثم تقرأ مسارات الطلب اللقطة فقط. +- يُطبّق ترشيح السطح النشط أثناء التفعيل: تؤدي المراجع غير المحلولة على الأسطح المفعّلة إلى فشل بدء التشغيل/إعادة التحميل، بينما يتم تخطي الأسطح غير النشطة مع تشخيصات. --- @@ -3336,13 +3472,13 @@ openclaw gateway --port 19001 } ``` -- تُخزَّن الملفات الشخصية لكل وكيل في `/auth-profiles.json`. -- يدعم `auth-profiles.json` المراجع على مستوى القيمة (`keyRef` لـ `api_key`، و`tokenRef` لـ `token`) لأوضاع بيانات الاعتماد الثابتة. -- لا تدعم الملفات الشخصية في وضع OAuth ‏(`auth.profiles..mode = "oauth"`) بيانات اعتماد ملفات المصادقة المدعومة بـ SecretRef. +- تُخزَّن ملفات التعريف لكل وكيل في `/auth-profiles.json`. +- يدعم `auth-profiles.json` مراجع على مستوى القيمة (`keyRef` لـ `api_key`، و`tokenRef` لـ `token`) لأوضاع بيانات الاعتماد الثابتة. +- لا تدعم ملفات تعريف وضع OAuth ‏(`auth.profiles..mode = "oauth"`) بيانات اعتماد ملفات تعريف المصادقة المدعومة بـ SecretRef. - تأتي بيانات الاعتماد الثابتة وقت التشغيل من لقطات محلولة داخل الذاكرة؛ وتُنظَّف إدخالات `auth.json` الثابتة القديمة عند اكتشافها. -- يتم استيراد OAuth القديم من `~/.openclaw/credentials/oauth.json`. +- عمليات استيراد OAuth القديمة تأتي من `~/.openclaw/credentials/oauth.json`. - راجع [OAuth](/ar/concepts/oauth). -- سلوك وقت تشغيل الأسرار وأدوات `audit/configure/apply`: [إدارة الأسرار](/ar/gateway/secrets). +- سلوك وقت تشغيل الأسرار وأدوات `audit/configure/apply`: ‏[إدارة الأسرار](/ar/gateway/secrets). ### `auth.cooldowns` @@ -3364,21 +3500,21 @@ openclaw gateway --port 19001 } ``` -- `billingBackoffHours`: التراجع الأساسي بالساعات عندما يفشل ملف شخصي بسبب - أخطاء الفوترة/نقص الرصيد الحقيقية (الافتراضي: `5`). ولا يزال النص الصريح للفوترة - قد يصل إلى هذا المسار حتى على استجابات `401`/`403`، لكن - أدوات مطابقة النص الخاصة بالمزوّدات تظل محصورة في المزوّد الذي يملكها (مثل - OpenRouter ‏`Key limit exceeded`). أما رسائل نافذة الاستخدام القابلة لإعادة المحاولة في HTTP ‏`402` - أو رسائل حدود الإنفاق الخاصة بالمؤسسة/مساحة العمل فتبقى في مسار `rate_limit` - بدلًا من ذلك. -- `billingBackoffHoursByProvider`: تجاوزات اختيارية لكل مزوّد لساعات تراجع الفوترة. -- `billingMaxHours`: حد أقصى بالساعات للنمو الأسي لتراجع الفوترة (الافتراضي: `24`). -- `authPermanentBackoffMinutes`: التراجع الأساسي بالدقائق لإخفاقات `auth_permanent` عالية الثقة (الافتراضي: `10`). -- `authPermanentMaxMinutes`: حد أقصى بالدقائق لنمو تراجع `auth_permanent` (الافتراضي: `60`). -- `failureWindowHours`: نافذة متحركة بالساعات تُستخدم لعدادات التراجع (الافتراضي: `24`). -- `overloadedProfileRotations`: الحد الأقصى لعمليات تدوير ملفات المصادقة ضمن المزوّد نفسه عند أخطاء التحميل الزائد قبل التحول إلى بديل النموذج (الافتراضي: `1`). وتقع هنا الأشكال التي تعبّر عن انشغال المزوّد مثل `ModelNotReadyException`. -- `overloadedBackoffMs`: تأخير ثابت قبل إعادة المحاولة لتدوير ملف شخصي/مزوّد مثقل (الافتراضي: `0`). -- `rateLimitedProfileRotations`: الحد الأقصى لعمليات تدوير ملفات المصادقة ضمن المزوّد نفسه عند أخطاء تحديد المعدّل قبل التحول إلى بديل النموذج (الافتراضي: `1`). ويشمل ذلك دلو تحديد المعدّل نصوصًا على نمط المزوّد مثل `Too many concurrent requests` و`ThrottlingException` و`concurrency limit reached` و`workers_ai ... quota limit exceeded` و`resource exhausted`. +- `billingBackoffHours`: مدة التراجع الأساسية بالساعات عندما يفشل ملف التعريف بسبب أخطاء حقيقية + في الفوترة/عدم كفاية الرصيد (الافتراضي: `5`). ولا يزال من الممكن أن + يقع نص الفوترة الصريح هنا حتى في استجابات `401`/`403`، لكن + تبقى مطابقات النص الخاصة بكل موفّر ضمن نطاق الموفّر الذي يملكها (على سبيل المثال OpenRouter + ‏`Key limit exceeded`). وتبقى رسائل نوافذ الاستخدام القابلة لإعادة المحاولة عبر HTTP `402` + أو رسائل حدود الإنفاق على المؤسسة/مساحة العمل ضمن مسار `rate_limit` + بدلاً من ذلك. +- `billingBackoffHoursByProvider`: تجاوزات اختيارية لكل موفّر لساعات التراجع الخاصة بالفوترة. +- `billingMaxHours`: الحد الأقصى بالساعات للنمو الأسي لتراجع الفوترة (الافتراضي: `24`). +- `authPermanentBackoffMinutes`: مدة التراجع الأساسية بالدقائق لإخفاقات `auth_permanent` عالية الثقة (الافتراضي: `10`). +- `authPermanentMaxMinutes`: الحد الأقصى بالدقائق لنمو تراجع `auth_permanent` (الافتراضي: `60`). +- `failureWindowHours`: النافذة المتحركة بالساعات المستخدمة لعدادات التراجع (الافتراضي: `24`). +- `overloadedProfileRotations`: الحد الأقصى لتدويرات ملفات تعريف المصادقة ضمن الموفّر نفسه لأخطاء الحمل الزائد قبل الانتقال إلى الاحتياطي على مستوى النموذج (الافتراضي: `1`). وتقع هنا أشكال انشغال الموفّر مثل `ModelNotReadyException`. +- `overloadedBackoffMs`: تأخير ثابت قبل إعادة محاولة تدوير ملف تعريف/موفّر محمّل أكثر من اللازم (الافتراضي: `0`). +- `rateLimitedProfileRotations`: الحد الأقصى لتدويرات ملفات تعريف المصادقة ضمن الموفّر نفسه لأخطاء تحديد المعدل قبل الانتقال إلى الاحتياطي على مستوى النموذج (الافتراضي: `1`). ويتضمن ذلك مستودع تحديد المعدل نصوصاً على شكل موفّر مثل `Too many concurrent requests` و`ThrottlingException` و`concurrency limit reached` و`workers_ai ... quota limit exceeded` و`resource exhausted`. --- @@ -3398,9 +3534,9 @@ openclaw gateway --port 19001 ``` - ملف السجل الافتراضي: `/tmp/openclaw/openclaw-YYYY-MM-DD.log`. -- اضبط `logging.file` للحصول على مسار ثابت. -- يرتفع `consoleLevel` إلى `debug` عند استخدام `--verbose`. -- `maxFileBytes`: الحد الأقصى لحجم ملف السجل بالبايت قبل كبح عمليات الكتابة (عدد صحيح موجب؛ الافتراضي: `524288000` = 500 MB). استخدم تدوير السجلات الخارجي في بيئات الإنتاج. +- اضبط `logging.file` لمسار ثابت. +- ترتفع قيمة `consoleLevel` إلى `debug` عند استخدام `--verbose`. +- `maxFileBytes`: الحد الأقصى لحجم ملف السجل بالبايت قبل كبح عمليات الكتابة (عدد صحيح موجب؛ الافتراضي: `524288000` = ‏500 ميغابايت). استخدم تدوير السجلات الخارجي لعمليات النشر الإنتاجية. --- @@ -3437,20 +3573,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`: المفتاح الرئيسي لإخراج أدوات القياس (الافتراضي: `true`). +- `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`: تفعيل تصدير التتبعات أو المقاييس أو السجلات. -- `otel.sampleRate`: معدل أخذ عينات التتبعات من `0` إلى `1`. -- `otel.flushIntervalMs`: فترة التفريغ الدوري للقياس عن بعد بالمللي ثانية. -- `cacheTrace.enabled`: يسجل لقطات تتبع cache للتشغيلات المضمّنة (الافتراضي: `false`). -- `cacheTrace.filePath`: مسار الإخراج لـ JSONL الخاص بتتبع cache (الافتراضي: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`). -- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: تتحكم فيما يُدرج في مخرجات تتبع cache (وجميعها افتراضيًا: `true`). +- `otel.traces` / `otel.metrics` / `otel.logs`: تفعيل تصدير الأثر أو المقاييس أو السجلات. +- `otel.sampleRate`: معدل أخذ العينات للأثر من `0` إلى `1`. +- `otel.flushIntervalMs`: فاصل تفريغ telemetry الدوري بالميلي ثانية. +- `cacheTrace.enabled`: يسجل لقطات تتبع الذاكرة المؤقتة للتشغيلات المضمّنة (الافتراضي: `false`). +- `cacheTrace.filePath`: مسار الخرج لملف JSONL الخاص بتتبع الذاكرة المؤقتة (الافتراضي: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`). +- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: تتحكم في ما يُضمَّن في خرج تتبع الذاكرة المؤقتة (جميعها افتراضياً: `true`). --- @@ -3472,12 +3608,12 @@ openclaw gateway --port 19001 } ``` -- `channel`: قناة الإصدار لتثبيتات npm/git — ‏`"stable"` أو `"beta"` أو `"dev"`. -- `checkOnStart`: التحقق من تحديثات npm عند بدء Gateway (الافتراضي: `true`). -- `auto.enabled`: تفعيل التحديث التلقائي في الخلفية لتثبيتات الحزم (الافتراضي: `false`). -- `auto.stableDelayHours`: الحد الأدنى للتأخير بالساعات قبل التطبيق التلقائي لقناة stable (الافتراضي: `6`؛ الحد الأقصى: `168`). -- `auto.stableJitterHours`: نافذة توزيع إضافية بالساعات لطرح قناة stable (الافتراضي: `12`؛ الحد الأقصى: `168`). -- `auto.betaCheckIntervalHours`: عدد مرات إجراء فحوصات قناة beta بالساعات (الافتراضي: `1`؛ الحد الأقصى: `24`). +- `channel`: قناة الإصدار لعمليات تثبيت npm/git — ‏`"stable"` أو `"beta"` أو `"dev"`. +- `checkOnStart`: التحقق من تحديثات npm عند بدء Gateway ‏(الافتراضي: `true`). +- `auto.enabled`: تفعيل التحديث التلقائي في الخلفية لعمليات تثبيت الحِزم (الافتراضي: `false`). +- `auto.stableDelayHours`: الحد الأدنى للتأخير بالساعات قبل التطبيق التلقائي لقناة stable ‏(الافتراضي: `6`؛ الحد الأقصى: `168`). +- `auto.stableJitterHours`: نافذة توزيع إضافية لقناة stable بالساعات (الافتراضي: `12`؛ الحد الأقصى: `168`). +- `auto.betaCheckIntervalHours`: عدد مرات تشغيل فحوصات قناة beta بالساعات (الافتراضي: `1`؛ الحد الأقصى: `24`). --- @@ -3510,22 +3646,22 @@ openclaw gateway --port 19001 } ``` -- `enabled`: بوابة ميزات ACP العامة (الافتراضي: `false`). -- `dispatch.enabled`: بوابة مستقلة لإرسال أدوار جلسات ACP (الافتراضي: `true`). اضبطها على `false` للإبقاء على أوامر ACP متاحة مع حظر التنفيذ. -- `backend`: معرّف الواجهة الخلفية الافتراضي لوقت تشغيل ACP (ويجب أن يطابق Plugin وقت تشغيل ACP مسجّلًا). -- `defaultAgent`: معرّف وكيل ACP الاحتياطي المستهدف عندما لا تحدد عمليات spawn هدفًا صريحًا. +- `enabled`: بوابة ميزة ACP العامة (الافتراضي: `false`). +- `dispatch.enabled`: بوابة مستقلة لإرسال أدوار جلسات ACP ‏(الافتراضي: `true`). اضبطها على `false` للإبقاء على أوامر ACP متاحة مع حظر التنفيذ. +- `backend`: معرّف الواجهة الخلفية الافتراضية لوقت تشغيل ACP ‏(ويجب أن يطابق Plugin وقت تشغيل ACP مسجلاً). +- `defaultAgent`: معرّف وكيل هدف احتياطي لـ ACP عندما لا تحدد عمليات الإنشاء هدفاً صريحاً. - `allowedAgents`: قائمة سماح لمعرّفات الوكلاء المسموح بها لجلسات وقت تشغيل ACP؛ وتعني القيمة الفارغة عدم وجود تقييد إضافي. -- `maxConcurrentSessions`: الحد الأقصى لعدد جلسات ACP النشطة بالتزامن. -- `stream.coalesceIdleMs`: نافذة تفريغ الخمول بالمللي ثانية للنص المتدفق. -- `stream.maxChunkChars`: الحد الأقصى لحجم الجزء قبل تقسيم إسقاط الكتلة المتدفقة. -- `stream.repeatSuppression`: يمنع تكرار أسطر الحالة/الأدوات لكل دور (الافتراضي: `true`). -- `stream.deliveryMode`: ‏`"live"` يبث بشكل تدريجي؛ بينما `final_only` يخزّن حتى أحداث نهاية الدور. +- `maxConcurrentSessions`: الحد الأقصى لعدد جلسات ACP النشطة بالتوازي. +- `stream.coalesceIdleMs`: نافذة التفريغ عند الخمول بالميلي ثانية للنص المتدفق. +- `stream.maxChunkChars`: الحد الأقصى لحجم الكتلة قبل تقسيم إسقاط الكتلة المتدفقة. +- `stream.repeatSuppression`: يمنع تكرار أسطر الحالة/الأداة لكل دور (الافتراضي: `true`). +- `stream.deliveryMode`: يقوم `"live"` بالبث تدريجياً؛ بينما يقوم `"final_only"` بالتخزين المؤقت حتى أحداث إنهاء الدور. - `stream.hiddenBoundarySeparator`: الفاصل قبل النص المرئي بعد أحداث الأدوات المخفية (الافتراضي: `"paragraph"`). - `stream.maxOutputChars`: الحد الأقصى لأحرف خرج المساعد المعروضة لكل دور ACP. -- `stream.maxSessionUpdateChars`: الحد الأقصى للأحرف لأسطر الحالة/التحديث الخاصة بـ ACP المعروضة. -- `stream.tagVisibility`: سجل من أسماء الوسوم إلى تجاوزات رؤية منطقية للأحداث المتدفقة. +- `stream.maxSessionUpdateChars`: الحد الأقصى للأحرف لأسطر الحالة/التحديث المعروضة الخاصة بـ ACP. +- `stream.tagVisibility`: سجل يربط أسماء الوسوم بتجاوزات رؤية منطقية للأحداث المتدفقة. - `runtime.ttlMinutes`: مدة TTL للخمول بالدقائق لعُمّال جلسات ACP قبل أن يصبحوا مؤهلين للتنظيف. -- `runtime.installCommand`: أمر تثبيت اختياري للتشغيل عند تمهيد بيئة وقت تشغيل ACP. +- `runtime.installCommand`: أمر تثبيت اختياري للتشغيل عند تهيئة بيئة وقت تشغيل ACP. --- @@ -3541,15 +3677,15 @@ openclaw gateway --port 19001 } ``` -- يتحكم `cli.banner.taglineMode` في نمط الشعار النصي: - - `"random"` (الافتراضي): شعارات دوّارة طريفة/موسمية. - - `"default"`: شعار ثابت ومحايد (`كل محادثاتك، OpenClaw واحد.`). - - `"off"`: من دون نص شعار (مع بقاء عنوان الشريط/الإصدار ظاهرًا). -- لإخفاء الشريط بالكامل (وليس الشعارات فقط)، اضبط متغير البيئة `OPENCLAW_HIDE_BANNER=1`. +- يتحكم `cli.banner.taglineMode` في نمط الشعار الفرعي: + - `"random"` ‏(الافتراضي): عبارات فرعية دوّارة مضحكة/موسمية. + - `"default"`: عبارة فرعية محايدة ثابتة (`All your chats, one OpenClaw.`). + - `"off"`: من دون نص عبارة فرعية (مع استمرار عرض عنوان الشعار/الإصدار). +- لإخفاء الشعار بالكامل (وليس العبارات الفرعية فقط)، اضبط متغير البيئة `OPENCLAW_HIDE_BANNER=1`. --- -## المعالج +## Wizard بيانات وصفية يكتبها CLI في تدفقات الإعداد الموجّهة (`onboard` و`configure` و`doctor`): @@ -3569,15 +3705,15 @@ openclaw gateway --port 19001 ## الهوية -راجع حقول الهوية في `agents.list` ضمن [الإعدادات الافتراضية للوكيل](#agent-defaults). +راجع حقول الهوية في `agents.list` ضمن [القيم الافتراضية للوكلاء](#agent-defaults). --- -## Bridge (قديم، أُزيل) +## Bridge ‏(قديم، أُزيل) -لم تعد الإصدارات الحالية تتضمن TCP bridge. وتتصل Nodes عبر Gateway WebSocket. ولم تعد مفاتيح `bridge.*` جزءًا من مخطط الإعدادات (ويفشل التحقق حتى تتم إزالتها؛ ويمكن لـ `openclaw doctor --fix` إزالة المفاتيح غير المعروفة). +لم تعد الإصدارات الحالية تتضمن TCP bridge. وتتصل Nodes عبر Gateway WebSocket. ولم تعد مفاتيح `bridge.*` جزءاً من مخطط الإعدادات (وسيفشل التحقق حتى تُزال؛ ويمكن لـ `openclaw doctor --fix` إزالة المفاتيح غير المعروفة). - + ```json { @@ -3604,22 +3740,22 @@ openclaw gateway --port 19001 cron: { enabled: true, maxConcurrentRuns: 2, - webhook: "https://example.invalid/legacy", // بديل قديم مهمَل للمهام المخزنة ذات notify:true - webhookToken: "replace-with-dedicated-token", // رمز bearer اختياري لمصادقة 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`. كما تتحكم أيضًا في تنظيف أرشيفات نصوص Cron المحذوفة. الافتراضي: `24h`؛ واضبطها على `false` للتعطيل. +- `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`. +- `runLog.keepLines`: أحدث الأسطر المحتفَظ بها عند تفعيل تقليم سجل التشغيل. الافتراضي: `2000`. +- `webhookToken`: رمز bearer يُستخدم لتسليم POST إلى Cron Webhook ‏(`delivery.mode = "webhook"`)، وإذا حُذف فلن يُرسل أي رأس مصادقة. +- `webhook`: عنوان URL احتياطي قديم ومهمل لـ Webhook ‏(http/https) يُستخدم فقط للمهام المخزّنة التي لا تزال تحتوي على `notify: true`. ### `cron.retry` @@ -3635,11 +3771,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` @@ -3657,10 +3793,10 @@ openclaw gateway --port 19001 } ``` -- `enabled`: تفعيل تنبيهات الفشل لمهام Cron (الافتراضي: `false`). -- `after`: عدد الإخفاقات المتتالية قبل إطلاق تنبيه (عدد صحيح موجب، الحد الأدنى: `1`). -- `cooldownMs`: الحد الأدنى بالمللي ثانية بين التنبيهات المتكررة للوظيفة نفسها (عدد صحيح غير سالب). -- `mode`: وضع التسليم — ترسل `"announce"` عبر رسالة قناة؛ بينما تنشر `"webhook"` إلى Webhook المهيّأ. +- `enabled`: تفعيل تنبيهات الفشل لمهام Cron ‏(الافتراضي: `false`). +- `after`: عدد الإخفاقات المتتالية قبل إطلاق التنبيه (عدد صحيح موجب، الحد الأدنى: `1`). +- `cooldownMs`: الحد الأدنى بالميلي ثانية بين التنبيهات المتكررة لنفس المهمة (عدد صحيح غير سالب). +- `mode`: وضع التسليم — تقوم `"announce"` بالإرسال عبر رسالة قناة؛ بينما تقوم `"webhook"` بالنشر إلى Webhook المضبوط. - `accountId`: معرّف حساب أو قناة اختياري لتحديد نطاق تسليم التنبيه. ### `cron.failureDestination` @@ -3678,45 +3814,45 @@ openclaw gateway --port 19001 } ``` -- الوجهة الافتراضية لإشعارات فشل Cron عبر جميع الوظائف. -- `mode`: ‏`"announce"` أو `"webhook"`؛ وتكون القيمة الافتراضية `"announce"` عندما توجد بيانات هدف كافية. -- `channel`: تجاوز للقناة من أجل تسليم announce. وتعيد `"last"` استخدام آخر قناة تسليم معروفة. -- `to`: هدف announce صريح أو عنوان Webhook. ويكون مطلوبًا في وضع webhook. -- `accountId`: تجاوز اختياري للحساب من أجل التسليم. -- تتجاوز `delivery.failureDestination` لكل وظيفة هذا الافتراضي العام. -- عندما لا تكون هناك وجهة فشل عامة ولا وجهة لكل وظيفة، فإن الوظائف التي تسلّم أصلًا عبر `announce` تعود عند الفشل إلى هدف announce الأساسي نفسه. -- لا تكون `delivery.failureDestination` مدعومة إلا للوظائف ذات `sessionTarget="isolated"` ما لم يكن `delivery.mode` الأساسي للوظيفة هو `"webhook"`. +- الوجهة الافتراضية لإشعارات فشل Cron عبر جميع المهام. +- `mode`: ‏`"announce"` أو `"webhook"`؛ وتكون القيمة الافتراضية `"announce"` عندما تتوفر بيانات هدف كافية. +- `channel`: تجاوز القناة لتسليم announce. وتقوم `"last"` بإعادة استخدام آخر قناة تسليم معروفة. +- `to`: هدف announce صريح أو عنوان URL لـ Webhook. وهو مطلوب لوضع webhook. +- `accountId`: تجاوز حساب اختياري للتسليم. +- تتجاوز `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}}` | URL زائف للوسائط الواردة | -| `{{MediaPath}}` | المسار المحلي للوسائط | -| `{{MediaType}}` | نوع الوسائط (image/audio/document/…) | -| `{{Transcript}}` | النص المفرّغ من الصوت | -| `{{Prompt}}` | موجّه الوسائط المحلول لإدخالات CLI | -| `{{MaxChars}}` | الحد الأقصى المحلول لأحرف الإخراج لإدخالات CLI | -| `{{ChatType}}` | `"direct"` أو `"group"` | -| `{{GroupSubject}}` | موضوع المجموعة (بأفضل جهد) | -| `{{GroupMembers}}` | معاينة أعضاء المجموعة (بأفضل جهد) | -| `{{SenderName}}` | اسم العرض للمرسل (بأفضل جهد) | -| `{{SenderE164}}` | رقم هاتف المرسل (بأفضل جهد) | -| `{{Provider}}` | تلميح للمزوّد (whatsapp أو telegram أو discord أو غير ذلك) | +| المتغير | الوصف | +| ------------------ | ------------------------------------------------- | +| `{{Body}}` | نص الرسالة الواردة الكامل | +| `{{RawBody}}` | النص الخام (من دون أغلفة السجل/المرسل) | +| `{{BodyStripped}}` | النص بعد إزالة إشارات المجموعة | +| `{{From}}` | معرّف المرسل | +| `{{To}}` | معرّف الوجهة | +| `{{MessageSid}}` | معرّف رسالة القناة | +| `{{SessionId}}` | UUID الجلسة الحالية | +| `{{IsNewSession}}` | `"true"` عند إنشاء جلسة جديدة | +| `{{MediaUrl}}` | pseudo-URL للوسائط الواردة | +| `{{MediaPath}}` | مسار الوسائط المحلي | +| `{{MediaType}}` | نوع الوسائط (صورة/صوت/مستند/…) | +| `{{Transcript}}` | النص المفرغ للصوت | +| `{{Prompt}}` | Prompt الوسائط المحلول لإدخالات CLI | +| `{{MaxChars}}` | الحد الأقصى المحلول لأحرف الخرج لإدخالات CLI | +| `{{ChatType}}` | `"direct"` أو `"group"` | +| `{{GroupSubject}}` | موضوع المجموعة (أفضل جهد) | +| `{{GroupMembers}}` | معاينة أعضاء المجموعة (أفضل جهد) | +| `{{SenderName}}` | الاسم المعروض للمرسل (أفضل جهد) | +| `{{SenderE164}}` | رقم هاتف المرسل (أفضل جهد) | +| `{{Provider}}` | تلميح الموفّر (whatsapp أو telegram أو discord، إلخ.) | --- @@ -3738,12 +3874,12 @@ openclaw gateway --port 19001 **سلوك الدمج:** - ملف واحد: يستبدل الكائن الحاوي. -- مصفوفة ملفات: تُدمج بعمق بالترتيب (واللاحق يتجاوز السابق). -- المفاتيح الشقيقة: تُدمج بعد التضمينات (فتتجاوز القيم المضمّنة). +- مصفوفة ملفات: تُدمج بعمق حسب الترتيب (اللاحق يتجاوز السابق). +- المفاتيح الشقيقة: تُدمج بعد التضمينات (وتتجاوز القيم المضمنة). - التضمينات المتداخلة: حتى 10 مستويات عمق. -- المسارات: تُحل نسبيًا إلى الملف المُضمِّن، لكن يجب أن تبقى داخل دليل الإعدادات ذي المستوى الأعلى (`dirname` لـ `openclaw.json`). ويُسمح بالأشكال المطلقة/`../` فقط عندما تظل تُحل داخل هذا الحد. +- المسارات: تُحل نسبةً إلى الملف الذي يتضمنها، لكن يجب أن تبقى داخل دليل الإعدادات ذي المستوى الأعلى (`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/plugins/sdk-channel-plugins.md b/docs/ar/plugins/sdk-channel-plugins.md index ce051f3dd..c9db5d259 100644 --- a/docs/ar/plugins/sdk-channel-plugins.md +++ b/docs/ar/plugins/sdk-channel-plugins.md @@ -2,29 +2,29 @@ read_when: - أنت تبني Plugin جديدًا لقناة مراسلة - تريد ربط OpenClaw بمنصة مراسلة - - تحتاج إلى فهم واجهة المهايئ `ChannelPlugin` + - تحتاج إلى فهم واجهة المهايئ ChannelPlugin sidebarTitle: Channel Plugins summary: دليل خطوة بخطوة لبناء Plugin لقناة مراسلة لـ OpenClaw -title: بناء Plugins القنوات +title: بناء Plugins للقنوات x-i18n: - generated_at: "2026-04-15T07:17:51Z" + generated_at: "2026-04-15T19:41:41Z" model: gpt-5.4 provider: openai - source_hash: a7f4c746fe3163a8880e14c433f4db4a1475535d91716a53fb879551d8d62f65 + source_hash: 80e47e61d1e47738361692522b79aff276544446c58a7b41afe5296635dfad4b source_path: plugins/sdk-channel-plugins.md workflow: 15 --- -# بناء Plugins القنوات +# بناء Plugins للقنوات -يشرح هذا الدليل كيفية بناء Plugin قناة يربط OpenClaw بمنصة -مراسلة. وبنهاية هذا الدليل سيكون لديك قناة عاملة تتضمن أمان الرسائل -المباشرة، والاقتران، وتوجيه الردود ضمن السلاسل، والرسائل الصادرة. +يوضح هذا الدليل كيفية بناء Plugin لقناة يربط OpenClaw بمنصة +مراسلة. بنهاية هذا الدليل، سيكون لديك قناة عاملة تتضمن أمان الرسائل +المباشرة، والاقتران، وتسلسل الردود، والمراسلة الصادرة. - إذا لم تكن قد أنشأت أي Plugin لـ OpenClaw من قبل، فاقرأ - [البدء](/ar/plugins/building-plugins) أولًا لمعرفة بنية الحزمة - الأساسية وإعداد ملف البيان. + إذا لم تكن قد بنيت أي Plugin لـ OpenClaw من قبل، فاقرأ + [البدء](/ar/plugins/building-plugins) أولًا للتعرّف على بنية + الحزمة الأساسية وإعداد ملف البيان. ## كيف تعمل Plugins القنوات @@ -35,80 +35,82 @@ x-i18n: - **الإعداد** — حلّ الحسابات ومعالج الإعداد - **الأمان** — سياسة الرسائل المباشرة وقوائم السماح - **الاقتران** — تدفق الموافقة على الرسائل المباشرة -- **صياغة الجلسة** — كيفية ربط معرّفات المحادثات الخاصة بالموفّر بالمحادثات الأساسية ومعرّفات السلاسل وبدائل الأصل -- **الإرسال الصادر** — إرسال النصوص والوسائط والاستطلاعات إلى المنصة -- **التسلسل** — كيفية ترتيب الردود ضمن السلاسل +- **بنية الجلسة** — كيفية تعيين معرّفات المحادثات الخاصة بالموفّر إلى الدردشات الأساسية، ومعرّفات السلاسل، وبدائل الأصل +- **الصادر** — إرسال النصوص والوسائط والاستطلاعات إلى المنصة +- **التسلسل** — كيفية تنظيم الردود ضمن سلاسل -تتولى النواة أداة الرسائل المشتركة، وربط الـ prompt، والشكل الخارجي لمفتاح -الجلسة، وتتبع `:thread:` العام، والإرسال. +تتولى النواة أداة الرسائل المشتركة، وتوصيل المطالبات، وشكل مفتاح الجلسة +الخارجي، وآلية `:thread:` العامة، والتوجيه. -إذا كانت قناتك تضيف معاملات إلى أداة الرسائل تحمل مصادر وسائط، فاكشف عن أسماء -هذه المعاملات عبر `describeMessageTool(...).mediaSourceParams`. تستخدم النواة -هذه القائمة الصريحة لتطبيع مسارات sandbox ولسياسة الوصول إلى الوسائط الصادرة، -لذلك لا تحتاج Plugins إلى حالات خاصة في النواة المشتركة لمعاملات الصور الرمزية -أو المرفقات أو صور الغلاف الخاصة بموفّر معيّن. -ويُفضّل إرجاع خريطة مفاتيحها مبنية على الإجراء مثل +إذا كانت قناتك تضيف معاملات إلى أداة الرسائل تحمل مصادر وسائط، فاكشف عن +أسماء هذه المعاملات عبر `describeMessageTool(...).mediaSourceParams`. تستخدم +النواة هذه القائمة الصريحة لتطبيع مسارات sandbox وسياسة الوصول إلى الوسائط +الصادرة، لذلك لا تحتاج Plugins إلى حالات خاصة مشتركة في النواة لمعلمات +الصورة الرمزية أو المرفقات أو صورة الغلاف الخاصة بموفّرين محددين. +يُفضَّل إرجاع خريطة مرتبطة بالإجراءات مثل `{ "set-profile": ["avatarUrl", "avatarPath"] }` حتى لا ترث الإجراءات غير -ذات الصلة معاملات الوسائط الخاصة بإجراء آخر. ولا يزال المصفوفة المسطحة تعمل مع -المعاملات التي يُقصد مشاركتها عمدًا عبر كل إجراء مكشوف. +ذات الصلة معاملات الوسائط الخاصة بإجراء آخر. ولا يزال استخدام مصفوفة +مسطحة يعمل مع المعاملات التي يُقصَد مشاركتها عمدًا عبر كل إجراء مكشوف. -إذا كانت منصتك تخزّن نطاقًا إضافيًا داخل معرّفات المحادثة، فأبقِ هذا التحليل -داخل Plugin باستخدام `messaging.resolveSessionConversation(...)`. هذا هو -الخطاف المعتمد لربط `rawId` بمعرّف المحادثة الأساسي، ومعرّف السلسلة الاختياري، -و`baseConversationId` الصريح، وأي `parentConversationCandidates`. -وعندما تُرجع `parentConversationCandidates`، فاحرص على إبقائها مرتبة من -الأصل الأضيق إلى الأصل الأوسع/المحادثة الأساسية. +إذا كانت منصتك تخزّن نطاقًا إضافيًا داخل معرّفات المحادثات، فأبقِ هذا +التحليل داخل Plugin باستخدام `messaging.resolveSessionConversation(...)`. +هذا هو الخطاف القياسي لتعيين `rawId` إلى معرّف المحادثة الأساسي، ومعرّف +السلسلة الاختياري، و`baseConversationId` الصريح، وأي +`parentConversationCandidates`. +وعند إرجاع `parentConversationCandidates`، احرص على ترتيبها من الأصل الأكثر +تحديدًا إلى الأصل الأوسع/المحادثة الأساسية. -يمكن أيضًا لـ Plugins المضمّنة التي تحتاج إلى التحليل نفسه قبل تشغيل سجل +يمكن أيضًا لـ Plugins المضمّنة التي تحتاج إلى التحليل نفسه قبل إقلاع سجل القنوات أن تكشف عن ملف `session-key-api.ts` على المستوى الأعلى مع تصدير مطابق لـ `resolveSessionConversation(...)`. تستخدم النواة هذا السطح -الآمن أثناء الإقلاع فقط عندما لا يكون سجل Plugins وقت التشغيل متاحًا بعد. +الآمن لمرحلة الإقلاع فقط عندما لا يكون سجل Plugins وقت التشغيل متاحًا بعد. -لا يزال `messaging.resolveParentConversationCandidates(...)` متاحًا كبديل -توافقي قديم عندما يحتاج Plugin فقط إلى بدائل الأصل فوق المعرّف العام/الخام. +يبقى `messaging.resolveParentConversationCandidates(...)` متاحًا كبديل +توافقي قديم عندما يحتاج Plugin فقط إلى بدائل الأصل فوق المعرّف الخام/العام. إذا وُجد الخطافان معًا، تستخدم النواة -`resolveSessionConversation(...).parentConversationCandidates` أولًا ولا -تعود إلى `resolveParentConversationCandidates(...)` إلا عندما يهمل الخطاف -المعتمد إرجاعها. +`resolveSessionConversation(...).parentConversationCandidates` أولًا، ثم +تعود إلى `resolveParentConversationCandidates(...)` فقط عندما يتجاهل +الخطاف القياسي إرجاعها. -## الموافقات وإمكانات القناة +## الموافقات وإمكانات القنوات -لا تحتاج معظم Plugins القنوات إلى كود خاص بالموافقات. +معظم Plugins القنوات لا تحتاج إلى شيفرة خاصة بالموافقات. -- تتولى النواة `/approve` داخل المحادثة نفسها، وحمولات أزرار الموافقة المشتركة، وآلية التسليم العامة البديلة. -- يُفضَّل استخدام كائن `approvalCapability` واحد على Plugin القناة عندما تحتاج القناة إلى سلوك خاص بالموافقة. -- تمت إزالة `ChannelPlugin.approvals`. ضع حقائق تسليم/أصلية/عرض/مصادقة الموافقة على `approvalCapability`. +- تتولى النواة `/approve` داخل المحادثة نفسها، وحمولات أزرار الموافقة المشتركة، والتسليم الاحتياطي العام. +- فضّل استخدام كائن `approvalCapability` واحد على Plugin القناة عندما تحتاج القناة إلى سلوك خاص بالموافقة. +- أُزيل `ChannelPlugin.approvals`. ضع حقائق تسليم/أصلي/عرض/مصادقة الموافقة ضمن `approvalCapability`. - يقتصر `plugin.auth` على login/logout فقط؛ لم تعد النواة تقرأ خطافات مصادقة الموافقة من هذا الكائن. -- يُعد `approvalCapability.authorizeActorAction` و`approvalCapability.getActionAvailabilityState` الواجهة المعتمدة لمصادقة الموافقات. +- يُعدّ `approvalCapability.authorizeActorAction` و`approvalCapability.getActionAvailabilityState` الواجهة القياسية لمصادقة الموافقات. - استخدم `approvalCapability.getActionAvailabilityState` لإتاحة مصادقة الموافقة داخل المحادثة نفسها. -- إذا كانت قناتك تكشف عن موافقات تنفيذ أصلية، فاستخدم `approvalCapability.getExecInitiatingSurfaceState` لحالة سطح البدء/العميل الأصلي عندما تختلف عن مصادقة الموافقة داخل المحادثة نفسها. تستخدم النواة هذا الخطاف الخاص بالتنفيذ للتمييز بين `enabled` و`disabled`، وتحديد ما إذا كانت القناة الداعية تدعم موافقات التنفيذ الأصلية، وإدراج القناة في إرشادات الرجوع إلى العميل الأصلي. يقوم `createApproverRestrictedNativeApprovalCapability(...)` بملء ذلك في الحالة الشائعة. +- إذا كانت قناتك تكشف عن موافقات exec أصلية، فاستخدم `approvalCapability.getExecInitiatingSurfaceState` لحالة سطح البدء/العميل الأصلي عندما تختلف عن مصادقة الموافقة داخل المحادثة نفسها. تستخدم النواة هذا الخطاف الخاص بـ exec للتمييز بين `enabled` و`disabled`، وتحديد ما إذا كانت قناة البدء تدعم موافقات exec الأصلية، وإدراج القناة في إرشادات الرجوع إلى العميل الأصلي. يملأ `createApproverRestrictedNativeApprovalCapability(...)` هذا الجزء للحالة الشائعة. - استخدم `outbound.shouldSuppressLocalPayloadPrompt` أو `outbound.beforeDeliverPayload` لسلوك دورة حياة الحمولة الخاص بالقناة، مثل إخفاء مطالبات الموافقة المحلية المكررة أو إرسال مؤشرات الكتابة قبل التسليم. -- استخدم `approvalCapability.delivery` فقط لتوجيه الموافقات الأصلية أو منع التسليم الاحتياطي. -- استخدم `approvalCapability.nativeRuntime` للحقائق الأصلية الخاصة بالموافقة التي تملكها القناة. أبقه كسول التحميل في نقاط دخول القنوات الساخنة باستخدام `createLazyChannelApprovalNativeRuntimeAdapter(...)`، إذ يمكنه استيراد وحدة وقت التشغيل عند الطلب مع الاستمرار في تمكين النواة من تجميع دورة حياة الموافقة. -- استخدم `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` — خطافات اختيارية لربط/فصل/مسح الإجراءات للأزرار أو التفاعلات الأصلية +- استخدم `approvalCapability.delivery` فقط لتوجيه الموافقة الأصلي أو منع الرجوع الاحتياطي. +- استخدم `approvalCapability.nativeRuntime` للحقائق الأصلية الخاصة بالموافقة التي تملكها القناة. أبقه كسول التحميل في نقاط دخول القنوات الساخنة باستخدام `createLazyChannelApprovalNativeRuntimeAdapter(...)`، والذي يمكنه استيراد وحدة وقت التشغيل عند الطلب مع السماح للنواة بتجميع دورة حياة الموافقة. +- استخدم `approvalCapability.render` فقط عندما تحتاج القناة فعلًا إلى حمولات موافقة مخصصة بدلًا من العارض المشترك. +- استخدم `approvalCapability.describeExecApprovalSetup` عندما تريد القناة أن يشرح رد المسار المعطّل مقابض الإعداد الدقيقة اللازمة لتمكين موافقات exec الأصلية. يستقبل الخطاف `{ 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`. يتيح سجل سياق وقت التشغيل العام للنواة إقلاع المعالجات المبنية على الإمكانات انطلاقًا من حالة بدء القناة من دون إضافة طبقة ربط خاصة بالموافقة. -- لا تلجأ إلى `createChannelApprovalHandler` أو `createChannelNativeApprovalRuntime` منخفضَي المستوى إلا عندما لا تكون الواجهة المعتمدة على الإمكانات معبّرة بما يكفي بعد. -- يجب على قنوات الموافقة الأصلية تمرير كلٍّ من `accountId` و`approvalKind` عبر هذه المساعدات. يُبقي `accountId` سياسة الموافقة متعددة الحسابات ضمن نطاق حساب البوت الصحيح، ويُبقي `approvalKind` سلوك موافقة التنفيذ مقابل موافقة Plugin متاحًا للقناة من دون تفرعات مضمّنة في النواة. -- تتولى النواة الآن أيضًا إشعارات إعادة توجيه الموافقة. يجب ألا ترسل Plugins القنوات رسائل متابعة خاصة بها من نوع "تم إرسال الموافقة إلى الرسائل المباشرة / قناة أخرى" من `createChannelNativeApprovalRuntime`؛ بل اكشف بدلًا من ذلك عن توجيه دقيق للأصل + الرسائل المباشرة للموافق عبر مساعدات إمكانات الموافقة المشتركة، ودع النواة تجمع عمليات التسليم الفعلية قبل نشر أي إشعار مرة أخرى إلى محادثة البدء. -- حافظ على نوع معرّف الموافقة المُسلَّم من البداية إلى النهاية. يجب ألا - تخمّن العملاء الأصلية أو تعيد كتابة توجيه موافقة التنفيذ مقابل موافقة Plugin - اعتمادًا على حالة محلية خاصة بالقناة. -- يمكن لأنواع الموافقة المختلفة أن تكشف عمدًا عن أسطح أصلية مختلفة. +- إذا كانت القناة تحتاج إلى كائنات مملوكة لوقت التشغيل مثل عميل أو رمز مميّز أو تطبيق Bolt أو مستقبل Webhook، فسجّلها من خلال `openclaw/plugin-sdk/channel-runtime-context`. يتيح سجل runtime-context العام للنواة إقلاع معالجات مدفوعة بالإمكانات من حالة بدء تشغيل القناة دون إضافة غراء تغليف خاص بالموافقة. +- لا تلجأ إلى `createChannelApprovalHandler` أو `createChannelNativeApprovalRuntime` منخفضي المستوى إلا عندما لا تكون الواجهة المدفوعة بالإمكانات معبّرة بما يكفي بعد. +- يجب أن تمرّر قنوات الموافقة الأصلية كِلا `accountId` و`approvalKind` عبر هذه المساعدات. يُبقي `accountId` سياسة الموافقة متعددة الحسابات ضمن نطاق حساب البوت الصحيح، ويُبقي `approvalKind` سلوك exec مقابل موافقة Plugin متاحًا للقناة دون تفرعات مشفّرة مسبقًا في النواة. +- تتولى النواة الآن أيضًا إشعارات إعادة توجيه الموافقات. يجب ألا ترسل Plugins القنوات رسائل متابعة خاصة بها من نوع "تم إرسال الموافقة إلى الرسائل المباشرة / قناة أخرى" من `createChannelNativeApprovalRuntime`; وبدلًا من ذلك، اكشف عن توجيه دقيق للأصل + الرسائل المباشرة للموافق عبر مساعدات إمكانات الموافقة المشتركة، ودع النواة تجمع عمليات التسليم الفعلية قبل نشر أي إشعار مرة أخرى إلى محادثة البدء. +- حافظ على نوع معرّف الموافقة الذي تم تسليمه من البداية إلى النهاية. يجب ألا + تخمّن العملاء الأصلية أو تعيد كتابة توجيه موافقة exec مقابل Plugin من حالة + محلية خاصة بالقناة. +- يمكن لأنواع الموافقات المختلفة عمدًا أن تكشف عن أسطح أصلية مختلفة. الأمثلة المضمّنة الحالية: - - يُبقي Slack توجيه الموافقات الأصلية متاحًا لكلٍّ من معرّفات موافقة التنفيذ وموافقة Plugin. - - يُبقي Matrix توجيه الرسائل المباشرة/القناة الأصلي نفسه وتجربة UX نفسها القائمة على التفاعل لكلٍّ من موافقات التنفيذ وموافقات Plugin، مع الاستمرار في السماح باختلاف المصادقة حسب نوع الموافقة. -- لا يزال `createApproverRestrictedNativeApprovalAdapter` موجودًا كغلاف توافقي، لكن يجب أن يفضّل الكود الجديد باني الإمكانات وأن يكشف `approvalCapability` على Plugin. + - يحتفظ Slack بإتاحة توجيه الموافقة الأصلي لكل من معرّفات exec وPlugin. + - يحتفظ Matrix بالتوجيه الأصلي نفسه للرسائل المباشرة/القناة وتجربة التفاعل لـ exec + وموافقات Plugin، مع الاستمرار في السماح لاختلاف المصادقة حسب نوع الموافقة. +- لا يزال `createApproverRestrictedNativeApprovalAdapter` موجودًا كغلاف توافقي، لكن الشيفرة الجديدة يجب أن تفضّل مُنشئ الإمكانات وتكشف عن `approvalCapability` على Plugin. -بالنسبة إلى نقاط دخول القنوات الساخنة، يُفضّل استخدام المسارات الفرعية الأضيق لوقت التشغيل عندما تحتاج فقط -إلى جزء واحد من هذه المجموعة: +لنقاط دخول القنوات الساخنة، فضّل المسارات الفرعية الأضيق لوقت التشغيل عندما +تحتاج فقط إلى جزء واحد من هذه المجموعة: - `openclaw/plugin-sdk/approval-auth-runtime` - `openclaw/plugin-sdk/approval-client-runtime` @@ -120,94 +122,93 @@ 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`، وبُناة - الوكيل المفوّض للإعداد -- يمثّل `openclaw/plugin-sdk/setup-adapter-runtime` الواجهة - الضيقة الواعية بالبيئة الخاصة بـ `createEnvPatchedAccountSetupAdapter` -- يغطي `openclaw/plugin-sdk/channel-setup` بُناة الإعداد - الخاصة بالتثبيت الاختياري بالإضافة إلى بعض الأساسيات الآمنة للإعداد: - `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, + ملاحظات البحث، و`promptResolvedAllowFrom`، و`splitSetupEntries`، ومنشئات + وكيل الإعداد المفوّض +- يُعد `openclaw/plugin-sdk/setup-adapter-runtime` الواجهة الضيقة الواعية بالبيئة + لـ `createEnvPatchedAccountSetupAdapter` +- يغطي `openclaw/plugin-sdk/channel-setup` منشئات الإعداد ذات التثبيت الاختياري + بالإضافة إلى بعض البدائيات الآمنة للإعداد: + `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`، -إذا كانت قناتك تدعم إعدادًا أو مصادقة مدفوعَين بالبيئة وكان ينبغي أن تعرف -تدفقات الإقلاع/الإعداد العامة أسماء متغيرات البيئة هذه قبل تحميل وقت التشغيل، -فصرّح بها في ملف بيان Plugin عبر `channelEnvVars`. واحتفظ بـ -`envVars` الخاص بوقت تشغيل القناة أو الثوابت المحلية لنسخ النصوص الموجّهة -للمشغّل فقط. +إذا كانت قناتك تدعم إعدادًا أو مصادقة مدفوعين بالبيئة، وكان ينبغي أن تعرف +تدفقات البدء/الإعداد العامة أسماء متغيرات البيئة تلك قبل تحميل وقت التشغيل، +فصرّح عنها في ملف بيان Plugin باستخدام `channelEnvVars`. واحتفظ بمتغيرات +البيئة `envVars` وقت تشغيل القناة أو الثوابت المحلية فقط لنسخة النص +الموجّهة للمشغّل. `createOptionalChannelSetupWizard`, `DEFAULT_ACCOUNT_ID`, -`createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`، و +`createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, و `splitSetupEntries` - استخدم واجهة `openclaw/plugin-sdk/setup` الأوسع فقط عندما تحتاج أيضًا إلى - مساعدات الإعداد/الضبط المشتركة الأثقل مثل + مساعدات الإعداد/التهيئة المشتركة الأثقل مثل `moveSingleAccountChannelSectionToDefaultAccount(...)` إذا كانت قناتك تريد فقط الإعلان عن "ثبّت هذا Plugin أولًا" في أسطح الإعداد، ففضّل `createOptionalChannelSetupSurface(...)`. يفشل -المهايئ/المعالج المُنشأان بإغلاق آمن عند كتابة الإعدادات وعند الإنهاء، -ويعيدان استخدام رسالة "التثبيت مطلوب" نفسها عبر التحقق والإنهاء ونسخة -رابط التوثيق. +المهايئ/المعالج المُولَّدان بشكل مغلق عند عمليات كتابة الإعداد والإنهاء، +ويعيدان استخدام الرسالة نفسها التي تفيد بضرورة التثبيت عبر التحقق والإنهاء +ونص رابط الوثائق. -بالنسبة إلى مسارات القنوات الساخنة الأخرى، يُفضّل استخدام المساعدات الضيقة بدلًا من -الأسطح القديمة الأوسع: +وبالنسبة لمسارات القنوات الساخنة الأخرى، فضّل المساعدات الضيقة على الأسطح +القديمة الأوسع: - `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/messaging-targets` لتحليل الأهداف ومطابقتها + `openclaw/plugin-sdk/inbound-reply-dispatch` لتوجيه/غلاف الوارد و + ربط التسجيل والإرسال +- `openclaw/plugin-sdk/messaging-targets` لتحليل/مطابقة الأهداف - `openclaw/plugin-sdk/outbound-media` و - `openclaw/plugin-sdk/outbound-runtime` لتحميل الوسائط - بالإضافة إلى مفوّضي الهوية/الإرسال الصادر + `openclaw/plugin-sdk/outbound-runtime` لتحميل الوسائط بالإضافة إلى مفوّضي + الهوية/الإرسال الصادر - `openclaw/plugin-sdk/thread-bindings-runtime` لدورة حياة ربط السلاسل وتسجيل المهايئات -- `openclaw/plugin-sdk/agent-media-payload` فقط عندما يكون تنسيق حقل - حمولة agent/media القديم لا يزال مطلوبًا -- `openclaw/plugin-sdk/telegram-command-config` لتطبيع - الأوامر المخصصة في Telegram، والتحقق من التكرار/التعارض، وعقد إعداد - أوامر ثابت كبديل احتياطي +- `openclaw/plugin-sdk/agent-media-payload` فقط عندما يكون تخطيط حقول + حمولة الوكيل/الوسائط القديم لا يزال مطلوبًا +- `openclaw/plugin-sdk/telegram-command-config` لتطبيع أوامر Telegram المخصصة، + والتحقق من التكرار/التعارض، وعقد إعداد الأوامر المستقر عند الرجوع الاحتياطي -يمكن لقنوات المصادقة فقط عادةً الاكتفاء بالمسار الافتراضي: تتولى النواة الموافقات ويكشف Plugin فقط عن إمكانات الإرسال الصادر/المصادقة. أما قنوات الموافقة الأصلية مثل Matrix وSlack وTelegram ووسائط الدردشة المخصصة، فيجب أن تستخدم المساعدات الأصلية المشتركة بدلًا من بناء دورة حياة الموافقة الخاصة بها. +يمكن للقنوات التي تعتمد على المصادقة فقط عادةً الاكتفاء بالمسار الافتراضي: تتولى النواة الموافقات، ويكشف Plugin فقط عن إمكانات الصادر/المصادقة. يجب على قنوات الموافقة الأصلية مثل Matrix وSlack وTelegram ووسائط نقل الدردشة المخصصة استخدام المساعدات الأصلية المشتركة بدلًا من بناء دورة حياة الموافقة الخاصة بها. -## سياسة الإشارة الواردة +## سياسة الإشارات الواردة -أبقِ معالجة الإشارات الواردة مقسّمة إلى طبقتين: +احرص على إبقاء معالجة الإشارات الواردة مقسّمة إلى طبقتين: -- جمع الأدلة الذي يملكه Plugin +- جمع الأدلة المملوك لـ Plugin - تقييم السياسة المشتركة استخدم `openclaw/plugin-sdk/channel-inbound` للطبقة المشتركة. -ملائم لمنطق Plugin المحلي: +ما يناسب المنطق المحلي في Plugin: - اكتشاف الرد على البوت - اكتشاف الاقتباس من البوت - التحقق من المشاركة في السلسلة - استبعاد رسائل الخدمة/النظام -- الذاكرات المؤقتة الأصلية الخاصة بالمنصة اللازمة لإثبات مشاركة البوت +- الذاكرات المؤقتة الأصلية للمنصة اللازمة لإثبات مشاركة البوت -ملائم للمساعد المشترك: +ما يناسب المساعد المشترك: - `requireMention` - نتيجة الإشارة الصريحة -- قائمة سماح الإشارة الضمنية +- قائمة السماح للإشارة الضمنية - تجاوز الأوامر - قرار التخطي النهائي @@ -215,7 +216,7 @@ x-i18n: 1. احسب حقائق الإشارة المحلية. 2. مرّر هذه الحقائق إلى `resolveInboundMentionDecision({ facts, policy })`. -3. استخدم `decision.effectiveWasMentioned` و`decision.shouldBypassMention` و`decision.shouldSkip` في بوابة الوارد لديك. +3. استخدم `decision.effectiveWasMentioned` و`decision.shouldBypassMention` و`decision.shouldSkip` في بوابة الوارد الخاصة بك. ```typescript import { @@ -254,8 +255,8 @@ const decision = resolveInboundMentionDecision({ if (decision.shouldSkip) return; ``` -يكشف `api.runtime.channel.mentions` عن مساعدات الإشارة المشتركة نفسها -لـ Plugins القنوات المضمّنة التي تعتمد بالفعل على حقن وقت التشغيل: +يكشف `api.runtime.channel.mentions` عن مساعدات الإشارة المشتركة نفسها من أجل +Plugins القنوات المضمّنة التي تعتمد بالفعل على حقن وقت التشغيل: - `buildMentionRegexes` - `matchesMentionPatterns` @@ -263,18 +264,18 @@ if (decision.shouldSkip) return; - `implicitMentionKindWhen` - `resolveInboundMentionDecision` -تبقى مساعدات `resolveMentionGating*` الأقدم موجودة على -`openclaw/plugin-sdk/channel-inbound` كتصديرات توافقية فقط. يجب أن يستخدم -الكود الجديد `resolveInboundMentionDecision({ facts, policy })`. +تبقى مساعدات `resolveMentionGating*` الأقدم على +`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 @@ -323,9 +324,9 @@ if (decision.shouldSkip) return; - + تحتوي الواجهة `ChannelPlugin` على العديد من أسطح المهايئات الاختيارية. ابدأ - بالحد الأدنى — `id` و`setup` — ثم أضف المهايئات حسب الحاجة. + بالحد الأدنى — `id` و`setup` — ثم أضف المهايئات حسب حاجتك. أنشئ `src/channel.ts`: @@ -335,7 +336,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"; // your platform API client + import { acmeChatApi } from "./client.js"; // عميل API الخاص بمنصتك type ResolvedAccount = { accountId: string | null; @@ -376,7 +377,7 @@ if (decision.shouldSkip) return; }, }), - // DM security: who can message the bot + // أمان الرسائل المباشرة: من يمكنه مراسلة البوت security: { dm: { channelKey: "acme-chat", @@ -386,21 +387,21 @@ if (decision.shouldSkip) return; }, }, - // Pairing: approval flow for new DM contacts + // الاقتران: تدفق الموافقة لجهات الاتصال الجديدة في الرسائل المباشرة pairing: { text: { - idLabel: "Acme Chat username", - message: "Send this code to verify your identity:", + idLabel: "اسم مستخدم Acme Chat", + message: "أرسل هذا الرمز للتحقق من هويتك:", 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) => { @@ -420,24 +421,24 @@ if (decision.shouldSkip) return; }); ``` - - بدلًا من تنفيذ واجهات المهايئات منخفضة المستوى يدويًا، تمرّر - خيارات تصريحية ويتولى الباني تجميعها: + + بدلًا من تنفيذ واجهات المهايئات منخفضة المستوى يدويًا، فإنك تمرّر + خيارات تصريحية ويتولى المُنشئ تركيبها: - | Option | ما الذي يربطه | + | الخيار | ما الذي يوصله | | --- | --- | - | `security.dm` | محلّل أمان الرسائل المباشرة المقيّد بنطاق حقول الإعداد | - | `pairing.text` | تدفق اقتران رسائل مباشرة قائم على النص مع تبادل الرموز | - | `threading` | محلّل نمط الرد (ثابت، مقيّد بالحساب، أو مخصص) | - | `outbound.attachedResults` | دوال إرسال تُرجع بيانات تعريفية للنتيجة (معرّفات الرسائل) | + | `security.dm` | محلّل أمان الرسائل المباشرة المقيّد بنطاق حقول التهيئة | + | `pairing.text` | تدفق اقتران رسائل مباشرة قائم على النص مع تبادل الرمز | + | `threading` | محلّل وضع الرد (ثابت أو مقيّد بالحساب أو مخصص) | + | `outbound.attachedResults` | دوال إرسال تُرجع بيانات وصفية للنتيجة (معرّفات الرسائل) | - يمكنك أيضًا تمرير كائنات مهايئ خام بدلًا من الخيارات التصريحية - إذا كنت تحتاج إلى تحكم كامل. + يمكنك أيضًا تمرير كائنات مهايئات خام بدلًا من الخيارات التصريحية + إذا كنت بحاجة إلى تحكم كامل. - + أنشئ `index.ts`: ```typescript index.ts @@ -473,21 +474,21 @@ if (decision.shouldSkip) return; }); ``` - ضع واصفات CLI التي تملكها القناة في `registerCliMetadata(...)` حتى يتمكن OpenClaw - من عرضها في المساعدة الجذرية من دون تفعيل وقت تشغيل القناة الكامل، - بينما تلتقط عمليات التحميل الكاملة العادية الواصفات نفسها لتسجيل - الأوامر الفعلي. وأبقِ `registerFull(...)` للأعمال الخاصة بوقت التشغيل فقط. - إذا كان `registerFull(...)` يسجّل أساليب Gateway RPC، فاستخدم - بادئة خاصة بالـ Plugin. تظل مساحات أسماء إدارة النواة (`config.*`, - `exec.approvals.*`, `wizard.*`, `update.*`) محجوزة وتُحل دائمًا - إلى `operator.admin`. - يتولى `defineChannelPluginEntry` معالجة تقسيم وضع التسجيل تلقائيًا. راجع - [نقاط الدخول](/ar/plugins/sdk-entrypoints#definechannelpluginentry) لمعرفة جميع + ضع واصفات CLI المملوكة للقناة في `registerCliMetadata(...)` حتى يتمكن OpenClaw + من عرضها في المساعدة الجذرية دون تفعيل وقت تشغيل القناة الكامل، + بينما تستمر التحميلات الكاملة العادية في التقاط الواصفات نفسها لتسجيل + الأوامر الفعلي. أبقِ `registerFull(...)` للأعمال الخاصة بوقت التشغيل فقط. + وإذا كان `registerFull(...)` يسجّل أساليب Gateway RPC، فاستخدم + بادئة خاصة بـ Plugin. تبقى مساحات أسماء الإدارة في النواة (`config.*`, + و`exec.approvals.*`، و`wizard.*`، و`update.*`) محجوزة وتُحل دائمًا إلى + `operator.admin`. + يتولى `defineChannelPluginEntry` معالجة فصل أوضاع التسجيل تلقائيًا. راجع + [نقاط الإدخال](/ar/plugins/sdk-entrypoints#definechannelpluginentry) لجميع الخيارات. - + أنشئ `setup-entry.ts` للتحميل الخفيف أثناء الإعداد الأولي: ```typescript setup-entry.ts @@ -497,28 +498,33 @@ if (decision.shouldSkip) return; export default defineSetupPluginEntry(acmeChatPlugin); ``` - يحمّل OpenClaw هذا بدلًا من نقطة الدخول الكاملة عندما تكون القناة معطّلة - أو غير مهيأة. وهذا يتجنب سحب كود وقت تشغيل ثقيل أثناء تدفقات الإعداد. - راجع [الإعداد والضبط](/ar/plugins/sdk-setup#setup-entry) لمعرفة التفاصيل. + يحمّل OpenClaw هذا بدلًا من نقطة الإدخال الكاملة عندما تكون القناة معطّلة + أو غير مهيأة. وهذا يتجنب سحب شيفرة وقت تشغيل ثقيلة أثناء تدفقات الإعداد. + راجع [الإعداد والتهيئة](/ar/plugins/sdk-setup#setup-entry) لمزيد من التفاصيل. + + يمكن لقنوات مساحة العمل المضمّنة التي تفصل التصديرات الآمنة للإعداد في + وحدات جانبية أن تستخدم `defineBundledChannelSetupEntry(...)` من + `openclaw/plugin-sdk/channel-entry-contract` عندما تحتاج أيضًا إلى + مُعيّن صريح لوقت التشغيل في وقت الإعداد. - - يحتاج Plugin الخاص بك إلى استلام الرسائل من المنصة وتمريرها إلى - OpenClaw. النمط الشائع هو Webhook يتحقق من الطلب ثم - يرسله عبر معالج الوارد الخاص بقناتك: + + يحتاج Plugin الخاص بك إلى تلقي الرسائل من المنصة وتمريرها إلى + OpenClaw. النمط المعتاد هو Webhook يتحقق من الطلب ويقوم + بإرساله عبر معالج الوارد الخاص بقناتك: ```typescript registerFull(api) { api.registerHttpRoute({ path: "/acme-chat/webhook", - auth: "plugin", // plugin-managed auth (verify signatures yourself) + auth: "plugin", // مصادقة يديرها Plugin (تحقق من التواقيع بنفسك) handler: async (req, res) => { const event = parseWebhookPayload(req); - // Your inbound handler dispatches the message to OpenClaw. - // The exact wiring depends on your platform SDK — - // see a real example in the bundled Microsoft Teams or Google Chat plugin package. + // يقوم معالج الوارد الخاص بك بإرسال الرسالة إلى OpenClaw. + // يعتمد التوصيل الدقيق على SDK الخاص بمنصتك — + // راجع مثالًا حقيقيًا في حزمة Plugin المضمّنة الخاصة بـ Microsoft Teams أو Google Chat. await handleAcmeChatInbound(api, event); res.statusCode = 200; @@ -531,15 +537,15 @@ if (decision.shouldSkip) return; معالجة الرسائل الواردة خاصة بكل قناة. كل Plugin قناة يملك - خط أنبوب الوارد الخاص به. انظر إلى Plugins القنوات المضمّنة - (مثل حزمة Plugin الخاصة بـ Microsoft Teams أو Google Chat) للاطلاع على أنماط فعلية. + مسار الوارد الخاص به. انظر إلى Plugins القنوات المضمّنة + (مثل حزمة Plugin الخاصة بـ Microsoft Teams أو Google Chat) للاطلاع على أنماط حقيقية. -اكتب اختبارات مرافقة في `src/channel.test.ts`: +اكتب اختبارات موضوعة بجوار الشيفرة في `src/channel.test.ts`: ```typescript src/channel.test.ts import { describe, it, expect } from "vitest"; @@ -577,7 +583,7 @@ if (decision.shouldSkip) return; pnpm test -- /acme-chat/ ``` - للاطلاع على مساعدات الاختبار المشتركة، راجع [الاختبار](/ar/plugins/sdk-testing). + بالنسبة إلى مساعدات الاختبار المشتركة، راجع [الاختبار](/ar/plugins/sdk-testing). @@ -587,7 +593,7 @@ if (decision.shouldSkip) return; ``` /acme-chat/ ├── package.json # بيانات openclaw.channel الوصفية -├── openclaw.plugin.json # ملف البيان مع مخطط الإعداد +├── openclaw.plugin.json # ملف البيان مع مخطط التهيئة ├── index.ts # defineChannelPluginEntry ├── setup-entry.ts # defineSetupPluginEntry ├── api.ts # التصديرات العامة (اختياري) @@ -595,7 +601,7 @@ if (decision.shouldSkip) return; └── src/ ├── channel.ts # ChannelPlugin عبر createChatChannelPlugin ├── channel.test.ts # الاختبارات - ├── client.ts # عميل API للمنصة + ├── client.ts # عميل API الخاص بالمنصة └── runtime.ts # مخزن وقت التشغيل (عند الحاجة) ``` @@ -608,8 +614,8 @@ if (decision.shouldSkip) return; describeMessageTool واكتشاف الإجراءات - - inferTargetChatType وlooksLikeId وresolveTarget + + inferTargetChatType, looksLikeId, resolveTarget TTS وSTT والوسائط وsubagent عبر api.runtime @@ -617,15 +623,15 @@ if (decision.shouldSkip) return; -لا تزال بعض واجهات المساعدات المضمّنة موجودة لصيانة Plugins المضمّنة -ولأغراض التوافق. وهي ليست النمط الموصى به لـ Plugins القنوات الجديدة؛ -بل يُفضّل استخدام المسارات الفرعية العامة channel/setup/reply/runtime من -سطح SDK المشترك ما لم تكن تصون تلك العائلة من Plugins المضمّنة مباشرةً. +لا تزال بعض واجهات المساعدة المضمّنة موجودة لصيانة Plugins المضمّنة +والتوافق. وهي ليست النمط الموصى به لـ Plugins القنوات الجديدة؛ +فضّل المسارات الفرعية العامة للقناة/الإعداد/الرد/وقت التشغيل من سطح SDK +المشترك ما لم تكن تصون تلك العائلة من Plugins المضمّنة مباشرةً. ## الخطوات التالية -- [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) — المخطط الكامل لملف البيان +- [ملف بيان Plugin](/ar/plugins/manifest) — مخطط ملف البيان الكامل diff --git a/docs/ar/plugins/sdk-entrypoints.md b/docs/ar/plugins/sdk-entrypoints.md index 8068dca3a..68fc46911 100644 --- a/docs/ar/plugins/sdk-entrypoints.md +++ b/docs/ar/plugins/sdk-entrypoints.md @@ -1,35 +1,35 @@ --- read_when: - - تحتاج إلى التوقيع النوعي الدقيق لـ `definePluginEntry` أو `defineChannelPluginEntry` - - تريد فهم وضع التسجيل (كامل مقابل إعداد فقط مقابل بيانات CLI الوصفية) - - تبحث عن خيارات نقطة الدخول + - أنت بحاجة إلى التوقيع النوعي الدقيق لـ `definePluginEntry` أو `defineChannelPluginEntry` + - تريد فهم وضع التسجيل (كامل مقابل الإعداد مقابل بيانات CLI الوصفية) + - أنت تبحث عن خيارات نقطة الدخول sidebarTitle: Entry Points summary: مرجع `definePluginEntry` و`defineChannelPluginEntry` و`defineSetupPluginEntry` -title: نقاط دخول المكونات الإضافية +title: نقاط دخول Plugin x-i18n: - generated_at: "2026-04-05T12:51:23Z" + generated_at: "2026-04-15T19:41:40Z" model: gpt-5.4 provider: openai - source_hash: 799dbfe71e681dd8ba929a7a631dfe745c3c5c69530126fea2f9c137b120f51f + source_hash: aabca25bc9b8ff1b5bb4852bafe83640ffeba006ea6b6a8eff4e2c37a10f1fe4 source_path: plugins/sdk-entrypoints.md workflow: 15 --- -# نقاط دخول المكونات الإضافية +# نقاط دخول Plugin -يصدّر كل مكوّن إضافي كائن دخول افتراضيًا. ويوفر SDK ثلاث أدوات مساعدة +يُصدر كل Plugin كائن دخول افتراضيًا. توفّر SDK ثلاثة مساعدين لإنشائها. - **هل تبحث عن شرح عملي؟** راجع [Channel Plugins](/plugins/sdk-channel-plugins) - أو [Provider Plugins](/plugins/sdk-provider-plugins) للحصول على أدلة خطوة بخطوة. + **هل تبحث عن شرح عملي؟** راجع [Plugins القنوات](/ar/plugins/sdk-channel-plugins) + أو [Plugins المزوّد](/ar/plugins/sdk-provider-plugins) للحصول على أدلة خطوة بخطوة. ## `definePluginEntry` **الاستيراد:** `openclaw/plugin-sdk/plugin-entry` -لمكونات provider الإضافية، ومكونات الأدوات الإضافية، ومكونات hooks الإضافية، وأي شيء **ليس** +لـ Plugins المزوّد، وPlugins الأدوات، وPlugins الخطافات، وأي شيء **ليس** قناة مراسلة. ```typescript @@ -50,28 +50,28 @@ export default definePluginEntry({ }); ``` -| الحقل | النوع | مطلوب | الافتراضي | -| -------------- | ---------------------------------------------------------------- | ------ | -------------------- | -| `id` | `string` | نعم | — | -| `name` | `string` | نعم | — | -| `description` | `string` | نعم | — | -| `kind` | `string` | لا | — | -| `configSchema` | `OpenClawPluginConfigSchema \| () => OpenClawPluginConfigSchema` | لا | schema كائن فارغة | -| `register` | `(api: OpenClawPluginApi) => void` | نعم | — | +| الحقل | النوع | مطلوب | الافتراضي | +| -------------- | ---------------------------------------------------------------- | ----- | ------------------ | +| `id` | `string` | نعم | — | +| `name` | `string` | نعم | — | +| `description` | `string` | نعم | — | +| `kind` | `string` | لا | — | +| `configSchema` | `OpenClawPluginConfigSchema \| () => OpenClawPluginConfigSchema` | لا | مخطط كائن فارغ | +| `register` | `(api: OpenClawPluginApi) => void` | نعم | — | -- يجب أن يطابق `id` ملف manifest الخاص بك في `openclaw.plugin.json`. -- يُستخدم `kind` للفتحات الحصرية: `"memory"` أو `"context-engine"`. -- يمكن أن تكون `configSchema` دالة للتقييم الكسول. -- يحل OpenClaw هذه الـ schema ويخزنها مؤقتًا عند أول وصول، لذلك لا تعمل - أدوات بناء schema المكلفة إلا مرة واحدة. +- يجب أن يطابق `id` ملف manifest ‏`openclaw.plugin.json` الخاص بك. +- يُستخدم `kind` للخانات الحصرية: `"memory"` أو `"context-engine"`. +- يمكن أن يكون `configSchema` دالة للتقييم الكسول. +- يقوم OpenClaw بحل هذا المخطط وتخزينه مؤقتًا عند أول وصول، لذلك فإن بُناة + المخططات المكلفة لا تعمل إلا مرة واحدة. ## `defineChannelPluginEntry` **الاستيراد:** `openclaw/plugin-sdk/channel-core` -يغلف `definePluginEntry` بربط خاص بالقنوات. ويستدعي تلقائيًا -`api.registerChannel({ plugin })`، ويعرض نقطة وصل اختيارية لبيانات CLI الوصفية الخاصة بمساعدة الجذر، -ويقيّد `registerFull` بحسب وضع التسجيل. +يلف `definePluginEntry` مع توصيلات خاصة بالقنوات. ويستدعي تلقائيًا +`api.registerChannel({ plugin })`، ويكشف عن نقطة وصل اختيارية لبيانات CLI الوصفية +للمساعدة الجذرية، ويقيّد `registerFull` حسب وضع التسجيل. ```typescript import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core"; @@ -91,44 +91,45 @@ export default defineChannelPluginEntry({ }); ``` -| الحقل | النوع | مطلوب | الافتراضي | -| --------------------- | ---------------------------------------------------------------- | ------ | -------------------- | -| `id` | `string` | نعم | — | -| `name` | `string` | نعم | — | -| `description` | `string` | نعم | — | -| `plugin` | `ChannelPlugin` | نعم | — | -| `configSchema` | `OpenClawPluginConfigSchema \| () => OpenClawPluginConfigSchema` | لا | schema كائن فارغة | -| `setRuntime` | `(runtime: PluginRuntime) => void` | لا | — | -| `registerCliMetadata` | `(api: OpenClawPluginApi) => void` | لا | — | -| `registerFull` | `(api: OpenClawPluginApi) => void` | لا | — | +| الحقل | النوع | مطلوب | الافتراضي | +| --------------------- | ---------------------------------------------------------------- | ----- | ------------------ | +| `id` | `string` | نعم | — | +| `name` | `string` | نعم | — | +| `description` | `string` | نعم | — | +| `plugin` | `ChannelPlugin` | نعم | — | +| `configSchema` | `OpenClawPluginConfigSchema \| () => OpenClawPluginConfigSchema` | لا | مخطط كائن فارغ | +| `setRuntime` | `(runtime: PluginRuntime) => void` | لا | — | +| `registerCliMetadata` | `(api: OpenClawPluginApi) => void` | لا | — | +| `registerFull` | `(api: OpenClawPluginApi) => void` | لا | — | -- يُستدعى `setRuntime` أثناء التسجيل حتى تتمكن من تخزين مرجع وقت التشغيل - (عادةً عبر `createPluginRuntimeStore`). ويُتخطى أثناء +- يتم استدعاء `setRuntime` أثناء التسجيل حتى تتمكن من تخزين مرجع runtime + (عادةً عبر `createPluginRuntimeStore`). ويتم تخطيه أثناء التقاط بيانات CLI الوصفية. -- تعمل `registerCliMetadata` خلال كل من `api.registrationMode === "cli-metadata"` - و`api.registrationMode === "full"`. - استخدمها بوصفها المكان الرسمي لوصافات CLI المملوكة للقناة حتى تبقى - المساعدة الجذرية غير مفعِّلة بينما يظل تسجيل أوامر CLI العادي متوافقًا - مع تحميلات المكونات الإضافية الكاملة. -- لا تعمل `registerFull` إلا عندما يكون `api.registrationMode === "full"`. وتُتخطى +- يعمل `registerCliMetadata` أثناء كل من + `api.registrationMode === "cli-metadata"` و `api.registrationMode === "full"`. + استخدمه باعتباره المكان القياسي لوصفات CLI المملوكة للقناة حتى + تبقى المساعدة الجذرية غير مفعِّلة، مع بقاء تسجيل أوامر CLI العادي متوافقًا + مع تحميلات Plugin الكاملة. +- لا يعمل `registerFull` إلا عندما يكون `api.registrationMode === "full"`. ويتم تخطيه أثناء التحميل الخاص بالإعداد فقط. -- مثل `definePluginEntry`، يمكن أن تكون `configSchema` مصنعًا كسولًا ويقوم OpenClaw - بتخزين schema المحلولة مؤقتًا عند أول وصول. -- بالنسبة إلى أوامر CLI الجذرية المملوكة للمكون الإضافي، فضّل `api.registerCli(..., { descriptors: [...] })` - عندما تريد أن يبقى الأمر محمَّلًا كسولًا من دون أن يختفي من - شجرة تحليل CLI الجذرية. وبالنسبة إلى مكونات القنوات الإضافية، فضّل تسجيل هذه الواصفات - من `registerCliMetadata(...)` وأبقِ `registerFull(...)` مركزة على العمل الخاص بوقت التشغيل فقط. -- إذا كانت `registerFull(...)` تسجل أيضًا طرق Gateway RPC، فأبقها ضمن - بادئة خاصة بالمكون الإضافي. أما مساحات أسماء الإدارة الأساسية المحجوزة (`config.*`, - `exec.approvals.*`, `wizard.*`, `update.*`) فستُحوَّل دائمًا إلى +- مثل `definePluginEntry`، يمكن أن يكون `configSchema` مصنعًا كسولًا ويقوم OpenClaw + بتخزين المخطط المحلول مؤقتًا عند أول وصول. +- بالنسبة إلى أوامر CLI الجذرية المملوكة لـ Plugin، ففضّل `api.registerCli(..., { descriptors: [...] })` + عندما تريد أن يبقى الأمر محمّلًا كسولًا من دون أن يختفي من + شجرة تحليل CLI الجذرية. أما بالنسبة إلى Plugins القنوات، ففضّل تسجيل تلك + الواصفات من `registerCliMetadata(...)` وأبقِ `registerFull(...)` مركّزًا + على الأعمال الخاصة بـ runtime فقط. +- إذا كان `registerFull(...)` يسجّل أيضًا أساليب Gateway RPC، فأبقِها على + بادئة خاصة بالـ Plugin. يتم دائمًا فرض مساحات أسماء إدارة النواة المحجوزة (`config.*`، + `exec.approvals.*`، `wizard.*`، `update.*`) إلى `operator.admin`. ## `defineSetupPluginEntry` **الاستيراد:** `openclaw/plugin-sdk/channel-core` -مخصص لملف `setup-entry.ts` الخفيف. ويعيد فقط `{ plugin }` من دون -ربط وقت تشغيل أو CLI. +لملف `setup-entry.ts` خفيف الوزن. يُرجع فقط `{ plugin }` من دون +توصيلات runtime أو CLI. ```typescript import { defineSetupPluginEntry } from "openclaw/plugin-sdk/channel-core"; @@ -136,35 +137,60 @@ import { defineSetupPluginEntry } from "openclaw/plugin-sdk/channel-core"; export default defineSetupPluginEntry(myChannelPlugin); ``` -يحمّل OpenClaw هذا بدل نقطة الدخول الكاملة عندما تكون قناة معطلة، -أو غير مهيأة، أو عندما يكون التحميل المؤجل مفعّلًا. راجع -[Setup and Config](/plugins/sdk-setup#setup-entry) لمعرفة متى يكون هذا مهمًا. +يقوم OpenClaw بتحميل هذا بدلًا من نقطة الدخول الكاملة عندما تكون القناة معطّلة، +أو غير مُعدّة، أو عند تمكين التحميل المؤجّل. راجع +[الإعداد والتهيئة](/ar/plugins/sdk-setup#setup-entry) لمعرفة متى يكون هذا مهمًا. -عمليًا، اربط `defineSetupPluginEntry(...)` بعائلات مساعدات الإعداد -الضيقة التالية: +عمليًا، يمكنك إقران `defineSetupPluginEntry(...)` بعائلات +مساعدات الإعداد الضيقة التالية: -- `openclaw/plugin-sdk/setup-runtime` لمساعدات الإعداد الآمنة وقت التشغيل مثل - محولات setup patch الآمنة للاستيراد، ومخرجات lookup-note، - و`promptResolvedAllowFrom`، و`splitSetupEntries`، ووكلاء الإعداد المفوضين -- `openclaw/plugin-sdk/channel-setup` لأسطح الإعداد الخاصة بالتثبيت الاختياري -- `openclaw/plugin-sdk/setup-tools` لمساعدات CLI/الأرشفة/الوثائق الخاصة بالإعداد/التثبيت +- `openclaw/plugin-sdk/setup-runtime` لمساعدات الإعداد الآمنة مع runtime مثل + محولات تصحيح الإعداد الآمنة للاستيراد، ومخرجات ملاحظات البحث، + و`promptResolvedAllowFrom`، و`splitSetupEntries`، ووكلاء الإعداد المفوَّضين +- `openclaw/plugin-sdk/channel-setup` لواجهات الإعداد الخاصة بالتثبيت الاختياري +- `openclaw/plugin-sdk/setup-tools` لمساعدات CLI/الأرشيف/الوثائق الخاصة بالإعداد/التثبيت -أبقِ SDKs الثقيلة، وتسجيل CLI، وخدمات وقت التشغيل طويلة العمر في +أبقِ SDKs الثقيلة، وتسجيل CLI، وخدمات runtime طويلة العمر في نقطة الدخول الكاملة. +يمكن لقنوات مساحة العمل المجمّعة التي تقسّم بين أسطح الإعداد وruntime استخدام +`defineBundledChannelSetupEntry(...)` من +`openclaw/plugin-sdk/channel-entry-contract` بدلًا من ذلك. يتيح هذا العقد لـ +نقطة دخول الإعداد الاحتفاظ بتصديرات plugin/secrets الآمنة للإعداد مع +الاستمرار في كشف أداة تعيين runtime: + +```typescript +import { defineBundledChannelSetupEntry } from "openclaw/plugin-sdk/channel-entry-contract"; + +export default defineBundledChannelSetupEntry({ + importMetaUrl: import.meta.url, + plugin: { + specifier: "./channel-plugin-api.js", + exportName: "myChannelPlugin", + }, + runtime: { + specifier: "./runtime-api.js", + exportName: "setMyChannelRuntime", + }, +}); +``` + +استخدم هذا العقد المجمّع فقط عندما تحتاج تدفقات الإعداد فعلًا إلى أداة تعيين +runtime خفيفة الوزن قبل تحميل نقطة دخول القناة الكاملة. + ## وضع التسجيل -يخبرك `api.registrationMode` كيف جرى تحميل المكوّن الإضافي: +يخبر `api.registrationMode` الـ Plugin الخاص بك بكيفية تحميله: -| الوضع | متى | ما الذي يجب تسجيله | -| ----------------- | --------------------------------- | ---------------------------------------------------------------------------------------- | -| `"full"` | بدء تشغيل gateway العادي | كل شيء | -| `"setup-only"` | قناة معطلة/غير مهيأة | تسجيل القناة فقط | -| `"setup-runtime"` | تدفق إعداد مع توفر وقت التشغيل | تسجيل القناة بالإضافة إلى وقت التشغيل الخفيف فقط المطلوب قبل تحميل نقطة الدخول الكاملة | -| `"cli-metadata"` | التقاط مساعدة الجذر / بيانات CLI الوصفية | واصفات CLI فقط | +| الوضع | متى | ما الذي يجب تسجيله | +| ----------------- | ----------------------------------- | ------------------------------------------------------------------------------------ | +| `"full"` | بدء تشغيل Gateway العادي | كل شيء | +| `"setup-only"` | قناة معطّلة/غير مُعدّة | تسجيل القناة فقط | +| `"setup-runtime"` | تدفق إعداد مع توفر runtime | تسجيل القناة بالإضافة إلى runtime الخفيف فقط المطلوب قبل تحميل نقطة الدخول الكاملة | +| `"cli-metadata"` | المساعدة الجذرية / التقاط بيانات CLI الوصفية | واصفات CLI فقط | -يتولى `defineChannelPluginEntry` هذا التقسيم تلقائيًا. وإذا استخدمت -`definePluginEntry` مباشرة لقناة، فتحقق من الوضع بنفسك: +يتعامل `defineChannelPluginEntry` مع هذا التقسيم تلقائيًا. إذا استخدمت +`definePluginEntry` مباشرةً لقناة، فتحقق من الوضع بنفسك: ```typescript register(api) { @@ -181,37 +207,37 @@ register(api) { } ``` -تعامل مع `"setup-runtime"` باعتباره النافذة التي يجب أن توجد فيها -أسطح بدء التشغيل الخاصة بالإعداد فقط من دون إعادة الدخول إلى وقت تشغيل القناة -المجمعة الكامل. ومن الملائم هنا تسجيل القنوات، ومسارات HTTP الآمنة للإعداد، -وطرق gateway الآمنة للإعداد، ومساعدات الإعداد المفوضة. أما الخدمات الخلفية الثقيلة، -ومسجلات CLI، وتهيئة SDKs الخاصة بالمزوّد/العميل فما تزال تنتمي إلى `"full"`. +تعامل مع `"setup-runtime"` باعتباره النافذة التي يجب أن تكون فيها أسطح بدء التشغيل +الخاصة بالإعداد فقط موجودة من دون إعادة الدخول إلى runtime القناة المجمّعة الكاملة. +وتشمل الحالات المناسبة تسجيل القنوات، ومسارات HTTP الآمنة للإعداد، وأساليب Gateway +الآمنة للإعداد، ومساعدات الإعداد المفوَّضة. أما خدمات الخلفية الثقيلة، ومسجلات CLI، +وتهيئات SDK الخاصة بالمزوّد/العميل فما تزال تنتمي إلى `"full"`. وبالنسبة إلى مسجلات CLI تحديدًا: -- استخدم `descriptors` عندما يملك المسجل أمرًا جذريًا واحدًا أو أكثر وتريد - من OpenClaw تحميل وحدة CLI الفعلية بكسل عند أول استدعاء -- تأكد من أن هذه الواصفات تغطي كل جذر أمر من المستوى الأعلى يعرضه +- استخدم `descriptors` عندما يمتلك المسجل أمرًا جذريًا واحدًا أو أكثر وتريد + من OpenClaw أن يحمّل وحدة CLI الحقيقية بكسل عند أول استدعاء +- تأكد من أن هذه الواصفات تغطي كل جذر أوامر من المستوى الأعلى يكشفه المسجل -- استخدم `commands` وحدها فقط لمسارات التوافق المتحمسة +- استخدم `commands` وحده فقط لمسارات التوافق المتعجلة -## أشكال المكونات الإضافية +## أشكال Plugin -يصنف OpenClaw المكونات الإضافية المحمّلة بحسب سلوك التسجيل الخاص بها: +يصنّف OpenClaw Plugins المحمّلة وفقًا لسلوك التسجيل الخاص بها: -| الشكل | الوصف | -| --------------------- | --------------------------------------------------- | -| **plain-capability** | نوع إمكانة واحد (مثل مزوّد فقط) | -| **hybrid-capability** | عدة أنواع من الإمكانات (مثل مزوّد + speech) | -| **hook-only** | hooks فقط، من دون إمكانات | -| **non-capability** | أدوات/أوامر/خدمات لكن من دون إمكانات | +| الشكل | الوصف | +| --------------------- | ------------------------------------------------ | +| **plain-capability** | نوع قدرة واحد (مثل مزوّد فقط) | +| **hybrid-capability** | أنواع قدرات متعددة (مثل مزوّد + كلام) | +| **hook-only** | خطافات فقط، من دون قدرات | +| **non-capability** | أدوات/أوامر/خدمات ولكن من دون قدرات | -استخدم `openclaw plugins inspect ` لرؤية شكل المكوّن الإضافي. +استخدم `openclaw plugins inspect ` لرؤية شكل Plugin. ## ذو صلة -- [SDK Overview](/plugins/sdk-overview) — واجهة API الخاصة بالتسجيل ومرجع subpath -- [Runtime Helpers](/plugins/sdk-runtime) — `api.runtime` و`createPluginRuntimeStore` -- [Setup and Config](/plugins/sdk-setup) — manifest، ونقطة دخول الإعداد، والتحميل المؤجل -- [Channel Plugins](/plugins/sdk-channel-plugins) — بناء كائن `ChannelPlugin` -- [Provider Plugins](/plugins/sdk-provider-plugins) — تسجيل المزوّد وhooks +- [نظرة عامة على SDK](/ar/plugins/sdk-overview) — مرجع API التسجيل والمسارات الفرعية +- [مساعدات Runtime](/ar/plugins/sdk-runtime) — ‏`api.runtime` و`createPluginRuntimeStore` +- [الإعداد والتهيئة](/ar/plugins/sdk-setup) — manifest، ونقطة دخول الإعداد، والتحميل المؤجّل +- [Plugins القنوات](/ar/plugins/sdk-channel-plugins) — بناء كائن `ChannelPlugin` +- [Plugins المزوّد](/ar/plugins/sdk-provider-plugins) — تسجيل المزوّد والخطافات diff --git a/docs/ar/plugins/sdk-runtime.md b/docs/ar/plugins/sdk-runtime.md index 8de7b5f0c..a26c7b91d 100644 --- a/docs/ar/plugins/sdk-runtime.md +++ b/docs/ar/plugins/sdk-runtime.md @@ -1,29 +1,29 @@ --- read_when: - - أنت بحاجة إلى استدعاء مساعدات النواة من إضافة (TTS وSTT وتوليد الصور والبحث على الويب وsubagent) - - أنت تريد فهم ما الذي يتيحه `api.runtime` - - أنت تصل إلى مساعدات الإعدادات أو العامل أو الوسائط من داخل كود الإضافة + - تحتاج إلى استدعاء مساعدات النواة من Plugin (TTS وSTT وتوليد الصور والبحث على الويب وsubagent) + - تريد فهم ما الذي يتيحه `api.runtime` + - أنت تصل إلى مساعدات التكوين أو الوكيل أو الوسائط من داخل كود Plugin sidebarTitle: Runtime Helpers -summary: '`api.runtime` -- مساعدات وقت التشغيل المحقونة المتاحة للإضافات' -title: مساعدات وقت تشغيل الإضافات +summary: api.runtime -- مساعدات وقت التشغيل المُحقنة المتاحة للإضافات +title: مساعدات وقت تشغيل Plugin x-i18n: - generated_at: "2026-04-11T02:47:07Z" + generated_at: "2026-04-15T19:41:44Z" model: gpt-5.4 provider: openai - source_hash: fbf8a6ecd970300f784b8aca20eed40ba12c83107abd27385bfdc3347d2544be + source_hash: c77a6e9cd48c84affa17dce684bbd0e072c8b63485e4a5d569f3793a4ea4f9c8 source_path: plugins/sdk-runtime.md workflow: 15 --- -# مساعدات وقت تشغيل الإضافات +# مساعدات وقت التشغيل لـ Plugin -مرجع لكائن `api.runtime` الذي يُحقن في كل إضافة أثناء -التسجيل. استخدم هذه المساعدات بدلًا من استيراد العناصر الداخلية للمضيف مباشرة. +مرجع لكائن `api.runtime` الذي يُحقن في كل Plugin أثناء +التسجيل. استخدم هذه المساعدات بدلًا من استيراد مكوّنات المضيف الداخلية مباشرةً. - **هل تبحث عن شرح عملي؟** راجع [إضافات القنوات](/ar/plugins/sdk-channel-plugins) - أو [إضافات الموفّرين](/ar/plugins/sdk-provider-plugins) للحصول على أدلة خطوة بخطوة - تُظهر هذه المساعدات ضمن السياق. + **هل تبحث عن شرح عملي؟** راجع [Channel Plugins](/ar/plugins/sdk-channel-plugins) + أو [Provider Plugins](/ar/plugins/sdk-provider-plugins) للحصول على أدلة خطوة بخطوة + تعرض هذه المساعدات ضمن سياقها. ```typescript @@ -36,42 +36,42 @@ register(api) { ### `api.runtime.agent` -هوية العامل، والأدلة، وإدارة الجلسات. +هوية الوكيل، والأدلة، وإدارة الجلسات. ```typescript -// حل دليل عمل العامل +// Resolve the agent's working directory const agentDir = api.runtime.agent.resolveAgentDir(cfg); -// حل مساحة عمل العامل +// Resolve agent workspace const workspaceDir = api.runtime.agent.resolveAgentWorkspaceDir(cfg); -// الحصول على هوية العامل +// Get agent identity const identity = api.runtime.agent.resolveAgentIdentity(cfg); -// الحصول على مستوى التفكير الافتراضي +// Get default thinking level const thinking = api.runtime.agent.resolveThinkingDefault(cfg, provider, model); -// الحصول على مهلة العامل +// Get agent timeout const timeoutMs = api.runtime.agent.resolveAgentTimeoutMs(cfg); -// التأكد من وجود مساحة العمل +// Ensure workspace exists await api.runtime.agent.ensureAgentWorkspace(cfg); -// تشغيل دورة عامل مضمّن +// Run an embedded agent turn const agentDir = api.runtime.agent.resolveAgentDir(cfg); const result = await api.runtime.agent.runEmbeddedAgent({ sessionId: "my-plugin:task-1", runId: crypto.randomUUID(), sessionFile: path.join(agentDir, "sessions", "my-plugin-task-1.jsonl"), workspaceDir: api.runtime.agent.resolveAgentWorkspaceDir(cfg), - prompt: "لخّص أحدث التغييرات", + prompt: "Summarize the latest changes", timeoutMs: api.runtime.agent.resolveAgentTimeoutMs(cfg), }); ``` -يُعد `runEmbeddedAgent(...)` المساعد المحايد لبدء دورة عامل OpenClaw -عادية من داخل كود الإضافة. ويستخدم نفس آلية حل الموفّر/النموذج واختيار -حزمة العامل المستخدمة في الردود التي تُشغَّل من القنوات. +`runEmbeddedAgent(...)` هي المساعدة المحايدة لبدء دورة وكيل عادية في OpenClaw +من كود Plugin. وهي تستخدم نفس آلية حل الموفّر/النموذج واختيار +تجهيز الوكيل المستخدمة في الردود التي تُفعَّل عبر القنوات. يبقى `runEmbeddedPiAgent(...)` اسمًا مستعارًا للتوافق. @@ -86,66 +86,66 @@ const filePath = api.runtime.agent.session.resolveSessionFilePath(cfg, sessionId ### `api.runtime.agent.defaults` -ثوابت النموذج والموفّر الافتراضية: +ثوابت النموذج والموفّر الافتراضيين: ```typescript -const model = api.runtime.agent.defaults.model; // مثال: "anthropic/claude-sonnet-4-6" -const provider = api.runtime.agent.defaults.provider; // مثال: "anthropic" +const model = api.runtime.agent.defaults.model; // e.g. "anthropic/claude-sonnet-4-6" +const provider = api.runtime.agent.defaults.provider; // e.g. "anthropic" ``` ### `api.runtime.subagent` -تشغيل وإدارة عمليات subagent في الخلفية. +تشغيل عمليات subagent في الخلفية وإدارتها. ```typescript -// بدء تشغيل subagent +// Start a subagent run const { runId } = await api.runtime.subagent.run({ sessionKey: "agent:main:subagent:search-helper", - message: "وسّع هذا الاستعلام إلى عمليات بحث متابعة أكثر تركيزًا.", - provider: "openai", // تجاوز اختياري - model: "gpt-4.1-mini", // تجاوز اختياري + message: "Expand this query into focused follow-up searches.", + provider: "openai", // optional override + model: "gpt-4.1-mini", // optional override deliver: false, }); -// الانتظار حتى الاكتمال +// Wait for completion const result = await api.runtime.subagent.waitForRun({ runId, timeoutMs: 30000 }); -// قراءة رسائل الجلسة +// Read session messages const { messages } = await api.runtime.subagent.getSessionMessages({ sessionKey: "agent:main:subagent:search-helper", limit: 10, }); -// حذف جلسة +// Delete a session await api.runtime.subagent.deleteSession({ sessionKey: "agent:main:subagent:search-helper", }); ``` - تتطلب تجاوزات النموذج (`provider`/`model`) اشتراكًا صريحًا من المشغّل عبر + تتطلب تجاوزات النموذج (`provider`/`model`) موافقة صريحة من المشغّل عبر `plugins.entries..subagent.allowModelOverride: true` في الإعدادات. - لا تزال الإضافات غير الموثوقة قادرة على تشغيل subagents، لكن طلبات التجاوز تُرفَض. + لا يزال بإمكان Plugins غير الموثوقة تشغيل subagents، لكن طلبات التجاوز تُرفض. ### `api.runtime.taskFlow` -اربط وقت تشغيل Task Flow بمفتاح جلسة OpenClaw موجود أو بسياق أداة موثوق، -ثم أنشئ Task Flows وأدرها من دون تمرير مالك في كل استدعاء. +اربط وقت تشغيل TaskFlow بمفتاح جلسة OpenClaw موجود أو بسياق أداة موثوق، +ثم أنشئ Task Flows وأدرها دون تمرير مالك مع كل استدعاء. ```typescript const taskFlow = api.runtime.taskFlow.fromToolContext(ctx); const created = taskFlow.createManaged({ controllerId: "my-plugin/review-batch", - goal: "مراجعة طلبات السحب الجديدة", + goal: "Review new pull requests", }); const child = taskFlow.runTask({ flowId: created.flowId, runtime: "acp", childSessionKey: "agent:main:subagent:reviewer", - task: "راجع PR #123", + task: "Review PR #123", status: "running", startedAt: Date.now(), }); @@ -159,73 +159,74 @@ const waiting = taskFlow.setWaiting({ ``` استخدم `bindSession({ sessionKey, requesterOrigin })` عندما يكون لديك بالفعل -مفتاح جلسة OpenClaw موثوق من طبقة الربط الخاصة بك. لا تربط انطلاقًا من +مفتاح جلسة OpenClaw موثوق من طبقة الربط الخاصة بك. لا تُجرِ الربط من إدخال مستخدم خام. ### `api.runtime.tts` -تحويل النص إلى كلام. +تركيب تحويل النص إلى كلام. ```typescript -// TTS قياسي +// Standard TTS const clip = await api.runtime.tts.textToSpeech({ - text: "مرحبًا من OpenClaw", + text: "Hello from OpenClaw", cfg: api.config, }); -// TTS محسّن للاتصالات الهاتفية +// Telephony-optimized TTS const telephonyClip = await api.runtime.tts.textToSpeechTelephony({ - text: "مرحبًا من OpenClaw", + text: "Hello from OpenClaw", cfg: api.config, }); -// إدراج الأصوات المتاحة +// List available voices const voices = await api.runtime.tts.listVoices({ provider: "elevenlabs", cfg: api.config, }); ``` -يستخدم إعدادات `messages.tts` الأساسية واختيار الموفّر. ويُرجع مخزنًا مؤقتًا -لصوت PCM + معدل العينة. +يستخدم إعدادات `messages.tts` الأساسية واختيار الموفّر. ويعيد مخزنًا مؤقتًا +لصوت PCM مع معدل العينة. ### `api.runtime.mediaUnderstanding` تحليل الصور والصوت والفيديو. ```typescript -// وصف صورة +// Describe an image const image = await api.runtime.mediaUnderstanding.describeImageFile({ filePath: "/tmp/inbound-photo.jpg", cfg: api.config, agentDir: "/tmp/agent", }); -// نسخ صوت إلى نص +// Transcribe audio const { text } = await api.runtime.mediaUnderstanding.transcribeAudioFile({ filePath: "/tmp/inbound-audio.ogg", cfg: api.config, - mime: "audio/ogg", // اختياري، عندما لا يمكن استنتاج MIME + mime: "audio/ogg", // optional, for when MIME cannot be inferred }); -// وصف فيديو +// Describe a video const video = await api.runtime.mediaUnderstanding.describeVideoFile({ filePath: "/tmp/inbound-video.mp4", cfg: api.config, }); -// تحليل ملف عام +// Generic file analysis const result = await api.runtime.mediaUnderstanding.runFile({ filePath: "/tmp/inbound-file.pdf", cfg: api.config, }); ``` -يُرجع `{ text: undefined }` عندما لا يتم إنتاج أي مخرجات (مثل إدخال تم تخطيه). +يعيد `{ text: undefined }` عندما لا يتم إنتاج أي مخرجات (على سبيل المثال، عند +تخطي الإدخال). يبقى `api.runtime.stt.transcribeAudioFile(...)` اسمًا مستعارًا للتوافق - لـ `api.runtime.mediaUnderstanding.transcribeAudioFile(...)`. + مع `api.runtime.mediaUnderstanding.transcribeAudioFile(...)`. ### `api.runtime.imageGeneration` @@ -234,7 +235,7 @@ const result = await api.runtime.mediaUnderstanding.runFile({ ```typescript const result = await api.runtime.imageGeneration.generate({ - prompt: "روبوت يرسم غروب الشمس", + prompt: "A robot painting a sunset", cfg: api.config, }); @@ -256,7 +257,7 @@ const result = await api.runtime.webSearch.search({ ### `api.runtime.media` -أدوات وسائط منخفضة المستوى. +أدوات الوسائط منخفضة المستوى. ```typescript const webMedia = await api.runtime.media.loadWebMedia(url); @@ -278,7 +279,7 @@ await api.runtime.config.writeConfigFile(cfg); ### `api.runtime.system` -أدوات مساعدة على مستوى النظام. +أدوات على مستوى النظام. ```typescript await api.runtime.system.enqueueSystemEvent(event); @@ -311,7 +312,7 @@ const childLogger = api.runtime.logging.getChildLogger({ plugin: "my-plugin" }, ### `api.runtime.modelAuth` -حل مصادقة النموذج والموفّر. +حلّ مصادقة النموذج والموفّر. ```typescript const auth = await api.runtime.modelAuth.getApiKeyForModel({ model, cfg }); @@ -323,7 +324,7 @@ const providerAuth = await api.runtime.modelAuth.resolveApiKeyForProvider({ ### `api.runtime.state` -حل دليل الحالة. +حلّ دليل الحالة. ```typescript const stateDir = api.runtime.state.resolveStateDir(); @@ -331,7 +332,7 @@ const stateDir = api.runtime.state.resolveStateDir(); ### `api.runtime.tools` -مصانع أدوات الذاكرة وCLI. +مصانع أداة الذاكرة وCLI. ```typescript const getTool = api.runtime.tools.createMemoryGetTool(/* ... */); @@ -341,10 +342,10 @@ api.runtime.tools.registerMemoryCli(/* ... */); ### `api.runtime.channel` -مساعدات وقت تشغيل خاصة بالقناة (متاحة عند تحميل إضافة قناة). +مساعدات وقت تشغيل خاصة بالقناة (تكون متاحة عند تحميل Channel Plugin). -يُعد `api.runtime.channel.mentions` سطح سياسة الإشارة الواردة المشتركة -لإضافات القنوات المضمّنة التي تستخدم حقن وقت التشغيل: +`api.runtime.channel.mentions` هي واجهة سياسة الإشارة الواردة المشتركة +لـ Channel Plugins المضمّنة التي تستخدم حقن وقت التشغيل: ```typescript const mentionMatch = api.runtime.channel.mentions.matchesMentionWithExplicit(text, { @@ -379,56 +380,63 @@ const decision = api.runtime.channel.mentions.resolveInboundMentionDecision({ - `implicitMentionKindWhen` - `resolveInboundMentionDecision` -لا يكشف `api.runtime.channel.mentions` عمدًا عن مساعدات التوافق الأقدم -`resolveMentionGating*`. ويفضَّل استخدام المسار المطبّع +لا يعرّض `api.runtime.channel.mentions` عمدًا مساعدات التوافق الأقدم +`resolveMentionGating*`. يُفضَّل استخدام المسار الموحّد `{ facts, policy }`. ## تخزين مراجع وقت التشغيل -استخدم `createPluginRuntimeStore` لتخزين مرجع وقت التشغيل من أجل استخدامه خارج -دالة الاستدعاء `register`: +استخدم `createPluginRuntimeStore` لتخزين مرجع وقت التشغيل لاستخدامه خارج +دالة `register`: ```typescript import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store"; import type { PluginRuntime } from "openclaw/plugin-sdk/runtime-store"; -const store = createPluginRuntimeStore("لم يتم تهيئة وقت تشغيل my-plugin"); +const store = createPluginRuntimeStore({ + pluginId: "my-plugin", + errorMessage: "my-plugin runtime not initialized", +}); -// في نقطة الدخول الخاصة بك +// In your entry point export default defineChannelPluginEntry({ id: "my-plugin", name: "My Plugin", - description: "مثال", + description: "Example", plugin: myPlugin, setRuntime: store.setRuntime, }); -// في ملفات أخرى +// In other files export function getRuntime() { - return store.getRuntime(); // يرمي خطأ إذا لم تتم التهيئة + return store.getRuntime(); // throws if not initialized } export function tryGetRuntime() { - return store.tryGetRuntime(); // يُرجع null إذا لم تتم التهيئة + return store.tryGetRuntime(); // returns null if not initialized } ``` -## حقول `api` الأخرى ذات المستوى الأعلى +يُفضَّل `pluginId` لهوية runtime-store. أما الصيغة الأدنى مستوى `key` +فهي للحالات غير الشائعة التي يحتاج فيها Plugin واحد عمدًا إلى أكثر من خانة +وقت تشغيل واحدة. + +## حقول `api` العلوية الأخرى إلى جانب `api.runtime`، يوفّر كائن API أيضًا: -| الحقل | النوع | الوصف | +| الحقل | النوع | الوصف | | ------------------------ | ------------------------- | ------------------------------------------------------------------------------------------- | -| `api.id` | `string` | معرّف الإضافة | -| `api.name` | `string` | الاسم المعروض للإضافة | -| `api.config` | `OpenClawConfig` | لقطة الإعدادات الحالية (لقطة وقت التشغيل النشطة داخل الذاكرة عند توفرها) | -| `api.pluginConfig` | `Record` | إعدادات خاصة بالإضافة من `plugins.entries..config` | -| `api.logger` | `PluginLogger` | مسجّل بنطاق محدد (`debug` و`info` و`warn` و`error`) | -| `api.registrationMode` | `PluginRegistrationMode` | وضع التحميل الحالي؛ تمثّل `"setup-runtime"` نافذة بدء التشغيل/الإعداد الخفيفة قبل الإدخال الكامل | -| `api.resolvePath(input)` | `(string) => string` | حل مسار نسبةً إلى جذر الإضافة | +| `api.id` | `string` | معرّف Plugin | +| `api.name` | `string` | الاسم المعروض لـ Plugin | +| `api.config` | `OpenClawConfig` | لقطة الإعدادات الحالية (لقطة وقت التشغيل النشطة داخل الذاكرة عند توفرها) | +| `api.pluginConfig` | `Record` | إعدادات خاصة بـ Plugin من `plugins.entries..config` | +| `api.logger` | `PluginLogger` | مسجّل بنطاق محدد (`debug` و`info` و`warn` و`error`) | +| `api.registrationMode` | `PluginRegistrationMode` | وضع التحميل الحالي؛ يشير `"setup-runtime"` إلى نافذة بدء/إعداد خفيفة قبل التشغيل الكامل | +| `api.resolvePath(input)` | `(string) => string` | حلّ مسار نسبةً إلى جذر Plugin | ## ذو صلة - [نظرة عامة على SDK](/ar/plugins/sdk-overview) -- مرجع المسارات الفرعية - [نقاط دخول SDK](/ar/plugins/sdk-entrypoints) -- خيارات `definePluginEntry` -- [الأجزاء الداخلية للإضافات](/ar/plugins/architecture) -- نموذج الإمكانات والسجل +- [المكوّنات الداخلية لـ Plugin](/ar/plugins/architecture) -- نموذج القدرات والسجل diff --git a/docs/ar/plugins/sdk-setup.md b/docs/ar/plugins/sdk-setup.md index 8665c4772..d7a3814bc 100644 --- a/docs/ar/plugins/sdk-setup.md +++ b/docs/ar/plugins/sdk-setup.md @@ -1,37 +1,37 @@ --- read_when: - - أنت تضيف معالج إعداد إلى إضافة - - تحتاج إلى فهم الفرق بين `setup-entry.ts` و`index.ts` - - أنت تعرّف مخططات config للإضافة أو بيانات `openclaw` الوصفية في `package.json` + - أنت تضيف معالج إعداد إلى Plugin + - تحتاج إلى فهم `setup-entry.ts` مقابل `index.ts` + - أنت تعرّف مخططات تكوين Plugin أو بيانات تعريف `openclaw` في `package.json` sidebarTitle: Setup and Config -summary: معالجات الإعداد، و`setup-entry.ts`، ومخططات config، وبيانات `package.json` الوصفية -title: إعداد الإضافة وConfig الخاص بها +summary: معالجات الإعداد، `setup-entry.ts`، مخططات التكوين، وبيانات التعريف في `package.json` +title: إعداد Plugin والتكوين x-i18n: - generated_at: "2026-04-06T03:11:22Z" + generated_at: "2026-04-15T19:41:39Z" model: gpt-5.4 provider: openai - source_hash: eac2586516d27bcd94cc4c259fe6274c792b3f9938c7ddd6dbf04a6dbb988dc9 + source_hash: ddf28e25e381a4a38ac478e531586f59612e1a278732597375f87c2eeefc521b source_path: plugins/sdk-setup.md workflow: 15 --- -# إعداد الإضافة وConfig الخاص بها +# إعداد Plugin والتكوين -مرجع لتغليف الإضافات (بيانات `package.json` الوصفية)، وmanifest -(`openclaw.plugin.json`)، ومداخل الإعداد، ومخططات config. +مرجع لتغليف Plugin (بيانات تعريف `package.json`)، وملفات البيان +(`openclaw.plugin.json`)، ومداخل الإعداد، ومخططات التكوين. - **هل تبحث عن شرح عملي؟** تغطي أدلة التنفيذ التغليف ضمن السياق: - [إضافات القنوات](/ar/plugins/sdk-channel-plugins#step-1-package-and-manifest) و - [إضافات المزوّدين](/ar/plugins/sdk-provider-plugins#step-1-package-and-manifest). + **هل تبحث عن شرح تطبيقي؟** تغطي أدلة كيفية التنفيذ التغليف ضمن السياق: + [Plugins القنوات](/ar/plugins/sdk-channel-plugins#step-1-package-and-manifest) و + [Plugins المزوّدين](/ar/plugins/sdk-provider-plugins#step-1-package-and-manifest). -## بيانات الحزمة الوصفية +## بيانات تعريف الحزمة -يحتاج `package.json` الخاص بك إلى حقل `openclaw` يخبر نظام الإضافات بما -توفّره إضافتك: +يحتاج ملف `package.json` الخاص بك إلى حقل `openclaw` يوضح لنظام Plugin ما +الذي يوفّره Plugin الخاص بك: -**إضافة قناة:** +**Plugin قناة:** ```json { @@ -44,13 +44,13 @@ x-i18n: "channel": { "id": "my-channel", "label": "My Channel", - "blurb": "وصف قصير للقناة." + "blurb": "Short description of the channel." } } } ``` -**إضافة مزوّد / خط أساس النشر على ClawHub:** +**Plugin مزوّد / خط الأساس للنشر في ClawHub:** ```json openclaw-clawhub-package.json { @@ -71,47 +71,47 @@ x-i18n: } ``` -إذا كنت تنشر الإضافة خارجيًا على ClawHub، فإن حقلي `compat` و`build` -مطلوبان. وتوجد مقتطفات النشر القانونية في +إذا كنت تنشر Plugin خارجيًا على ClawHub، فإن حقلي `compat` و`build` +مطلوبان. توجد مقتطفات النشر القياسية في `docs/snippets/plugin-publish/`. ### حقول `openclaw` -| الحقل | النوع | الوصف | -| ------------ | ---------- | ------------------------------------------------------------------------------------------------- | -| `extensions` | `string[]` | ملفات نقاط الإدخال (نسبةً إلى جذر الحزمة) | -| `setupEntry` | `string` | إدخال خفيف مخصص للإعداد فقط (اختياري) | -| `channel` | `object` | بيانات وصفية لفهرس القنوات لأسطح الإعداد والمنتقي والبداية السريعة والحالة | -| `providers` | `string[]` | معرّفات المزوّدين التي تسجلها هذه الإضافة | -| `install` | `object` | تلميحات التثبيت: `npmSpec` و`localPath` و`defaultChoice` و`minHostVersion` و`allowInvalidConfigRecovery` | -| `startup` | `object` | رايات سلوك بدء التشغيل | +| الحقل | النوع | الوصف | +| ------------ | ---------- | ------------------------------------------------------------------------------------------------------ | +| `extensions` | `string[]` | ملفات نقطة الإدخال (بالنسبة إلى جذر الحزمة) | +| `setupEntry` | `string` | إدخال خفيف مخصّص للإعداد فقط (اختياري) | +| `channel` | `object` | بيانات تعريف فهرس القناة لأسطح الإعداد والمنتقي والبدء السريع والحالة | +| `providers` | `string[]` | معرّفات المزوّدين التي يسجّلها هذا Plugin | +| `install` | `object` | تلميحات التثبيت: `npmSpec`, `localPath`, `defaultChoice`, `minHostVersion`, `allowInvalidConfigRecovery` | +| `startup` | `object` | إشارات سلوك بدء التشغيل | ### `openclaw.channel` -يمثل `openclaw.channel` بيانات وصفية رخيصة على مستوى الحزمة لاكتشاف القنوات وأسطر الإعداد -قبل تحميل وقت التشغيل. +يُعد `openclaw.channel` بيانات تعريف حزمة منخفضة التكلفة لاكتشاف القناة +وأسطح الإعداد قبل تحميل وقت التشغيل. -| الحقل | النوع | ما الذي يعنيه | -| -------------------------------------- | ---------- | ---------------------------------------------------------------------------- | -| `id` | `string` | معرّف القناة القانوني. | -| `label` | `string` | التسمية الأساسية للقناة. | -| `selectionLabel` | `string` | تسمية المنتقي/الإعداد عندما ينبغي أن تختلف عن `label`. | -| `detailLabel` | `string` | تسمية تفاصيل ثانوية لفهارس القنوات الأغنى وأسطر الحالة. | -| `docsPath` | `string` | مسار المستندات لروابط الإعداد والاختيار. | -| `docsLabel` | `string` | تجاوز للتسمية المستخدمة لروابط المستندات عندما ينبغي أن تختلف عن معرّف القناة. | -| `blurb` | `string` | وصف قصير للفهرس/التهيئة الأولية. | -| `order` | `number` | ترتيب الفرز في فهارس القنوات. | -| `aliases` | `string[]` | أسماء بديلة إضافية للبحث عن القناة عند الاختيار. | -| `preferOver` | `string[]` | معرّفات إضافات/قنوات أقل أولوية ينبغي أن تتفوق عليها هذه القناة. | -| `systemImage` | `string` | اسم icon/system-image اختياري لفهارس UI الخاصة بالقنوات. | -| `selectionDocsPrefix` | `string` | نص بادئة قبل روابط المستندات في أسطح الاختيار. | -| `selectionDocsOmitLabel` | `boolean` | عرض مسار المستندات مباشرة بدل رابط مستندات ذي تسمية في نص الاختيار. | -| `selectionExtras` | `string[]` | سلاسل قصيرة إضافية تُلحَق في نص الاختيار. | -| `markdownCapable` | `boolean` | يضع علامة على أن القناة تدعم Markdown لقرارات التنسيق الصادر. | -| `exposure` | `object` | عناصر تحكم في ظهور القناة في أسطح الإعداد والقوائم المهيأة والمستندات. | -| `quickstartAllowFrom` | `boolean` | يدرج هذه القناة في تدفق إعداد `allowFrom` القياسي للبداية السريعة. | -| `forceAccountBinding` | `boolean` | يطلب ربط حساب صريحًا حتى عند وجود حساب واحد فقط. | -| `preferSessionLookupForAnnounceTarget` | `boolean` | يفضّل البحث في الجلسة عند حل أهداف الإعلان لهذه القناة. | +| الحقل | النوع | ما الذي يعنيه | +| -------------------------------------- | ---------- | ----------------------------------------------------------------------------- | +| `id` | `string` | معرّف القناة القياسي. | +| `label` | `string` | التسمية الأساسية للقناة. | +| `selectionLabel` | `string` | تسمية المنتقي/الإعداد عندما ينبغي أن تختلف عن `label`. | +| `detailLabel` | `string` | تسمية تفصيلية ثانوية لفهارس القنوات الأغنى وأسطح الحالة. | +| `docsPath` | `string` | مسار الوثائق لروابط الإعداد والاختيار. | +| `docsLabel` | `string` | تسمية بديلة مستخدمة لروابط الوثائق عندما ينبغي أن تختلف عن معرّف القناة. | +| `blurb` | `string` | وصف قصير للفهرس/التهيئة الأولية. | +| `order` | `number` | ترتيب الفرز في فهارس القنوات. | +| `aliases` | `string[]` | أسماء بديلة إضافية للبحث عن القناة. | +| `preferOver` | `string[]` | معرّفات Plugin/قناة ذات أولوية أقل ينبغي لهذه القناة أن تتقدّم عليها. | +| `systemImage` | `string` | اسم أيقونة/صورة نظام اختياري لواجهات فهارس القنوات. | +| `selectionDocsPrefix` | `string` | نص بادئة قبل روابط الوثائق في أسطح الاختيار. | +| `selectionDocsOmitLabel` | `boolean` | عرض مسار الوثائق مباشرة بدلًا من رابط وثائق ذي تسمية في نص الاختيار. | +| `selectionExtras` | `string[]` | سلاسل قصيرة إضافية تُلحَق في نص الاختيار. | +| `markdownCapable` | `boolean` | يحدد أن القناة تدعم Markdown لقرارات التنسيق الصادر. | +| `exposure` | `object` | عناصر تحكم في ظهور القناة للإعداد والقوائم المهيأة وأس surfaces الوثائق. | +| `quickstartAllowFrom` | `boolean` | يضم هذه القناة إلى تدفق إعداد `allowFrom` القياسي للبدء السريع. | +| `forceAccountBinding` | `boolean` | يفرض ربط الحساب صراحة حتى عند وجود حساب واحد فقط. | +| `preferSessionLookupForAnnounceTarget` | `boolean` | يفضّل البحث في الجلسة عند حل أهداف الإعلان لهذه القناة. | مثال: @@ -125,11 +125,11 @@ x-i18n: "detailLabel": "My Channel Bot", "docsPath": "/channels/my-channel", "docsLabel": "my-channel", - "blurb": "تكامل دردشة مستضاف ذاتيًا قائم على webhook.", + "blurb": "Webhook-based self-hosted chat integration.", "order": 80, "aliases": ["mc"], "preferOver": ["my-channel-legacy"], - "selectionDocsPrefix": "الدليل:", + "selectionDocsPrefix": "Guide:", "selectionExtras": ["Markdown"], "markdownCapable": true, "exposure": { @@ -145,37 +145,37 @@ x-i18n: يدعم `exposure` ما يلي: -- `configured`: تضمين القناة في أسطح القوائم من نمط configured/status +- `configured`: تضمين القناة في أسطح القوائم المهيأة/على نمط الحالة - `setup`: تضمين القناة في منتقيات الإعداد/التهيئة التفاعلية -- `docs`: وضع علامة على أن القناة موجهة للعامة في أسطح المستندات/التنقل +- `docs`: تحديد القناة على أنها موجهة للعامة في أسطح الوثائق/التنقل -لا يزال `showConfigured` و`showInSetup` مدعومين كأسماء بديلة قديمة. ويفضَّل +لا يزال `showConfigured` و`showInSetup` مدعومين كأسماء بديلة قديمة. يُفضّل استخدام `exposure`. ### `openclaw.install` -يمثل `openclaw.install` بيانات وصفية على مستوى الحزمة، وليس بيانات manifest وصفية. +يُعد `openclaw.install` بيانات تعريف حزمة، وليس بيانات تعريف بيان. -| الحقل | النوع | ما الذي يعنيه | -| ---------------------------- | -------------------- | ---------------------------------------------------------------------------------- | -| `npmSpec` | `string` | مواصفة npm القانونية لتدفقات التثبيت/التحديث. | -| `localPath` | `string` | مسار تثبيت محلي للتطوير أو للإضافات المجمعة. | -| `defaultChoice` | `"npm"` \| `"local"` | مصدر التثبيت المفضل عند توفر الاثنين. | -| `minHostVersion` | `string` | الحد الأدنى لإصدار OpenClaw المدعوم بصيغة `>=x.y.z`. | -| `allowInvalidConfigRecovery` | `boolean` | يتيح لتدفقات إعادة تثبيت الإضافات المجمعة التعافي من إخفاقات config قديمة محددة. | +| الحقل | النوع | ما الذي يعنيه | +| ---------------------------- | -------------------- | -------------------------------------------------------------------------------- | +| `npmSpec` | `string` | مواصفة npm القياسية لتدفقات التثبيت/التحديث. | +| `localPath` | `string` | مسار تثبيت محلي للتطوير أو مضمّن. | +| `defaultChoice` | `"npm"` \| `"local"` | مصدر التثبيت المفضّل عندما يكون كلاهما متاحًا. | +| `minHostVersion` | `string` | الحد الأدنى لإصدار OpenClaw المدعوم بصيغة `>=x.y.z`. | +| `allowInvalidConfigRecovery` | `boolean` | يسمح لتدفقات إعادة تثبيت Plugin المضمّن بالتعافي من أعطال تهيئة قديمة محددة. | -إذا تم تعيين `minHostVersion`، فإن التثبيت وتحميل سجل manifest يفرضان -هذا الحقل كليهما. وتتجاوز المضيفات الأقدم الإضافة؛ أما سلاسل الإصدارات غير الصالحة فتُرفض. +إذا تم تعيين `minHostVersion`، فإن كلًا من التثبيت وتحميل سجل البيان يفرضان +ذلك. تتجاوز الاستضافات الأقدم هذا Plugin؛ وتُرفض سلاسل الإصدار غير الصالحة. -إن `allowInvalidConfigRecovery` ليس تجاوزًا عامًا لإعدادات config المكسورة. بل هو -للتعافي الضيق الخاص بالإضافات المجمعة فقط، حتى تتمكن إعادة التثبيت/الإعداد من إصلاح -مخلّفات الترقيات المعروفة مثل مسار إضافة مجمعة مفقود أو إدخال `channels.` -قديم لتلك الإضافة نفسها. وإذا كان config مكسورًا لأسباب غير مرتبطة، فلا يزال -التثبيت يفشل بشكل مغلق ويوجه المشغّل إلى تشغيل `openclaw doctor --fix`. +لا يُعد `allowInvalidConfigRecovery` تجاوزًا عامًا للتكوينات المعطوبة. بل هو +مخصّص فقط لتعافٍ ضيق النطاق لـ Plugin المضمّن، بحيث يمكن لإعادة التثبيت/الإعداد +إصلاح بقايا ترقيات معروفة مثل غياب مسار Plugin المضمّن أو وجود إدخال قديم +`channels.` لذاك Plugin نفسه. إذا كان التكوين معطوبًا لأسباب غير مرتبطة، +فلا يزال التثبيت يفشل بشكل آمن ويخبر المشغّل بتشغيل `openclaw doctor --fix`. ### تأجيل التحميل الكامل -يمكن لإضافات القنوات الاشتراك في التحميل المؤجل باستخدام: +يمكن لـ Plugins القنوات الاشتراك في التحميل المؤجل عبر: ```json { @@ -189,45 +189,46 @@ x-i18n: } ``` -عند التمكين، يحمّل OpenClaw `setupEntry` فقط أثناء مرحلة بدء التشغيل -التي تسبق الاستماع، حتى للقنوات المهيأة بالفعل. ويُحمّل الإدخال الكامل بعد أن -تبدأ البوابة في الاستماع. +عند التفعيل، يحمّل OpenClaw فقط `setupEntry` خلال مرحلة بدء التشغيل السابقة +للاستماع، حتى بالنسبة إلى القنوات المُهيأة بالفعل. ويُحمَّل الإدخال الكامل بعد +أن تبدأ Gateway بالاستماع. - لا تفعّل التحميل المؤجل إلا عندما يسجل `setupEntry` الخاص بك كل ما - تحتاجه البوابة قبل أن تبدأ الاستماع (تسجيل القناة، ومسارات HTTP، وطرائق البوابة). وإذا كان الإدخال الكامل يملك إمكانات بدء تشغيل مطلوبة، فأبقِ + لا تفعّل التحميل المؤجل إلا عندما كان `setupEntry` الخاص بك يسجّل كل ما + تحتاجه Gateway قبل أن تبدأ بالاستماع (تسجيل القناة، ومسارات HTTP، وطرق + Gateway). إذا كان الإدخال الكامل يملك قدرات مطلوبة عند بدء التشغيل، فأبقِ السلوك الافتراضي. -إذا كان إدخال الإعداد/الإدخال الكامل لديك يسجل طرائق Gateway RPC، فأبقِها على -بادئة خاصة بالإضافة. وتظل مساحات أسماء الإدارة الأساسية المحجوزة (`config.*`، -`exec.approvals.*`، `wizard.*`، `update.*`) مملوكة للنواة وتُحل دائمًا -إلى `operator.admin`. +إذا كان إدخال الإعداد/الإدخال الكامل لديك يسجّل طرق Gateway RPC، فاحتفظ بها +ضمن بادئة خاصة بـ Plugin. تظل مساحات أسماء إدارة النواة المحجوزة (`config.*`, +`exec.approvals.*`, `wizard.*`, `update.*`) مملوكة للنواة وتُحل دائمًا إلى +`operator.admin`. -## Plugin manifest +## بيان Plugin -يجب أن تُرفق كل إضافة أصلية ملف `openclaw.plugin.json` في جذر الحزمة. -ويستخدم OpenClaw هذا للتحقق من config من دون تنفيذ شيفرة الإضافة. +يجب أن يشحن كل Plugin أصلي ملف `openclaw.plugin.json` في جذر الحزمة. +يستخدم OpenClaw هذا للتحقق من صحة التكوين دون تنفيذ شيفرة Plugin. ```json { "id": "my-plugin", "name": "My Plugin", - "description": "يضيف إمكانات My Plugin إلى OpenClaw", + "description": "Adds My Plugin capabilities to OpenClaw", "configSchema": { "type": "object", "additionalProperties": false, "properties": { "webhookSecret": { "type": "string", - "description": "سر التحقق من webhook" + "description": "Webhook verification secret" } } } } ``` -بالنسبة إلى إضافات القنوات، أضف `kind` و`channels`: +بالنسبة إلى Plugins القنوات، أضف `kind` و`channels`: ```json { @@ -242,7 +243,7 @@ x-i18n: } ``` -حتى الإضافات التي لا تحتوي على config يجب أن تُرفق schema. ويُعد المخطط الفارغ صالحًا: +حتى Plugins التي لا تحتوي على أي تكوين يجب أن تشحن مخططًا. مخطط فارغ صالح: ```json { @@ -254,24 +255,24 @@ x-i18n: } ``` -راجع [Plugin Manifest](/ar/plugins/manifest) للاطلاع على المرجع الكامل للمخطط. +راجع [بيان Plugin](/ar/plugins/manifest) للاطلاع على المرجع الكامل للمخطط. ## النشر على ClawHub -بالنسبة إلى حزم الإضافات، استخدم أمر ClawHub الخاص بالحزمة: +بالنسبة إلى حزم Plugins، استخدم أمر ClawHub الخاص بالحزمة: ```bash clawhub package publish your-org/your-plugin --dry-run clawhub package publish your-org/your-plugin ``` -الاسم البديل القديم للنشر الخاص بالـ Skill فقط مخصص لـ Skills. ويجب أن تستخدم حزم الإضافات -دائمًا `clawhub package publish`. +الاسم البديل القديم الخاص بالنشر للمهارات فقط مخصّص للمهارات. يجب على حزم Plugins +استخدام `clawhub package publish` دائمًا. ## إدخال الإعداد -ملف `setup-entry.ts` هو بديل خفيف لـ `index.ts` -يحمّله OpenClaw عندما يحتاج فقط إلى أسطح الإعداد (التهيئة الأولية، وإصلاح config، وفحص القنوات المعطلة). +ملف `setup-entry.ts` هو بديل خفيف لـ `index.ts` يقوم OpenClaw بتحميله عندما +يحتاج فقط إلى أسطح الإعداد (التهيئة الأولية، إصلاح التكوين، فحص القنوات المعطلة). ```typescript // setup-entry.ts @@ -281,77 +282,84 @@ import { myChannelPlugin } from "./src/channel.js"; export default defineSetupPluginEntry(myChannelPlugin); ``` -وهذا يتجنب تحميل شيفرة وقت تشغيل ثقيلة (مكتبات crypto، وتسجيلات CLI، +هذا يتجنب تحميل شيفرة وقت تشغيل ثقيلة (مكتبات التشفير، وتسجيلات CLI، والخدمات الخلفية) أثناء تدفقات الإعداد. -**متى يستخدم OpenClaw `setupEntry` بدل الإدخال الكامل:** +يمكن لقنوات مساحة العمل المضمّنة التي تحتفظ بتصديرات آمنة للإعداد في وحدات +جانبية استخدام `defineBundledChannelSetupEntry(...)` من +`openclaw/plugin-sdk/channel-entry-contract` بدلًا من +`defineSetupPluginEntry(...)`. يدعم هذا العقد المضمّن أيضًا تصدير `runtime` +اختياريًا بحيث يبقى توصيل وقت التشغيل في وقت الإعداد خفيفًا وواضحًا. -- تكون القناة معطلة لكنها تحتاج إلى أسطح إعداد/تهيئة أولية -- تكون القناة مفعلة لكنها غير مهيأة +**متى يستخدم OpenClaw `setupEntry` بدلًا من الإدخال الكامل:** + +- تكون القناة معطّلة ولكنها تحتاج إلى أسطح الإعداد/التهيئة الأولية +- تكون القناة مفعّلة ولكن غير مهيأة - يكون التحميل المؤجل مفعّلًا (`deferConfiguredChannelFullLoadUntilAfterListen`) -**ما الذي يجب أن يسجله `setupEntry`:** +**ما الذي يجب أن يسجّله `setupEntry`:** -- كائن إضافة القناة (عبر `defineSetupPluginEntry`) -- أي مسارات HTTP مطلوبة قبل استماع البوابة -- أي طرائق للبوابة مطلوبة أثناء بدء التشغيل +- كائن Plugin الخاص بالقناة (عبر `defineSetupPluginEntry`) +- أي مسارات HTTP مطلوبة قبل استماع Gateway +- أي طرق Gateway مطلوبة أثناء بدء التشغيل -ويجب أن تتجنب طرائق البوابة الخاصة ببدء التشغيل تلك أيضًا مساحات أسماء الإدارة -الأساسية المحجوزة مثل `config.*` أو `update.*`. +يجب أن تتجنب طرق Gateway الخاصة ببدء التشغيل هذه أيضًا مساحات أسماء إدارة +النواة المحجوزة مثل `config.*` أو `update.*`. -**ما الذي يجب ألا يتضمنه `setupEntry`:** +**ما الذي يجب ألّا يتضمنه `setupEntry`:** - تسجيلات CLI - الخدمات الخلفية -- واردات وقت تشغيل ثقيلة (crypto وSDKs) -- طرائق البوابة المطلوبة فقط بعد بدء التشغيل +- استيرادات وقت التشغيل الثقيلة (التشفير، وحِزم SDK) +- طرق Gateway المطلوبة فقط بعد بدء التشغيل -### واردات مساعدات الإعداد الضيقة +### استيرادات مساعدات الإعداد الضيقة -بالنسبة إلى المسارات الساخنة الخاصة بالإعداد فقط، فَضّل واجهات المساعدات الضيقة هذه بدل الواجهة الأوسع -`plugin-sdk/setup` عندما لا تحتاج إلا إلى جزء من سطح الإعداد: +بالنسبة إلى مسارات الإعداد فقط الساخنة، يُفضَّل استخدام واجهات مساعدات الإعداد +الضيقة بدلًا من الواجهة الأوسع `plugin-sdk/setup` عندما تحتاج فقط إلى جزء من +سطح الإعداد: -| مسار الاستيراد | استخدمه من أجل | الصادرات الأساسية | -| ----------------------------------- | ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `plugin-sdk/setup-runtime` | مساعدات وقت التشغيل الخاصة بالإعداد التي تبقى متاحة في `setupEntry` / بدء القناة المؤجل | `createPatchedAccountSetupAdapter`, `createEnvPatchedAccountSetupAdapter`, `createSetupInputPresenceValidator`, `noteChannelLookupFailure`, `noteChannelLookupSummary`, `promptResolvedAllowFrom`, `splitSetupEntries`, `createAllowlistSetupWizardProxy`, `createDelegatedSetupWizardProxy` | -| `plugin-sdk/setup-adapter-runtime` | محوّلات إعداد الحساب الواعية بالبيئة | `createEnvPatchedAccountSetupAdapter` | -| `plugin-sdk/setup-tools` | مساعدات CLI/التثبيت/الأرشيف/المستندات الخاصة بالإعداد | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` | +| مسار الاستيراد | استخدمه من أجل | التصديرات الأساسية | +| ---------------------------------- | --------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `plugin-sdk/setup-runtime` | مساعدات وقت التشغيل وقت الإعداد التي تبقى متاحة في `setupEntry` / بدء تشغيل القناة المؤجل | `createPatchedAccountSetupAdapter`, `createEnvPatchedAccountSetupAdapter`, `createSetupInputPresenceValidator`, `noteChannelLookupFailure`, `noteChannelLookupSummary`, `promptResolvedAllowFrom`, `splitSetupEntries`, `createAllowlistSetupWizardProxy`, `createDelegatedSetupWizardProxy` | +| `plugin-sdk/setup-adapter-runtime` | محوّلات إعداد الحساب الواعية بالبيئة | `createEnvPatchedAccountSetupAdapter` | +| `plugin-sdk/setup-tools` | مساعدات CLI/الأرشيف/الوثائق الخاصة بالإعداد/التثبيت | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` | -استخدم الواجهة الأوسع `plugin-sdk/setup` عندما تريد صندوق أدوات الإعداد -المشترك الكامل، بما في ذلك مساعدات تصحيح config مثل +استخدم الواجهة الأوسع `plugin-sdk/setup` عندما تريد مجموعة أدوات الإعداد +المشتركة الكاملة، بما في ذلك مساعدات تصحيح التكوين مثل `moveSingleAccountChannelSectionToDefaultAccount(...)`. -وتبقى محولات تصحيح الإعداد آمنة في المسار الساخن عند الاستيراد. ويكون -البحث عن سطح العقد الخاص بترقية الحساب الواحد المجمّع كسولًا، لذلك لا يؤدي استيراد -`plugin-sdk/setup-runtime` إلى تحميل اكتشاف سطح العقد المجمّع مبكرًا قبل استخدام -المحول فعليًا. +تبقى محوّلات تصحيح الإعداد آمنة للاستيراد في المسار الساخن. ويكون بحث سطح عقد +ترقية الحساب الفردي المضمّن كسولًا، لذا فإن استيراد +`plugin-sdk/setup-runtime` لا يحمّل مسبقًا اكتشاف سطح العقد المضمّن قبل +استخدام المحوّل فعليًا. -### ترقية الحساب الواحد المملوكة للقناة +### ترقية الحساب الفردي المملوكة للقناة -عندما تنتقل القناة من config ذي مستوى أعلى لحساب واحد إلى -`channels..accounts.*`، يكون السلوك المشترك الافتراضي هو نقل القيم -التي تقع ضمن نطاق الحساب المرقّى إلى `accounts.default`. +عندما تُرقّي قناة من تكوين علوي لحساب واحد إلى +`channels..accounts.*`، يكون السلوك الافتراضي المشترك هو نقل القيم +المحددة بنطاق الحساب التي جرت ترقيتها إلى `accounts.default`. -يمكن للقنوات المجمعة تضييق هذه الترقية أو تجاوزها عبر سطح عقد الإعداد -الخاص بها: +يمكن للقنوات المضمّنة تضييق هذه الترقية أو تجاوزها عبر سطح عقد الإعداد الخاص +بها: -- `singleAccountKeysToMove`: مفاتيح إضافية ذات مستوى أعلى ينبغي نقلها إلى - الحساب المرقّى -- `namedAccountPromotionKeys`: عندما تكون الحسابات المسماة موجودة بالفعل، لا تُنقل إلا هذه - المفاتيح إلى الحساب المرقّى؛ بينما تبقى مفاتيح السياسة/التسليم المشتركة في - جذر القناة +- `singleAccountKeysToMove`: مفاتيح علوية إضافية يجب نقلها إلى الحساب الذي + جرت ترقيته +- `namedAccountPromotionKeys`: عندما تكون الحسابات المسماة موجودة بالفعل، + تُنقل هذه المفاتيح فقط إلى الحساب الذي جرت ترقيته؛ بينما تبقى مفاتيح + السياسة/التسليم المشتركة في جذر القناة - `resolveSingleAccountPromotionTarget(...)`: اختيار الحساب الموجود الذي - يستقبل القيم المرقّاة + سيتلقى القيم التي جرت ترقيتها -تمثل Matrix المثال المجمّع الحالي. وإذا كان هناك حساب Matrix مسمّى واحد موجود -بالفعل، أو إذا كان `defaultAccount` يشير إلى مفتاح غير قانوني موجود -مثل `Ops`، فإن الترقية تحافظ على ذلك الحساب بدل إنشاء إدخال جديد -`accounts.default`. +تُعد Matrix المثال المضمّن الحالي. إذا كان هناك حساب Matrix مسمّى واحد +بالضبط موجود بالفعل، أو إذا كانت `defaultAccount` تشير إلى مفتاح موجود +غير قياسي مثل `Ops`، فإن الترقية تحافظ على ذلك الحساب بدلًا من إنشاء إدخال +جديد `accounts.default`. -## مخطط config +## مخطط التكوين -يُتحقق من config الإضافة مقابل JSON Schema الموجود في manifest الخاص بك. ويهيّئ المستخدمون -الإضافات عبر: +يُتحقق من صحة تكوين Plugin مقابل JSON Schema الموجود في البيان الخاص بك. يقوم +المستخدمون بتكوين Plugins عبر: ```json5 { @@ -367,9 +375,9 @@ export default defineSetupPluginEntry(myChannelPlugin); } ``` -تتلقى إضافتك هذا config على هيئة `api.pluginConfig` أثناء التسجيل. +يتلقى Plugin الخاص بك هذا التكوين على هيئة `api.pluginConfig` أثناء التسجيل. -أما بالنسبة إلى config الخاص بالقناة، فاستخدم قسم config الخاص بالقناة بدلًا من ذلك: +وبالنسبة إلى التكوين الخاص بالقناة، استخدم قسم تكوين القناة بدلًا من ذلك: ```json5 { @@ -382,10 +390,10 @@ export default defineSetupPluginEntry(myChannelPlugin); } ``` -### بناء مخططات config القنوات +### بناء مخططات تكوين القناة -استخدم `buildChannelConfigSchema` من `openclaw/plugin-sdk/core` لتحويل -مخطط Zod إلى الغلاف `ChannelConfigSchema` الذي يتحقق منه OpenClaw: +استخدم `buildChannelConfigSchema` من `openclaw/plugin-sdk/core` لتحويل مخطط +Zod إلى الغلاف `ChannelConfigSchema` الذي يتحقق OpenClaw من صحته: ```typescript import { z } from "zod"; @@ -403,8 +411,8 @@ const configSchema = buildChannelConfigSchema(accountSchema); ## معالجات الإعداد -يمكن لإضافات القنوات توفير معالجات إعداد تفاعلية لـ `openclaw onboard`. -ويكون المعالج عبارة عن كائن `ChannelSetupWizard` على `ChannelPlugin`: +يمكن لـ Plugins القنوات توفير معالجات إعداد تفاعلية للأمر `openclaw onboard`. +والمعالج هو كائن `ChannelSetupWizard` على `ChannelPlugin`: ```typescript import type { ChannelSetupWizard } from "openclaw/plugin-sdk/channel-setup"; @@ -412,19 +420,19 @@ import type { ChannelSetupWizard } from "openclaw/plugin-sdk/channel-setup"; const setupWizard: ChannelSetupWizard = { channel: "my-channel", status: { - configuredLabel: "متصل", - unconfiguredLabel: "غير مهيأ", + configuredLabel: "Connected", + unconfiguredLabel: "Not configured", resolveConfigured: ({ cfg }) => Boolean((cfg.channels as any)?.["my-channel"]?.token), }, credentials: [ { inputKey: "token", providerHint: "my-channel", - credentialLabel: "token البوت", + credentialLabel: "Bot token", preferredEnvVar: "MY_CHANNEL_BOT_TOKEN", - envPrompt: "هل تريد استخدام MY_CHANNEL_BOT_TOKEN من البيئة؟", - keepPrompt: "هل تريد الاحتفاظ بالـ token الحالي؟", - inputPrompt: "أدخل token البوت:", + envPrompt: "Use MY_CHANNEL_BOT_TOKEN from environment?", + keepPrompt: "Keep current token?", + inputPrompt: "Enter your bot token:", inspect: ({ cfg, accountId }) => { const token = (cfg.channels as any)?.["my-channel"]?.token; return { @@ -437,24 +445,27 @@ const setupWizard: ChannelSetupWizard = { }; ``` -يدعم النوع `ChannelSetupWizard` الحقول `credentials` و`textInputs` و -`dmPolicy` و`allowFrom` و`groupAccess` و`prepare` و`finalize` وغيرها. -راجع حزم الإضافات المجمعة (مثلًا إضافة Discord في `src/channel.setup.ts`) للحصول على +يدعم النوع `ChannelSetupWizard` كلاً من `credentials` و`textInputs` و +`dmPolicy` و`allowFrom` و`groupAccess` و`prepare` و`finalize` وغير ذلك. +راجع حزم Plugins المضمّنة (على سبيل المثال Discord plugin في `src/channel.setup.ts`) للاطلاع على أمثلة كاملة. -بالنسبة إلى مطالبات قائمة السماح في الرسائل المباشرة التي تحتاج فقط إلى التدفق القياسي -`note -> prompt -> parse -> merge -> patch`، فَضّل مساعدات الإعداد -المشتركة من `openclaw/plugin-sdk/setup`: وهي `createPromptParsedAllowFromForAccount(...)`، -و`createTopLevelChannelParsedAllowFromPrompt(...)`، و +بالنسبة إلى مطالبات قائمة السماح للرسائل المباشرة التي تحتاج فقط إلى تدفق +`note -> prompt -> parse -> merge -> patch` القياسي، يُفضَّل استخدام +مساعدات الإعداد المشتركة من `openclaw/plugin-sdk/setup`: +`createPromptParsedAllowFromForAccount(...)`, +`createTopLevelChannelParsedAllowFromPrompt(...)`، و `createNestedChannelParsedAllowFromPrompt(...)`. -أما لكتل حالة إعداد القناة التي تختلف فقط في التسميات، والدرجات، والأسطر -الإضافية الاختيارية، فَضّل `createStandardChannelSetupStatus(...)` من -`openclaw/plugin-sdk/setup` بدل بناء كائن `status` نفسه يدويًا -في كل إضافة. +وبالنسبة إلى كتل حالة إعداد القناة التي تختلف فقط في التسميات والدرجات +والأسطر الإضافية الاختيارية، يُفضَّل استخدام +`createStandardChannelSetupStatus(...)` من +`openclaw/plugin-sdk/setup` بدلًا من إنشاء الكائن `status` نفسه يدويًا في +كل Plugin. -وبالنسبة إلى أسطح الإعداد الاختيارية التي ينبغي أن تظهر فقط في سياقات معينة، استخدم -`createOptionalChannelSetupSurface` من `openclaw/plugin-sdk/channel-setup`: +بالنسبة إلى أسطح الإعداد الاختيارية التي ينبغي أن تظهر فقط في سياقات معينة، +استخدم `createOptionalChannelSetupSurface` من +`openclaw/plugin-sdk/channel-setup`: ```typescript import { createOptionalChannelSetupSurface } from "openclaw/plugin-sdk/channel-setup"; @@ -468,42 +479,43 @@ const setupSurface = createOptionalChannelSetupSurface({ // Returns { setupAdapter, setupWizard } ``` -يكشف `plugin-sdk/channel-setup` أيضًا عن البانيين الأدنى مستوى +يكشف `plugin-sdk/channel-setup` أيضًا عن البنّائين الأدنى مستوى `createOptionalChannelSetupAdapter(...)` و `createOptionalChannelSetupWizard(...)` عندما تحتاج إلى نصف واحد فقط من سطح التثبيت الاختياري هذا. -يفشل المحول/المعالج الاختياريان المولدان بشكل مغلق عند عمليات كتابة config الحقيقية. كما -يعيدان استخدام رسالة واحدة تفيد بأن التثبيت مطلوب عبر `validateInput` و -`applyAccountConfig` و`finalize`، ويُلحقان رابطًا للمستندات عندما يكون `docsPath` -مضبوطًا. +يفشل المحوّل/المعالج الاختياري المُنشأ بشكل آمن عند عمليات كتابة التكوين +الفعلية. ويعيدان استخدام رسالة واحدة تفيد بضرورة التثبيت عبر +`validateInput` و`applyAccountConfig` و`finalize`، ويُلحقان رابط وثائق +عندما يكون `docsPath` مضبوطًا. -أما بالنسبة إلى واجهات إعداد UI المدعومة بملفات تنفيذية، فَضّل المساعدات المشتركة المفوّضة بدل -نسخ نفس منطق الملف التنفيذي/الحالة في كل قناة: +بالنسبة إلى واجهات إعداد المستخدم المدعومة بملفات تنفيذية، يُفضَّل استخدام +المساعدات المشتركة المفوّضة بدلًا من نسخ منطق الربط نفسه الخاص بالملف +التنفيذي/الحالة إلى كل قناة: -- `createDetectedBinaryStatus(...)` لكتل الحالة التي تختلف فقط بحسب التسميات، +- `createDetectedBinaryStatus(...)` لكتل الحالة التي تختلف فقط في التسميات، والتلميحات، والدرجات، واكتشاف الملف التنفيذي -- `createCliPathTextInput(...)` لمدخلات النص المدعومة بالمسار +- `createCliPathTextInput(...)` لإدخالات النص المدعومة بالمسار - `createDelegatedSetupWizardStatusResolvers(...)`، - و`createDelegatedPrepare(...)`، و`createDelegatedFinalize(...)`، و - `createDelegatedResolveConfigured(...)` عندما يحتاج `setupEntry` إلى الإحالة - كسولًا إلى معالج أثقل وكامل + `createDelegatedPrepare(...)`، `createDelegatedFinalize(...)`، و + `createDelegatedResolveConfigured(...)` عندما يحتاج `setupEntry` إلى + التمرير إلى معالج كامل أثقل بشكل كسول - `createDelegatedTextInputShouldPrompt(...)` عندما يحتاج `setupEntry` فقط إلى تفويض قرار `textInputs[*].shouldPrompt` ## النشر والتثبيت -**الإضافات الخارجية:** انشرها على [ClawHub](/ar/tools/clawhub) أو npm، ثم ثبّتها: +**Plugins الخارجية:** انشر إلى [ClawHub](/ar/tools/clawhub) أو npm، ثم ثبّت: ```bash openclaw plugins install @myorg/openclaw-my-plugin ``` -يحاول OpenClaw استخدام ClawHub أولًا ثم يرجع إلى npm تلقائيًا. ويمكنك أيضًا -فرض ClawHub صراحةً: +يجرّب OpenClaw أولًا ClawHub ثم يعود تلقائيًا إلى npm. يمكنك أيضًا +فرض ClawHub صراحة: ```bash -openclaw plugins install clawhub:@myorg/openclaw-my-plugin # ClawHub فقط +openclaw plugins install clawhub:@myorg/openclaw-my-plugin # ClawHub only ``` لا يوجد تجاوز مماثل لـ `npm:`. استخدم مواصفة حزمة npm العادية عندما @@ -513,7 +525,7 @@ openclaw plugins install clawhub:@myorg/openclaw-my-plugin # ClawHub فقط openclaw plugins install @myorg/openclaw-my-plugin ``` -**الإضافات داخل المستودع:** ضعها تحت شجرة مساحة عمل الإضافات المجمعة وسيتم +**Plugins داخل المستودع:** ضعها ضمن شجرة مساحة عمل Plugins المضمّنة وسيتم اكتشافها تلقائيًا أثناء البناء. **يمكن للمستخدمين التثبيت:** @@ -523,13 +535,14 @@ openclaw plugins install ``` - بالنسبة إلى التثبيتات القادمة من npm، يشغّل `openclaw plugins install` - الأمر `npm install --ignore-scripts` (من دون lifecycle scripts). أبقِ شجرة اعتماديات الإضافة - JavaScript/TypeScript خالصة وتجنب الحزم التي تتطلب بناء `postinstall`. + بالنسبة إلى عمليات التثبيت ذات المصدر npm، يقوم `openclaw plugins install` + بتشغيل `npm install --ignore-scripts` (من دون نصوص دورة الحياة). حافظ على + أشجار تبعيات Plugin بلغة JS/TS خالصة وتجنب الحزم التي تتطلب بناء + `postinstall`. ## ذو صلة -- [نقاط إدخال SDK](/ar/plugins/sdk-entrypoints) -- `definePluginEntry` و`defineChannelPluginEntry` -- [Plugin Manifest](/ar/plugins/manifest) -- المرجع الكامل لمخطط manifest -- [بناء الإضافات](/ar/plugins/building-plugins) -- دليل بدء خطوة بخطوة +- [نقاط إدخال SDK](/ar/plugins/sdk-entrypoints) -- `definePluginEntry` و `defineChannelPluginEntry` +- [بيان Plugin](/ar/plugins/manifest) -- المرجع الكامل لمخطط البيان +- [بناء Plugins](/ar/plugins/building-plugins) -- دليل بدء خطوة بخطوة diff --git a/docs/ar/plugins/sdk-testing.md b/docs/ar/plugins/sdk-testing.md index faa818c89..c61a3c146 100644 --- a/docs/ar/plugins/sdk-testing.md +++ b/docs/ar/plugins/sdk-testing.md @@ -1,35 +1,35 @@ --- read_when: - - أنت تكتب اختبارات لـ plugin + - أنت تكتب اختبارات لإضافة Plugin - أنت بحاجة إلى أدوات اختبار من Plugin SDK - - أنت تريد فهم اختبارات العقد الخاصة بالـ plugins المضمّنة + - تريد فهم اختبارات العقد للإضافات المضمنة sidebarTitle: Testing -summary: أدوات وأنماط الاختبار الخاصة بـ Plugins في OpenClaw -title: اختبار Plugins +summary: أدوات الاختبار والأنماط الخاصة بإضافات OpenClaw +title: اختبار الإضافات x-i18n: - generated_at: "2026-04-05T12:52:16Z" + generated_at: "2026-04-15T19:41:39Z" model: gpt-5.4 provider: openai - source_hash: 2e95ed58ed180feadad17bb5138bd09e3b45f1f3ecdff4e2fba4874bb80099fe + source_hash: 2f75bd3f3b5ba34b05786e0dd96d493c36db73a1d258998bf589e27e45c0bd09 source_path: plugins/sdk-testing.md workflow: 15 --- -# اختبار Plugins +# اختبار الإضافات -مرجع لأدوات الاختبار والأنماط وفرض lint الخاصة بـ Plugins في OpenClaw. +مرجع لأدوات الاختبار والأنماط وفرض قواعد lint لإضافات OpenClaw. - **هل تبحث عن أمثلة اختبارات؟** تتضمن الأدلة العملية أمثلة اختبارات جاهزة: - [اختبارات plugin القناة](/plugins/sdk-channel-plugins#step-6-test) و - [اختبارات plugin الموفّر](/plugins/sdk-provider-plugins#step-6-test). + **هل تبحث عن أمثلة للاختبارات؟** تتضمن أدلة الشرح العملية أمثلة اختبار مكتملة: + [اختبارات إضافات القنوات](/ar/plugins/sdk-channel-plugins#step-6-test) و + [اختبارات إضافات المزوّدين](/ar/plugins/sdk-provider-plugins#step-6-test). ## أدوات الاختبار **الاستيراد:** `openclaw/plugin-sdk/testing` -يكشف المسار الفرعي الخاص بالاختبار مجموعة ضيقة من المساعدات لمطوري plugins: +يُصدّر المسار الفرعي الخاص بالاختبار مجموعة محدودة من المساعدات لمؤلفي الإضافات: ```typescript import { @@ -39,17 +39,17 @@ import { } from "openclaw/plugin-sdk/testing"; ``` -### الصادرات المتاحة +### العناصر المصدّرة المتاحة -| التصدير | الغرض | +| العنصر المصدَّر | الغرض | | -------------------------------------- | ------------------------------------------------------ | -| `installCommonResolveTargetErrorCases` | حالات اختبار مشتركة لأخطاء تحليل الهدف | -| `shouldAckReaction` | التحقق مما إذا كانت القناة يجب أن تضيف تفاعل ack | -| `removeAckReactionAfterReply` | إزالة تفاعل ack بعد تسليم الرد | +| `installCommonResolveTargetErrorCases` | حالات اختبار مشتركة لمعالجة أخطاء حل الهدف | +| `shouldAckReaction` | التحقق مما إذا كان يجب على القناة إضافة تفاعل إقرار | +| `removeAckReactionAfterReply` | إزالة تفاعل الإقرار بعد تسليم الرد | ### الأنواع -يعيد المسار الفرعي الخاص بالاختبار أيضًا تصدير أنواع مفيدة داخل ملفات الاختبار: +يعيد المسار الفرعي الخاص بالاختبار أيضًا تصدير أنواع مفيدة في ملفات الاختبار: ```typescript import type { @@ -62,10 +62,9 @@ import type { } from "openclaw/plugin-sdk/testing"; ``` -## اختبار تحليل الأهداف +## اختبار حل الهدف -استخدم `installCommonResolveTargetErrorCases` لإضافة حالات الأخطاء القياسية -لتحليل أهداف القناة: +استخدم `installCommonResolveTargetErrorCases` لإضافة حالات الخطأ القياسية لحل هدف القناة: ```typescript import { describe } from "vitest"; @@ -89,7 +88,7 @@ describe("my-channel target resolution", () => { ## أنماط الاختبار -### اختبار وحدة لـ plugin قناة +### اختبار وحدة لإضافة قناة ```typescript import { describe, it, expect, vi } from "vitest"; @@ -125,7 +124,7 @@ describe("my-channel plugin", () => { }); ``` -### اختبار وحدة لـ plugin موفّر +### اختبار وحدة لإضافة مزوّد ```typescript import { describe, it, expect } from "vitest"; @@ -153,15 +152,18 @@ describe("my-provider plugin", () => { }); ``` -### محاكاة وقت تشغيل plugin +### محاكاة Runtime الخاص بالإضافة -بالنسبة إلى الشيفرة التي تستخدم `createPluginRuntimeStore`، قم بمحاكاة وقت التشغيل في الاختبارات: +بالنسبة إلى الشيفرة التي تستخدم `createPluginRuntimeStore`، قم بمحاكاة runtime في الاختبارات: ```typescript import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store"; import type { PluginRuntime } from "openclaw/plugin-sdk/runtime-store"; -const store = createPluginRuntimeStore("test runtime not set"); +const store = createPluginRuntimeStore({ + pluginId: "test-plugin", + errorMessage: "test runtime not set", +}); // In test setup const mockRuntime = { @@ -182,9 +184,9 @@ store.setRuntime(mockRuntime); store.clearRuntime(); ``` -### الاختبار باستخدام stubs لكل مثيل +### الاختبار باستخدام بدائل على مستوى المثيل -فضّل استخدام stubs لكل مثيل بدلًا من تغيير prototype: +فضّل استخدام البدائل على مستوى المثيل بدلًا من تعديل prototype: ```typescript // Preferred: per-instance stub @@ -195,24 +197,24 @@ client.sendMessage = vi.fn().mockResolvedValue({ id: "msg-1" }); // MyChannelClient.prototype.sendMessage = vi.fn(); ``` -## اختبارات العقد (plugins داخل المستودع) +## اختبارات العقد (الإضافات داخل المستودع) -تحتوي plugins المضمّنة على اختبارات عقد تتحقق من ملكية التسجيل: +تحتوي الإضافات المضمنة على اختبارات عقد تتحقق من ملكية التسجيل: ```bash pnpm test -- src/plugins/contracts/ ``` -تؤكد هذه الاختبارات: +تؤكد هذه الاختبارات ما يلي: -- أي plugins تسجل أي موفّرين -- أي plugins تسجل أي موفري كلام +- أي الإضافات تسجل أي مزوّدين +- أي الإضافات تسجل أي مزوّدي speech - صحة شكل التسجيل -- الامتثال لعقد وقت التشغيل +- الامتثال لعقد Runtime ### تشغيل اختبارات محددة النطاق -بالنسبة إلى plugin محدد: +لإضافة محددة: ```bash pnpm test -- /my-channel/ @@ -226,19 +228,19 @@ pnpm test -- src/plugins/contracts/auth.contract.test.ts pnpm test -- src/plugins/contracts/runtime.contract.test.ts ``` -## فرض lint ‏(plugins داخل المستودع) +## فرض قواعد lint (الإضافات داخل المستودع) -يتم فرض ثلاث قواعد بواسطة `pnpm check` على plugins داخل المستودع: +يتم فرض ثلاث قواعد بواسطة `pnpm check` للإضافات داخل المستودع: -1. **لا استيرادات جذرية ضخمة** -- يتم رفض root barrel ‏`openclaw/plugin-sdk` -2. **لا استيرادات مباشرة من `src/`** -- لا يمكن للـ plugins الاستيراد من `../../src/` مباشرة -3. **لا استيرادات ذاتية** -- لا يمكن للـ plugins استيراد مسارها الفرعي `plugin-sdk/` الخاص بها +1. **عدم استخدام استيرادات الجذر الأحادية** -- يتم رفض الحزمة المجمعة الجذرية `openclaw/plugin-sdk` +2. **عدم استخدام استيرادات `src/` المباشرة** -- لا يمكن للإضافات الاستيراد مباشرة من `../../src/` +3. **عدم استخدام الاستيراد الذاتي** -- لا يمكن للإضافات استيراد مسارها الفرعي `plugin-sdk/` الخاص بها -لا تخضع plugins الخارجية لقواعد lint هذه، لكن يُوصى باتباع الأنماط نفسها. +لا تخضع الإضافات الخارجية لقواعد lint هذه، ولكن يُنصح باتباع الأنماط نفسها. ## إعداد الاختبار -يستخدم OpenClaw أداة Vitest مع حدود تغطية V8. وبالنسبة إلى اختبارات plugins: +يستخدم OpenClaw أداة Vitest مع حدود تغطية V8. بالنسبة لاختبارات الإضافات: ```bash # Run all tests @@ -254,7 +256,7 @@ pnpm test -- /my-channel/ -t "resolves account" pnpm test:coverage ``` -إذا سببت التشغيلات المحلية ضغطًا على الذاكرة: +إذا كانت عمليات التشغيل المحلية تسبب ضغطًا على الذاكرة: ```bash OPENCLAW_VITEST_MAX_WORKERS=1 pnpm test @@ -262,7 +264,7 @@ OPENCLAW_VITEST_MAX_WORKERS=1 pnpm test ## ذو صلة -- [نظرة عامة على SDK](/plugins/sdk-overview) -- اصطلاحات الاستيراد -- [SDK الخاص بـ Plugins القنوات](/plugins/sdk-channel-plugins) -- واجهة plugin القناة -- [SDK الخاص بـ Plugins الموفّر](/plugins/sdk-provider-plugins) -- خطافات plugin الموفّر -- [بناء Plugins](/plugins/building-plugins) -- دليل البدء +- [نظرة عامة على SDK](/ar/plugins/sdk-overview) -- اصطلاحات الاستيراد +- [إضافات قنوات SDK](/ar/plugins/sdk-channel-plugins) -- واجهة إضافة القناة +- [إضافات مزوّدي SDK](/ar/plugins/sdk-provider-plugins) -- خطافات إضافة المزوّد +- [بناء الإضافات](/ar/plugins/building-plugins) -- دليل البدء diff --git a/docs/ar/reference/token-use.md b/docs/ar/reference/token-use.md index 0a96e502c..a9f85cd56 100644 --- a/docs/ar/reference/token-use.md +++ b/docs/ar/reference/token-use.md @@ -1,96 +1,103 @@ --- read_when: - شرح استخدام الرموز أو التكاليف أو نوافذ السياق - - تصحيح نمو السياق أو سلوك الضغط -summary: كيف يبني OpenClaw سياق المطالبة ويبلّغ عن استخدام الرموز والتكاليف + - تصحيح نمو السياق أو سلوك Compaction +summary: كيف يبني OpenClaw سياق الـ prompt ويعرض استخدام الرموز والتكاليف title: استخدام الرموز والتكاليف x-i18n: - generated_at: "2026-04-12T07:16:07Z" + generated_at: "2026-04-15T19:42:07Z" model: gpt-5.4 provider: openai - source_hash: f8c856549cd28b8364a640e6fa9ec26aa736895c7a993e96cbe85838e7df2dfb + source_hash: 9a706d3df8b2ea1136b3535d216c6b358e43aee2a31a4759824385e1345e6fe5 source_path: reference/token-use.md workflow: 15 --- # استخدام الرموز والتكاليف -يتتبع OpenClaw **الرموز** وليس الأحرف. وتختلف الرموز حسب النموذج، لكن معظم -النماذج على نمط OpenAI يبلغ متوسطها نحو 4 أحرف لكل رمز في النص الإنجليزي. +يتتبع OpenClaw **الرموز**، وليس الأحرف. تختلف الرموز حسب النموذج، لكن معظم النماذج بأسلوب OpenAI يكون متوسطها نحو 4 أحرف لكل رمز في النص الإنجليزي. -## كيف تُبنى مطالبة النظام +## كيف يُبنى system prompt -يجمع OpenClaw مطالبة النظام الخاصة به في كل تشغيل. وهي تتضمن: +يقوم OpenClaw بتجميع system prompt الخاص به في كل تشغيل. ويتضمن ما يلي: -- قائمة الأدوات + أوصافًا قصيرة -- قائمة Skills (بيانات وصفية فقط؛ وتُحمَّل التعليمات عند الطلب باستخدام `read`) +- قائمة الأدوات + أوصاف قصيرة +- قائمة Skills (بيانات وصفية فقط؛ تُحمَّل التعليمات عند الطلب باستخدام `read`). + تكون كتلة Skills المضغوطة محدودة بواسطة `skills.limits.maxSkillsPromptChars`، + مع إمكانية التجاوز لكل وكيل بشكل اختياري عند + `agents.list[].skillsLimits.maxSkillsPromptChars`. - تعليمات التحديث الذاتي -- مساحة العمل + ملفات التهيئة الأولية (`AGENTS.md` و`SOUL.md` و`TOOLS.md` و`IDENTITY.md` و`USER.md` و`HEARTBEAT.md` و`BOOTSTRAP.md` عند الجديد، بالإضافة إلى `MEMORY.md` عند وجوده أو `memory.md` كبديل بأحرف صغيرة). تُقتطع الملفات الكبيرة بواسطة `agents.defaults.bootstrapMaxChars` (الافتراضي: 20000)، ويُحدد حد أعلى لإجمالي حقن التهيئة الأولية بواسطة `agents.defaults.bootstrapTotalMaxChars` (الافتراضي: 150000). ولا تُعد ملفات `memory/*.md` اليومية جزءًا من مطالبة التهيئة الأولية العادية؛ بل تظل عند الطلب عبر أدوات الذاكرة في الأدوار العادية، لكن يمكن لأوامر `/new` و`/reset` المجردة أن تسبقها بكتلة سياق بدء لمرة واحدة تتضمن الذاكرة اليومية الحديثة لذلك الدور الأول. ويُتحكم في تمهيد البدء هذا بواسطة `agents.defaults.startupContext`. +- ملفات مساحة العمل + ملفات bootstrap (`AGENTS.md` و`SOUL.md` و`TOOLS.md` و`IDENTITY.md` و`USER.md` و`HEARTBEAT.md` و`BOOTSTRAP.md` عند كونها جديدة، بالإضافة إلى `MEMORY.md` عند وجوده أو `memory.md` كبديل بأحرف صغيرة). تُقتطع الملفات الكبيرة بواسطة `agents.defaults.bootstrapMaxChars` (الافتراضي: 12000)، ويكون الحد الأقصى الإجمالي لحقن bootstrap هو `agents.defaults.bootstrapTotalMaxChars` (الافتراضي: 60000). لا تُعد ملفات `memory/*.md` اليومية جزءًا من prompt bootstrap العادي؛ بل تبقى عند الطلب عبر أدوات الذاكرة في الأدوار العادية، لكن يمكن لأوامر `/new` و`/reset` المجردة إلحاق كتلة سياق بدء تشغيل لمرة واحدة تحتوي على الذاكرة اليومية الحديثة لذلك الدور الأول. ويتم التحكم في هذه المقدمة الابتدائية بواسطة `agents.defaults.startupContext`. - الوقت (UTC + المنطقة الزمنية للمستخدم) -- وسوم الرد + سلوك نبضات القلب -- بيانات وصفية لوقت التشغيل (المضيف/نظام التشغيل/النموذج/التفكير) +- وسوم الرد + سلوك Heartbeat +- بيانات Runtime الوصفية (المضيف/نظام التشغيل/النموذج/التفكير) -راجع التفصيل الكامل في [مطالبة النظام](/ar/concepts/system-prompt). +راجع التفصيل الكامل في [System Prompt](/ar/concepts/system-prompt). ## ما الذي يُحتسب ضمن نافذة السياق كل ما يتلقاه النموذج يُحتسب ضمن حد السياق: -- مطالبة النظام (كل الأقسام المذكورة أعلاه) -- سجل المحادثة (رسائل المستخدم + المساعد) -- استدعاءات الأدوات ونتائج الأدوات +- system prompt (جميع الأقسام المذكورة أعلاه) +- محفوظات المحادثة (رسائل المستخدم + المساعد) +- استدعاءات الأدوات ونتائجها - المرفقات/التفريغات (الصور والصوت والملفات) -- ملخصات الضغط وآثار التقليم -- أغلفة الموفر أو ترويسات السلامة (غير مرئية، لكنها ما تزال تُحتسب) +- ملخصات Compaction وعناصر التقليم +- أغلفة المزوّد أو ترويسات الأمان (غير مرئية، لكنها ما تزال محتسبة) -بالنسبة إلى الصور، يقوم OpenClaw بتصغير حمولات صور التفريغ/الأدوات قبل -استدعاءات الموفر. +لبعض الأسطح الثقيلة وقت التشغيل حدود صريحة خاصة بها: + +- `agents.defaults.contextLimits.memoryGetMaxChars` +- `agents.defaults.contextLimits.memoryGetDefaultLines` +- `agents.defaults.contextLimits.toolResultMaxChars` +- `agents.defaults.contextLimits.postCompactionMaxChars` + +توجد التجاوزات الخاصة بكل وكيل تحت `agents.list[].contextLimits`. هذه المفاتيح +مخصصة للمقتطفات المحدودة وقت التشغيل والكتل المحقونة المملوكة لوقت التشغيل. وهي +منفصلة عن حدود bootstrap، وحدود سياق بدء التشغيل، وحدود prompt الخاصة بـ Skills. + +بالنسبة للصور، يقوم OpenClaw بتصغير أحجام حمولات صور التفريغ/الأدوات قبل استدعاءات المزوّد. استخدم `agents.defaults.imageMaxDimensionPx` (الافتراضي: `1200`) لضبط ذلك: -- تؤدي القيم الأقل عادةً إلى تقليل استخدام رموز الرؤية وحجم الحمولة. -- وتحافظ القيم الأعلى على مزيد من التفاصيل البصرية للصور الثقيلة على OCR/واجهات المستخدم. +- القيم الأقل تقلل عادةً استخدام رموز الرؤية وحجم الحمولة. +- القيم الأعلى تحافظ على مزيد من التفاصيل البصرية لعمليات OCR ولقطات الشاشة الثقيلة بواجهات المستخدم. -للحصول على تفصيل عملي (لكل ملف محقون، والأدوات، وSkills، وحجم مطالبة النظام)، استخدم `/context list` أو `/context detail`. راجع [السياق](/ar/concepts/context). +للحصول على تفصيل عملي (لكل ملف محقون، والأدوات، وSkills، وحجم system prompt)، استخدم `/context list` أو `/context detail`. راجع [Context](/ar/concepts/context). ## كيفية رؤية استخدام الرموز الحالي استخدم ما يلي في الدردشة: -- `/status` ← **بطاقة حالة غنية بالرموز التعبيرية** تتضمن نموذج الجلسة، واستخدام السياق، - ورموز الإدخال/الإخراج لآخر استجابة، و**التكلفة التقديرية** (مفتاح API فقط). -- `/usage off|tokens|full` ← يضيف **تذييل استخدام لكل استجابة** إلى كل رد. - - يستمر لكل جلسة (ويُخزَّن باسم `responseUsage`). - - مصادقة OAuth **تخفي التكلفة** (الرموز فقط). -- `/usage cost` ← يعرض ملخصًا محليًا للتكلفة من سجلات جلسات OpenClaw. +- `/status` ← **بطاقة حالة غنية بالرموز التعبيرية** تعرض نموذج الجلسة، واستخدام السياق، + ورموز الإدخال/الإخراج لآخر استجابة، و**التكلفة التقديرية** (عند استخدام مفتاح API فقط). +- `/usage off|tokens|full` ← يُلحق **تذييل استخدام لكل استجابة** بكل رد. + - يُحفَظ لكل جلسة (ويُخزَّن باعتباره `responseUsage`). + - تخفي مصادقة OAuth **التكلفة** (الرموز فقط). +- `/usage cost` ← يعرض ملخص تكلفة محليًا من سجلات جلسة OpenClaw. -واجهات أخرى: +أسطح أخرى: -- **TUI/Web TUI:** يدعمان `/status` و`/usage`. +- **TUI/Web TUI:** يتم دعم `/status` و`/usage`. - **CLI:** يعرض `openclaw status --usage` و`openclaw channels list` - نوافذ حصة الموفر الموحدة (`X% left`، وليس تكاليف لكل استجابة). - موفرو نافذة الاستخدام الحاليون: Anthropic وGitHub Copilot وGemini CLI + نوافذ حصص المزوّد الموحّدة (`X% left`، وليس التكاليف لكل استجابة). + مزوّدو نوافذ الاستخدام الحاليون: Anthropic وGitHub Copilot وGemini CLI وOpenAI Codex وMiniMax وXiaomi وz.ai. -تُوحد واجهات الاستخدام الأسماء المستعارة الشائعة الأصلية من الموفر قبل العرض. -وبالنسبة إلى حركة Responses من عائلة OpenAI، يشمل ذلك كلًا من `input_tokens` / -`output_tokens` و`prompt_tokens` / `completion_tokens`، بحيث لا تؤدي أسماء -الحقول الخاصة بالنقل إلى تغيير `/status` أو `/usage` أو ملخصات الجلسات. -كما يُوحد استخدام JSON الخاص بـ Gemini CLI أيضًا: يأتي نص الرد من `response`، -وتُحوَّل `stats.cached` إلى `cacheRead` مع استخدام `stats.input_tokens - stats.cached` -عندما يهمل CLI حقل `stats.input` الصريح. -وبالنسبة إلى حركة Responses الأصلية من عائلة OpenAI، تُوحَّد الأسماء المستعارة -لاستخدام WebSocket/SSE بالطريقة نفسها، وتعود المجاميع إلى الإدخال + الإخراج -الموحَّدين عندما يكون `total_tokens` مفقودًا أو يساوي `0`. -وعندما تكون لقطة الجلسة الحالية متناثرة، يمكن لـ `/status` و`session_status` -أيضًا استعادة عدادات الرموز/التخزين المؤقت ووسم نموذج وقت التشغيل النشط من -أحدث سجل استخدام في التفريغ. وتظل القيم الحية غير الصفرية الموجودة لها -الأولوية على القيم الاحتياطية من التفريغ، ويمكن أن تفوز مجاميع التفريغ الأكبر -الموجهة للمطالبة عندما تكون المجاميع المخزنة مفقودة أو أصغر. -وتأتي مصادقة الاستخدام الخاصة بنوافذ حصة الموفر من خطافات خاصة بالموفر عند -توفرها؛ وإلا يعود OpenClaw إلى مطابقة بيانات اعتماد OAuth/مفتاح API من ملفات -المصادقة أو البيئة أو الإعدادات. +تقوم أسطح الاستخدام بتوحيد الأسماء البديلة الشائعة الأصلية للمزوّد قبل العرض. +وبالنسبة لحركة Responses من عائلة OpenAI، يشمل ذلك كلاً من `input_tokens` / +`output_tokens` و`prompt_tokens` / `completion_tokens`، بحيث لا تؤدي +أسماء الحقول الخاصة بالنقل إلى تغيير `/status` أو `/usage` أو ملخصات الجلسات. +كما يتم أيضًا توحيد استخدام JSON الخاص بـ Gemini CLI: يأتي نص الرد من `response`، +ويُطابِق `stats.cached` إلى `cacheRead` مع استخدام `stats.input_tokens - stats.cached` +عندما تحذف CLI الحقل الصريح `stats.input`. +وبالنسبة لحركة Responses الأصلية من عائلة OpenAI، يتم توحيد الأسماء البديلة للاستخدام في WebSocket/SSE بالطريقة نفسها، وتعود المجاميع إلى الإدخال + الإخراج الموحّدين عندما يكون +`total_tokens` مفقودًا أو يساوي `0`. +وعندما تكون لقطة الجلسة الحالية متناثرة، يمكن أيضًا لـ `/status` و`session_status` +استعادة عدادات الرموز/الذاكرة المؤقتة ووسم نموذج Runtime النشط من أحدث سجل استخدام في التفريغ. +وتبقى القيم الحية غير الصفرية الموجودة مسبقًا ذات أولوية على قيم الرجوع إلى التفريغ، ويمكن أن تفوز المجاميع الأكبر المرتبطة بـ prompt في التفريغ عندما تكون المجاميع المخزنة مفقودة أو أصغر. +تأتي مصادقة الاستخدام الخاصة بنوافذ حصص المزوّد من الخطافات الخاصة بالمزوّد عند توفرها؛ وإلا يعود OpenClaw إلى مطابقة بيانات اعتماد OAuth/مفتاح API من ملفات تعريف المصادقة أو البيئة أو الإعدادات. -## تقدير التكلفة (عند عرضه) +## تقدير التكلفة (عند العرض) تُقدَّر التكاليف من إعدادات تسعير النموذج لديك: @@ -98,38 +105,26 @@ x-i18n: models.providers..models[].cost ``` -وهذه هي **دولارات أمريكية لكل مليون رمز** لكل من `input` و`output` و`cacheRead` و -`cacheWrite`. وإذا كانت التسعيرة مفقودة، فسيعرض OpenClaw الرموز فقط. كما أن -رموز OAuth لا تعرض التكلفة بالدولار مطلقًا. +وهذه القيم هي **بالدولار الأمريكي لكل مليون رمز** لكل من `input` و`output` و`cacheRead` و`cacheWrite`. وإذا كانت التسعيرة مفقودة، فسيعرض OpenClaw الرموز فقط. لا تعرض رموز OAuth تكلفة بالدولار مطلقًا. -## تأثير TTL للتخزين المؤقت والتقليم +## تأثير TTL الخاص بالذاكرة المؤقتة والتقليم -لا ينطبق التخزين المؤقت لمطالبة الموفر إلا ضمن نافذة TTL الخاصة بالتخزين -المؤقت. ويمكن لـ OpenClaw اختياريًا تشغيل **تقليم cache-ttl**: إذ يقلّم -الجلسة بمجرد انتهاء TTL للتخزين المؤقت، ثم يعيد تعيين نافذة التخزين المؤقت -بحيث يمكن للطلبات اللاحقة إعادة استخدام السياق المُخزَّن مؤخرًا بدلًا من -إعادة تخزين السجل الكامل مؤقتًا. ويساعد ذلك على إبقاء تكاليف كتابة التخزين -المؤقت أقل عندما تبقى الجلسة خاملة بعد TTL. +لا ينطبق التخزين المؤقت لـ prompt الخاص بالمزوّد إلا ضمن نافذة TTL الخاصة بالذاكرة المؤقتة. يمكن لـ OpenClaw اختياريًا تشغيل **تقليم cache-ttl**: حيث يقوم بتقليم الجلسة بمجرد انتهاء TTL الخاص بالذاكرة المؤقتة، ثم يعيد ضبط نافذة الذاكرة المؤقتة حتى تتمكن الطلبات اللاحقة من إعادة استخدام السياق المُخزَّن حديثًا بدلًا من إعادة تخزين المحفوظات الكاملة مؤقتًا. وهذا يُبقي تكاليف كتابة الذاكرة المؤقتة أقل عندما تبقى الجلسة خاملة بعد TTL. -اضبط ذلك في [إعدادات Gateway](/ar/gateway/configuration) وراجع تفاصيل السلوك في -[تقليم الجلسة](/ar/concepts/session-pruning). +قم بإعداده في [إعداد Gateway](/ar/gateway/configuration) وراجع تفاصيل السلوك في [تقليم الجلسة](/ar/concepts/session-pruning). -يمكن لنبضات القلب إبقاء التخزين المؤقت **دافئًا** عبر فجوات الخمول. فإذا كان -TTL للتخزين المؤقت في نموذجك هو `1h`، فإن ضبط فترة نبضات القلب إلى أقل قليلًا -من ذلك (مثلًا `55m`) يمكن أن يتجنب إعادة تخزين المطالبة الكاملة مؤقتًا، مما -يقلل تكاليف كتابة التخزين المؤقت. +يمكن لـ Heartbeat إبقاء الذاكرة المؤقتة **دافئة** خلال فترات الخمول. إذا كان TTL لذاكرة النموذج المؤقتة لديك هو `1h`، فإن ضبط فاصل Heartbeat إلى ما دون ذلك بقليل (مثل `55m`) يمكن أن يتجنب إعادة تخزين prompt الكامل مؤقتًا، مما يقلل تكاليف كتابة الذاكرة المؤقتة. -في إعدادات الوكلاء المتعددين، يمكنك الاحتفاظ بإعداد نموذج مشترك واحد وضبط سلوك -التخزين المؤقت لكل وكيل عبر `agents.list[].params.cacheRetention`. +في إعدادات الوكلاء المتعددين، يمكنك الاحتفاظ بإعداد نموذج مشترك واحد وضبط سلوك الذاكرة المؤقتة +لكل وكيل عبر `agents.list[].params.cacheRetention`. -وللحصول على دليل كامل لكل خيار على حدة، راجع [التخزين المؤقت للمطالبة](/ar/reference/prompt-caching). +للحصول على دليل كامل لكل مفتاح إعداد على حدة، راجع [Prompt Caching](/ar/reference/prompt-caching). -بالنسبة إلى تسعير Anthropic API، تكون قراءات التخزين المؤقت أرخص بكثير من -رموز الإدخال، بينما تُفوتر كتابات التخزين المؤقت بمعامل أعلى. راجع تسعير -التخزين المؤقت للمطالبة لدى Anthropic للاطلاع على أحدث الأسعار ومعاملات TTL: +بالنسبة إلى تسعير Anthropic API، تكون قراءات الذاكرة المؤقتة أرخص بكثير من +رموز الإدخال، بينما تُفوتر كتابات الذاكرة المؤقتة بمعامل أعلى. راجع تسعير التخزين المؤقت لـ prompt الخاص بـ Anthropic لأحدث الأسعار ومعاملات TTL: [https://docs.anthropic.com/docs/build-with-claude/prompt-caching](https://docs.anthropic.com/docs/build-with-claude/prompt-caching) -### مثال: إبقاء التخزين المؤقت لمدة 1h دافئًا باستخدام نبضات القلب +### مثال: إبقاء ذاكرة مؤقتة لمدة 1h دافئة باستخدام Heartbeat ```yaml agents: @@ -144,7 +139,7 @@ agents: every: "55m" ``` -### مثال: حركة مختلطة مع استراتيجية تخزين مؤقت لكل وكيل +### مثال: حركة مختلطة مع استراتيجية ذاكرة مؤقتة لكل وكيل ```yaml agents: @@ -154,25 +149,24 @@ agents: models: "anthropic/claude-opus-4-6": params: - cacheRetention: "long" # خط أساس افتراضي لمعظم الوكلاء + cacheRetention: "long" # baseline الافتراضي لمعظم الوكلاء list: - id: "research" default: true heartbeat: - every: "55m" # إبقاء التخزين المؤقت الطويل دافئًا للجلسات العميقة + every: "55m" # إبقاء الذاكرة المؤقتة الطويلة دافئة للجلسات العميقة - id: "alerts" params: - cacheRetention: "none" # تجنب كتابات التخزين المؤقت للإشعارات المتدفقة + cacheRetention: "none" # تجنب كتابات الذاكرة المؤقتة للإشعارات المتدفقة ``` -يُدمج `agents.list[].params` فوق `params` الخاصة بالنموذج المحدد، لذا يمكنك -تجاوز `cacheRetention` فقط مع إبقاء إعدادات النموذج الافتراضية الأخرى كما هي. +يُدمَج `agents.list[].params` فوق `params` الخاص بالنموذج المحدد، بحيث يمكنك +تجاوز `cacheRetention` فقط مع إبقاء بقية إعدادات النموذج الافتراضية كما هي. -### مثال: تمكين ترويسة Anthropic 1M context التجريبية +### مثال: تفعيل ترويسة Anthropic التجريبية لسياق 1M -إن نافذة السياق 1M لدى Anthropic تخضع حاليًا لبوابة تجريبية. ويمكن لـ OpenClaw -حقن قيمة `anthropic-beta` المطلوبة عندما تمكّن `context1m` على نماذج Opus أو -Sonnet المدعومة. +تكون نافذة السياق 1M من Anthropic حاليًا خلف بوابة تجريبية. يمكن لـ OpenClaw حقن قيمة `anthropic-beta` المطلوبة عند تفعيل `context1m` على نماذج Opus +أو Sonnet المدعومة. ```yaml agents: @@ -185,21 +179,21 @@ agents: يُطابِق هذا ترويسة Anthropic التجريبية `context-1m-2025-08-07`. -ولا ينطبق هذا إلا عندما يكون `context1m: true` مضبوطًا على مُدخل ذلك النموذج. +ولا ينطبق هذا إلا عندما تكون `context1m: true` مضبوطة على إدخال ذلك النموذج. -المتطلب: يجب أن تكون بيانات الاعتماد مؤهلة لاستخدام السياق الطويل. وإذا لم -تكن كذلك، فستستجيب Anthropic بخطأ حد معدل من جهة الموفر لذلك الطلب. +المتطلب: يجب أن تكون بيانات الاعتماد مؤهلة لاستخدام السياق الطويل. وإذا لم تكن كذلك، +فإن Anthropic تستجيب بخطأ تحديد معدل من جهة المزوّد لذلك الطلب. -إذا قمت بمصادقة Anthropic باستخدام رموز OAuth/الاشتراك (`sk-ant-oat-*`)، -فسيتخطى OpenClaw الترويسة التجريبية `context-1m-*` لأن Anthropic ترفض حاليًا -هذا الجمع بخطأ HTTP 401. +إذا كنت تصادق Anthropic باستخدام رموز OAuth/الاشتراك (`sk-ant-oat-*`)، +فإن OpenClaw يتخطى الترويسة التجريبية `context-1m-*` لأن Anthropic ترفض حاليًا +هذا الجمع باستخدام HTTP 401. ## نصائح لتقليل ضغط الرموز - استخدم `/compact` لتلخيص الجلسات الطويلة. -- قلّص مخرجات الأدوات الكبيرة في مسارات عملك. -- اخفض `agents.defaults.imageMaxDimensionPx` للجلسات التي تكثر فيها لقطات الشاشة. -- أبقِ أوصاف Skills قصيرة (إذ تُحقن قائمة Skills في المطالبة). -- فضّل النماذج الأصغر للأعمال الاستكشافية المطولة. +- قلّص مخرجات الأدوات الكبيرة في تدفقات العمل لديك. +- اخفض `agents.defaults.imageMaxDimensionPx` للجلسات التي تعتمد بكثرة على لقطات الشاشة. +- اجعل أوصاف Skills قصيرة (يتم حقن قائمة Skills في prompt). +- فضّل النماذج الأصغر للأعمال الاستكشافية المطوّلة. -راجع [Skills](/ar/tools/skills) للاطلاع على الصيغة الدقيقة لعبء قائمة Skills. +راجع [Skills](/ar/tools/skills) للاطلاع على الصيغة الدقيقة لحساب الحمل الإضافي لقائمة Skills.