defineToolPlugin عندما يملك Plugin قائمة ثابتة من الأدوات وتريد أن ينشئ OpenClaw بيانات التعريف الخاصة بالبيان التي تجعل تلك الأدوات قابلة للاكتشاف دون تحميل كود وقت التشغيل.
التدفق الموصى به هو:
- أنشئ هيكل حزمة باستخدام
openclaw plugins init. - اكتب الأدوات باستخدام
defineToolPlugin. - ابنِ JavaScript.
- أنشئ بيانات تعريف
openclaw.plugin.jsonوpackage.jsonباستخدامopenclaw plugins build. - تحقّق من بيانات التعريف المُنشأة قبل النشر أو التثبيت.
المتطلبات
- Node >= 22.
- إخراج حزمة TypeScript ESM.
typeboxلمخططات الإعدادات ومعاملات الأدوات.openclaw >=2026.5.17، أول إصدار من OpenClaw يصدّرopenclaw/plugin-sdk/tool-plugin.- جذر حزمة يمكنه شحن
dist/وopenclaw.plugin.jsonوpackage.json.
typebox في وقت التشغيل، لذا أبقِ typebox ضمن
dependencies، وليس فقط ضمن devDependencies.
البدء السريع
أنشئ حزمة Plugin جديدة:src/index.ts: نقطة دخولdefineToolPluginتتضمن أداةecho.src/index.test.ts: اختبارًا صغيرًا لبيانات التعريف.tsconfig.json: إخراج TypeScript بنمط NodeNext إلىdist/.package.json: السكربتات وتبعيات وقت التشغيل وopenclaw.extensions: ["./dist/index.js"].openclaw.plugin.json: بيانات تعريف البيان المُنشأة للأداة الأولية.
كتابة أداة
يأخذdefineToolPlugin هوية Plugin ومخطط إعدادات اختياريًا وقائمة ثابتة من الأدوات. تُستنتج أنواع المعاملات والإعدادات من مخططات TypeBox.
الأدوات الاختيارية وأدوات المصنع
عيّنoptional: true عندما ينبغي للمستخدمين السماح بالأداة صراحةً قبل إرسالها إلى نموذج:
openclaw plugins build إدخال البيان المطابق toolMetadata.<tool>.optional، بحيث يستطيع OpenClaw اكتشاف الأداة دون تحميل كود وقت تشغيل Plugin.
استخدم factory عندما تحتاج الأداة إلى سياق أداة وقت التشغيل قبل إنشائها. يُبقي المصنع بيانات التعريف ثابتة مع السماح للأداة بالانسحاب لتشغيل محدد، أو فحص حالة صندوق العزل، أو ربط مساعدي وقت التشغيل.
definePluginEntry مباشرةً عندما يحسب Plugin أسماء الأدوات ديناميكيًا أو يدمج الأدوات مع الخطافات أو الخدمات أو الموفّرين أو الأوامر أو أسطح وقت تشغيل أخرى.
قيم الإرجاع
يلفdefineToolPlugin قيم الإرجاع العادية ضمن تنسيق نتيجة الأداة في OpenClaw:
- أرجع سلسلة نصية عندما يجب أن يرى النموذج ذلك النص بالضبط.
- أرجع قيمة متوافقة مع JSON عندما تريد أن يرى النموذج JSON منسقًا
وأن يحتفظ OpenClaw بالقيمة الأصلية في
details.
AgentToolResult مخصص أو إعادة استخدام تنفيذ api.registerTool موجود. استخدم definePluginEntry بدلًا من defineToolPlugin عندما تحتاج إلى أدوات ديناميكية بالكامل أو قدرات Plugin مختلطة.
الإعدادات
configSchema اختياري. إذا حذفته، يستخدم OpenClaw مخطط كائن فارغًا صارمًا ويظل البيان المُنشأ يتضمن configSchema.
configSchema، يُكتب نوع وسيط execute الثاني من المخطط:
بيانات التعريف المُنشأة
يكتشف OpenClaw Plugins المثبتة من بيانات تعريف باردة. يجب أن يكون قادرًا على قراءة بيان Plugin قبل استيراد كود وقت تشغيل Plugin. لذلك يكشفdefineToolPlugin بيانات تعريف ثابتة، ويكتب openclaw plugins build تلك البيانات في الحزمة.
شغّل المُنشئ بعد تغيير معرّف Plugin أو اسمه أو وصفه أو مخطط إعداداته أو التنشيط أو أسماء الأدوات:
contracts.tools هو عقد الاكتشاف المهم. يخبر OpenClaw أي Plugin يملك كل أداة دون تحميل وقت تشغيل كل Plugin مثبت. إذا كان البيان قديمًا، فقد تكون الأداة مفقودة من الاكتشاف أو قد يُلام Plugin الخطأ على خطأ تسجيل.
بيانات تعريف الحزمة
بالنسبة إلى تدفق Plugin الأدوات البسيط، يضبطopenclaw plugins build
package.json ليتوافق مع نقطة دخول وقت التشغيل المفردة المحددة:
./dist/index.js للحزم المثبتة. نقاط دخول المصدر مفيدة في تطوير مساحة العمل، لكن الحزم المنشورة يجب ألا تعتمد على تحميل وقت تشغيل TypeScript.
التحقق في CI
استخدمplugins build --check لإفشال CI عندما تكون بيانات التعريف المُنشأة قديمة دون إعادة كتابة الملفات:
plugins validate مما يلي:
- وجود
openclaw.plugin.jsonواجتيازه محمّل البيان العادي. - تصدير نقطة الدخول الحالية بيانات تعريف
defineToolPlugin. - تطابق حقول البيان المُنشأ مع بيانات تعريف نقطة الدخول.
- تطابق
contracts.toolsمع أسماء الأدوات المعلنة. - توجيه
package.jsonلـopenclaw.extensionsإلى نقطة دخول وقت التشغيل المحددة.
التثبيت والفحص محليًا
من نسخة OpenClaw منفصلة أو CLI مثبتة، ثبّت مسار الحزمة:النشر
انشر عبر ClawHub عندما تصبح الحزمة جاهزة:استكشاف الأخطاء وإصلاحها
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
لم يعد البيان يطابق بيانات تعريف نقطة الدخول. شغّل:
openclaw.plugin.json وpackage.json في Git.
package.json openclaw.extensions must include ./dist/index.js
تشير بيانات تعريف الحزمة إلى نقطة دخول وقت تشغيل مختلفة. شغّل
openclaw plugins build --entry ./dist/index.js لكي يضبط المُنشئ بيانات تعريف الحزمة لتتوافق مع نقطة الدخول التي تنوي شحنها.
Cannot find package 'typebox'
يستورد Plugin المبني typebox في وقت التشغيل. أبقِ typebox ضمن
dependencies، وأعد تثبيت تبعيات الحزمة، وأعد البناء، ثم أعد تشغيل التحقق.
لا تظهر الأداة بعد التثبيت
تحقق مما يلي بالترتيب:openclaw plugins inspect <plugin-id> --runtimeopenclaw plugins validate --root <plugin-root> --entry ./dist/index.js- يحتوي
openclaw.plugin.jsonعلىcontracts.toolsمع أسماء الأدوات المتوقعة. - يحتوي
package.jsonعلىopenclaw.extensions: ["./dist/index.js"]. - أُعيد تشغيل Gateway أو إعادة تحميله بعد تثبيت Plugin.