defineToolPlugin ينشئ plugin لا يضيف سوى أدوات قابلة للاستدعاء من الوكيل: من دون
قناة، أو موفّر نماذج، أو خطاف، أو خدمة، أو واجهة خلفية للإعداد. ويولّد
بيانات manifest الوصفية التي يحتاج إليها OpenClaw لاكتشاف الأدوات من دون تحميل شيفرة
وقت تشغيل plugin.
بالنسبة إلى plugins الخاصة بالموفّرين أو القنوات أو الخطافات أو الخدمات أو ذات الإمكانات المختلطة، ابدأ بدلًا من ذلك بـ
إنشاء plugins، أو Plugins القنوات،
أو Plugins الموفّرين.
المتطلبات
- Node 22.22.3+، أو Node 24.15+، أو Node 25.9+.
- مخرجات حزمة TypeScript ESM.
typeboxفيdependencies(وليس فقطdevDependencies- إذ يستورده plugin المولّد في وقت التشغيل).openclaw >=2026.5.17، وهو أول إصدار يصدّرopenclaw/plugin-sdk/tool-plugin.- جذر حزمة يشحن
dist/، وopenclaw.plugin.json، وpackage.json.
البدء السريع
plugins init الهيكل التالي:
يشغّل
npm run plugin:build الأمر npm run build (tsc) ثم
openclaw plugins build --entry ./dist/index.js. ويعيد npm run plugin:validate
البناء ويشغّل openclaw plugins validate --entry ./dist/index.js.
تطبع عملية التحقق الناجحة:
openclaw plugins init <id>:
كتابة أداة
تأخذdefineToolPlugin هوية plugin، ومخطط إعداد اختياريًا، وقائمة
ثابتة من الأدوات. ويُستدل على أنواع المعاملات والإعداد من
مخططات TypeBox.
الأدوات الاختيارية وأدوات المصانع
عيّنoptional: true عندما ينبغي للمستخدمين إضافة الأداة صراحةً إلى قائمة السماح قبل
إرسالها إلى نموذج. تكتب openclaw plugins build إدخال manifest المطابق
toolMetadata.<tool>.optional، بحيث يستطيع OpenClaw معرفة أن
الأداة اختيارية من دون تحميل شيفرة وقت تشغيل plugin.
factory عندما تحتاج الأداة إلى سياق أداة وقت التشغيل قبل إمكان
إنشائها - لتعطيلها لتشغيل محدد، أو فحص حالة صندوق العزل، أو ربط
مساعدات وقت التشغيل. تظل البيانات الوصفية ثابتة رغم إنشاء الأداة الفعلية
في وقت التشغيل.
definePluginEntry
مباشرةً عندما يحسب plugin أسماء الأدوات ديناميكيًا أو يدمج الأدوات
مع الخطافات أو الخدمات أو الموفّرين أو الأوامر.
قيم الإرجاع
تغلّفdefineToolPlugin قيم الإرجاع العادية بتنسيق نتيجة أداة OpenClaw:
- أعِد سلسلة نصية عندما ينبغي أن يرى النموذج ذلك النص نفسه تمامًا.
- أعِد قيمة متوافقة مع JSON عندما تريد أن يرى النموذج JSON منسقًا
وأن يحتفظ OpenClaw بالقيمة الأصلية في
details.
AgentToolResult مخصص أو تريد إعادة استخدام
تنفيذ api.registerTool موجود.
الإعداد
configSchema اختياري. إذا حذفته، يطبّق OpenClaw مخطط كائن فارغًا صارمًا؛
ويظل manifest المولّد يتضمن configSchema.
configSchema، يُحدَّد نوع وسيطة execute الثانية منه:
البيانات الوصفية المولّدة
يجب أن يقرأ OpenClaw manifest الخاص بـ plugin قبل استيراد شيفرة وقت تشغيل plugin. تكشفdefineToolPlugin بيانات وصفية ثابتة لهذا الغرض، و
تكتبها openclaw plugins build في الحزمة. أعد تشغيل المولّد بعد
تغيير معرّف plugin أو اسمه أو وصفه أو مخطط إعداده أو تفعيله أو أسماء
الأدوات:
contracts.tools عقد الاكتشاف المهم: فهو يخبر OpenClaw بأي
plugin يملك كل أداة من دون تحميل وقت تشغيل كل plugin مثبّت. يعني
manifest القديم أن أداة قد تختفي من الاكتشاف، أو أن خطأ تسجيل
يُنسب إلى plugin غير الصحيح.
بيانات الحزمة الوصفية
تحاذيopenclaw plugins build أيضًا package.json مع نقطة دخول وقت التشغيل
المحددة:
./dist/index.js)، لا نقطة دخول مصدر TypeScript.
لا تعمل نقاط دخول المصدر إلا للتطوير المحلي داخل مساحة العمل.
التحقق في CI
يفشلplugins build --check من دون إعادة كتابة الملفات عندما تكون البيانات الوصفية المولّدة
قديمة:
plugins validate مما يلي:
- وجود
openclaw.plugin.jsonواجتيازه محمّل manifest المعتاد. - تصدير نقطة الدخول الحالية بيانات
defineToolPluginالوصفية. - تطابق حقول manifest المولّد مع بيانات نقطة الدخول الوصفية.
- تطابق
contracts.toolsمع أسماء الأدوات المعلنة. - توجيه
package.jsonللعنصرopenclaw.extensionsإلى نقطة دخول وقت التشغيل المحددة.
التثبيت والفحص محليًا
من نسخة OpenClaw منفصلة أو CLI مثبّت، ثبّت مسار الحزمة:النشر
انشر عبر ClawHub بمجرد أن تصبح الحزمة جاهزة. تأخذclawhub package publish
مصدرًا: مجلدًا محليًا، أو مستودع GitHub (owner/repo[@ref])، أو
عنوان URL لملف tarball.
استكشاف الأخطاء وإصلاحها
plugin entry not found: ./dist/index.js
ملف نقطة الدخول المحدد غير موجود. شغّل npm run build، ثم أعد تشغيل
openclaw plugins build --entry ./dist/index.js أو
openclaw plugins validate --entry ./dist/index.js.
plugin entry does not expose defineToolPlugin metadata
لم تصدّر نقطة الدخول قيمة أنشأتها defineToolPlugin. تأكد من أن
التصدير الافتراضي للوحدة هو نتيجة defineToolPlugin(...)، أو مرّر
نقطة الدخول الصحيحة باستخدام --entry.
openclaw.plugin.json generated metadata is stale
لم يعد manifest يطابق بيانات نقطة الدخول الوصفية. شغّل:
openclaw.plugin.json وpackage.json في commit.
package.json openclaw.extensions must include ./dist/index.js
تشير بيانات الحزمة الوصفية إلى نقطة دخول وقت تشغيل مختلفة. شغّل
openclaw plugins build --entry ./dist/index.js كي يحاذي المولّد
بيانات الحزمة الوصفية مع نقطة الدخول التي تنوي شحنها.
Cannot find package 'typebox'
يستورد plugin المبني typebox في وقت التشغيل. أبقه في dependencies،
ثم أعد التثبيت والبناء والتحقق.
لا تظهر الأداة بعد التثبيت
تحقق مما يلي بالترتيب:openclaw plugins inspect <plugin-id> --runtimeopenclaw plugins validate --root <plugin-root> --entry ./dist/index.jsopenclaw.plugin.jsonيحتوي علىcontracts.toolsبأسماء الأدوات المتوقعة.package.jsonيحتوي علىopenclaw.extensions: ["./dist/index.js"].- أُعيد تشغيل Gateway أو تحميله بعد تثبيت Plugin.