package.json الوصفية)، والبيانات التعريفية (openclaw.plugin.json)، وإدخالات الإعداد، ومخططات الإعدادات.
بيانات الحزمة الوصفية
يحتاجpackage.json لديك إلى حقل openclaw يخبر نظام المكوّنات الإضافية بما يقدّمه المكوّن الإضافي:
- Channel plugin
- Provider plugin / ClawHub baseline
إذا نشرت المكوّن الإضافي خارجيًا على ClawHub، فحقلا
compat وbuild مطلوبان. توجد مقتطفات النشر المعتمدة في docs/snippets/plugin-publish/.حقول openclaw
ملفات نقطة الدخول (نسبية إلى جذر الحزمة).
إدخال خفيف مخصص للإعداد فقط (اختياري).
بيانات وصفية لفهرس القنوات لأسطح الإعداد والاختيار والبدء السريع والحالة.
معرّفات المزوّدين التي يسجلها هذا المكوّن الإضافي.
تلميحات التثبيت:
npmSpec وlocalPath وdefaultChoice وminHostVersion وexpectedIntegrity وallowInvalidConfigRecovery.أعلام سلوك بدء التشغيل.
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 | اسم أيقونة/صورة نظام اختياري لفهارس واجهة القنوات. |
selectionDocsPrefix | string | نص بادئة قبل روابط الوثائق في أسطح الاختيار. |
selectionDocsOmitLabel | boolean | عرض مسار الوثائق مباشرة بدل رابط وثائق مسمّى في نص الاختيار. |
selectionExtras | string[] | سلاسل قصيرة إضافية تُلحق في نص الاختيار. |
markdownCapable | boolean | يعلّم القناة بأنها تدعم Markdown لقرارات تنسيق الرسائل الصادرة. |
exposure | object | عناصر التحكم في ظهور القناة لأسح الإعداد والقوائم المهيأة والوثائق. |
quickstartAllowFrom | boolean | إدخال هذه القناة في تدفق إعداد البدء السريع القياسي allowFrom. |
forceAccountBinding | boolean | طلب ربط حساب صريح حتى عند وجود حساب واحد فقط. |
preferSessionLookupForAnnounceTarget | boolean | تفضيل البحث في الجلسة عند حل أهداف الإعلان لهذه القناة. |
exposure ما يلي:
configured: تضمين القناة في أسطح القوائم المهيأة/ذات نمط الحالةsetup: تضمين القناة في منتقيات الإعداد/التهيئة التفاعليةdocs: تعليم القناة بأنها موجّهة للعامة في أسطح الوثائق/التنقل
يبقى
showConfigured وshowInSetup مدعومين كأسماء مستعارة قديمة. فضّل exposure.openclaw.install
openclaw.install هي بيانات وصفية للحزمة، وليست بيانات وصفية للبيان التعريفي.
| الحقل | النوع | ما يعنيه |
|---|---|---|
clawhubSpec | string | مواصفة ClawHub المعتمدة لتدفقات التثبيت/التحديث والتثبيت عند الطلب أثناء الإعداد الأولي. |
npmSpec | string | مواصفة npm المعتمدة لتدفقات الرجوع الاحتياطي للتثبيت/التحديث. |
localPath | string | مسار تثبيت محلي للتطوير أو مضمّن. |
defaultChoice | "clawhub" | "npm" | "local" | مصدر التثبيت المفضل عند توفر مصادر متعددة. |
minHostVersion | string | أقل إصدار OpenClaw مدعوم بصيغة >=x.y.z أو >=x.y.z-prerelease. |
expectedIntegrity | string | سلسلة تكامل حزمة npm dist المتوقعة، عادةً sha512-...، للتثبيتات المثبتة. |
allowInvalidConfigRecovery | boolean | يتيح لتدفقات إعادة تثبيت المكوّنات الإضافية المضمّنة التعافي من إخفاقات إعدادات قديمة محددة. |
requiredPlatformPackages | string[] | أسماء مستعارة لحزم npm خاصة بالمنصة ومطلوبة ويتم التحقق منها أثناء تثبيت npm. |
Onboarding behavior
Onboarding behavior
يستخدم الإعداد الأولي التفاعلي أيضًا
openclaw.install لأسطح التثبيت عند الطلب. إذا عرض المكوّن الإضافي لديك خيارات مصادقة مزوّد أو بيانات وصفية لإعداد/فهرس قناة قبل تحميل وقت التشغيل، فيمكن للإعداد الأولي إظهار ذلك الخيار، وطلب ClawHub أو npm أو تثبيت محلي، ثم تثبيت المكوّن الإضافي أو تمكينه، ثم متابعة التدفق المحدد. تستخدم خيارات الإعداد الأولي عبر ClawHub clawhubSpec وتكون مفضلة عند وجودها؛ وتتطلب خيارات npm بيانات وصفية موثوقة للفهرس مع npmSpec في السجل؛ أما الإصدارات الدقيقة وexpectedIntegrity فهي تثبيتات اختيارية لـ npm. إذا كان expectedIntegrity موجودًا، فإن تدفقات التثبيت/التحديث تفرضه على npm. أبقِ بيانات “ما الذي يجب عرضه” الوصفية في openclaw.plugin.json وبيانات “كيفية تثبيته” الوصفية في package.json.minHostVersion enforcement
minHostVersion enforcement
إذا تم تعيين
minHostVersion، فإن كلًا من التثبيت وتحميل سجل بيانات المكوّنات غير المضمّنة يفرضان ذلك. تتخطى المضيفات الأقدم المكوّنات الإضافية الخارجية؛ وتُرفض سلاسل الإصدارات غير الصالحة. يُفترض أن المكوّنات الإضافية المصدرية المضمّنة متوافقة الإصدار مع نسخة المضيف.Pinned npm installs
Pinned npm installs
للتثبيتات المثبتة عبر npm، أبقِ الإصدار الدقيق في
npmSpec وأضف تكامل الأثر المتوقع:allowInvalidConfigRecovery scope
allowInvalidConfigRecovery scope
allowInvalidConfigRecovery ليس تجاوزًا عامًا للإعدادات المعطلة. إنه مخصص فقط لتعافٍ ضيق للمكوّنات الإضافية المضمّنة، بحيث يمكن لإعادة التثبيت/الإعداد إصلاح بقايا ترقية معروفة مثل مسار مكوّن إضافي مضمّن مفقود أو إدخال channels.<id> قديم لذلك المكوّن الإضافي نفسه. إذا كانت الإعدادات معطلة لأسباب غير ذات صلة، يظل التثبيت يفشل بشكل مغلق ويخبر المشغّل بتشغيل openclaw doctor --fix.التحميل الكامل المؤجل
يمكن للمكوّنات الإضافية للقنوات الاشتراك في التحميل المؤجل عبر:setupEntry أثناء مرحلة بدء التشغيل السابقة للاستماع، حتى للقنوات المهيأة مسبقًا. يتم تحميل الإدخال الكامل بعد أن يبدأ Gateway بالاستماع.
إذا كان إدخال الإعداد/الكامل لديك يسجّل طرق Gateway RPC، فأبقِها على بادئة خاصة بالمكوّن الإضافي. تبقى مساحات أسماء إدارة النواة المحجوزة (config.* وexec.approvals.* وwizard.* وupdate.*) مملوكة للنواة وتُحل دائمًا إلى operator.admin.
بيان المكوّن الإضافي
يجب أن يشحن كل مكوّن إضافي أصلي ملفopenclaw.plugin.json في جذر الحزمة. يستخدم OpenClaw هذا للتحقق من الإعدادات دون تنفيذ كود المكوّن الإضافي.
kind وchannels:
النشر على ClawHub
بالنسبة إلى حزم Plugin، استخدم أمر ClawHub الخاص بالحزمة:الاسم المستعار القديم للنشر الخاص بالمهارات فقط مخصص للمهارات. يجب أن تستخدم حزم Plugin دائمًا
clawhub package publish.مدخل الإعداد
ملف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.
- خدمات الخلفية.
- استيرادات وقت تشغيل ثقيلة (التشفير، SDKs).
- طرائق Gateway المطلوبة بعد بدء التشغيل فقط.
استيرادات مساعدي الإعداد الضيقة
للمسارات الساخنة الخاصة بالإعداد فقط، فضّل وصلات مساعدي الإعداد الضيقة على المظلّة الأوسعplugin-sdk/setup عندما تحتاج فقط إلى جزء من سطح الإعداد:
| مسار الاستيراد | استخدمه من أجل | الصادرات الرئيسية |
|---|---|---|
plugin-sdk/setup-runtime | مساعدي وقت التشغيل في وقت الإعداد الذين يبقون متاحين في setupEntry / بدء تشغيل القناة المؤجل | createSetupTranslator, createPatchedAccountSetupAdapter, createEnvPatchedAccountSetupAdapter, createSetupInputPresenceValidator, noteChannelLookupFailure, noteChannelLookupSummary, promptResolvedAllowFrom, splitSetupEntries, createAllowlistSetupWizardProxy, createDelegatedSetupWizardProxy |
plugin-sdk/setup-adapter-runtime | اسم مستعار مهمل للتوافق؛ استخدم plugin-sdk/setup-runtime | createEnvPatchedAccountSetupAdapter |
plugin-sdk/setup-tools | مساعدو CLI/الأرشيف/المستندات للإعداد/التثبيت | formatCliCommand, detectBinary, extractArchive, resolveBrewExecutable, formatDocsLink, CONFIG_DIR |
plugin-sdk/setup الأوسع عندما تريد صندوق أدوات الإعداد المشترك الكامل، بما في ذلك مساعدي تصحيح الإعدادات مثل moveSingleAccountChannelSectionToDefaultAccount(...).
استخدم createSetupTranslator(...) لنسخة معالج الإعداد الثابتة. يتبع لغة معالج
CLI (OPENCLAW_LOCALE، ثم متغيرات لغة النظام) ويعود
إلى الإنجليزية. أبقِ نص الإعداد الخاص بـ Plugin في الكود المملوك لـ Plugin، واستخدم
مفاتيح الفهرس المشتركة فقط لتسميات الإعداد العامة، ونصوص الحالة، ونسخة إعداد
Plugin الرسمي المضمّن.
تبقى محولات تصحيح الإعداد آمنة للمسار الساخن عند الاستيراد. إن بحث سطح عقد ترقية الحساب الواحد المضمّن الخاص بها كسول، لذا فإن استيراد 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 كلًا من credentials وtextInputs وdmPolicy وallowFrom وgroupAccess وprepare وfinalize والمزيد. راجع حزم Plugin المضمّنة (على سبيل المثال Plugin الخاص بـ Discord في src/channel.setup.ts) للاطلاع على أمثلة كاملة.
مطالبات 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
النشر والتثبيت
Plugins الخارجية: انشر إلى ClawHub، ثم ثبّت:- npm
- ClawHub فقط
- مواصفة حزمة npm
بالنسبة إلى عمليات التثبيت من مصدر npm، يثبّت
openclaw plugins install الحزمة في مشروع لكل Plugin ضمن ~/.openclaw/npm/projects مع تعطيل سكربتات دورة الحياة. أبقِ أشجار تبعيات Plugin من JS/TS خالصة وتجنب الحزم التي تتطلب عمليات بناء postinstall.لا يثبّت بدء تشغيل Gateway تبعيات Plugin. تمتلك تدفقات تثبيت npm/git/ClawHub تقارب التبعيات؛ ويجب أن تكون تبعيات Plugins المحلية مثبتة مسبقاً.
ذات صلة
- بناء Plugins — دليل بدء خطوة بخطوة
- بيان Plugin — مرجع مخطط البيان الكامل
- نقاط دخول SDK —
definePluginEntryوdefineChannelPluginEntry