Registri kompatibilitas
Kontrak kompatibilitas Plugin dilacak dalam registri inti disrc/plugins/compat/registry.ts.
Setiap rekaman memiliki:
- kode kompatibilitas stabil
- status:
active,deprecated,removal-pending, atauremoved - pemilik: SDK, konfigurasi, penyiapan, kanal, penyedia, eksekusi Plugin, runtime agen, atau inti
- tanggal pengenalan dan deprekasi bila berlaku
- panduan pengganti
- dokumentasi, diagnostik, dan pengujian yang mencakup perilaku lama dan baru
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.
Penyapuan rilis harus memeriksa kedua registri. Jangan hapus migrasi doctor
hanya karena rekaman kompatibilitas runtime atau konfigurasi yang sesuai sudah
kedaluwarsa; verifikasi terlebih dahulu bahwa tidak ada jalur peningkatan yang
didukung yang masih membutuhkan perbaikan tersebut. Validasi ulang juga setiap
anotasi pengganti selama perencanaan rilis karena kepemilikan Plugin dan jejak
konfigurasi dapat berubah saat penyedia dan kanal dipindahkan keluar dari inti.
Paket pemeriksa Plugin
Pemeriksa Plugin sebaiknya berada di luar repo inti OpenClaw sebagai paket/repositori terpisah yang didukung oleh kontrak kompatibilitas dan manifes berversi. CLI hari pertama sebaiknya adalah:- validasi manifes/skema
- versi kompatibilitas kontrak yang diperiksa
- pemeriksaan metadata instalasi/sumber
- pemeriksaan impor jalur dingin
- peringatan deprekasi dan kompatibilitas
--json untuk keluaran stabil yang dapat dibaca mesin dalam anotasi CI.
Inti OpenClaw harus mengekspos kontrak dan fixture yang dapat dikonsumsi
pemeriksa, tetapi tidak boleh menerbitkan biner pemeriksa dari paket utama
openclaw.
Jalur penerimaan pengelola
Gunakan Blacksmith Testbox yang didukung Crabbox untuk jalur penerimaan paket yang dapat diinstal saat memvalidasi pemeriksa eksternal terhadap paket Plugin OpenClaw. Jalankan dari checkout OpenClaw yang bersih setelah paket dibangun:Kebijakan deprekasi
OpenClaw tidak boleh menghapus kontrak Plugin terdokumentasi dalam rilis yang sama dengan rilis yang memperkenalkan penggantinya. Urutan migrasinya adalah:- Tambahkan kontrak baru.
- Pertahankan perilaku lama tetap terhubung melalui adaptor kompatibilitas bernama.
- Keluarkan diagnostik atau peringatan saat penulis Plugin dapat bertindak.
- Dokumentasikan pengganti dan lini waktunya.
- Uji jalur lama dan baru.
- Tunggu melewati jendela migrasi yang diumumkan.
- Hapus hanya dengan persetujuan rilis pemutus yang eksplisit.
active.
Area kompatibilitas saat ini
Rekaman kompatibilitas saat ini mencakup:- impor SDK luas lama seperti
openclaw/plugin-sdk/compat - bentuk Plugin lama yang hanya hook dan
before_agent_start - nama hook pembersihan
api.on("deactivate", ...)lama saat Plugin bermigrasi kegateway_stop - entrypoint Plugin
activate(api)lama saat Plugin bermigrasi keregister(api) - alias SDK lama seperti
openclaw/extension-api,openclaw/plugin-sdk/channel-runtime, pembangun statusopenclaw/plugin-sdk/command-auth,openclaw/plugin-sdk/test-utils(diganti oleh subjalur pengujianopenclaw/plugin-sdk/*yang terfokus), dan alias tipeClawdbotConfig/OpenClawSchemaType - allowlist Plugin bawaan dan perilaku pengaktifan
- metadata manifes env-var penyedia/kanal lama
- hook Plugin penyedia lama dan alias tipe sementara penyedia pindah ke hook katalog, auth, thinking, replay, dan transport eksplisit
- alias runtime lama seperti
api.runtime.taskFlow,api.runtime.subagent.getSession,api.runtime.stt, danapi.runtime.config.loadConfig()/api.runtime.config.writeConfigFile(...)yang dideprekasi - field callback datar WhatsApp
WebInboundMessagesepertibody,chatId,reply(...), danmediaPathsementara konsumen callback bermigrasi ke konteksevent,payload,quote,group, danplatformWebInboundCallbackMessagebersarang - field penerimaan tingkat atas WhatsApp
WebInboundMessagesepertifrom,conversationId,accountId,accessControlPassed, danchatTypesementara konsumen callback bermigrasi ke envelopeadmission - pendaftaran terpisah Plugin memori lama sementara Plugin memori pindah ke
registerMemoryCapability - pendaftaran penyedia embedding khusus memori lama sementara penyedia embedding
pindah ke
api.registerEmbeddingProvider(...)dancontracts.embeddingProviders - helper SDK kanal lama untuk skema pesan native, gating mention, pemformatan envelope masuk, dan nesting kapabilitas persetujuan
- alias helper kunci rute kanal dan target-sebanding lama sementara Plugin
pindah ke
openclaw/plugin-sdk/channel-route - petunjuk aktivasi yang sedang digantikan oleh kepemilikan kontribusi manifes
- fallback runtime
setup-apisementara deskriptor penyiapan pindah ke metadata dinginsetup.requiresRuntime: false - hook
discoverypenyedia sementara hook katalog penyedia pindah kecatalog.run(...) - metadata kanal
showConfigured/showInSetupsementara paket kanal pindah keopenclaw.channel.exposure - kunci konfigurasi runtime-policy lama sementara doctor memigrasikan operator ke
agentRuntime - fallback metadata konfigurasi kanal bawaan yang dihasilkan sementara metadata
channelConfigsyang mendahulukan registri diterapkan - flag env penonaktifan registri Plugin persisten dan migrasi instalasi sementara
alur perbaikan memigrasikan operator ke
openclaw plugins registry --refreshdanopenclaw doctor --fix - jalur konfigurasi pencarian web, pengambilan web, dan x_search milik Plugin
lama sementara doctor memigrasikannya ke
plugins.entries.<plugin>.config - konfigurasi
plugins.installslama yang ditulis pengguna dan alias jalur muat Plugin bawaan sementara metadata instalasi pindah ke ledger Plugin yang dikelola state
Alias Datar Callback Masuk WhatsApp
Callback runtime WhatsApp mengirimkanWebInboundMessage: konteks bersarang
kanonis event, payload, quote, group, dan platform ditambah alias datar
yang dideprekasi untuk field callback yang sudah dikirimkan. Kode callback baru
sebaiknya membaca konteks bersarang. Kode yang membangun pesan callback
bersarang bersih dapat menggunakan WebInboundCallbackMessage; listener
kompatibilitas yang masih menyuntikkan pesan pengujian atau Plugin datar lama
sebaiknya menggunakan LegacyFlatWebInboundMessage atau
WebInboundMessageInput.
Alias datar tetap tersedia hingga 2026-08-30. Jendela penghapusan tersebut
hanya berlaku untuk akses alias datar; bentuk callback bersarang adalah kontrak
runtime kanonis. Anotasi TypeScript @deprecated pada setiap alias datar
menyebutkan pengganti bersarangnya yang tepat. Contoh umum:
id,timestamp, danisBatchedpindah ke bawahevent.body,mediaPath,mediaType,mediaFileName,mediaUrl,location, danuntrustedStructuredContextpindah ke bawahpayload.to,chatId, field pengirim/diri sendiri,sendComposing,reply(...), dansendMedia(...)pindah ke bawahplatform.- field
replyTo*pindah ke bawahquote, dan field subjek/peserta/mention grup pindah ke bawahgroup.
payload.untrustedStructuredContext diekstrak dari payload penyedia masuk.
Plugin harus memeriksa label, source, dan type sebelum memperlakukan
payload-nya sebagai otoritatif.
Field Penerimaan Masuk WhatsApp
Pesan callback WhatsApp yang diterima kini membawaadmission, envelope yang
aman untuk publik bagi keputusan kontrol akses yang menerima pesan tersebut.
Kode callback baru sebaiknya membaca fakta penerimaan dari msg.admission,
bukan dari field penerimaan tingkat atas yang lebih lama.
Field tingkat atas tetap tersedia hingga 2026-08-30. Anotasi TypeScript
@deprecated menyebutkan setiap penggantinya:
fromdanconversationIdpindah keadmission.conversation.id.accountIdpindah keadmission.accountId.accessControlPassedadalah tampilan kompatibilitas turunan dariadmission.ingress.decision === "allow"; pada pesan yang sudah membawaadmission, menulis boolean lama tidak menulis ulang grafik ingress.chatTypepindah keadmission.conversation.kind.
Catatan rilis
Catatan rilis harus menyertakan deprekasi Plugin yang akan datang dengan tanggal target dan tautan ke dokumentasi migrasi. Peringatan tersebut perlu terjadi sebelum jalur kompatibilitas berpindah keremoval-pending atau removed.