Skip to main content
مرجع لتحزيم Plugin (بيانات package.json الوصفية)، والبيانات التعريفية (openclaw.plugin.json)، ومداخل الإعداد، ومخططات الإعدادات.
هل تبحث عن شرح تفصيلي؟ تغطي الأدلة الإرشادية التحزيم ضمن سياقه: Plugins القنوات وPlugins موفّري الخدمة.

البيانات الوصفية للحزمة

يحتاج ملف package.json إلى حقل openclaw يوضّح لنظام Plugins ما يوفّره Plugin الخاص بك:
يتطلب النشر الخارجي على ClawHub الحقلين compat وbuild. توجد مقتطفات النشر القياسية في docs/snippets/plugin-publish/.

حقول openclaw

string[]
ملفات نقاط الدخول (بالنسبة إلى جذر الحزمة). مداخل مصدر صالحة للتطوير ضمن مساحة العمل ونسخ git المستخرجة.
string[]
نظائر JavaScript المبنية للحقل extensions، ويُفضّل استخدامها عندما يحمّل OpenClaw حزمة npm مثبّتة. راجع نقاط دخول SDK لمعرفة ترتيب تحليل المصدر/الناتج المبني.
string
مدخل خفيف مخصّص للإعداد فقط (اختياري).
string
نظير JavaScript المبني للحقل setupEntry. يتطلب ضبط setupEntry أيضًا.
object
هوية Plugin الاحتياطية { id, label }، وتُستخدم عندما لا يحتوي Plugin على بيانات وصفية لقناة أو موفّر خدمة يمكن اشتقاق معرّف أو تسمية منها.
object
بيانات وصفية لفهرس القنوات لواجهات الإعداد والاختيار والبدء السريع والحالة.
object
تلميحات التثبيت: npmSpec، وlocalPath، وdefaultChoice، وminHostVersion، وexpectedIntegrity، وallowInvalidConfigRecovery، وrequiredPlatformPackages.
object
علامات سلوك بدء التشغيل.
object
نطاق إصدار pluginApi الذي يدعمه Plugin هذا. مطلوب للنشر الخارجي على ClawHub.
معرّفات موفّري الخدمة (providers: string[]) هي بيانات وصفية للبيان التعريفي، وليست بيانات وصفية للحزمة. صرّح بها في openclaw.plugin.json، وليس هنا — راجع بيان Plugin التعريفي.

openclaw.channel

يمثّل openclaw.channel بيانات وصفية خفيفة للحزمة، تُستخدم لاكتشاف القنوات وواجهات الإعداد قبل تحميل بيئة التشغيل. مثال:
يدعم exposure ما يلي:
  • configured: تضمين القناة في واجهات القوائم المضبوطة/المشابهة للحالة
  • setup: تضمين القناة في منتقيات الإعداد/الضبط التفاعلية
  • docs: الإشارة إلى أن القناة موجّهة للجمهور في واجهات التوثيق/التنقل
يظل showConfigured وshowInSetup مدعومين كأسماء بديلة قديمة. يُفضّل استخدام exposure.

openclaw.install

يمثّل openclaw.install بيانات وصفية للحزمة، وليس للبيان التعريفي.
تستخدم التهيئة الأولية التفاعلية openclaw.install لواجهات التثبيت عند الطلب: إذا كان Plugin الخاص بك يعرض خيارات مصادقة موفّر الخدمة أو بيانات إعداد/فهرس القنوات قبل تحميل بيئة التشغيل، فيمكن للتهيئة الأولية مطالبة المستخدم بالتثبيت من ClawHub أو npm أو محليًا، ثم تثبيت Plugin أو تمكينه، ثم متابعة المسار المحدد. تستخدم خيارات ClawHub الحقل clawhubSpec وتُفضّل عند وجوده؛ وتتطلب خيارات npm بيانات وصفية موثوقة للفهرس تتضمن npmSpec من السجل (الإصدارات الدقيقة وexpectedIntegrity قيود اختيارية، ويُفرض تطبيقها عند التثبيت/التحديث عند ضبطها). احتفظ بتفاصيل «ما يجب عرضه» في openclaw.plugin.json و«كيفية تثبيته» في package.json.
إذا ضُبط minHostVersion، فسيُفرض عند التثبيت وعند تحميل سجل البيانات التعريفية غير المضمّنة. تتخطى المضيفات الأقدم Plugins الخارجية، وتُرفض سلاسل الإصدارات غير الصالحة. يُفترض أن Plugins المصدر المضمّنة تستخدم الإصدار نفسه لنسخة المضيف المستخرجة.
بالنسبة إلى تثبيتات npm المثبّتة الإصدار، احتفظ بالإصدار الدقيق في npmSpec وأضف سلامة العنصر البرمجي المتوقعة:
لا يمثّل allowInvalidConfigRecovery تجاوزًا عامًا للإعدادات المعطّلة. فهو مخصّص فقط للتعافي المحدود لـ Plugin مضمّن، إذ يسمح لإعادة التثبيت/الإعداد بإصلاح بقايا معروفة من الترقيات، مثل فقدان مسار Plugin مضمّن أو وجود إدخال channels.<id> قديم لـ Plugin نفسه. إذا كانت الإعدادات معطّلة لأسباب غير مرتبطة، فسيظل التثبيت يفشل وفق نهج الإغلاق الآمن، ويطلب من المشغّل تشغيل openclaw doctor --fix.

تأجيل التحميل الكامل

يمكن لـ Plugins القنوات الاشتراك في التحميل المؤجّل باستخدام:
عند تمكينه، يحمّل OpenClaw الحقل setupEntry فقط خلال مرحلة بدء التشغيل السابقة للاستماع، حتى للقنوات المضبوطة مسبقًا. ويُحمّل المدخل الكامل بعد أن يبدأ Gateway الاستماع.
لا تمكّن التحميل المؤجّل إلا عندما يسجّل setupEntry كل ما يحتاجه Gateway قبل أن يبدأ الاستماع (تسجيل القناة، ومسارات HTTP، وأساليب Gateway). إذا كان المدخل الكامل يملك إمكانات بدء تشغيل مطلوبة، فاحتفظ بالسلوك الافتراضي.
إذا كان مدخل الإعداد/المدخل الكامل يسجّل أساليب RPC في Gateway، فاحتفظ بها ضمن بادئة خاصة بـ Plugin. تظل نطاقات إدارة النواة المحجوزة (config.*، وexec.approvals.*، وwizard.*، وupdate.*) مملوكة للنواة، وتُطبّع دائمًا إلى operator.admin.

بيان Plugin التعريفي

يجب أن يوفّر كل Plugin أصلي ملف openclaw.plugin.json في جذر الحزمة. يستخدم OpenClaw هذا الملف للتحقق من صحة الإعدادات دون تنفيذ شيفرة Plugin.
بالنسبة إلى Plugins القنوات، أضف channels (وتضيف Plugins المزوّدات providers):
حتى Plugins التي لا تحتوي على إعدادات يجب أن توفّر مخططًا. المخطط الفارغ صالح:
راجع بيان Plugin للاطلاع على مرجع المخطط الكامل.

النشر على ClawHub

تستخدم حزم Skills وPlugins أوامر نشر منفصلة في ClawHub. بالنسبة إلى حزم Plugins، استخدم الأمر الخاص بالحزم:
الأمر clawhub skill publish <path> مختلف ومخصّص لنشر مجلد Skill، وليس حزمة Plugin. راجع النشر على ClawHub.

مدخل الإعداد

يُعد setup-entry.ts بديلًا خفيفًا لـ index.ts، ويحمّله OpenClaw عندما يحتاج فقط إلى واجهات الإعداد (التهيئة الأولية، وإصلاح الإعدادات، وفحص القنوات المعطّلة):
يؤدي ذلك إلى تجنّب تحميل شيفرة وقت التشغيل الثقيلة (مكتبات التشفير، وتسجيلات CLI، وخدمات الخلفية) أثناء تدفقات الإعداد. يمكن لقنوات مساحة العمل المضمّنة التي تحتفظ بصادرات آمنة للإعداد في وحدات جانبية استخدام defineBundledChannelSetupEntry(...) من openclaw/plugin-sdk/channel-entry-contract بدلًا من defineSetupPluginEntry(...). يدعم هذا العقد المضمّن أيضًا تصدير runtime اختياريًا، بحيث تظل توصيلات وقت التشغيل في أثناء الإعداد خفيفة وصريحة.
  • تكون القناة معطّلة، لكنها تحتاج إلى واجهات الإعداد أو التهيئة الأولية.
  • تكون القناة مفعّلة، لكنها غير مضبوطة.
  • يكون التحميل المؤجّل مفعّلًا (deferConfiguredChannelFullLoadUntilAfterListen).
  • كائن Plugin القناة (عبر defineSetupPluginEntry).
  • أي مسارات HTTP مطلوبة قبل بدء Gateway الاستماع.
  • أي أساليب Gateway مطلوبة أثناء بدء التشغيل.
يجب أن تظل أساليب Gateway الخاصة ببدء التشغيل هذه متجنّبة لمساحات أسماء الإدارة الأساسية المحجوزة، مثل config.* أو update.*.
  • تسجيلات CLI.
  • خدمات الخلفية.
  • استيرادات وقت التشغيل الثقيلة (التشفير، وحِزم SDK).
  • أساليب Gateway التي لا تكون مطلوبة إلا بعد بدء التشغيل.

استيرادات مساعد الإعداد المحدودة

بالنسبة إلى المسارات السريعة الخاصة بالإعداد فقط، فضّل واجهات مساعد الإعداد المحدودة على الواجهة الشاملة الأوسع plugin-sdk/setup عندما لا تحتاج إلا إلى جزء من واجهة الإعداد: استخدم الواجهة الأوسع plugin-sdk/setup عندما تريد مجموعة أدوات الإعداد المشتركة الكاملة، بما في ذلك مساعدات تصحيح الإعدادات مثل moveSingleAccountChannelSectionToDefaultAccount(...). استخدم createSetupTranslator(...) للنصوص الثابتة في معالج الإعداد. فهو يتبع لغة معالج CLI (OPENCLAW_LOCALE، ثم متغيرات لغة النظام)، ويعود إلى الإنجليزية عند التعذّر. احتفظ بنصوص الإعداد الخاصة بكل Plugin داخل الشيفرة التي يملكها ذلك Plugin، واستخدم مفاتيح الكتالوج المشتركة فقط لتسميات الإعداد العامة، ونصوص الحالة، ونصوص إعداد Plugins الرسمية المضمّنة. تظل محوّلات تصحيح الإعداد آمنة عند استيرادها في المسار السريع. ويكون البحث في واجهة عقد ترقية الحساب الفردي المضمّنة كسولًا، لذا لا يؤدي استيراد plugin-sdk/setup-runtime إلى تحميل اكتشاف واجهة العقد المضمّنة مسبقًا قبل استخدام المحوّل فعليًا.

ترقية الحساب الفردي المملوكة للقناة

عندما تنتقل قناة من إعداد علوي لحساب فردي إلى channels.<id>.accounts.*، ينقل السلوك المشترك الافتراضي القيم المرقّاة الخاصة بالحساب إلى accounts.default. يمكن للقنوات المضمّنة تضييق نطاق هذه الترقية أو تجاوزها عبر واجهة عقد الإعداد الخاصة بها:
  • singleAccountKeysToMove: مفاتيح علوية إضافية يجب نقلها إلى الحساب المرقّى
  • namedAccountPromotionKeys: عندما تكون الحسابات المسماة موجودة بالفعل، تُنقل هذه المفاتيح فقط إلى الحساب المرقّى؛ وتبقى مفاتيح السياسة والتسليم المشتركة في جذر القناة
  • resolveSingleAccountPromotionTarget(...): اختيار الحساب الموجود الذي يتلقى القيم المرقّاة
يُعد Matrix المثال المضمّن الحالي. إذا كان هناك حساب Matrix مسمى واحد بالضبط، أو إذا كان defaultAccount يشير إلى مفتاح موجود غير قياسي مثل Ops، فستحافظ الترقية على ذلك الحساب بدلًا من إنشاء إدخال accounts.default جديد.

مخطط الإعدادات

يُتحقق من صحة إعدادات Plugin وفق JSON Schema الموجود في البيان. يضبط المستخدمون Plugins عبر:
يتلقى Plugin هذه الإعدادات بوصفها api.pluginConfig أثناء التسجيل. بالنسبة إلى الإعدادات الخاصة بالقناة، استخدم قسم إعدادات القناة بدلًا من ذلك:

إنشاء مخططات إعدادات القنوات

استخدم buildChannelConfigSchema لتحويل مخطط Zod إلى غلاف ChannelConfigSchema المستخدم في عناصر الإعدادات التي يملكها Plugin:
إذا كنت تنشئ العقد أصلًا بصيغة JSON Schema أو TypeBox، فاستخدم المساعد المباشر لكي يتمكن OpenClaw من تجاوز التحويل من Zod إلى JSON Schema في مسارات البيانات الوصفية:
بالنسبة إلى Plugins التابعة لجهات خارجية، يظل عقد المسار البارد هو بيان Plugin: انسخ JSON Schema المُنشأ إلى openclaw.plugin.json#channelConfigs بحيث تتمكن واجهات مخطط الإعدادات والإعداد وواجهة المستخدم من فحص channels.<id> دون تحميل شيفرة وقت التشغيل.

معالجات الإعداد

يمكن لـ Plugins القنوات توفير معالجات إعداد تفاعلية للأمر openclaw onboard. المعالج هو كائن ChannelSetupWizard في ChannelPlugin:
يدعم ChannelSetupWizard أيضًا textInputs وdmPolicy وallowFrom وgroupAccess وprepare وfinalize وغير ذلك. راجع src/setup-core.ts الخاص بـ Plugin Discord للاطلاع على مثال مضمّن كامل.
بالنسبة إلى مطالبات قائمة السماح للرسائل المباشرة التي لا تحتاج إلا إلى التدفق القياسي note -> prompt -> parse -> merge -> patch، فضّل مساعدات الإعداد المشتركة من openclaw/plugin-sdk/setup: ‏createPromptParsedAllowFromForAccount(...) وcreateTopLevelChannelParsedAllowFromPrompt(...) وcreateNestedChannelParsedAllowFromPrompt(...).
بالنسبة إلى كتل حالة إعداد القناة التي لا تختلف إلا في التسميات والدرجات والأسطر الإضافية الاختيارية، فضّل createStandardChannelSetupStatus(...) من openclaw/plugin-sdk/setup بدلًا من إنشاء كائن status نفسه يدويًا في كل Plugin.
بالنسبة إلى واجهات الإعداد الاختيارية التي يجب أن تظهر فقط في سياقات معينة، استخدم createOptionalChannelSetupSurface من openclaw/plugin-sdk/channel-setup:
يوفّر plugin-sdk/channel-setup أيضًا أداتي الإنشاء منخفضتي المستوى createOptionalChannelSetupAdapter(...) وcreateOptionalChannelSetupWizard(...) عندما لا تحتاج إلا إلى نصف واحد من واجهة التثبيت الاختيارية هذه.تتعطل الواجهة الاختيارية/المعالج الاختياري المُنشآن بصورة آمنة عند إجراء عمليات كتابة فعلية للإعدادات. ويعيدان استخدام رسالة واحدة تفيد بضرورة التثبيت عبر validateInput وapplyAccountConfig وfinalize، ويضيفان رابطًا للوثائق عندما تكون docsPath معيّنة.
بالنسبة إلى واجهات الإعداد المدعومة بملفات ثنائية، يُفضّل استخدام المساعدات المشتركة المفوّضة بدلًا من نسخ منطق الملف الثنائي/الحالة نفسه إلى كل قناة:
  • createDetectedBinaryStatus(...) لكتل الحالة التي لا تختلف إلا في التسميات والتلميحات والدرجات واكتشاف الملف الثنائي
  • createCliPathTextInput(...) لمدخلات النص المستندة إلى مسار
  • createDelegatedSetupWizardStatusResolvers(...) وcreateDelegatedPrepare(...) وcreateDelegatedFinalize(...) وcreateDelegatedResolveConfigured(...) عندما يحتاج setupEntry إلى إعادة التوجيه إلى معالج كامل أثقل بطريقة كسولة
  • createDelegatedTextInputShouldPrompt(...) عندما يحتاج setupEntry فقط إلى تفويض قرار textInputs[*].shouldPrompt

النشر والتثبيت

الإضافات الخارجية: انشرها على ClawHub، ثم ثبّتها:
تُثبَّت مواصفات الحزم المجرّدة من npm أثناء الانتقال عند التشغيل، ما لم يتطابق الاسم مع معرّف إضافة مضمّنة أو رسمية، وعندئذٍ يستخدم OpenClaw تلك النسخة المحلية/الرسمية بدلًا منها. استخدم clawhub: أو npm: أو git: أو npm-pack: لاختيار المصدر بصورة حتمية — راجع إدارة الإضافات.
الإضافات داخل المستودع: ضعها ضمن شجرة مساحة عمل الإضافات المضمّنة؛ إذ تُكتشف تلقائيًا أثناء البناء.
بالنسبة إلى عمليات التثبيت من مصدر npm، يثبّت openclaw plugins install الحزمة في مشروع خاص بكل إضافة ضمن ~/.openclaw/npm/projects مع تعطيل نصوص دورة الحياة (--ignore-scripts). أبقِ أشجار اعتماديات الإضافات مقتصرة على JS/TS، وتجنّب الحزم التي تتطلب عمليات بناء postinstall.
لا يثبّت بدء تشغيل Gateway اعتماديات الإضافات. تتولى تدفقات تثبيت npm/git/ClawHub عملية توحيد الاعتماديات؛ ويجب أن تكون اعتماديات الإضافات المحلية مثبّتة مسبقًا.
بيانات تعريف الحزم المضمّنة صريحة، ولا تُستنتج من JavaScript المبني عند بدء تشغيل Gateway. تنتمي اعتماديات وقت التشغيل إلى حزمة الإضافة المالكة لها؛ ولا يُصلح تشغيل OpenClaw المعبّأ اعتماديات الإضافات ولا يعكسها مطلقًا.

ذو صلة