Plugin maintainer reference
Kompatibilitas Plugin
OpenClaw mempertahankan kontrak Plugin lama yang terhubung melalui adaptor kompatibilitas bernama sebelum menghapusnya. Ini melindungi Plugin bawaan dan eksternal yang sudah ada sementara kontrak SDK, manifes, penyiapan, konfigurasi, dan runtime agen terus berkembang.
Registri kompatibilitas
Kontrak kompatibilitas Plugin dilacak dalam registri inti di
src/plugins/compat/registry.ts. Setiap rekaman memiliki:
- kode kompatibilitas yang stabil
- status:
active,deprecated,removal-pending, atauremoved - pemilik:
sdk,config,setup,channel,provider,plugin-execution,agent-runtime, ataucore - tanggal pengenalan dan penghentian jika berlaku
- panduan pengganti
- dokumentasi, diagnostik, dan pengujian yang mencakup perilaku lama dan baru
Registri tersebut menjadi sumber untuk perencanaan pengelola dan pemeriksaan inspektur Plugin pada masa mendatang. Jika perilaku yang dihadapi Plugin berubah, tambahkan atau perbarui rekaman kompatibilitas dalam perubahan yang sama dengan penambahan adaptor.
Kompatibilitas perbaikan dan migrasi Doctor dilacak secara terpisah di
src/commands/doctor/shared/deprecation-compat.ts. Rekaman tersebut mencakup bentuk
konfigurasi lama, tata letak ledger instalasi, dan shim perbaikan yang mungkin perlu
tetap tersedia setelah jalur kompatibilitas runtime dihapus.
Pemeriksaan rilis harus memeriksa kedua registri. Jangan menghapus migrasi Doctor hanya karena rekaman kompatibilitas runtime atau konfigurasi yang sesuai telah kedaluwarsa; terlebih dahulu pastikan tidak ada jalur peningkatan yang masih didukung dan tetap memerlukan perbaikan tersebut. Validasi ulang juga setiap anotasi pengganti selama perencanaan rilis, karena kepemilikan Plugin dan cakupan konfigurasi dapat berubah saat penyedia dan kanal dipindahkan keluar dari inti.
Kebijakan penghentian
OpenClaw tidak boleh menghapus kontrak Plugin yang terdokumentasi dalam rilis yang sama dengan rilis yang memperkenalkan penggantinya. Urutan migrasi:
- Tambahkan kontrak baru.
- Pertahankan perilaku lama yang terhubung melalui adaptor kompatibilitas bernama.
- Keluarkan diagnostik atau peringatan saat pembuat Plugin dapat bertindak.
- Dokumentasikan pengganti dan linimasa.
- Uji jalur lama dan baru.
- Tunggu hingga jangka waktu migrasi yang diumumkan berakhir.
- Hapus hanya dengan persetujuan eksplisit untuk rilis yang membawa perubahan tidak kompatibel.
Rekaman yang dihentikan harus menyertakan tanggal mulai peringatan, pengganti, tautan
dokumentasi, dan tanggal penghapusan akhir paling lambat tiga bulan setelah peringatan
dimulai. Jangan menambahkan jalur kompatibilitas yang dihentikan dengan jangka waktu
penghapusan tanpa batas, kecuali pengelola secara eksplisit memutuskan bahwa itu adalah
kompatibilitas permanen dan menandainya sebagai active.
Area kompatibilitas saat ini
Registri saat ini melacak sekitar 70 kode kompatibilitas di seluruh area berikut. Kode Plugin baru harus menggunakan pengganti di setiap area dan dalam panduan migrasi terkait; Plugin yang sudah ada dapat terus menggunakan jalur kompatibilitas hingga dokumentasi, diagnostik, dan catatan rilis mengumumkan jangka waktu penghapusan.
- impor SDK luas lama seperti
openclaw/plugin-sdk/compat - bentuk Plugin lama yang hanya menggunakan hook dan
before_agent_start - nama hook pembersihan lama
api.on("deactivate", ...)selama Plugin bermigrasi kegateway_stop - titik masuk Plugin lama
activate(api)selama Plugin bermigrasi keregister(api) - alias SDK lama seperti
openclaw/extension-api,openclaw/plugin-sdk/channel-runtime, pembuat statusopenclaw/plugin-sdk/command-auth,openclaw/plugin-sdk/test-utils(digantikan oleh subjalur pengujianopenclaw/plugin-sdk/*yang terfokus), serta alias tipeClawdbotConfig/OpenClawSchemaType - daftar izin dan perilaku pengaktifan Plugin bawaan
- metadata manifes variabel lingkungan penyedia/kanal lama
- hook Plugin penyedia dan alias tipe lama selama penyedia berpindah ke hook katalog, autentikasi, penalaran, pemutaran ulang, dan transportasi yang eksplisit
- alias runtime lama seperti
api.runtime.taskFlow,api.runtime.subagent.getSession,api.runtime.stt, sertaapi.runtime.config.loadConfig()/api.runtime.config.writeConfigFile(...)yang dihentikan - kolom panggilan balik datar
WebInboundMessageWhatsApp (lihat di bawah) - kolom penerimaan tingkat atas
WebInboundMessageWhatsApp (lihat di bawah) - pendaftaran terpisah Plugin memori lama selama Plugin memori berpindah ke
registerMemoryCapability - pendaftaran penyedia embedding khusus memori lama selama penyedia embedding
berpindah ke
api.registerEmbeddingProvider(...)dancontracts.embeddingProviders - pembantu SDK kanal lama untuk skema pesan native, pembatasan penyebutan, pemformatan amplop masuk, dan penyarangan kapabilitas persetujuan
- alias pembantu kunci rute kanal dan target sebanding lama selama
Plugin berpindah ke
openclaw/plugin-sdk/channel-route - petunjuk aktivasi yang digantikan oleh kepemilikan kontribusi manifes
- fallback runtime
setup-apiselama deskriptor penyiapan berpindah ke metadata jalur dinginsetup.requiresRuntime: false - hook
discoverypenyedia selama hook katalog penyedia berpindah kecatalog.run(...) - metadata kanal
showConfigured/showInSetupselama paket kanal berpindah keopenclaw.channel.exposure - kunci konfigurasi kebijakan runtime lama selama Doctor memigrasikan operator ke
agentRuntime - fallback metadata konfigurasi kanal bawaan yang dihasilkan selama metadata
channelConfigsberbasis registri diterapkan - tanda lingkungan migrasi instalasi dan penonaktifan registri Plugin yang dipertahankan
selama alur perbaikan memigrasikan operator ke
openclaw plugins registry --refreshdanopenclaw doctor --fix - jalur konfigurasi pencarian web, pengambilan web, dan x_search lama milik Plugin
selama Doctor memigrasikannya ke
plugins.entries.<plugin>.config - konfigurasi buatan
plugins.installslama dan alias jalur pemuatan Plugin bawaan selama metadata instalasi berpindah ke ledger Plugin yang dikelola oleh status
Alias datar panggilan balik masuk WhatsApp
Panggilan balik runtime WhatsApp mengirimkan WebInboundMessage: konteks bertingkat
kanonis event, payload, quote, group, dan platform, beserta alias datar
yang dihentikan untuk kolom panggilan balik yang telah dirilis. Kode panggilan balik
baru harus membaca konteks bertingkat. Kode yang membuat pesan panggilan balik
bertingkat yang bersih dapat menggunakan WebInboundCallbackMessage; pendengar
kompatibilitas yang masih menyisipkan pesan pengujian atau Plugin datar lama harus
menggunakan LegacyFlatWebInboundMessage atau WebInboundMessageInput.
Alias datar tetap tersedia hingga 2026-08-30; jangka waktu tersebut hanya berlaku
untuk akses alias datar, bukan bentuk bertingkat, yang merupakan kontrak runtime
kanonis. Anotasi TypeScript @deprecated setiap alias datar menyebutkan pengganti
bertingkatnya secara tepat. Contoh umum:
id,timestamp, danisBatchedberpindah ke dalamevent.body,mediaPath,mediaType,mediaFileName,mediaUrl,location, danuntrustedStructuredContextberpindah ke dalampayload.to,chatId, kolom pengirim/diri sendiri,sendComposing,reply(...), dansendMedia(...)berpindah ke dalamplatform.- Kolom
replyTo*berpindah ke dalamquote; kolom subjek/peserta/penyebutan grup berpindah ke dalamgroup.
payload.untrustedStructuredContext diekstrak dari payload penyedia yang masuk.
Plugin harus memeriksa label, source, dan type sebelum memperlakukan payload
di dalamnya sebagai sumber otoritatif.
Kolom penerimaan masuk WhatsApp
Pesan panggilan balik WhatsApp yang diterima membawa admission, yaitu amplop yang
aman untuk publik bagi keputusan kontrol akses yang menerima pesan tersebut. Kode
panggilan balik baru harus membaca fakta penerimaan dari msg.admission, bukan dari
kolom penerimaan tingkat atas yang lebih lama.
Kolom tingkat atas tetap tersedia hingga 2026-08-30. Anotasi TypeScript
@deprecated setiap kolom menyebutkan penggantinya:
fromdanconversationIdberpindah keadmission.conversation.id.accountIdberpindah keadmission.accountId.accessControlPassedadalah tampilan kompatibilitas turunan dariadmission.ingress.decision === "allow"; pada pesan yang sudah membawaadmission, penulisan boolean lama tidak menulis ulang graf ingress.chatTypeberpindah keadmission.conversation.kind.
Paket inspektur Plugin
Inspektur Plugin harus berada di luar repositori inti OpenClaw sebagai paket/repositori terpisah yang didukung oleh kontrak kompatibilitas dan manifes berversi. CLI pada hari pertama harus berupa:
openclaw-plugin-inspector ./my-pluginCLI tersebut harus menghasilkan validasi manifes/skema, versi kompatibilitas kontrak
yang diperiksa, pemeriksaan metadata instalasi/sumber, pemeriksaan impor jalur dingin,
serta peringatan penghentian/kompatibilitas. Gunakan --json untuk keluaran stabil
yang dapat dibaca mesin dalam anotasi CI. Inti OpenClaw harus mengekspos kontrak dan
fixture yang dapat digunakan inspektur, tetapi tidak boleh memublikasikan biner
inspektur dari paket utama openclaw.
Jalur penerimaan pengelola
Gunakan Blacksmith Testbox yang didukung Crabbox untuk jalur penerimaan paket yang dapat diinstal saat memvalidasi inspektur eksternal terhadap paket Plugin OpenClaw. Jalankan dari checkout OpenClaw yang bersih setelah paket dibangun:
pnpm crabbox:run -- --provider blacksmith-testbox --timing-json --shell -- "pnpm install && pnpm build && npm exec --yes @openclaw/plugin-inspector@0.1.0 -- ./extensions/telegram --json"pnpm crabbox:run -- --provider blacksmith-testbox --timing-json --shell -- "npm exec --yes @openclaw/plugin-inspector@0.1.0 -- ./extensions/discord --json"pnpm crabbox:run -- --provider blacksmith-testbox --timing-json --shell -- "npm exec --yes @openclaw/plugin-inspector@0.1.0 -- <clawhub-plugin-dir> --json"Pertahankan jalur ini sebagai pilihan khusus pengelola, karena jalur tersebut menginstal paket npm eksternal dan dapat memeriksa paket Plugin yang dikloning di luar repositori. Penjaga repositori lokal mencakup peta ekspor SDK, metadata registri kompatibilitas, pengurangan impor SDK yang dihentikan, dan batas impor ekstensi bawaan; bukti inspektur Testbox mencakup paket sebagaimana digunakan oleh pembuat Plugin eksternal.
Catatan rilis
Catatan rilis harus menyertakan penghentian Plugin yang akan datang beserta tanggal
target dan tautan ke dokumentasi migrasi, sebelum jalur kompatibilitas berpindah ke
removal-pending atau removed.