package.json الوصفية)، والبيانات التعريفية (openclaw.plugin.json)، ومداخل الإعداد، ومخططات الإعدادات.
البيانات الوصفية للحزمة
يحتاج ملفpackage.json إلى حقل openclaw يوضّح لنظام Plugins ما يوفّره Plugin الخاص بك:
- Plugin قناة
- Plugin موفّر خدمة / خط أساس ClawHub
يتطلب النشر الخارجي على 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
فرض minHostVersion
إذا ضُبط
minHostVersion، فسيُفرض عند التثبيت وعند تحميل سجل البيانات التعريفية غير المضمّنة. تتخطى المضيفات الأقدم Plugins الخارجية، وتُرفض سلاسل الإصدارات غير الصالحة. يُفترض أن Plugins المصدر المضمّنة تستخدم الإصدار نفسه لنسخة المضيف المستخرجة.تثبيتات npm المثبّتة الإصدار
تثبيتات npm المثبّتة الإصدار
بالنسبة إلى تثبيتات npm المثبّتة الإصدار، احتفظ بالإصدار الدقيق في
npmSpec وأضف سلامة العنصر البرمجي المتوقعة:نطاق allowInvalidConfigRecovery
نطاق allowInvalidConfigRecovery
لا يمثّل
allowInvalidConfigRecovery تجاوزًا عامًا للإعدادات المعطّلة. فهو مخصّص فقط للتعافي المحدود لـ Plugin مضمّن، إذ يسمح لإعادة التثبيت/الإعداد بإصلاح بقايا معروفة من الترقيات، مثل فقدان مسار Plugin مضمّن أو وجود إدخال channels.<id> قديم لـ Plugin نفسه. إذا كانت الإعدادات معطّلة لأسباب غير مرتبطة، فسيظل التثبيت يفشل وفق نهج الإغلاق الآمن، ويطلب من المشغّل تشغيل openclaw doctor --fix.تأجيل التحميل الكامل
يمكن لـ Plugins القنوات الاشتراك في التحميل المؤجّل باستخدام:setupEntry فقط خلال مرحلة بدء التشغيل السابقة للاستماع، حتى للقنوات المضبوطة مسبقًا. ويُحمّل المدخل الكامل بعد أن يبدأ Gateway الاستماع.
إذا كان مدخل الإعداد/المدخل الكامل يسجّل أساليب RPC في Gateway، فاحتفظ بها ضمن بادئة خاصة بـ Plugin. تظل نطاقات إدارة النواة المحجوزة (config.*، وexec.approvals.*، وwizard.*، وupdate.*) مملوكة للنواة، وتُطبّع دائمًا إلى operator.admin.
بيان Plugin التعريفي
يجب أن يوفّر كل Plugin أصلي ملفopenclaw.plugin.json في جذر الحزمة. يستخدم OpenClaw هذا الملف للتحقق من صحة الإعدادات دون تنفيذ شيفرة Plugin.
channels (وتضيف Plugins المزوّدات providers):
النشر على ClawHub
تستخدم حزم Skills وPlugins أوامر نشر منفصلة في ClawHub. بالنسبة إلى حزم Plugins، استخدم الأمر الخاص بالحزم:الأمر
clawhub skill publish <path> مختلف ومخصّص لنشر مجلد Skill، وليس حزمة Plugin. راجع النشر على ClawHub.مدخل الإعداد
يُعدsetup-entry.ts بديلًا خفيفًا لـ index.ts، ويحمّله OpenClaw عندما يحتاج فقط إلى واجهات الإعداد (التهيئة الأولية، وإصلاح الإعدادات، وفحص القنوات المعطّلة):
defineBundledChannelSetupEntry(...) من openclaw/plugin-sdk/channel-entry-contract بدلًا من defineSetupPluginEntry(...). يدعم هذا العقد المضمّن أيضًا تصدير runtime اختياريًا، بحيث تظل توصيلات وقت التشغيل في أثناء الإعداد خفيفة وصريحة.
متى يستخدم OpenClaw setupEntry بدلًا من المدخل الكامل
متى يستخدم OpenClaw setupEntry بدلًا من المدخل الكامل
- تكون القناة معطّلة، لكنها تحتاج إلى واجهات الإعداد أو التهيئة الأولية.
- تكون القناة مفعّلة، لكنها غير مضبوطة.
- يكون التحميل المؤجّل مفعّلًا (
deferConfiguredChannelFullLoadUntilAfterListen).
ما يجب أن يسجّله setupEntry
ما يجب أن يسجّله setupEntry
- كائن Plugin القناة (عبر
defineSetupPluginEntry). - أي مسارات HTTP مطلوبة قبل بدء Gateway الاستماع.
- أي أساليب Gateway مطلوبة أثناء بدء التشغيل.
config.* أو update.*.ما يجب ألّا يتضمنه setupEntry
ما يجب ألّا يتضمنه setupEntry
- تسجيلات 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 عبر:api.pluginConfig أثناء التسجيل.
بالنسبة إلى الإعدادات الخاصة بالقناة، استخدم قسم إعدادات القناة بدلًا من ذلك:
إنشاء مخططات إعدادات القنوات
استخدمbuildChannelConfigSchema لتحويل مخطط Zod إلى غلاف ChannelConfigSchema المستخدم في عناصر الإعدادات التي يملكها Plugin:
openclaw.plugin.json#channelConfigs بحيث تتمكن واجهات مخطط الإعدادات والإعداد وواجهة المستخدم من فحص channels.<id> دون تحميل شيفرة وقت التشغيل.
معالجات الإعداد
يمكن لـ Plugins القنوات توفير معالجات إعداد تفاعلية للأمرopenclaw onboard. المعالج هو كائن ChannelSetupWizard في ChannelPlugin:
ChannelSetupWizard أيضًا textInputs وdmPolicy وallowFrom وgroupAccess وprepare وfinalize وغير ذلك. راجع src/setup-core.ts الخاص بـ Plugin Discord للاطلاع على مثال مضمّن كامل.
مطالبات allowFrom المشتركة
مطالبات allowFrom المشتركة
بالنسبة إلى مطالبات قائمة السماح للرسائل المباشرة التي لا تحتاج إلا إلى التدفق القياسي
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
- ClawHub فقط
- مواصفة حزمة npm
clawhub: أو npm: أو git: أو npm-pack: لاختيار المصدر بصورة حتمية — راجع إدارة الإضافات.بالنسبة إلى عمليات التثبيت من مصدر npm، يثبّت
openclaw plugins install الحزمة في مشروع خاص بكل إضافة ضمن ~/.openclaw/npm/projects مع تعطيل نصوص دورة الحياة (--ignore-scripts). أبقِ أشجار اعتماديات الإضافات مقتصرة على JS/TS، وتجنّب الحزم التي تتطلب عمليات بناء postinstall.لا يثبّت بدء تشغيل Gateway اعتماديات الإضافات. تتولى تدفقات تثبيت npm/git/ClawHub عملية توحيد الاعتماديات؛ ويجب أن تكون اعتماديات الإضافات المحلية مثبّتة مسبقًا.
ذو صلة
- إنشاء الإضافات — دليل بدء تدريجي خطوة بخطوة
- بيان الإضافة — مرجع مخطط البيان الكامل
- نقاط دخول SDK —
definePluginEntryوdefineChannelPluginEntry