clawhub: عندما تريد الحل عبر ClawHub.
المتطلبات
- Node 22.22.3+، أو Node 24.15+، أو Node 25.9+، و
npmأوpnpm. - وحدات TypeScript ESM.
- للعمل على Plugin مضمّن داخل المستودع، استنسخ المستودع وشغّل
pnpm install. يقتصر تطوير Plugins من نسخة المصدر على pnpm لأن OpenClaw يكتشف Plugins المضمّنة من حزم مساحة العملextensions/*.
اختيار بنية Plugin
Plugin قناة
صِل OpenClaw بمنصة مراسلة.
Plugin موفّر
أضف موفّر نموذج أو وسائط أو بحث أو جلب أو كلام أو وقت فعلي.
Plugin واجهة CLI خلفية
شغّل CLI محلية للذكاء الاصطناعي عبر احتياط نموذج OpenClaw.
Plugin أداة
سجّل أدوات الوكيل.
البدء السريع
أنشئ Plugin أداة بسيطًا بتسجيل أداة وكيل واحدة مطلوبة. هذه هي أقصر بنية مفيدة لـ Plugin، وتشمل الحزمة والبيان ونقطة الدخول والتحقق المحلي.1
إنشاء بيانات الحزمة الوصفية
contracts.tools لكي يتمكن OpenClaw من اكتشاف الملكية دون
تحميل وقت تشغيل كل Plugin مسبقًا. عيّن activation.onStartup
عن قصد؛ إذ يُحمَّل هذا المثال عند بدء تشغيل Gateway.تخضع أسطح Plugins الموثوقة من المضيف أيضًا لقيود البيان، وتتطلب تصريحًا
صريحًا في Plugins المثبّتة: يتطلب api.registerAgentToolResultMiddleware(...)
إدراج كل وقت تشغيل مستهدف في contracts.agentToolResultMiddleware،
ويتطلب api.registerTrustedToolPolicy(...) إدراج كل معرّف سياسة في
contracts.trustedToolPolicies. تحافظ هذه التصريحات على اتساق
الفحص وقت التثبيت مع التسجيل وقت التشغيل.للاطلاع على كل حقل في البيان، راجع بيان Plugin.2
تسجيل الأداة
index.ts
definePluginEntry لـ Plugins غير الخاصة بالقنوات. أما Plugins القنوات فتستخدم
defineChannelPluginEntry من openclaw/plugin-sdk/core بدلًا منه.3
اختبار وقت التشغيل
بالنسبة إلى Plugin مثبّت أو خارجي، افحص وقت التشغيل المحمّل:إذا كان Plugin يسجّل أمر CLI، فشغّل ذلك الأمر أيضًا وتحقق من
المخرجات، مثل
openclaw demo-plugin ping.بالنسبة إلى Plugin مضمّن في هذا المستودع، يكتشف OpenClaw حزم Plugins
من نسخة المصدر ضمن مساحة العمل extensions/*. شغّل أقرب
اختبار مستهدف:4
اختبار تثبيت الحزمة
قبل نشر Plugin جاهز للحزم، اختبر بنية التثبيت نفسها التي سيحصل
عليها المستخدمون. أضف أولًا خطوة بناء، ووجّه إدخالات وقت التشغيل مثل
يستخدم
openclaw.extensions إلى JavaScript مبني مثل ./dist/index.js، وتأكد
من أن npm pack يتضمن مخرجات dist/. إدخالات مصدر TypeScript
مخصصة فقط لنسخ المصدر ومسارات التطوير المحلية.بعد ذلك، حزّم Plugin وثبّت ملف tar باستخدام npm-pack::npm-pack: مشروع npm الذي يديره OpenClaw لكل Plugin، ولذلك يكتشف
أخطاء تبعيات وقت التشغيل التي قد يخفيها الاختبار من نسخة المصدر. وهو يثبت
بنية الحزمة والتبعيات، وليس الثقة الرسمية المرتبطة بالكتالوج.
يجب أن تكون استيرادات وقت التشغيل في dependencies أو optionalDependencies؛
ولن تُثبَّت التبعيات الموجودة فقط في devDependencies ضمن
مشروع وقت التشغيل المُدار.لا تستخدم تثبيت أرشيف أو مسار خام بوصفه التحقق النهائي من سلوك Plugin
الرسمي أو ذي الامتيازات. تفيد المصادر الخام في تصحيح الأخطاء محليًا، لكنها
لا تثبت مسار التبعيات نفسه الذي تثبته عمليات التثبيت عبر npm أو ClawHub. إذا
كان Plugin يعتمد على حالة Plugin رسمي موثوق، فأضف تحققًا ثانيًا
عبر تثبيت رسمي مدعوم بكتالوج أو مسار حزمة منشورة
يسجّل الثقة الرسمية. راجع
حل تبعيات Plugin للاطلاع على
تفاصيل جذر التثبيت وملكية التبعيات.5
النشر
تحقّق من الحزمة قبل نشرها:توجد مقتطفات حزم ClawHub القياسية في
docs/snippets/plugin-publish/.6
التثبيت
ثبّت الحزمة المنشورة عبر ClawHub:
تسجيل الأدوات
يمكن أن تكون الأدوات مطلوبة أو اختيارية. تتوفر الأدوات المطلوبة دائمًا عندما يكون Plugin مفعّلًا. أما الأدوات الاختيارية فتحتاج إلى اشتراك صريح من المستخدم قبل أن يحمّل OpenClaw وقت تشغيل Plugin المالك. تتلقى مصانع الأدوات سياق وقت تشغيل موثوقًا، بما في ذلكdeliveryContext،
وnativeChannelId لمحادثة المنصة النشطة عند توفرها، و
requesterSenderId.
api.registerTool(...) في
بيان Plugin:
tools.allow:
name، أو كون execute غير دالة، أو وجود واصف أداة دون كائن parameters.
تتلقى مصانع الأدوات كائن سياق يوفّره وقت التشغيل. استخدم ctx.activeModel
عندما تحتاج الأداة إلى تسجيل النموذج النشط للدور الحالي أو عرضه أو التكيّف معه؛ ويمكن أن يتضمن
provider وmodelId وmodelRef. تعامل معه على أنه
بيانات وصفية معلوماتية لوقت التشغيل، وليس حدًا أمنيًا في مواجهة المشغّل المحلي
أو شيفرة Plugin المثبّت أو وقت تشغيل OpenClaw المعدّل. ومع ذلك،
ينبغي أن تتطلب الأدوات المحلية الحساسة اشتراكًا صريحًا من Plugin أو المشغّل، وأن
تفشل بشكل مغلق عند غياب البيانات الوصفية للنموذج النشط أو عدم ملاءمتها.
يصرّح البيان بالملكية والاكتشاف؛ لكن التنفيذ يظل يستدعي تطبيق الأداة
المسجّل والحالي. حافظ على اتساق toolMetadata.<tool>.optional: true
مع api.registerTool(..., { optional: true }) كي يتمكن OpenClaw من تجنّب
تحميل وقت تشغيل ذلك Plugin إلى أن تُدرج الأداة صراحةً في قائمة السماح.
اصطلاحات الاستيراد
استورد من المسارات الفرعية المركزة في SDK:api.ts و
runtime-api.ts لعمليات الاستيراد الداخلية. لا تستورد Plugin الخاص بك عبر
مسار SDK. ينبغي أن تبقى الأدوات المساعدة الخاصة بالموفّر في حزمة الموفّر ما لم
تكن الواجهة عامة فعلًا.
طرق RPC المخصصة في Gateway هي نقطة دخول متقدمة. احتفظ بها تحت
بادئة خاصة بـ Plugin؛ إذ تظل نطاقات إدارة النواة مثل config.*
وexec.approvals.* وoperator.admin.* وwizard.* وupdate.* محجوزة
وتُحل إلى operator.admin. ويُحجز جسر
openclaw/plugin-sdk/gateway-method-runtime لمسارات HTTP الخاصة بـ Plugins
التي تصرّح عن contracts.gatewayMethodDispatch: ["authenticated-request"].
للاطلاع على خريطة الاستيراد الكاملة، راجع نظرة عامة على SDK الخاص بـ Plugin.
قائمة التحقق قبل الإرسال
يحتوي package.json على بيانات
openclaw الوصفية الصحيحةبيان openclaw.plugin.json موجود وصالح
تستخدم نقطة الدخول
defineChannelPluginEntry أو definePluginEntryتستخدم جميع الاستيرادات مسارات
plugin-sdk/<subpath> المركزةتستخدم الاستيرادات الداخلية الوحدات المحلية، لا الاستيراد الذاتي عبر SDK
تنجح الاختبارات (
pnpm test <bundled-plugin-root>/my-plugin/)ينجح
pnpm check (لـ Plugins داخل المستودع)الاختبار مقابل الإصدارات التجريبية
- راقب إصدارات openclaw/openclaw (
Watch>Releases). تبدو وسوم الإصدار التجريبي مثلv2026.3.N-beta.1. يمكنك أيضًا متابعة @openclaw على X للاطلاع على إعلانات الإصدارات. - اختبر Plugin الخاص بك باستخدام وسم الإصدار التجريبي فور ظهوره. عادةً لا تتجاوز الفترة السابقة للإصدار المستقر بضع ساعات.
- انشر في سلسلة Plugin الخاص بك ضمن قناة Discord
plugin-forum(discord.gg/clawd) بعد الاختبار، مع ذكر إماall goodأو ما تعطل. أنشئ سلسلة إذا لم تكن لديك واحدة بعد. - إذا تعطل شيء ما، فافتح مشكلة أو حدّث مشكلة بعنوان
Beta blocker: <plugin-name> - <summary>وطبّق التصنيفbeta-blocker. أدرج رابط المشكلة في سلسلتك. - افتح PR إلى
mainبعنوانfix(<plugin-id>): beta blocker - <summary>، وأدرج رابط المشكلة في كلٍ من PR وسلسلة Discord الخاصة بك. لا يمكن للمساهمين وضع تصنيفات على طلبات PR، لذا يُعد العنوان إشارة طلب PR للمشرفين وعمليات الأتمتة. تُدمج العوائق التي لها PR؛ أما العوائق التي ليس لها PR فقد تُضمَّن في الإصدار رغم ذلك. - الصمت يعني أن كل شيء سليم. عادةً ما يعني تفويت هذه الفترة أن إصلاحك سيُدمج في الدورة التالية.
الخطوات التالية
Plugins قنوات المراسلة
أنشئ Plugin لقناة مراسلة
Plugins المزوّدين
أنشئ Plugin لمزوّد نماذج
Plugins الواجهة الخلفية لـ CLI
سجّل واجهة خلفية محلية للذكاء الاصطناعي عبر CLI
نظرة عامة على SDK
مرجع خريطة الاستيراد وواجهة API للتسجيل
أدوات التشغيل المساعدة
تحويل النص إلى كلام والبحث والوكيل الفرعي عبر api.runtime
الاختبار
أدوات الاختبار وأنماطه
بيان Plugin
المرجع الكامل لمخطط البيان