Langsung ke konten utama

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

OpenClaw telah berpindah dari lapisan kompatibilitas mundur yang luas ke arsitektur plugin modern dengan impor yang terfokus dan terdokumentasi. Jika plugin Anda dibuat sebelum arsitektur baru, panduan ini membantu Anda melakukan migrasi.

Apa yang berubah

Sistem plugin lama menyediakan dua permukaan yang sangat terbuka yang memungkinkan plugin mengimpor apa pun yang dibutuhkan dari satu titik masuk:
  • openclaw/plugin-sdk/compat - satu impor yang mengekspor ulang puluhan helper. Ini diperkenalkan untuk menjaga plugin lama berbasis hook tetap berfungsi saat arsitektur plugin baru sedang dibangun.
  • openclaw/plugin-sdk/infra-runtime - barrel helper runtime luas yang mencampur event sistem, status Heartbeat, antrean pengiriman, helper fetch/proxy, helper file, tipe persetujuan, dan utilitas yang tidak terkait.
  • openclaw/plugin-sdk/config-runtime - barrel kompatibilitas config luas yang masih membawa helper load/write langsung yang sudah deprecated selama jendela migrasi.
  • openclaw/extension-api - bridge yang memberi plugin akses langsung ke helper sisi host seperti runner agen tertanam.
  • api.registerEmbeddedExtensionFactory(...) - hook ekstensi bundel khusus Pi yang telah dihapus yang dapat mengamati event embedded-runner seperti tool_result.
Permukaan impor yang luas kini deprecated. Permukaan itu masih berfungsi saat runtime, tetapi plugin baru tidak boleh menggunakannya, dan plugin yang ada sebaiknya bermigrasi sebelum rilis mayor berikutnya menghapusnya. API pendaftaran factory ekstensi tertanam khusus Pi telah dihapus; gunakan middleware hasil tool sebagai gantinya. OpenClaw tidak menghapus atau menafsirkan ulang perilaku plugin terdokumentasi dalam perubahan yang sama yang memperkenalkan penggantinya. Perubahan kontrak yang breaking harus terlebih dahulu melalui adapter kompatibilitas, diagnostik, docs, dan jendela deprecation. Itu berlaku untuk impor SDK, field manifest, API setup, hook, dan perilaku pendaftaran runtime.
Lapisan kompatibilitas mundur akan dihapus dalam rilis mayor mendatang. Plugin yang masih mengimpor dari permukaan ini akan rusak saat itu terjadi. Pendaftaran factory ekstensi tertanam khusus Pi sudah tidak lagi dimuat.

Mengapa ini berubah

Pendekatan lama menyebabkan masalah:
  • Startup lambat - mengimpor satu helper memuat puluhan modul yang tidak terkait
  • Dependensi sirkular - re-export luas memudahkan pembuatan siklus impor
  • Permukaan API tidak jelas - tidak ada cara untuk mengetahui ekspor mana yang stabil vs internal
SDK plugin modern memperbaiki ini: setiap path impor (openclaw/plugin-sdk/\<subpath\>) adalah modul kecil dan mandiri dengan tujuan yang jelas dan kontrak terdokumentasi. Seam kemudahan provider legacy untuk channel bundel juga sudah hilang. Seam helper bermerek channel adalah shortcut privat mono-repo, bukan kontrak plugin yang stabil. Gunakan subpath SDK generik yang sempit sebagai gantinya. Di dalam workspace plugin bundel, simpan helper milik provider di api.ts atau runtime-api.ts milik plugin itu sendiri. Contoh provider bundel saat ini:
  • Anthropic menyimpan helper stream khusus Claude di seam api.ts / contract-api.ts miliknya sendiri
  • OpenAI menyimpan builder provider, helper model default, dan builder provider realtime di api.ts miliknya sendiri
  • OpenRouter menyimpan builder provider dan helper onboarding/config di api.ts miliknya sendiri

Rencana migrasi Talk dan suara realtime

Kode Talk untuk suara realtime, telephony, meeting, dan browser sedang dipindahkan dari pencatatan turn lokal permukaan ke controller sesi Talk bersama yang diekspor oleh openclaw/plugin-sdk/realtime-voice. Controller baru memiliki envelope event Talk umum, status turn aktif, status capture, status audio output, riwayat event terbaru, dan penolakan turn usang. Plugin provider harus tetap memiliki sesi realtime spesifik vendor; plugin permukaan harus tetap memiliki capture, playback, telephony, dan kekhasan meeting. Migrasi Talk ini sengaja dibuat bersih meski breaking:
  1. Simpan primitive controller/runtime bersama di plugin-sdk/realtime-voice.
  2. Pindahkan permukaan bundel ke controller bersama: relay browser, handoff managed-room, realtime voice-call, STT streaming voice-call, Google Meet realtime, dan native push-to-talk.
  3. Ganti keluarga RPC Talk lama dengan API final talk.session.* dan talk.client.*.
  4. Iklankan satu channel event Talk live di Gateway hello-ok.features.events: talk.event.
  5. Hapus endpoint HTTP realtime lama dan semua path override instruksi saat request.
Kode baru sebaiknya tidak memanggil createTalkEventSequencer(...) langsung kecuali jika mengimplementasikan adapter level rendah atau fixture test. Pilih controller bersama agar event yang ber-scope turn tidak dapat dipancarkan tanpa id turn, panggilan turnEnd / turnCancel yang usang tidak dapat menghapus turn aktif yang lebih baru, dan event lifecycle audio output tetap konsisten di telephony, meeting, relay browser, handoff managed-room, dan klien Talk native. Bentuk target API publik adalah:
// Gateway-owned Talk session API.
await gateway.request("talk.session.create", {
  mode: "realtime",
  transport: "gateway-relay",
  brain: "agent-consult",
  sessionKey: "main",
});
await gateway.request("talk.session.appendAudio", { sessionId, audioBase64 });
await gateway.request("talk.session.cancelOutput", { sessionId, reason: "barge-in" });
await gateway.request("talk.session.submitToolResult", {
  sessionId,
  callId,
  result: { status: "working" },
  options: { willContinue: true },
});
await gateway.request("talk.session.submitToolResult", {
  sessionId,
  callId,
  result: { status: "already_delivered" },
  options: { suppressResponse: true },
});
await gateway.request("talk.session.submitToolResult", { sessionId, callId, result });
await gateway.request("talk.session.close", { sessionId });

// Client-owned provider session API.
await gateway.request("talk.client.create", {
  mode: "realtime",
  transport: "webrtc",
  brain: "agent-consult",
  sessionKey: "main",
});
await gateway.request("talk.client.toolCall", { sessionKey, callId, name, args });
Sesi WebRTC/provider-websocket milik browser menggunakan talk.client.create, karena browser memiliki negosiasi provider dan transport media sementara Gateway memiliki kredensial, instruksi, dan kebijakan tool. talk.session.* adalah permukaan umum yang dikelola Gateway untuk realtime gateway-relay, transcription gateway-relay, dan sesi STT/TTS native managed-room. Config legacy yang menempatkan selector realtime di samping talk.provider / talk.providers harus diperbaiki dengan openclaw doctor --fix; runtime Talk tidak menafsirkan ulang config provider speech/TTS sebagai config provider realtime. Kombinasi talk.session.create yang didukung sengaja dibuat kecil:
ModeTransportBrainPemilikCatatan
realtimegateway-relayagent-consultGatewayAudio provider full-duplex dijembatani melalui Gateway; panggilan tool dirutekan melalui tool agent-consult.
transcriptiongateway-relaynoneGatewayHanya STT streaming; pemanggil mengirim audio input dan menerima event transcript.
stt-ttsmanaged-roomagent-consultRuang native/klienRuang bergaya push-to-talk dan walkie-talkie tempat klien memiliki capture/playback dan Gateway memiliki status turn.
stt-ttsmanaged-roomdirect-toolsRuang native/klienMode ruang khusus admin untuk permukaan first-party tepercaya yang mengeksekusi aksi tool Gateway secara langsung.
Peta metode yang dihapus:
LamaBaru
talk.realtime.sessiontalk.client.create
talk.realtime.toolCalltalk.client.toolCall
talk.realtime.relayAudiotalk.session.appendAudio
talk.realtime.relayCanceltalk.session.cancelOutput atau talk.session.cancelTurn
talk.realtime.relayToolResulttalk.session.submitToolResult
talk.realtime.relayStoptalk.session.close
talk.transcription.sessiontalk.session.create({ mode: "transcription" })
talk.transcription.relayAudiotalk.session.appendAudio
talk.transcription.relayCanceltalk.session.cancelTurn
talk.transcription.relayStoptalk.session.close
talk.handoff.createtalk.session.create({ transport: "managed-room" })
talk.handoff.jointalk.session.join
talk.handoff.revoketalk.session.close
Kosakata kontrol terpadu juga sengaja dibuat sempit:
MetodeBerlaku untukKontrak
talk.session.appendAudiorealtime/gateway-relay, transcription/gateway-relayTambahkan chunk audio PCM base64 ke sesi provider yang dimiliki oleh koneksi Gateway yang sama.
talk.session.startTurnstt-tts/managed-roomMulai turn pengguna managed-room.
talk.session.endTurnstt-tts/managed-roomAkhiri turn aktif setelah validasi turn usang.
talk.session.cancelTurnsemua sesi milik GatewayBatalkan pekerjaan capture/provider/agen/TTS aktif untuk sebuah turn.
talk.session.cancelOutputrealtime/gateway-relayHentikan output audio asisten tanpa harus mengakhiri turn pengguna.
talk.session.submitToolResultrealtime/gateway-relaySelesaikan panggilan tool provider yang dipancarkan oleh relay; berikan options.willContinue untuk output sementara atau options.suppressResponse untuk memenuhi panggilan tanpa respons asisten lain.
talk.session.closesemua sesi terpaduHentikan sesi relay atau cabut status managed-room, lalu lupakan id sesi terpadu.
Jangan tambahkan kasus khusus penyedia atau platform di core untuk membuat ini berfungsi. Core memiliki semantik sesi Talk. Plugin penyedia memiliki penyiapan sesi vendor. Panggilan suara dan Google Meet memiliki adapter telepon/rapat. Browser dan aplikasi native memiliki UX penangkapan/pemutaran perangkat.

Kebijakan kompatibilitas

Untuk plugin eksternal, pekerjaan kompatibilitas mengikuti urutan ini:
  1. tambahkan kontrak baru
  2. pertahankan perilaku lama yang disambungkan melalui adapter kompatibilitas
  3. keluarkan diagnostik atau peringatan yang menyebutkan jalur lama dan penggantinya
  4. cakup kedua jalur dalam pengujian
  5. dokumentasikan penghentian dan jalur migrasi
  6. hapus hanya setelah jendela migrasi yang diumumkan, biasanya dalam rilis mayor
Maintainer dapat mengaudit antrean migrasi saat ini dengan pnpm plugins:boundary-report. Gunakan pnpm plugins:boundary-report:summary untuk hitungan ringkas, --owner <id> untuk satu plugin atau pemilik kompatibilitas, dan pnpm plugins:boundary-report:ci saat gate CI harus gagal pada catatan kompatibilitas yang jatuh tempo, impor SDK reserved lintas pemilik, atau subpath SDK reserved yang tidak digunakan. Laporan mengelompokkan catatan kompatibilitas yang dihentikan berdasarkan tanggal penghapusan, menghitung referensi kode/dokumen lokal, memunculkan impor SDK reserved lintas pemilik, dan meringkas bridge SDK host memori privat sehingga pembersihan kompatibilitas tetap eksplisit, bukan bergantung pada pencarian ad hoc. Subpath SDK reserved harus memiliki penggunaan pemilik yang terlacak; ekspor helper reserved yang tidak digunakan harus dihapus dari SDK publik. Jika sebuah field manifes masih diterima, penulis plugin dapat terus menggunakannya sampai dokumentasi dan diagnostik mengatakan sebaliknya. Kode baru sebaiknya memilih pengganti yang terdokumentasi, tetapi plugin yang ada tidak boleh rusak selama rilis minor biasa.

Cara bermigrasi

1

Migrasikan helper pemuatan/penulisan konfigurasi runtime

Plugin bawaan harus berhenti memanggil api.runtime.config.loadConfig() dan api.runtime.config.writeConfigFile(...) secara langsung. Pilih konfigurasi yang sudah diteruskan ke jalur panggilan aktif. Handler berumur panjang yang membutuhkan snapshot proses saat ini dapat menggunakan api.runtime.config.current(). Tool agen berumur panjang harus menggunakan ctx.getRuntimeConfig() milik konteks tool di dalam execute sehingga tool yang dibuat sebelum penulisan konfigurasi tetap melihat konfigurasi runtime yang telah disegarkan.Penulisan konfigurasi harus melalui helper transaksional dan memilih kebijakan setelah-penulisan:
await api.runtime.config.mutateConfigFile({
  afterWrite: { mode: "auto" },
  mutate(draft) {
    draft.plugins ??= {};
  },
});
Gunakan afterWrite: { mode: "restart", reason: "..." } saat pemanggil mengetahui bahwa perubahan memerlukan restart Gateway yang bersih, dan afterWrite: { mode: "none", reason: "..." } hanya saat pemanggil memiliki tindak lanjut dan secara sengaja ingin menekan perencana reload. Hasil mutasi menyertakan ringkasan followUp bertipe untuk pengujian dan logging; Gateway tetap bertanggung jawab untuk menerapkan atau menjadwalkan restart. loadConfig dan writeConfigFile tetap sebagai helper kompatibilitas yang dihentikan untuk plugin eksternal selama jendela migrasi dan memperingatkan sekali dengan kode kompatibilitas runtime-config-load-write. Plugin bawaan dan kode runtime repo dilindungi oleh guardrail pemindai di pnpm check:deprecated-api-usage dan pnpm check:no-runtime-action-load-config: penggunaan plugin produksi baru langsung gagal, penulisan konfigurasi langsung gagal, metode server Gateway harus menggunakan snapshot runtime permintaan, helper kirim/aksi/klien channel runtime harus menerima konfigurasi dari boundary-nya, dan modul runtime berumur panjang memiliki nol panggilan ambient loadConfig() yang diizinkan.Kode plugin baru juga harus menghindari mengimpor barrel kompatibilitas luas openclaw/plugin-sdk/config-runtime. Gunakan subpath SDK sempit yang cocok dengan pekerjaannya:
KebutuhanImpor
Tipe konfigurasi seperti OpenClawConfigopenclaw/plugin-sdk/config-contracts
Assertion konfigurasi yang sudah dimuat dan lookup konfigurasi entry pluginopenclaw/plugin-sdk/plugin-config-runtime
Pembacaan snapshot runtime saat iniopenclaw/plugin-sdk/runtime-config-snapshot
Penulisan konfigurasiopenclaw/plugin-sdk/config-mutation
Helper penyimpanan sesiopenclaw/plugin-sdk/session-store-runtime
Konfigurasi tabel Markdownopenclaw/plugin-sdk/markdown-table-runtime
Helper runtime kebijakan grupopenclaw/plugin-sdk/runtime-group-policy
Resolusi input rahasiaopenclaw/plugin-sdk/secret-input-runtime
Override model/sesiopenclaw/plugin-sdk/model-session-runtime
Plugin bawaan dan pengujiannya dijaga pemindai terhadap barrel luas sehingga impor dan mock tetap lokal pada perilaku yang dibutuhkan. Barrel luas masih ada untuk kompatibilitas eksternal, tetapi kode baru tidak boleh bergantung padanya.
2

Migrasikan ekstensi hasil tool Pi ke middleware

Plugin bawaan harus mengganti handler hasil tool khusus Pi api.registerEmbeddedExtensionFactory(...) dengan middleware yang netral runtime.
// Pi and Codex runtime dynamic tools
api.registerAgentToolResultMiddleware(async (event) => {
  return compactToolResult(event);
}, {
  runtimes: ["pi", "codex"],
});
Perbarui manifes plugin pada saat yang sama:
{
  "contracts": {
    "agentToolResultMiddleware": ["pi", "codex"]
  }
}
Plugin eksternal tidak dapat mendaftarkan middleware hasil tool karena itu dapat menulis ulang output tool dengan kepercayaan tinggi sebelum model melihatnya.
3

Migrasikan handler native approval ke fakta kapabilitas

Plugin channel yang mendukung approval kini mengekspos perilaku approval native melalui approvalCapability.nativeRuntime plus registry konteks runtime bersama.Perubahan utama:
  • Ganti approvalCapability.handler.loadRuntime(...) dengan approvalCapability.nativeRuntime
  • Pindahkan auth/delivery khusus approval dari wiring lama plugin.auth / plugin.approvals ke approvalCapability
  • ChannelPlugin.approvals telah dihapus dari kontrak plugin channel publik; pindahkan field delivery/native/render ke approvalCapability
  • plugin.auth tetap untuk alur login/logout channel saja; hook auth approval di sana tidak lagi dibaca oleh core
  • Daftarkan objek runtime milik channel seperti klien, token, atau aplikasi Bolt melalui openclaw/plugin-sdk/channel-runtime-context
  • Jangan mengirim pemberitahuan reroute milik plugin dari handler approval native; core kini memiliki pemberitahuan routed-elsewhere dari hasil delivery aktual
  • Saat meneruskan channelRuntime ke createChannelManager(...), sediakan surface createPluginRuntime().channel yang nyata. Stub parsial ditolak.
Lihat /plugins/sdk-channel-plugins untuk tata letak kapabilitas approval saat ini.
4

Audit perilaku fallback wrapper Windows

Jika plugin Anda menggunakan openclaw/plugin-sdk/windows-spawn, wrapper Windows .cmd/.bat yang tidak terselesaikan kini gagal tertutup kecuali Anda secara eksplisit meneruskan allowShellFallback: true.
// Before
const program = applyWindowsSpawnProgramPolicy({ candidate });

// After
const program = applyWindowsSpawnProgramPolicy({
  candidate,
  // Only set this for trusted compatibility callers that intentionally
  // accept shell-mediated fallback.
  allowShellFallback: true,
});
Jika pemanggil Anda tidak secara sengaja bergantung pada fallback shell, jangan set allowShellFallback dan tangani error yang dilempar sebagai gantinya.
5

Temukan impor yang dihentikan

Cari plugin Anda untuk impor dari salah satu surface yang dihentikan:
grep -r "plugin-sdk/compat" my-plugin/
grep -r "plugin-sdk/infra-runtime" my-plugin/
grep -r "plugin-sdk/config-runtime" my-plugin/
grep -r "openclaw/extension-api" my-plugin/
6

Ganti dengan impor yang terfokus

Setiap ekspor dari surface lama dipetakan ke jalur impor modern yang spesifik:
// Before (deprecated backwards-compatibility layer)
import {
  createChannelReplyPipeline,
  createPluginRuntimeStore,
  resolveControlCommandGate,
} from "openclaw/plugin-sdk/compat";

// After (modern focused imports)
import { createChannelReplyPipeline } from "openclaw/plugin-sdk/channel-reply-pipeline";
import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
import { resolveControlCommandGate } from "openclaw/plugin-sdk/command-auth";
Untuk helper sisi host, gunakan runtime plugin yang diinjeksi alih-alih mengimpor secara langsung:
// Before (deprecated extension-api bridge)
import { runEmbeddedPiAgent } from "openclaw/extension-api";
const result = await runEmbeddedPiAgent({ sessionId, prompt });

// After (injected runtime)
const result = await api.runtime.agent.runEmbeddedPiAgent({ sessionId, prompt });
Pola yang sama berlaku untuk helper bridge lama lainnya:
Impor lamaPadanan modern
resolveAgentDirapi.runtime.agent.resolveAgentDir
resolveAgentWorkspaceDirapi.runtime.agent.resolveAgentWorkspaceDir
resolveAgentIdentityapi.runtime.agent.resolveAgentIdentity
resolveThinkingDefaultapi.runtime.agent.resolveThinkingDefault
resolveAgentTimeoutMsapi.runtime.agent.resolveAgentTimeoutMs
ensureAgentWorkspaceapi.runtime.agent.ensureAgentWorkspace
helper penyimpanan sesiapi.runtime.agent.session.*
7

Ganti impor infra-runtime yang luas

openclaw/plugin-sdk/infra-runtime masih ada untuk kompatibilitas eksternal, tetapi kode baru harus mengimpor surface helper terfokus yang benar-benar dibutuhkannya:
KebutuhanImpor
Helper antrean event sistemopenclaw/plugin-sdk/system-event-runtime
Helper wake, event, dan visibilitas Heartbeatopenclaw/plugin-sdk/heartbeat-runtime
Drain antrean delivery tertundaopenclaw/plugin-sdk/delivery-queue-runtime
Telemetri aktivitas channelopenclaw/plugin-sdk/channel-activity-runtime
Cache dedupe dalam memoriopenclaw/plugin-sdk/dedupe-runtime
Helper path file/media lokal yang amanopenclaw/plugin-sdk/file-access-runtime
Fetch yang sadar dispatcheropenclaw/plugin-sdk/runtime-fetch
Helper proxy dan fetch berpenjagaopenclaw/plugin-sdk/fetch-runtime
Tipe kebijakan dispatcher SSRFopenclaw/plugin-sdk/ssrf-dispatcher
Tipe permintaan/resolusi approvalopenclaw/plugin-sdk/approval-runtime
Helper payload balasan approval dan commandopenclaw/plugin-sdk/approval-reply-runtime
Helper pemformatan erroropenclaw/plugin-sdk/error-runtime
Tunggu kesiapan transportopenclaw/plugin-sdk/transport-ready-runtime
Helper token amanopenclaw/plugin-sdk/secure-random-runtime
Konkurensi tugas async berbatasopenclaw/plugin-sdk/concurrency-runtime
Koersi numerikopenclaw/plugin-sdk/number-runtime
Lock async lokal prosesopenclaw/plugin-sdk/async-lock-runtime
Lock fileopenclaw/plugin-sdk/file-lock
Plugin bawaan dijaga pemindai terhadap infra-runtime, sehingga kode repo tidak dapat regresi ke barrel luas.
8

Migrasikan helper route channel

Kode route channel baru harus menggunakan openclaw/plugin-sdk/channel-route. Nama route-key dan comparable-target yang lebih lama tetap sebagai alias kompatibilitas selama jendela migrasi, tetapi plugin baru harus menggunakan nama route yang menjelaskan perilaku secara langsung:
Fungsi bantu lamaFungsi bantu modern
channelRouteIdentityKey(...)channelRouteDedupeKey(...)
channelRouteKey(...)channelRouteCompactKey(...)
ComparableChannelTargetChannelRouteParsedTarget
resolveComparableTargetForChannel(...)resolveRouteTargetForChannel(...)
resolveComparableTargetForLoadedChannel(...)resolveRouteTargetForLoadedChannel(...)
comparableChannelTargetsMatch(...)channelRouteTargetsMatchExact(...)
comparableChannelTargetsShareRoute(...)channelRouteTargetsShareConversation(...)
Fungsi bantu rute modern menormalkan { channel, to, accountId, threadId } secara konsisten di seluruh persetujuan native, penekanan balasan, dedupe masuk, pengiriman Cron, dan perutean sesi. Jika plugin Anda memiliki tata bahasa target khusus, gunakan resolveChannelRouteTargetWithParser(...) untuk menyesuaikan parser tersebut ke dalam kontrak target rute yang sama.
9

Build and test

pnpm build
pnpm test -- my-plugin/

Referensi jalur impor

Jalur imporTujuanEkspor utama
plugin-sdk/plugin-entryHelper entri Plugin kanonisdefinePluginEntry
plugin-sdk/coreEkspor ulang payung lama untuk definisi/pembangun entri channeldefineChannelPluginEntry, createChatChannelPlugin
plugin-sdk/config-schemaEkspor skema konfigurasi rootOpenClawSchema
plugin-sdk/provider-entryHelper entri penyedia tunggaldefineSingleProviderPluginEntry
plugin-sdk/channel-coreDefinisi dan pembangun entri channel terfokusdefineChannelPluginEntry, defineSetupPluginEntry, createChatChannelPlugin, createChannelPluginBase
plugin-sdk/setupHelper wizard setup bersamaPrompt allowlist, pembangun status setup
plugin-sdk/setup-runtimeHelper runtime saat setupAdapter patch setup yang aman diimpor, helper catatan pencarian, promptResolvedAllowFrom, splitSetupEntries, proksi setup yang didelegasikan
plugin-sdk/setup-adapter-runtimeAlias adapter setup yang tidak digunakan lagiGunakan plugin-sdk/setup-runtime
plugin-sdk/setup-toolsHelper tooling setupformatCliCommand, detectBinary, extractArchive, resolveBrewExecutable, formatDocsLink, CONFIG_DIR
plugin-sdk/account-coreHelper multi-akunHelper daftar/konfigurasi/gerbang tindakan akun
plugin-sdk/account-idHelper ID akunDEFAULT_ACCOUNT_ID, normalisasi ID akun
plugin-sdk/account-resolutionHelper pencarian akunHelper pencarian akun + fallback default
plugin-sdk/account-helpersHelper akun sempitHelper daftar akun/tindakan akun
plugin-sdk/channel-setupAdapter wizard setupcreateOptionalChannelSetupSurface, createOptionalChannelSetupAdapter, createOptionalChannelSetupWizard, plus DEFAULT_ACCOUNT_ID, createTopLevelChannelDmPolicy, setSetupChannelEnabled, splitSetupEntries
plugin-sdk/channel-pairingPrimitif pemasangan DMcreateChannelPairingController
plugin-sdk/channel-reply-pipelinePerangkaian prefiks balasan, pengetikan, dan pengiriman sumbercreateChannelReplyPipeline, resolveChannelSourceReplyDeliveryMode
plugin-sdk/channel-config-helpersFactory adapter konfigurasi dan helper akses DMcreateHybridChannelConfigAdapter, resolveChannelDmAccess, resolveChannelDmAllowFrom, resolveChannelDmPolicy, normalizeChannelDmPolicy, normalizeLegacyDmAliases
plugin-sdk/channel-config-schemaPembangun skema konfigurasiPrimitif skema konfigurasi channel bersama dan hanya pembangun generik
plugin-sdk/bundled-channel-config-schemaSkema konfigurasi bawaanHanya Plugin bawaan yang dikelola OpenClaw; Plugin baru harus menentukan skema lokal Plugin
plugin-sdk/channel-config-schema-legacySkema konfigurasi bawaan yang tidak digunakan lagiHanya alias kompatibilitas; gunakan plugin-sdk/bundled-channel-config-schema untuk Plugin bawaan yang dipelihara
plugin-sdk/telegram-command-configHelper konfigurasi perintah TelegramNormalisasi nama perintah, pemangkasan deskripsi, validasi duplikat/konflik
plugin-sdk/channel-policyResolusi kebijakan grup/DMresolveChannelGroupRequireMention
plugin-sdk/channel-lifecycleHelper status akun dan siklus hidup stream drafcreateAccountStatusSink, helper finalisasi pratinjau draf
plugin-sdk/inbound-envelopeHelper envelope masukHelper rute bersama + pembangun envelope
plugin-sdk/inbound-reply-dispatchHelper balasan masukHelper catat-dan-dispatch bersama
plugin-sdk/messaging-targetsParsing target pesanHelper parsing/pencocokan target
plugin-sdk/outbound-mediaHelper media keluarPemuatan media keluar bersama
plugin-sdk/outbound-send-depsHelper dependensi pengiriman keluarPencarian resolveOutboundSendDep ringan tanpa mengimpor runtime keluar penuh
plugin-sdk/outbound-runtimeHelper runtime keluarHelper pengiriman keluar, delegasi identitas/kirim, sesi, pemformatan, dan perencanaan payload
plugin-sdk/thread-bindings-runtimeHelper pengikatan threadHelper siklus hidup dan adapter pengikatan thread
plugin-sdk/agent-media-payloadHelper payload media lamaPembangun payload media agen untuk tata letak field lama
plugin-sdk/channel-runtimeShim kompatibilitas yang tidak digunakan lagiHanya utilitas runtime channel lama
plugin-sdk/channel-send-resultTipe hasil kirimTipe hasil balasan
plugin-sdk/runtime-storePenyimpanan Plugin persistencreatePluginRuntimeStore
plugin-sdk/runtimeHelper runtime luasHelper runtime/logging/backup/instalasi Plugin
plugin-sdk/runtime-envHelper env runtime sempitHelper logger/env runtime, timeout, retry, dan backoff
plugin-sdk/plugin-runtimeHelper runtime Plugin bersamaHelper perintah/hook/http/interaktif Plugin
plugin-sdk/hook-runtimeHelper pipeline hookHelper pipeline webhook/internal hook bersama
plugin-sdk/lazy-runtimeHelper runtime malascreateLazyRuntimeModule, createLazyRuntimeMethod, createLazyRuntimeMethodBinder, createLazyRuntimeNamedExport, createLazyRuntimeSurface
plugin-sdk/process-runtimeHelper prosesHelper exec bersama
plugin-sdk/cli-runtimeHelper runtime CLIPemformatan perintah, penantian, helper versi
plugin-sdk/gateway-runtimeHelper GatewayKlien Gateway, helper mulai siap event loop, dan helper patch status channel
plugin-sdk/config-runtimeShim kompatibilitas konfigurasi yang tidak digunakan lagiUtamakan config-contracts, plugin-config-runtime, runtime-config-snapshot, dan config-mutation
plugin-sdk/telegram-command-configHelper perintah TelegramHelper validasi perintah Telegram yang stabil terhadap fallback saat permukaan kontrak Telegram bawaan tidak tersedia
plugin-sdk/approval-runtimeHelper prompt persetujuanPayload persetujuan exec/Plugin, helper kapabilitas/profil persetujuan, helper routing/runtime persetujuan native, dan pemformatan jalur tampilan persetujuan terstruktur
plugin-sdk/approval-auth-runtimeHelper auth persetujuanResolusi pemberi persetujuan, auth tindakan chat yang sama
plugin-sdk/approval-client-runtimeHelper klien persetujuanHelper profil/filter persetujuan exec native
plugin-sdk/approval-delivery-runtimeHelper pengiriman persetujuanAdapter kapabilitas/pengiriman persetujuan native
plugin-sdk/approval-gateway-runtimeHelper Gateway persetujuanHelper resolusi Gateway persetujuan bersama
plugin-sdk/approval-handler-adapter-runtimeHelper adapter persetujuanHelper pemuatan adapter persetujuan native ringan untuk entrypoint channel panas
plugin-sdk/approval-handler-runtimeHelper handler persetujuanHelper runtime handler persetujuan yang lebih luas; utamakan seam adapter/Gateway yang lebih sempit saat sudah cukup
plugin-sdk/approval-native-runtimeHelper target persetujuanHelper pengikatan target/akun persetujuan native
plugin-sdk/approval-reply-runtimeHelper balasan persetujuanHelper payload balasan persetujuan exec/Plugin
plugin-sdk/channel-runtime-contextHelper konteks runtime channelHelper register/get/watch konteks runtime channel generik
plugin-sdk/security-runtimeHelper keamananHelper kepercayaan bersama, gerbang DM, file/jalur berbatas root, konten eksternal, dan pengumpulan rahasia
plugin-sdk/ssrf-policyHelper kebijakan SSRFHelper allowlist host dan kebijakan jaringan privat
plugin-sdk/ssrf-runtimeHelper runtime SSRFDispatcher yang dipin, fetch terlindungi, helper kebijakan SSRF
plugin-sdk/system-event-runtimeHelper event sistemenqueueSystemEvent, peekSystemEventEntries
plugin-sdk/heartbeat-runtimeHelper HeartbeatHelper bangun, event, dan visibilitas Heartbeat
plugin-sdk/delivery-queue-runtimeHelper antrean pengirimandrainPendingDeliveries
plugin-sdk/channel-activity-runtimeHelper aktivitas channelrecordChannelActivity
plugin-sdk/dedupe-runtimeHelper dedupeCache dedupe dalam memori
plugin-sdk/file-access-runtimeHelper akses fileHelper jalur file/media lokal aman
plugin-sdk/transport-ready-runtimeHelper kesiapan transportwaitForTransportReady
plugin-sdk/collection-runtimeHelper cache berbataspruneMapToMaxSize
plugin-sdk/diagnostic-runtimeHelper gerbang diagnostikisDiagnosticFlagEnabled, isDiagnosticsEnabled
plugin-sdk/error-runtimeHelper pemformatan errorformatUncaughtError, isApprovalNotFoundError, helper graf error
plugin-sdk/fetch-runtimeHelper fetch/proxy terbungkusresolveFetch, helper proxy, helper opsi EnvHttpProxyAgent
plugin-sdk/host-runtimeHelper normalisasi hostnormalizeHostname, normalizeScpRemoteHost
plugin-sdk/retry-runtimeHelper retryRetryConfig, retryAsync, runner kebijakan
plugin-sdk/allow-fromPemformatan allowlistformatAllowFromLowercase
plugin-sdk/allowlist-resolutionPemetaan input allowlistmapAllowlistResolutionInputs
plugin-sdk/command-authGerbang perintah dan helper permukaan perintahresolveControlCommandGate, helper otorisasi pengirim, helper registry perintah termasuk pemformatan menu argumen dinamis
plugin-sdk/command-statusPerender status/bantuan perintahbuildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage
plugin-sdk/secret-inputParsing input rahasiaHelper input rahasia
plugin-sdk/webhook-ingressHelper permintaan WebhookUtilitas target Webhook
plugin-sdk/webhook-request-guardsHelper guard body WebhookHelper baca/batas body permintaan
plugin-sdk/reply-runtimeRuntime balasan bersamaDispatch masuk, Heartbeat, perencana balasan, chunking
plugin-sdk/reply-dispatch-runtimeHelper dispatch balasan sempitHelper finalisasi, dispatch penyedia, dan label percakapan
plugin-sdk/reply-historyHelper riwayat balasanbuildHistoryContext, buildPendingHistoryContextFromMap, recordPendingHistoryEntry, clearHistoryEntriesIfEnabled
plugin-sdk/reply-referencePerencanaan referensi balasancreateReplyReferencePlanner
plugin-sdk/reply-chunkingHelper chunk balasanHelper chunking teks/markdown
plugin-sdk/session-store-runtimeHelper penyimpanan sesiHelper jalur penyimpanan + updated-at
plugin-sdk/state-pathsHelper jalur statusHelper direktori status dan OAuth
plugin-sdk/routingHelper routing/kunci sesiresolveAgentRoute, buildAgentSessionKey, resolveDefaultAgentBoundAccountId, helper normalisasi kunci sesi
plugin-sdk/status-helpersHelper status channelPembangun ringkasan status channel/akun, default status runtime, helper metadata isu
plugin-sdk/target-resolver-runtimeHelper resolver targetHelper resolver target bersama
plugin-sdk/string-normalization-runtimeHelper normalisasi stringHelper normalisasi slug/string
plugin-sdk/request-urlHelper URL permintaanEkstrak URL string dari input mirip permintaan
plugin-sdk/run-commandHelper perintah berwaktuRunner perintah berwaktu dengan stdout/stderr ternormalisasi
plugin-sdk/param-readersPembaca paramPembaca param tool/CLI umum
plugin-sdk/tool-payloadEkstraksi payload alatEkstrak payload ternormalisasi dari objek hasil alat
plugin-sdk/tool-sendEkstraksi pengiriman alatEkstrak kolom target pengiriman kanonis dari argumen alat
plugin-sdk/temp-pathPembantu jalur sementaraPembantu jalur unduhan sementara bersama
plugin-sdk/logging-corePembantu pencatatan logPembantu logger subsistem dan redaksi
plugin-sdk/markdown-table-runtimePembantu tabel MarkdownPembantu mode tabel Markdown
plugin-sdk/reply-payloadTipe balasan pesanTipe payload balasan
plugin-sdk/provider-setupPembantu penyiapan penyedia lokal/swakelola terkurasiPembantu penemuan/konfigurasi penyedia swak-hosting
plugin-sdk/self-hosted-provider-setupPembantu penyiapan penyedia swak-hosting kompatibel OpenAI yang terfokusPembantu penemuan/konfigurasi penyedia swak-hosting yang sama
plugin-sdk/provider-auth-runtimePembantu autentikasi runtime penyediaPembantu resolusi kunci API runtime
plugin-sdk/provider-auth-api-keyPembantu penyiapan kunci API penyediaPembantu onboarding/penulisan profil kunci API
plugin-sdk/provider-auth-resultPembantu hasil autentikasi penyediaPembuat hasil autentikasi OAuth standar
plugin-sdk/provider-selection-runtimePembantu pemilihan penyediaPemilihan penyedia terkonfigurasi-atau-otomatis dan penggabungan konfigurasi penyedia mentah
plugin-sdk/provider-env-varsPembantu variabel lingkungan penyediaPembantu pencarian variabel lingkungan autentikasi penyedia
plugin-sdk/provider-model-sharedPembantu model/replay penyedia bersamaProviderReplayFamily, buildProviderReplayFamilyHooks, normalizeModelCompat, pembuat kebijakan replay bersama, pembantu endpoint penyedia, dan pembantu normalisasi ID model
plugin-sdk/provider-catalog-sharedPembantu katalog penyedia bersamafindCatalogTemplate, buildSingleProviderApiKeyCatalog, buildManifestModelProviderConfig, supportsNativeStreamingUsageCompat, applyProviderNativeStreamingUsageCompat
plugin-sdk/provider-onboardPatch onboarding penyediaPembantu konfigurasi onboarding
plugin-sdk/provider-httpPembantu HTTP penyediaPembantu kemampuan HTTP/endpoint penyedia generik, termasuk pembantu formulir multipart transkripsi audio
plugin-sdk/provider-web-fetchPembantu pengambilan web penyediaPembantu pendaftaran/cache penyedia pengambilan web
plugin-sdk/provider-web-search-config-contractPembantu konfigurasi pencarian web penyediaPembantu konfigurasi/kredensial pencarian web sempit untuk penyedia yang tidak memerlukan pengabelan pengaktifan Plugin
plugin-sdk/provider-web-search-contractPembantu kontrak pencarian web penyediaPembantu kontrak konfigurasi/kredensial pencarian web sempit seperti createWebSearchProviderContractFields, enablePluginInConfig, resolveProviderWebSearchPluginConfig, dan setter/getter kredensial berskop
plugin-sdk/provider-web-searchPembantu pencarian web penyediaPembantu pendaftaran/cache/runtime penyedia pencarian web
plugin-sdk/provider-toolsPembantu kompatibilitas alat/skema penyediaProviderToolCompatFamily, buildProviderToolCompatFamilyHooks, serta pembersihan skema Gemini + diagnostik
plugin-sdk/provider-usagePembantu penggunaan penyediafetchClaudeUsage, fetchGeminiUsage, fetchGithubCopilotUsage, dan pembantu penggunaan penyedia lainnya
plugin-sdk/provider-streamPembantu pembungkus stream penyediaProviderStreamFamily, buildProviderStreamFamilyHooks, composeProviderStreamWrappers, tipe pembungkus stream, dan pembantu pembungkus bersama Anthropic/Bedrock/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot
plugin-sdk/provider-transport-runtimePembantu transport penyediaPembantu transport penyedia native seperti pengambilan berpagar, transformasi pesan transport, dan stream peristiwa transport yang dapat ditulis
plugin-sdk/keyed-async-queueAntrean asinkron berurutanKeyedAsyncQueue
plugin-sdk/media-runtimePembantu media bersamaPembantu pengambilan/transformasi/penyimpanan media, probing dimensi video berbasis ffprobe, dan pembuat payload media
plugin-sdk/media-generation-runtimePembantu pembuatan media bersamaPembantu failover bersama, pemilihan kandidat, dan pesan model hilang untuk pembuatan gambar/video/musik
plugin-sdk/media-understandingPembantu pemahaman mediaTipe penyedia pemahaman media plus ekspor pembantu gambar/audio yang menghadap penyedia
plugin-sdk/text-runtimeEkspor kompatibilitas teks luas yang tidak digunakan lagiGunakan string-coerce-runtime, text-chunking, text-utility-runtime, dan logging-core
plugin-sdk/text-chunkingPembantu pemecahan teksPembantu pemecahan teks keluar
plugin-sdk/speechPembantu ucapanTipe penyedia ucapan plus pembantu direktif, registri, validasi yang menghadap penyedia, dan pembuat TTS kompatibel OpenAI
plugin-sdk/speech-coreInti ucapan bersamaTipe penyedia ucapan, registri, direktif, normalisasi
plugin-sdk/realtime-transcriptionPembantu transkripsi realtimeTipe penyedia, pembantu registri, dan pembantu sesi WebSocket bersama
plugin-sdk/realtime-voicePembantu suara realtimeTipe penyedia, pembantu registri/resolusi, pembantu sesi bridge, antrean talk-back agen bersama, kesehatan transkrip/peristiwa, penekanan gema, dan pembantu konsultasi konteks cepat
plugin-sdk/image-generationPembantu pembuatan gambarTipe penyedia pembuatan gambar plus pembantu aset gambar/URL data dan pembuat penyedia gambar kompatibel OpenAI
plugin-sdk/image-generation-coreInti pembuatan gambar bersamaTipe pembuatan gambar, failover, autentikasi, dan pembantu registri
plugin-sdk/music-generationPembantu pembuatan musikTipe penyedia/permintaan/hasil pembuatan musik
plugin-sdk/music-generation-coreInti pembuatan musik bersamaTipe pembuatan musik, pembantu failover, pencarian penyedia, dan parsing ref model
plugin-sdk/video-generationPembantu pembuatan videoTipe penyedia/permintaan/hasil pembuatan video
plugin-sdk/video-generation-coreInti pembuatan video bersamaTipe pembuatan video, pembantu failover, pencarian penyedia, dan parsing ref model
plugin-sdk/interactive-runtimePembantu balasan interaktifNormalisasi/reduksi payload balasan interaktif
plugin-sdk/channel-config-primitivesPrimitif konfigurasi saluranPrimitif skema konfigurasi saluran sempit
plugin-sdk/channel-config-writesPembantu penulisan konfigurasi saluranPembantu otorisasi penulisan konfigurasi saluran
plugin-sdk/channel-plugin-commonPrelude saluran bersamaEkspor prelude Plugin saluran bersama
plugin-sdk/channel-statusPembantu status saluranPembantu snapshot/ringkasan status saluran bersama
plugin-sdk/allowlist-config-editPembantu konfigurasi allowlistPembantu edit/baca konfigurasi allowlist
plugin-sdk/group-accessPembantu akses grupPembantu keputusan akses grup bersama
plugin-sdk/direct-dmPembantu DM langsungPembantu autentikasi/guard DM langsung bersama
plugin-sdk/extension-sharedPembantu ekstensi bersamaPrimitif pembantu saluran pasif/status dan proxy ambien
plugin-sdk/webhook-targetsPembantu target WebhookRegistri target Webhook dan pembantu pemasangan rute
plugin-sdk/webhook-pathAlias jalur Webhook yang tidak digunakan lagiGunakan plugin-sdk/webhook-ingress
plugin-sdk/web-mediaPembantu media web bersamaPembantu pemuatan media jarak jauh/lokal
plugin-sdk/zodEkspor ulang kompatibilitas Zod yang tidak digunakan lagiImpor zod dari zod secara langsung
plugin-sdk/memory-corePembantu memory-core bawaanPermukaan pembantu manajer/konfigurasi/file/CLI memori
plugin-sdk/memory-core-engine-runtimeFasad runtime mesin memoriFasad runtime indeks/pencarian memori
plugin-sdk/memory-core-host-engine-foundationMesin fondasi host memoriEkspor mesin fondasi host memori
plugin-sdk/memory-core-host-engine-embeddingsMesin embedding host memoriKontrak embedding memori, akses registri, penyedia lokal, dan pembantu batch/jarak jauh generik; penyedia jarak jauh konkret berada di Plugin pemiliknya
plugin-sdk/memory-core-host-engine-qmdMesin QMD host memoriEkspor mesin QMD host memori
plugin-sdk/memory-core-host-engine-storageMesin penyimpanan host memoriEkspor mesin penyimpanan host memori
plugin-sdk/memory-core-host-multimodalPembantu multimodal host memoriPembantu multimodal host memori
plugin-sdk/memory-core-host-queryPembantu kueri host memoriPembantu kueri host memori
plugin-sdk/memory-core-host-secretPembantu rahasia host memoriPembantu rahasia host memori
plugin-sdk/memory-core-host-eventsAlias peristiwa memori yang tidak digunakan lagiGunakan plugin-sdk/memory-host-events
plugin-sdk/memory-core-host-statusPembantu status host memoriPembantu status host memori
plugin-sdk/memory-core-host-runtime-cliRuntime CLI host memoriPembantu runtime CLI host memori
plugin-sdk/memory-core-host-runtime-coreRuntime inti host memoriPembantu runtime inti host memori
plugin-sdk/memory-core-host-runtime-filesPembantu file/runtime host memoriPembantu file/runtime host memori
plugin-sdk/memory-host-coreAlias runtime inti host memoriAlias netral vendor untuk pembantu runtime inti host memori
plugin-sdk/memory-host-eventsAlias jurnal peristiwa host memoriAlias netral vendor untuk pembantu jurnal peristiwa host memori
plugin-sdk/memory-host-filesAlias file/runtime memori yang tidak digunakan lagiGunakan plugin-sdk/memory-core-host-runtime-files
plugin-sdk/memory-host-markdownPembantu markdown terkelolaPembantu markdown terkelola bersama untuk Plugin yang berdekatan dengan memori
plugin-sdk/memory-host-searchFasad pencarian memori aktifFasad runtime manajer pencarian memori aktif malas
plugin-sdk/memory-host-statusAlias status host memori yang tidak digunakan lagiGunakan plugin-sdk/memory-core-host-status
plugin-sdk/testingUtilitas pengujianBarrel kompatibilitas yang tidak digunakan lagi lokal repo; gunakan subjalur pengujian lokal repo yang terfokus seperti plugin-sdk/plugin-test-runtime, plugin-sdk/channel-test-helpers, plugin-sdk/channel-target-testing, plugin-sdk/test-env, dan plugin-sdk/test-fixtures
Tabel ini sengaja merupakan subset migrasi umum, bukan seluruh permukaan SDK. Inventaris entrypoint compiler berada di scripts/lib/plugin-sdk-entrypoints.json; ekspor paket dibuat dari subset publik. Seam pembantu Plugin bundel yang dicadangkan telah dipensiunkan dari peta ekspor SDK publik kecuali facade kompatibilitas yang didokumentasikan secara eksplisit seperti shim plugin-sdk/discord yang sudah deprecated dan dipertahankan untuk paket @openclaw/discord@2026.3.13 yang telah dipublikasikan. Pembantu khusus pemilik berada di dalam paket plugin pemiliknya; perilaku host bersama harus bergerak melalui kontrak SDK generik seperti plugin-sdk/gateway-runtime, plugin-sdk/security-runtime, dan plugin-sdk/plugin-config-runtime. Gunakan impor paling sempit yang sesuai dengan tugasnya. Jika Anda tidak dapat menemukan ekspor, periksa sumber di src/plugin-sdk/ atau tanyakan kepada maintainer kontrak generik mana yang harus memilikinya.

Deprecation aktif

Deprecation yang lebih sempit yang berlaku di seluruh SDK plugin, kontrak provider, permukaan runtime, dan manifes. Masing-masing masih berfungsi hari ini tetapi akan dihapus dalam rilis mayor mendatang. Entri di bawah setiap item memetakan API lama ke pengganti kanonisnya.
Lama (openclaw/plugin-sdk/command-auth): buildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage.Baru (openclaw/plugin-sdk/command-status): signature yang sama, ekspor yang sama - hanya diimpor dari subpath yang lebih sempit. command-auth mengekspor ulang semuanya sebagai stub kompatibilitas.
// Before
import { buildHelpMessage } from "openclaw/plugin-sdk/command-auth";

// After
import { buildHelpMessage } from "openclaw/plugin-sdk/command-status";
Lama: resolveInboundMentionRequirement({ facts, policy }) dan shouldDropInboundForMention(...) dari openclaw/plugin-sdk/channel-inbound atau openclaw/plugin-sdk/channel-mention-gating.Baru: resolveInboundMentionDecision({ facts, policy }) - mengembalikan satu objek keputusan, bukan dua panggilan terpisah.Plugin channel downstream (Slack, Discord, Matrix, MS Teams) sudah beralih.
openclaw/plugin-sdk/channel-runtime adalah shim kompatibilitas untuk plugin channel lama. Jangan mengimpornya dari kode baru; gunakan openclaw/plugin-sdk/channel-runtime-context untuk mendaftarkan objek runtime.Pembantu channelActions* di openclaw/plugin-sdk/channel-actions sudah deprecated bersama ekspor channel “actions” mentah. Paparkan capability melalui permukaan semantik presentation sebagai gantinya - plugin channel mendeklarasikan apa yang mereka render (kartu, tombol, select), bukan nama aksi mentah mana yang mereka terima.
Lama: factory tool() dari openclaw/plugin-sdk/provider-web-search.Baru: implementasikan createTool(...) langsung pada plugin provider. OpenClaw tidak lagi memerlukan pembantu SDK untuk mendaftarkan wrapper tool.
Lama: formatInboundEnvelope(...) (dan ChannelMessageForAgent.channelEnvelope) untuk membangun envelope prompt plaintext datar dari pesan channel masuk.Baru: BodyForAgent ditambah blok konteks pengguna terstruktur. Plugin channel melampirkan metadata routing (thread, topik, reply-to, reaksi) sebagai field bertipe, bukan menggabungkannya ke dalam string prompt. Pembantu formatAgentEnvelope(...) masih didukung untuk envelope sintetis yang menghadap asisten, tetapi envelope plaintext masuk sedang menuju penghapusan.Area terdampak: inbound_claim, message_received, dan plugin channel kustom apa pun yang memproses pasca teks channelEnvelope.
Empat alias tipe discovery sekarang menjadi wrapper tipis di atas tipe era katalog:
Alias lamaTipe baru
ProviderDiscoveryOrderProviderCatalogOrder
ProviderDiscoveryContextProviderCatalogContext
ProviderDiscoveryResultProviderCatalogResult
ProviderPluginDiscoveryProviderPluginCatalog
Ditambah bag statis lama ProviderCapabilities - plugin provider sebaiknya menggunakan hook provider eksplisit seperti buildReplayPolicy, normalizeToolSchemas, dan wrapStreamFn, bukan objek statis.
Lama (tiga hook terpisah pada ProviderThinkingPolicy): isBinaryThinking(ctx), supportsXHighThinking(ctx), dan resolveDefaultThinkingLevel(ctx).Baru: satu resolveThinkingProfile(ctx) yang mengembalikan ProviderThinkingProfile dengan id kanonis, label opsional, dan daftar level berperingkat. OpenClaw menurunkan nilai tersimpan yang basi berdasarkan peringkat profil secara otomatis.Implementasikan satu hook, bukan tiga. Hook lama tetap berfungsi selama periode deprecation tetapi tidak dikomposisikan dengan hasil profil.
Lama: mengimplementasikan resolveExternalOAuthProfiles(...) tanpa mendeklarasikan provider di manifes plugin.Baru: deklarasikan contracts.externalAuthProviders di manifes plugin dan implementasikan resolveExternalAuthProfiles(...). Jalur lama “fallback autentikasi” mengeluarkan peringatan saat runtime dan akan dihapus.
{
  "contracts": {
    "externalAuthProviders": ["anthropic", "openai"]
  }
}
Bidang manifes lama: providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }.Baru: cerminkan pencarian env-var yang sama ke setup.providers[].envVars pada manifes. Ini mengonsolidasikan metadata env penyiapan/status di satu tempat dan menghindari menjalankan runtime plugin hanya untuk menjawab pencarian env-var.providerAuthEnvVars tetap didukung melalui adapter kompatibilitas hingga jendela deprekasi ditutup.
Lama: tiga panggilan terpisah - api.registerMemoryPromptSection(...), api.registerMemoryFlushPlan(...), api.registerMemoryRuntime(...).Baru: satu panggilan pada API memory-state - registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime }).Slot yang sama, satu panggilan pendaftaran. Helper memori tambahan (registerMemoryPromptSupplement, registerMemoryCorpusSupplement, registerMemoryEmbeddingProvider) tidak terpengaruh.
Dua alias tipe lama masih diekspor dari src/plugins/runtime/types.ts:
LamaBaru
SubagentReadSessionParamsSubagentGetSessionMessagesParams
SubagentReadSessionResultSubagentGetSessionMessagesResult
Metode runtime readSession dideprekasi dan digantikan oleh getSessionMessages. Signature sama; metode lama meneruskan panggilan ke metode baru.
Lama: runtime.tasks.flow (tunggal) mengembalikan aksesor task-flow live.Baru: runtime.tasks.managedFlows mempertahankan runtime mutasi TaskFlow terkelola untuk plugin yang membuat, memperbarui, membatalkan, atau menjalankan tugas anak dari flow. Gunakan runtime.tasks.flows saat plugin hanya memerlukan pembacaan berbasis DTO.
// Before
const flow = api.runtime.tasks.flow.fromToolContext(ctx);
// After
const flow = api.runtime.tasks.managedFlows.fromToolContext(ctx);
Dicakup dalam “Cara bermigrasi → Migrasikan ekstensi hasil tool Pi ke middleware” di atas. Disertakan di sini untuk kelengkapan: jalur khusus Pi api.registerEmbeddedExtensionFactory(...) yang telah dihapus digantikan oleh api.registerAgentToolResultMiddleware(...) dengan daftar runtime eksplisit di contracts.agentToolResultMiddleware.
OpenClawSchemaType yang diekspor ulang dari openclaw/plugin-sdk sekarang adalah alias satu baris untuk OpenClawConfig. Utamakan nama kanonis.
// Before
import type { OpenClawSchemaType } from "openclaw/plugin-sdk";
// After
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-schema";
Deprekasi tingkat ekstensi (di dalam plugin channel/provider bawaan di bawah extensions/) dilacak di dalam barrel api.ts dan runtime-api.ts masing-masing. Deprekasi tersebut tidak memengaruhi kontrak plugin pihak ketiga dan tidak dicantumkan di sini. Jika Anda menggunakan barrel lokal plugin bawaan secara langsung, baca komentar deprekasi di barrel tersebut sebelum meningkatkan versi.

Linimasa penghapusan

KapanApa yang terjadi
SekarangSurface yang dideprekasi mengeluarkan peringatan runtime
Rilis mayor berikutnyaSurface yang dideprekasi akan dihapus; plugin yang masih menggunakannya akan gagal
Semua plugin inti sudah dimigrasikan. Plugin eksternal harus bermigrasi sebelum rilis mayor berikutnya.

Menekan peringatan sementara

Tetapkan variabel lingkungan ini saat Anda mengerjakan migrasi:
OPENCLAW_SUPPRESS_PLUGIN_SDK_COMPAT_WARNING=1 openclaw gateway run
OPENCLAW_SUPPRESS_EXTENSION_API_WARNING=1 openclaw gateway run
Ini adalah pintu keluar sementara, bukan solusi permanen.

Terkait