defineToolPlugin saat
Plugin memiliki daftar alat tetap dan Anda ingin OpenClaw menghasilkan metadata manifest
yang membuat alat tersebut tetap dapat ditemukan tanpa memuat kode runtime.
Alur yang direkomendasikan adalah:
- Scaffold paket dengan
openclaw plugins init. - Tulis alat dengan
defineToolPlugin. - Build JavaScript.
- Hasilkan metadata
openclaw.plugin.jsondanpackage.jsondenganopenclaw plugins build. - Validasi metadata yang dihasilkan sebelum menerbitkan atau menginstal.
Persyaratan
- Node >= 22.
- Output paket TypeScript ESM.
typeboxuntuk skema konfigurasi dan parameter alat.openclaw >=2026.5.17, versi OpenClaw pertama yang mengeksporopenclaw/plugin-sdk/tool-plugin.- Root paket yang dapat mengirimkan
dist/,openclaw.plugin.json, danpackage.json.
typebox saat runtime, jadi pertahankan typebox di
dependencies, bukan hanya devDependencies.
Mulai cepat
Buat paket Plugin baru:src/index.ts: entridefineToolPlugindengan alatecho.src/index.test.ts: pengujian metadata kecil.tsconfig.json: output TypeScript NodeNext kedist/.package.json: skrip, dependensi runtime, danopenclaw.extensions: ["./dist/index.js"].openclaw.plugin.json: metadata manifest yang dihasilkan untuk alat awal.
Tulis alat
defineToolPlugin menerima identitas Plugin, skema konfigurasi opsional, dan
daftar alat statis. Jenis parameter dan konfigurasi disimpulkan dari skema
TypeBox.
Alat opsional dan factory
Tetapkanoptional: true saat pengguna harus secara eksplisit mengizinkan alat
sebelum dikirim ke model:
openclaw plugins build menulis entri manifest toolMetadata.<tool>.optional
yang sesuai, sehingga OpenClaw dapat menemukan alat tanpa memuat kode runtime
Plugin.
Gunakan factory saat alat memerlukan konteks alat runtime sebelum dapat
dibuat. Factory menjaga metadata tetap statis sambil memungkinkan alat memilih
tidak aktif untuk run tertentu, memeriksa status sandbox, atau mengikat helper runtime.
definePluginEntry secara langsung saat
Plugin menghitung nama alat secara dinamis atau menggabungkan alat dengan hook,
layanan, penyedia, perintah, atau permukaan runtime lainnya.
Nilai kembalian
defineToolPlugin membungkus nilai kembalian biasa ke dalam format hasil alat
OpenClaw:
- Kembalikan string saat model harus melihat teks persis tersebut.
- Kembalikan nilai yang kompatibel dengan JSON saat Anda ingin model melihat JSON terformat
dan OpenClaw menyimpan nilai asli di
details.
AgentToolResult khusus atau menggunakan kembali
implementasi api.registerTool yang sudah ada. Gunakan definePluginEntry sebagai ganti
defineToolPlugin saat Anda memerlukan alat yang sepenuhnya dinamis atau kapabilitas
Plugin campuran.
Konfigurasi
configSchema bersifat opsional. Jika Anda menghilangkannya, OpenClaw menggunakan skema objek kosong
yang ketat dan manifest yang dihasilkan tetap menyertakan configSchema.
configSchema, argumen execute kedua diketik dari
skema:
Metadata yang dihasilkan
OpenClaw menemukan Plugin terinstal dari metadata dingin. OpenClaw harus dapat membaca manifest Plugin sebelum mengimpor kode runtime Plugin. Karena itu,defineToolPlugin
mengekspos metadata statis, dan openclaw plugins build menulis metadata tersebut
ke dalam paket.
Jalankan generator setelah mengubah id, nama, deskripsi, skema konfigurasi,
aktivasi, atau nama alat Plugin:
contracts.tools adalah kontrak penemuan yang penting. Ini memberi tahu OpenClaw Plugin mana
yang memiliki setiap alat tanpa memuat setiap runtime Plugin terinstal. Jika
manifest sudah usang, alat mungkin hilang dari penemuan atau Plugin yang salah
mungkin disalahkan atas kesalahan pendaftaran.
Metadata paket
Untuk alur kerja Plugin alat sederhana,openclaw plugins build menyelaraskan
package.json dengan entri runtime tunggal yang dipilih:
./dist/index.js untuk paket terinstal. Entri sumber
berguna dalam pengembangan workspace, tetapi paket yang diterbitkan tidak boleh
bergantung pada pemuatan runtime TypeScript.
Validasi di CI
Gunakanplugins build --check untuk menggagalkan CI saat metadata yang dihasilkan sudah usang tanpa
menulis ulang file:
plugins validate memeriksa bahwa:
openclaw.plugin.jsonada dan lolos loader manifest normal.- Entri saat ini mengekspor metadata
defineToolPlugin. - Bidang manifest yang dihasilkan cocok dengan metadata entri.
contracts.toolscocok dengan nama alat yang dideklarasikan.package.jsonmengarahkanopenclaw.extensionske entri runtime yang dipilih.
Instal dan periksa secara lokal
Dari checkout OpenClaw terpisah atau CLI terinstal, instal path paket:Terbitkan
Terbitkan melalui ClawHub saat paket siap:Pemecahan masalah
plugin entry not found: ./dist/index.js
File entri yang dipilih tidak ada. Jalankan npm run build, lalu jalankan ulang
openclaw plugins build --entry ./dist/index.js atau
openclaw plugins validate --entry ./dist/index.js.
plugin entry does not expose defineToolPlugin metadata
Entri tidak mengekspor nilai yang dibuat oleh defineToolPlugin. Periksa bahwa
ekspor default modul adalah hasil defineToolPlugin(...), atau teruskan
entri yang benar dengan --entry.
openclaw.plugin.json generated metadata is stale
Manifest tidak lagi cocok dengan metadata entri. Jalankan:
openclaw.plugin.json dan package.json.
package.json openclaw.extensions must include ./dist/index.js
Metadata paket mengarah ke entri runtime yang berbeda. Jalankan
openclaw plugins build --entry ./dist/index.js agar generator menyelaraskan
metadata paket dengan entri yang ingin Anda kirimkan.
Cannot find package 'typebox'
Plugin yang di-build mengimpor typebox saat runtime. Pertahankan typebox di
dependencies, instal ulang dependensi paket, build ulang, dan jalankan ulang validasi.
Alat tidak muncul setelah instalasi
Periksa ini secara berurutan:openclaw plugins inspect <plugin-id> --runtimeopenclaw plugins validate --root <plugin-root> --entry ./dist/index.jsopenclaw.plugin.jsonmemilikicontracts.toolsdengan nama alat yang diharapkan.package.jsonmemilikiopenclaw.extensions: ["./dist/index.js"].- Gateway telah dimulai ulang atau dimuat ulang setelah menginstal Plugin.