package.json تحميل وقت التشغيل إلى
JavaScript المبني عند توفره:
extensions وsetupEntry إدخالات مصدر صالحة لتطوير مساحة العمل وعمليات
git checkout. تكون runtimeExtensions وruntimeSetupEntry مفضّلة عندما يحمّل
OpenClaw حزمة مثبّتة، وتتيح لحزم npm تجنّب ترجمة TypeScript في وقت التشغيل.
إدخالات وقت التشغيل الصريحة مطلوبة: يتطلب runtimeSetupEntry وجود setupEntry،
وتؤدي ملفات runtimeExtensions أو runtimeSetupEntry الناقصة إلى فشل التثبيت/الاكتشاف
بدل الرجوع بصمت إلى المصدر. إذا أعلنت حزمة مثبّتة إدخال مصدر TypeScript فقط،
فسيستخدم OpenClaw النظير المبني المطابق dist/*.js عند وجوده، ثم يرجع إلى مصدر
TypeScript.
يجب أن تبقى كل مسارات الإدخال داخل دليل حزمة Plugin. لا تجعل إدخالات وقت التشغيل
ونظراء JavaScript المبنيون المستنتجون مسار مصدر extensions أو setupEntry
الخارج من الدليل مسارًا صالحًا.
definePluginEntry
الاستيراد: openclaw/plugin-sdk/plugin-entry
بالنسبة إلى Plugins المزوّدين، وPlugins الأدوات، وPlugins الخطافات، وأي شيء ليس
قناة مراسلة.
| الحقل | النوع | مطلوب | الافتراضي |
|---|---|---|---|
id | string | نعم | - |
name | string | نعم | - |
description | string | نعم | - |
kind | string | لا | - |
configSchema | OpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema | لا | مخطط كائن فارغ |
register | (api: OpenClawPluginApi) => void | نعم | - |
- يجب أن يطابق
idبيانopenclaw.plugin.jsonالخاص بك. - يُستخدم
kindللفتحات الحصرية:"memory"أو"context-engine". - يمكن أن يكون
configSchemaدالة للتقييم الكسول. - يحل OpenClaw هذا المخطط ويخزّنه مؤقتًا عند أول وصول، لذلك لا تعمل بُناة المخططات المكلفة إلا مرة واحدة.
defineChannelPluginEntry
الاستيراد: openclaw/plugin-sdk/channel-core
يلف definePluginEntry بأسلاك خاصة بالقناة. يستدعي تلقائيًا
api.registerChannel({ plugin })، ويكشف وصلة بيانات وصفية اختيارية لـ CLI للمساعدة
الجذرية، ويقيّد registerFull بوضع التسجيل.
| الحقل | النوع | مطلوب | الافتراضي |
|---|---|---|---|
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). يتم تخطيه أثناء التقاط بيانات CLI الوصفية. - يعمل
registerCliMetadataأثناءapi.registrationMode === "cli-metadata"، وapi.registrationMode === "discovery"، وapi.registrationMode === "full". استخدمه كمكان مرجعي لموصّفات CLI المملوكة للقناة حتى تبقى المساعدة الجذرية غير مفعّلة، وتتضمن لقطات الاكتشاف بيانات تعريف أوامر ثابتة، ويبقى تسجيل أوامر CLI العادي متوافقًا مع تحميلات Plugin الكاملة. - تسجيل الاكتشاف غير مفعّل، وليس خاليًا من الاستيراد. قد يقيّم OpenClaw إدخال
Plugin الموثوق ووحدة Plugin القناة لبناء اللقطة، لذلك أبقِ الاستيرادات على
المستوى الأعلى خالية من الآثار الجانبية، وضع المقابس والعملاء والعمّال والخدمات
خلف مسارات
"full"فقط. - لا يعمل
registerFullإلا عندما يكونapi.registrationMode === "full". يتم تخطيه أثناء التحميل المخصص للإعداد فقط. - مثل
definePluginEntry، يمكن أن يكونconfigSchemaمصنعًا كسولًا، ويخزّن OpenClaw المخطط المحلول مؤقتًا عند أول وصول. - بالنسبة إلى أوامر CLI الجذرية المملوكة لـ Plugin، فضّل
api.registerCli(..., { descriptors: [...] })عندما تريد أن يبقى الأمر محمّلًا بكسل دون أن يختفي من شجرة تحليل CLI الجذرية. بالنسبة إلى أوامر ميزات العقد المزدوجة، فضّلapi.registerNodeCliFeature(...)حتى يقع الأمر تحتopenclaw nodes. بالنسبة إلى أوامر Plugin المتداخلة الأخرى، أضفparentPathوسجّل الأوامر على كائنprogramالممرّر إلى المسجّل؛ يحلّه OpenClaw إلى الأمر الأب قبل استدعاء Plugin. بالنسبة إلى Channel Plugins، فضّل تسجيل تلك الموصّفات منregisterCliMetadata(...)وأبقِregisterFull(...)مركّزًا على العمل الخاص بوقت التشغيل فقط. - إذا كان
registerFull(...)يسجّل أيضًا طرق RPC في Gateway، فأبقها على بادئة خاصة بـ Plugin. تُجبر مساحات أسماء الإدارة الأساسية المحجوزة (config.*،exec.approvals.*، وwizard.*، وupdate.*) دائمًا علىoperator.admin.
defineSetupPluginEntry
الاستيراد: openclaw/plugin-sdk/channel-core
للملف الخفيف setup-entry.ts. يعيد فقط { plugin } من دون أسلاك وقت تشغيل أو CLI.
defineSetupPluginEntry(...) بعائلات دوال الإعداد المساعدة الضيقة:
openclaw/plugin-sdk/setup-runtimeلدوال الإعداد المساعدة الآمنة لوقت التشغيل مثل محوّلات تصحيح الإعداد الآمنة للاستيراد، ومخرجات ملاحظات البحث،promptResolvedAllowFrom، وsplitSetupEntries، ووكلاء الإعداد المفوّضينopenclaw/plugin-sdk/channel-setupلأسطح إعداد التثبيت الاختياريopenclaw/plugin-sdk/setup-toolsلدوال CLI/الأرشيف/التوثيق المساعدة للإعداد/التثبيت
defineBundledChannelSetupEntry(...) من
openclaw/plugin-sdk/channel-entry-contract بدلًا من ذلك. يسمح ذلك العقد لإدخال
الإعداد بالاحتفاظ بتصديرات Plugin/الأسرار الآمنة للإعداد، مع الاستمرار في كشف
مُعيّن وقت تشغيل:
وضع التسجيل
يخبرapi.registrationMode الـ Plugin الخاص بك بكيفية تحميله:
| الوضع | متى | ما الذي يجب تسجيله |
|---|---|---|
"full" | بدء تشغيل Gateway العادي | كل شيء |
"discovery" | اكتشاف قدرات للقراءة فقط | تسجيل القناة بالإضافة إلى موصّفات CLI الثابتة؛ قد تُحمّل شيفرة الإدخال، لكن تخطَّ المقابس والعمّال والعملاء والخدمات |
"setup-only" | قناة معطّلة/غير مهيأة | تسجيل القناة فقط |
"setup-runtime" | تدفق إعداد مع توفر وقت التشغيل | تسجيل القناة بالإضافة فقط إلى وقت التشغيل الخفيف المطلوب قبل تحميل الإدخال الكامل |
"cli-metadata" | المساعدة الجذرية / التقاط بيانات CLI الوصفية | موصّفات CLI فقط |
defineChannelPluginEntry مع هذا الفصل تلقائيًا. إذا استخدمت
definePluginEntry مباشرةً لقناة، فتحقق من الوضع بنفسك:
"setup-runtime" بوصفه النافذة التي يجب أن توجد فيها أسطح بدء التشغيل
المخصصة للإعداد فقط من دون إعادة الدخول إلى وقت تشغيل القناة المضمّنة الكامل.
الملائمات الجيدة هي تسجيل القناة، ومسارات HTTP الآمنة للإعداد، وطرق Gateway
الآمنة للإعداد، ودوال الإعداد المساعدة المفوّضة. لا تزال خدمات الخلفية الثقيلة،
ومسجّلات CLI، وعمليات تمهيد SDK للمزوّد/العميل تنتمي إلى "full".
بالنسبة إلى مسجّلات CLI تحديدًا:
- استخدم
descriptorsعندما يملك المسجِّل أمرا جذريا واحدا أو أكثر وتريد من OpenClaw تحميل وحدة CLI الفعلية كسولا عند أول استدعاء - تأكد من أن تلك الواصفات تغطي كل جذر أمر من المستوى الأعلى يعرّضه المسجِّل
- أبقِ أسماء أوامر الواصفات مقتصرة على الأحرف والأرقام والواصلة والشرطة السفلية، وأن تبدأ بحرف أو رقم؛ يرفض OpenClaw أسماء الواصفات الخارجة عن هذا الشكل ويزيل تسلسلات التحكم الطرفية من الأوصاف قبل عرض المساعدة
- استخدم
commandsوحدها فقط لمسارات التوافق المحمّلة بشغف
أشكال Plugin
يصنّف OpenClaw Plugins المحمّلة حسب سلوك تسجيلها:| الشكل | الوصف |
|---|---|
| plain-capability | نوع قدرة واحد (مثلا مزوّد فقط) |
| hybrid-capability | أنواع قدرات متعددة (مثلا مزوّد + كلام) |
| hook-only | خطافات فقط، بلا قدرات |
| non-capability | أدوات/أوامر/خدمات ولكن بلا قدرات |
openclaw plugins inspect <id> لرؤية شكل Plugin.
ذو صلة
- نظرة عامة على SDK - واجهة API للتسجيل ومرجع المسارات الفرعية
- مساعدات وقت التشغيل -
api.runtimeوcreatePluginRuntimeStore - الإعداد والتكوين - البيان، نقطة دخول الإعداد، التحميل المؤجل
- Plugins القنوات - بناء كائن
ChannelPlugin - Plugins المزوّدين - تسجيل المزوّد والخطافات