Plugins

Migrasi Plugin SDK

OpenClaw telah beralih 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 bermigrasi.

Apa yang berubah

Sistem Plugin lama menyediakan dua permukaan yang sangat terbuka yang memungkinkan Plugin mengimpor apa pun yang mereka perlukan 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 sementara arsitektur Plugin baru sedang dibangun.
  • openclaw/plugin-sdk/infra-runtime - barrel helper runtime yang luas yang mencampur event sistem, status heartbeat, antrean pengiriman, helper fetch/proxy, helper file, tipe approval, dan utilitas yang tidak terkait.
  • openclaw/plugin-sdk/config-runtime - barrel kompatibilitas config yang 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 agent tertanam.
  • api.registerEmbeddedExtensionFactory(...) - hook ekstensi bundled khusus Pi yang sudah dihapus yang dapat mengamati event embedded-runner seperti tool_result.

Permukaan impor yang luas sekarang deprecated. Permukaan tersebut masih berfungsi saat runtime, tetapi Plugin baru tidak boleh menggunakannya, dan Plugin yang sudah ada sebaiknya bermigrasi sebelum rilis major berikutnya menghapusnya. API pendaftaran embedded extension factory khusus Pi telah dihapus; gunakan middleware hasil-tool sebagai gantinya.

OpenClaw tidak menghapus atau menafsirkan ulang perilaku Plugin yang terdokumentasi dalam perubahan yang sama saat pengganti diperkenalkan. Perubahan kontrak yang breaking harus terlebih dahulu melalui adapter kompatibilitas, diagnostik, docs, dan jendela deprecation. Ini berlaku untuk impor SDK, field manifest, API setup, hook, dan perilaku pendaftaran runtime.

Mengapa ini berubah

Pendekatan lama menyebabkan masalah:

  • Startup lambat - mengimpor satu helper memuat puluhan modul yang tidak terkait
  • Dependensi sirkular - re-export yang luas memudahkan pembuatan siklus impor
  • Permukaan API tidak jelas - tidak ada cara untuk mengetahui export mana yang stabil vs internal

SDK Plugin modern memperbaiki ini: setiap jalur impor (openclaw/plugin-sdk/\<subpath\>) adalah modul kecil, mandiri, dengan tujuan yang jelas dan kontrak yang terdokumentasi.

Seam kemudahan provider legacy untuk channel bundled juga sudah dihapus. Seam helper bermerek channel adalah shortcut mono-repo privat, bukan kontrak Plugin yang stabil. Gunakan subpath SDK generik yang sempit sebagai gantinya. Di dalam workspace Plugin bundled, simpan helper milik provider di api.ts atau runtime-api.ts milik Plugin itu sendiri.

Contoh provider bundled 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 suara realtime, telephony, meeting, dan Talk browser berpindah dari pembukuan 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 output-audio, riwayat event terbaru, dan penolakan stale-turn. Plugin provider harus tetap memiliki sesi realtime khusus vendor; Plugin permukaan harus tetap memiliki capture, playback, telephony, dan kekhususan meeting.

Migrasi Talk ini sengaja breaking-clean:

  1. Simpan primitive controller/runtime bersama di plugin-sdk/realtime-voice.
  2. Pindahkan permukaan bundled ke controller bersama: browser relay, managed-room handoff, voice-call realtime, voice-call streaming STT, 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 jalur override instruksi pada waktu request apa pun.

Kode baru sebaiknya tidak memanggil createTalkEventSequencer(...) secara langsung kecuali sedang mengimplementasikan adapter level rendah atau fixture test. Pilih controller bersama agar event dengan cakupan turn tidak dapat dipancarkan tanpa turn id, panggilan turnEnd / turnCancel yang stale tidak dapat menghapus turn aktif yang lebih baru, dan event lifecycle output-audio tetap konsisten di telephony, meeting, browser relay, managed-room handoff, dan client 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 });
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, transkripsi gateway-relay, dan sesi native STT/TTS managed-room.

Config legacy yang menempatkan selector realtime di samping talk.provider / talk.providers sebaiknya 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 kecil:

Mode Transport Brain Pemilik Catatan
realtime gateway-relay agent-consult Gateway Audio provider full-duplex dijembatani melalui Gateway; panggilan tool dirutekan melalui tool agent-consult.
transcription gateway-relay none Gateway Hanya STT streaming; caller mengirim audio input dan menerima event transkrip.
stt-tts managed-room agent-consult Room native/client Room gaya push-to-talk dan walkie-talkie tempat client memiliki capture/playback dan Gateway memiliki status turn.
stt-tts managed-room direct-tools Room native/client Mode room khusus admin untuk permukaan first-party tepercaya yang menjalankan tindakan tool Gateway secara langsung.

Peta method yang dihapus:

Lama Baru
talk.realtime.session talk.client.create
talk.realtime.toolCall talk.client.toolCall
talk.realtime.relayAudio talk.session.appendAudio
talk.realtime.relayCancel talk.session.cancelOutput atau talk.session.cancelTurn
talk.realtime.relayToolResult talk.session.submitToolResult
talk.realtime.relayStop talk.session.close
talk.transcription.session talk.session.create({ mode: "transcription" })
talk.transcription.relayAudio talk.session.appendAudio
talk.transcription.relayCancel talk.session.cancelTurn
talk.transcription.relayStop talk.session.close
talk.handoff.create talk.session.create({ transport: "managed-room" })
talk.handoff.join talk.session.join
talk.handoff.revoke talk.session.close

Kosakata kontrol terpadu juga sengaja sempit:

Method Berlaku untuk Kontrak
talk.session.appendAudio realtime/gateway-relay, transcription/gateway-relay Tambahkan chunk audio PCM base64 ke sesi provider yang dimiliki oleh koneksi Gateway yang sama.
talk.session.startTurn stt-tts/managed-room Mulai turn pengguna managed-room.
talk.session.endTurn stt-tts/managed-room Akhiri turn aktif setelah validasi stale-turn.
talk.session.cancelTurn semua sesi milik Gateway Batalkan pekerjaan capture/provider/agent/TTS aktif untuk sebuah turn.
talk.session.cancelOutput realtime/gateway-relay Hentikan output audio assistant tanpa harus mengakhiri turn pengguna.
talk.session.submitToolResult realtime/gateway-relay Selesaikan panggilan tool provider yang dipancarkan oleh relay.
talk.session.close semua sesi terpadu Hentikan sesi relay atau cabut status managed-room, lalu lupakan id sesi terpadu.

Jangan memperkenalkan kasus khusus provider atau platform di core untuk membuat ini berfungsi. Core memiliki semantik sesi Talk. Plugin provider memiliki setup sesi vendor. Voice-call dan Google Meet memiliki adapter telephony/meeting. Aplikasi browser dan native memiliki UX capture/playback perangkat.

Kebijakan kompatibilitas

Untuk Plugin eksternal, pekerjaan kompatibilitas mengikuti urutan ini:

  1. tambahkan kontrak baru
  2. pertahankan perilaku lama yang dihubungkan melalui adapter kompatibilitas
  3. pancarkan diagnostik atau warning yang menyebutkan jalur lama dan penggantinya
  4. cakup kedua jalur dalam test
  5. dokumentasikan deprecation dan jalur migrasi
  6. hapus hanya setelah jendela migrasi yang diumumkan, biasanya dalam rilis major

Pengelola dapat mengaudit antrean migrasi saat ini dengan pnpm plugins:boundary-report. Gunakan pnpm plugins:boundary-report:summary untuk jumlah yang ringkas, --owner <id> untuk satu plugin atau pemilik kompatibilitas, dan pnpm plugins:boundary-report:ci ketika gerbang CI harus gagal pada catatan kompatibilitas yang jatuh tempo, impor SDK tercadangkan lintas-pemilik, atau subjalur SDK tercadangkan yang tidak digunakan. Laporan mengelompokkan catatan kompatibilitas yang tidak digunakan lagi berdasarkan tanggal penghapusan, menghitung referensi kode/dokumen lokal, menampilkan impor SDK tercadangkan lintas-pemilik, dan merangkum jembatan SDK host memori privat agar pembersihan kompatibilitas tetap eksplisit alih-alih bergantung pada pencarian ad hoc. Subjalur SDK tercadangkan harus memiliki penggunaan pemilik yang terlacak; ekspor helper tercadangkan yang tidak digunakan harus dihapus dari SDK publik.

Jika sebuah bidang manifes masih diterima, penulis plugin dapat terus menggunakannya hingga dokumentasi dan diagnostik menyatakan sebaliknya. Kode baru sebaiknya mengutamakan pengganti yang terdokumentasi, tetapi plugin yang sudah ada tidak boleh rusak selama rilis minor biasa.

Cara bermigrasi

  • Migrasikan helper muat/tulis konfigurasi waktu proses

    Plugin bawaan harus berhenti memanggil api.runtime.config.loadConfig() dan api.runtime.config.writeConfigFile(...) secara langsung. Utamakan konfigurasi yang sudah diteruskan ke jalur panggilan aktif. Penangan berumur panjang yang memerlukan cuplikan proses saat ini dapat menggunakan api.runtime.config.current(). Alat agen berumur panjang harus menggunakan ctx.getRuntimeConfig() dari konteks alat di dalam execute agar alat yang dibuat sebelum penulisan konfigurasi tetap melihat konfigurasi waktu proses 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: "..." } ketika pemanggil mengetahui perubahan tersebut memerlukan restart Gateway yang bersih, dan afterWrite: { mode: "none", reason: "..." } hanya ketika pemanggil memiliki tindak lanjutnya dan dengan sengaja ingin menekan perencana pemuatan ulang. Hasil mutasi menyertakan ringkasan followUp bertipe untuk pengujian dan pencatatan; Gateway tetap bertanggung jawab untuk menerapkan atau menjadwalkan restart. loadConfig dan writeConfigFile tetap menjadi helper kompatibilitas yang tidak digunakan lagi untuk plugin eksternal selama jendela migrasi dan memperingatkan sekali dengan kode kompatibilitas runtime-config-load-write. Plugin bawaan dan kode waktu proses repo dilindungi oleh pagar pembatas pemindai di pnpm check:deprecated-internal-config-api dan pnpm check:no-runtime-action-load-config: penggunaan plugin produksi baru langsung gagal, penulisan konfigurasi langsung gagal, metode server Gateway harus menggunakan cuplikan waktu proses permintaan, helper kirim/aksi/klien saluran waktu proses harus menerima konfigurasi dari batasnya, dan modul waktu proses berumur panjang tidak memiliki panggilan loadConfig() ambien yang diizinkan.

    Kode plugin baru juga harus menghindari mengimpor modul pengumpul kompatibilitas luas openclaw/plugin-sdk/config-runtime. Gunakan subjalur SDK sempit yang sesuai dengan pekerjaan:

    Kebutuhan Impor
    Tipe konfigurasi seperti OpenClawConfig openclaw/plugin-sdk/config-types
    Asersi konfigurasi yang sudah dimuat dan pencarian konfigurasi entri-plugin openclaw/plugin-sdk/plugin-config-runtime
    Pembacaan cuplikan waktu proses saat ini openclaw/plugin-sdk/runtime-config-snapshot
    Penulisan konfigurasi openclaw/plugin-sdk/config-mutation
    Helper penyimpanan sesi openclaw/plugin-sdk/session-store-runtime
    Konfigurasi tabel Markdown openclaw/plugin-sdk/markdown-table-runtime
    Helper waktu proses kebijakan grup openclaw/plugin-sdk/runtime-group-policy
    Resolusi masukan rahasia openclaw/plugin-sdk/secret-input-runtime
    Penggantian model/sesi openclaw/plugin-sdk/model-session-runtime

    Plugin bawaan dan pengujiannya dilindungi pemindai dari modul pengumpul luas agar impor dan mock tetap lokal pada perilaku yang dibutuhkan. Modul pengumpul luas masih ada untuk kompatibilitas eksternal, tetapi kode baru tidak boleh bergantung padanya.

  • Migrasikan ekstensi hasil-alat Pi ke middleware

    Plugin bawaan harus mengganti penangan hasil-alat khusus Pi api.registerEmbeddedExtensionFactory(...) dengan middleware netral waktu proses.

    // 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-alat karena middleware tersebut dapat menulis ulang keluaran alat berkepercayaan tinggi sebelum model melihatnya.

  • Migrasikan penangan native-persetujuan ke fakta kapabilitas

    Plugin saluran berkemampuan persetujuan sekarang mengekspos perilaku persetujuan native melalui approvalCapability.nativeRuntime plus registri konteks waktu proses bersama.

    Perubahan utama:

    • Ganti approvalCapability.handler.loadRuntime(...) dengan approvalCapability.nativeRuntime
    • Pindahkan auth/pengiriman khusus persetujuan dari pengkabelan lama plugin.auth / plugin.approvals ke approvalCapability
    • ChannelPlugin.approvals telah dihapus dari kontrak plugin saluran publik; pindahkan bidang pengiriman/native/render ke approvalCapability
    • plugin.auth tetap ada hanya untuk alur login/logout saluran; hook auth persetujuan di sana tidak lagi dibaca oleh core
    • Daftarkan objek waktu proses milik saluran seperti klien, token, atau aplikasi Bolt melalui openclaw/plugin-sdk/channel-runtime-context
    • Jangan kirim pemberitahuan pengalihan milik plugin dari penangan persetujuan native; core sekarang memiliki pemberitahuan dialihkan-ke-tempat-lain dari hasil pengiriman aktual
    • Saat meneruskan channelRuntime ke createChannelManager(...), sediakan permukaan createPluginRuntime().channel yang nyata. Stub parsial ditolak.

    Lihat /plugins/sdk-channel-plugins untuk tata letak kapabilitas persetujuan saat ini.

  • Audit perilaku fallback wrapper Windows

    Jika plugin Anda menggunakan openclaw/plugin-sdk/windows-spawn, wrapper Windows .cmd/.bat yang tidak terselesaikan sekarang gagal secara 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 sengaja bergantung pada fallback melalui shell, jangan tetapkan allowShellFallback dan tangani error yang dilempar sebagai gantinya.

  • Temukan impor yang tidak digunakan lagi

    Cari impor dari salah satu permukaan yang tidak digunakan lagi di plugin Anda:

    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/
    
  • Ganti dengan impor terfokus

    Setiap ekspor dari permukaan lama dipetakan ke jalur impor modern tertentu:

    // 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 waktu proses 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 jembatan lama lainnya:

    Impor lama Padanan modern
    resolveAgentDir api.runtime.agent.resolveAgentDir
    resolveAgentWorkspaceDir api.runtime.agent.resolveAgentWorkspaceDir
    resolveAgentIdentity api.runtime.agent.resolveAgentIdentity
    resolveThinkingDefault api.runtime.agent.resolveThinkingDefault
    resolveAgentTimeoutMs api.runtime.agent.resolveAgentTimeoutMs
    ensureAgentWorkspace api.runtime.agent.ensureAgentWorkspace
    helper penyimpanan sesi api.runtime.agent.session.*
  • Ganti impor infra-runtime yang luas

    openclaw/plugin-sdk/infra-runtime masih ada untuk kompatibilitas eksternal, tetapi kode baru harus mengimpor permukaan helper terfokus yang benar-benar dibutuhkannya:

    Kebutuhan Impor
    Helper antrean peristiwa sistem openclaw/plugin-sdk/system-event-runtime
    Helper peristiwa dan visibilitas Heartbeat openclaw/plugin-sdk/heartbeat-runtime
    Pengurasan antrean pengiriman tertunda openclaw/plugin-sdk/delivery-queue-runtime
    Telemetri aktivitas saluran openclaw/plugin-sdk/channel-activity-runtime
    Cache deduplikasi dalam memori openclaw/plugin-sdk/dedupe-runtime
    Helper jalur file/media lokal yang aman openclaw/plugin-sdk/file-access-runtime
    Fetch yang sadar dispatcher openclaw/plugin-sdk/runtime-fetch
    Helper proxy dan fetch berpagar openclaw/plugin-sdk/fetch-runtime
    Tipe kebijakan dispatcher SSRF openclaw/plugin-sdk/ssrf-dispatcher
    Tipe permintaan/resolusi persetujuan openclaw/plugin-sdk/approval-runtime
    Helper payload balasan persetujuan dan perintah openclaw/plugin-sdk/approval-reply-runtime
    Helper pemformatan error openclaw/plugin-sdk/error-runtime
    Penungguan kesiapan transport openclaw/plugin-sdk/transport-ready-runtime
    Helper token aman openclaw/plugin-sdk/secure-random-runtime
    Konkurensi tugas asinkron berbatas openclaw/plugin-sdk/concurrency-runtime
    Koersi numerik openclaw/plugin-sdk/number-runtime
    Kunci asinkron lokal-proses openclaw/plugin-sdk/async-lock-runtime
    Kunci file openclaw/plugin-sdk/file-lock

    Plugin bawaan dilindungi pemindai dari infra-runtime, sehingga kode repo tidak dapat mundur ke modul pengumpul luas.

  • Migrasikan helper rute saluran

    Kode rute saluran baru harus menggunakan openclaw/plugin-sdk/channel-route. Nama route-key dan comparable-target yang lebih lama tetap ada sebagai alias kompatibilitas selama jendela migrasi, tetapi plugin baru harus menggunakan nama rute yang menjelaskan perilaku secara langsung:

    Helper lama Helper modern
    channelRouteIdentityKey(...) channelRouteDedupeKey(...)
    channelRouteKey(...) channelRouteCompactKey(...)
    ComparableChannelTarget ChannelRouteParsedTarget
    resolveComparableTargetForChannel(...) resolveRouteTargetForChannel(...)
    resolveComparableTargetForLoadedChannel(...) resolveRouteTargetForLoadedChannel(...)
    comparableChannelTargetsMatch(...) channelRouteTargetsMatchExact(...)
    comparableChannelTargetsShareRoute(...) channelRouteTargetsShareConversation(...)

    Helper rute modern menormalkan { channel, to, accountId, threadId } secara konsisten di seluruh persetujuan native, supresi balasan, deduplikasi inbound, pengiriman cron, dan perutean sesi. Jika plugin Anda memiliki tata bahasa target kustom, gunakan resolveChannelRouteTargetWithParser(...) untuk mengadaptasi parser tersebut ke kontrak target rute yang sama.

  • Bangun dan uji

    pnpm build
    pnpm test -- my-plugin/
    
  • Referensi jalur impor

    Common import path table
    Jalur impor Tujuan Ekspor utama
    plugin-sdk/plugin-entry Helper entri plugin kanonis definePluginEntry
    plugin-sdk/core Ekspor ulang payung legacy untuk definisi/builder entri channel defineChannelPluginEntry, createChatChannelPlugin
    plugin-sdk/config-schema Ekspor skema konfigurasi root OpenClawSchema
    plugin-sdk/provider-entry Helper entri provider tunggal defineSingleProviderPluginEntry
    plugin-sdk/channel-core Definisi dan builder entri channel terfokus defineChannelPluginEntry, defineSetupPluginEntry, createChatChannelPlugin, createChannelPluginBase
    plugin-sdk/setup Helper wizard setup bersama Prompt allowlist, builder status setup
    plugin-sdk/setup-runtime Helper runtime saat setup Adapter patch setup yang aman diimpor, helper catatan lookup, promptResolvedAllowFrom, splitSetupEntries, proxy setup terdelegasi
    plugin-sdk/setup-adapter-runtime Helper adapter setup createEnvPatchedAccountSetupAdapter
    plugin-sdk/setup-tools Helper tooling setup formatCliCommand, detectBinary, extractArchive, resolveBrewExecutable, formatDocsLink, CONFIG_DIR
    plugin-sdk/account-core Helper multi-akun Helper daftar akun/konfigurasi/action-gate
    plugin-sdk/account-id Helper account-id DEFAULT_ACCOUNT_ID, normalisasi account-id
    plugin-sdk/account-resolution Helper lookup akun Helper lookup akun + default-fallback
    plugin-sdk/account-helpers Helper akun sempit Helper daftar akun/account-action
    plugin-sdk/channel-setup Adapter wizard setup createOptionalChannelSetupSurface, createOptionalChannelSetupAdapter, createOptionalChannelSetupWizard, plus DEFAULT_ACCOUNT_ID, createTopLevelChannelDmPolicy, setSetupChannelEnabled, splitSetupEntries
    plugin-sdk/channel-pairing Primitif pairing DM createChannelPairingController
    plugin-sdk/channel-reply-pipeline Pengawatan prefiks balasan, pengetikan, dan pengiriman sumber createChannelReplyPipeline, resolveChannelSourceReplyDeliveryMode
    plugin-sdk/channel-config-helpers Factory adapter konfigurasi dan helper akses DM createHybridChannelConfigAdapter, resolveChannelDmAccess, resolveChannelDmAllowFrom, resolveChannelDmPolicy, normalizeChannelDmPolicy, normalizeLegacyDmAliases
    plugin-sdk/channel-config-schema Builder skema konfigurasi Primitif skema konfigurasi channel bersama dan hanya builder generik
    plugin-sdk/bundled-channel-config-schema Skema konfigurasi bundel Hanya plugin bundel yang dipelihara OpenClaw; plugin baru harus mendefinisikan skema lokal plugin
    plugin-sdk/channel-config-schema-legacy Skema konfigurasi bundel yang tidak digunakan lagi Hanya alias kompatibilitas; gunakan plugin-sdk/bundled-channel-config-schema untuk plugin bundel yang dipelihara
    plugin-sdk/telegram-command-config Helper konfigurasi perintah Telegram Normalisasi nama perintah, pemangkasan deskripsi, validasi duplikat/konflik
    plugin-sdk/channel-policy Resolusi kebijakan grup/DM resolveChannelGroupRequireMention
    plugin-sdk/channel-lifecycle Helper status akun dan siklus hidup stream draf createAccountStatusSink, helper finalisasi pratinjau draf
    plugin-sdk/inbound-envelope Helper envelope masuk Helper builder route + envelope bersama
    plugin-sdk/inbound-reply-dispatch Helper balasan masuk Helper pencatatan-dan-dispatch bersama
    plugin-sdk/messaging-targets Parsing target pesan Helper parsing/pencocokan target
    plugin-sdk/outbound-media Helper media keluar Pemuatan media keluar bersama
    plugin-sdk/outbound-send-deps Helper dependensi kirim keluar Lookup resolveOutboundSendDep ringan tanpa mengimpor runtime keluar penuh
    plugin-sdk/outbound-runtime Helper runtime keluar Helper pengiriman keluar, delegasi identitas/kirim, sesi, pemformatan, dan perencanaan payload
    plugin-sdk/thread-bindings-runtime Helper thread-binding Helper siklus hidup thread-binding dan adapter
    plugin-sdk/agent-media-payload Helper payload media legacy Builder payload media agen untuk tata letak field legacy
    plugin-sdk/channel-runtime Shim kompatibilitas yang tidak digunakan lagi Hanya utilitas runtime channel legacy
    plugin-sdk/channel-send-result Tipe hasil kirim Tipe hasil balasan
    plugin-sdk/runtime-store Penyimpanan plugin persisten createPluginRuntimeStore
    plugin-sdk/runtime Helper runtime luas Helper runtime/logging/backup/instalasi-plugin
    plugin-sdk/runtime-env Helper env runtime sempit Logger/runtime env, timeout, retry, dan helper backoff
    plugin-sdk/plugin-runtime Helper runtime plugin bersama Helper perintah/hook/http/interaktif plugin
    plugin-sdk/hook-runtime Helper pipeline hook Helper pipeline Webhook/internal hook bersama
    plugin-sdk/lazy-runtime Helper runtime lazy createLazyRuntimeModule, createLazyRuntimeMethod, createLazyRuntimeMethodBinder, createLazyRuntimeNamedExport, createLazyRuntimeSurface
    plugin-sdk/process-runtime Helper proses Helper exec bersama
    plugin-sdk/cli-runtime Helper runtime CLI Pemformatan perintah, penantian, helper versi
    plugin-sdk/gateway-runtime Helper Gateway Klien Gateway, helper start event-loop-ready, dan helper patch status-channel
    plugin-sdk/config-runtime Shim kompatibilitas konfigurasi yang tidak digunakan lagi Utamakan config-types, plugin-config-runtime, runtime-config-snapshot, dan config-mutation
    plugin-sdk/telegram-command-config Helper perintah Telegram Helper validasi perintah Telegram yang stabil sebagai fallback saat permukaan kontrak Telegram bundel tidak tersedia
    plugin-sdk/approval-runtime Helper prompt persetujuan Payload persetujuan exec/plugin, helper kapabilitas/profil persetujuan, helper routing/runtime persetujuan native, dan pemformatan jalur tampilan persetujuan terstruktur
    plugin-sdk/approval-auth-runtime Helper auth persetujuan Resolusi approver, auth aksi di chat yang sama
    plugin-sdk/approval-client-runtime Helper klien persetujuan Helper profil/filter persetujuan exec native
    plugin-sdk/approval-delivery-runtime Helper pengiriman persetujuan Adapter kapabilitas/pengiriman persetujuan native
    plugin-sdk/approval-gateway-runtime Helper Gateway persetujuan Helper resolusi Gateway persetujuan bersama
    plugin-sdk/approval-handler-adapter-runtime Helper adapter persetujuan Helper pemuatan adapter persetujuan native ringan untuk entrypoint channel panas
    plugin-sdk/approval-handler-runtime Helper handler persetujuan Helper runtime handler persetujuan yang lebih luas; utamakan seam adapter/gateway yang lebih sempit ketika sudah cukup
    plugin-sdk/approval-native-runtime Helper target persetujuan Helper binding target/akun persetujuan native
    plugin-sdk/approval-reply-runtime Helper balasan persetujuan Helper payload balasan persetujuan exec/plugin
    plugin-sdk/channel-runtime-context Helper runtime-context channel Helper register/get/watch runtime-context channel generik
    plugin-sdk/security-runtime Helper keamanan Trust bersama, gating DM, helper file/jalur berbatas root, konten eksternal, dan pengumpulan rahasia
    plugin-sdk/ssrf-policy Helper kebijakan SSRF Helper kebijakan allowlist host dan jaringan privat
    plugin-sdk/ssrf-runtime Helper runtime SSRF Helper pinned-dispatcher, guarded fetch, kebijakan SSRF
    plugin-sdk/system-event-runtime Helper event sistem enqueueSystemEvent, peekSystemEventEntries
    plugin-sdk/heartbeat-runtime Helper Heartbeat Helper event Heartbeat dan visibilitas
    plugin-sdk/delivery-queue-runtime Helper antrean pengiriman drainPendingDeliveries
    plugin-sdk/channel-activity-runtime Helper aktivitas channel recordChannelActivity
    plugin-sdk/dedupe-runtime Helper dedupe Cache dedupe dalam memori
    plugin-sdk/file-access-runtime Helper akses file Helper jalur file/media lokal yang aman
    plugin-sdk/transport-ready-runtime Helper kesiapan transport waitForTransportReady
    plugin-sdk/collection-runtime Helper cache berbatas pruneMapToMaxSize
    plugin-sdk/diagnostic-runtime Helper gating diagnostik isDiagnosticFlagEnabled, isDiagnosticsEnabled
    plugin-sdk/error-runtime Helper pemformatan error formatUncaughtError, isApprovalNotFoundError, helper grafik error
    plugin-sdk/fetch-runtime Helper fetch/proxy terbungkus resolveFetch, helper proxy, helper opsi EnvHttpProxyAgent
    plugin-sdk/host-runtime Helper normalisasi host normalizeHostname, normalizeScpRemoteHost
    plugin-sdk/retry-runtime Helper retry RetryConfig, retryAsync, runner kebijakan
    plugin-sdk/allow-from Pemformatan allowlist formatAllowFromLowercase
    plugin-sdk/allowlist-resolution Pemetaan input allowlist mapAllowlistResolutionInputs
    plugin-sdk/command-auth Gating perintah dan helper permukaan perintah resolveControlCommandGate, helper otorisasi pengirim, helper registry perintah termasuk pemformatan menu argumen dinamis
    plugin-sdk/command-status Renderer status/bantuan perintah buildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage
    plugin-sdk/secret-input Parsing input rahasia Helper input rahasia
    plugin-sdk/webhook-ingress Helper permintaan Webhook Utilitas target Webhook
    plugin-sdk/webhook-request-guards Helper guard body Webhook Helper pembacaan/batas body permintaan
    plugin-sdk/reply-runtime Runtime balasan bersama Dispatch masuk, heartbeat, perencana balasan, chunking
    plugin-sdk/reply-dispatch-runtime Helper dispatch balasan sempit Helper finalisasi, dispatch provider, dan label percakapan
    plugin-sdk/reply-history Helper riwayat balasan buildHistoryContext, buildPendingHistoryContextFromMap, recordPendingHistoryEntry, clearHistoryEntriesIfEnabled
    plugin-sdk/reply-reference Perencanaan referensi balasan createReplyReferencePlanner
    plugin-sdk/reply-chunking Helper chunk balasan Helper chunking teks/markdown
    plugin-sdk/session-store-runtime Helper store sesi Helper jalur store + updated-at
    plugin-sdk/state-paths Helper jalur status Helper dir status dan OAuth
    plugin-sdk/routing Helper routing/session-key resolveAgentRoute, buildAgentSessionKey, resolveDefaultAgentBoundAccountId, helper normalisasi session-key
    plugin-sdk/status-helpers Helper status channel Builder ringkasan status channel/akun, default runtime-state, helper metadata isu
    plugin-sdk/target-resolver-runtime Helper resolver target Helper resolver target bersama
    plugin-sdk/string-normalization-runtime Helper normalisasi string Helper normalisasi slug/string
    plugin-sdk/request-url Helper URL permintaan Ekstrak URL string dari input mirip permintaan
    plugin-sdk/run-command Helper perintah berwaktu Runner perintah berwaktu dengan stdout/stderr ternormalisasi
    plugin-sdk/param-readers Reader param Reader param tool/CLI umum
    plugin-sdk/tool-payload Ekstraksi payload alat Ekstrak payload ternormalisasi dari objek hasil alat
    plugin-sdk/tool-send Ekstraksi pengiriman alat Ekstrak bidang target pengiriman kanonis dari argumen alat
    plugin-sdk/temp-path Helper jalur sementara Helper jalur unduhan sementara bersama
    plugin-sdk/logging-core Helper pencatatan log Helper pencatat log subsistem dan redaksi
    plugin-sdk/markdown-table-runtime Helper tabel Markdown Helper mode tabel Markdown
    plugin-sdk/reply-payload Jenis balasan pesan Jenis payload balasan
    plugin-sdk/provider-setup Helper penyiapan penyedia lokal/dihosting sendiri yang dikurasi Helper penemuan/konfigurasi penyedia yang dihosting sendiri
    plugin-sdk/self-hosted-provider-setup Helper penyiapan penyedia dihosting sendiri yang kompatibel dengan OpenAI dan terfokus Helper penemuan/konfigurasi penyedia yang dihosting sendiri yang sama
    plugin-sdk/provider-auth-runtime Helper autentikasi runtime penyedia Helper resolusi kunci API runtime
    plugin-sdk/provider-auth-api-key Helper penyiapan kunci API penyedia Helper orientasi kunci API/penulisan profil
    plugin-sdk/provider-auth-result Helper hasil autentikasi penyedia Builder hasil autentikasi OAuth standar
    plugin-sdk/provider-auth-login Helper login interaktif penyedia Helper login interaktif bersama
    plugin-sdk/provider-selection-runtime Helper pemilihan penyedia Pemilihan penyedia terkonfigurasi-atau-otomatis dan penggabungan konfigurasi penyedia mentah
    plugin-sdk/provider-env-vars Helper variabel lingkungan penyedia Helper pencarian variabel lingkungan autentikasi penyedia
    plugin-sdk/provider-model-shared Helper model/pemutaran ulang penyedia bersama ProviderReplayFamily, buildProviderReplayFamilyHooks, normalizeModelCompat, builder kebijakan pemutaran ulang bersama, helper titik akhir penyedia, dan helper normalisasi ID model
    plugin-sdk/provider-catalog-shared Helper katalog penyedia bersama findCatalogTemplate, buildSingleProviderApiKeyCatalog, buildManifestModelProviderConfig, supportsNativeStreamingUsageCompat, applyProviderNativeStreamingUsageCompat
    plugin-sdk/provider-onboard Patch orientasi penyedia Helper konfigurasi orientasi
    plugin-sdk/provider-http Helper HTTP penyedia Helper kemampuan HTTP/titik akhir penyedia generik, termasuk helper formulir multipart transkripsi audio
    plugin-sdk/provider-web-fetch Helper pengambilan web penyedia Helper pendaftaran/cache penyedia pengambilan web
    plugin-sdk/provider-web-search-config-contract Helper konfigurasi pencarian web penyedia Helper konfigurasi/kredensial pencarian web yang sempit untuk penyedia yang tidak memerlukan pengawatan pengaktifan Plugin
    plugin-sdk/provider-web-search-contract Helper kontrak pencarian web penyedia Helper kontrak konfigurasi/kredensial pencarian web yang sempit seperti createWebSearchProviderContractFields, enablePluginInConfig, resolveProviderWebSearchPluginConfig, dan setter/getter kredensial terskop
    plugin-sdk/provider-web-search Helper pencarian web penyedia Helper pendaftaran/cache/runtime penyedia pencarian web
    plugin-sdk/provider-tools Helper kompatibilitas alat/skema penyedia ProviderToolCompatFamily, buildProviderToolCompatFamilyHooks, pembersihan skema Gemini + diagnostik, dan helper kompatibilitas xAI seperti resolveXaiModelCompatPatch / applyXaiModelCompat
    plugin-sdk/provider-usage Helper penggunaan penyedia fetchClaudeUsage, fetchGeminiUsage, fetchGithubCopilotUsage, dan helper penggunaan penyedia lainnya
    plugin-sdk/provider-stream Helper pembungkus stream penyedia ProviderStreamFamily, buildProviderStreamFamilyHooks, composeProviderStreamWrappers, jenis pembungkus stream, dan helper pembungkus Anthropic/Bedrock/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot bersama
    plugin-sdk/provider-transport-runtime Helper transport penyedia Helper transport penyedia native seperti fetch terlindungi, transformasi pesan transport, dan stream peristiwa transport yang dapat ditulis
    plugin-sdk/keyed-async-queue Antrean asinkron terurut KeyedAsyncQueue
    plugin-sdk/media-runtime Helper media bersama Helper pengambilan/transformasi/penyimpanan media, pemeriksaan dimensi video berbasis ffprobe, dan builder payload media
    plugin-sdk/media-generation-runtime Helper pembuatan media bersama Helper failover bersama, pemilihan kandidat, dan pesan model yang hilang untuk pembuatan gambar/video/musik
    plugin-sdk/media-understanding Helper pemahaman media Jenis penyedia pemahaman media plus ekspor helper gambar/audio yang menghadap penyedia
    plugin-sdk/text-runtime Helper teks bersama Penghapusan teks yang terlihat oleh asisten, helper render/pemotongan/tabel Markdown, helper redaksi, helper tag direktif, utilitas teks aman, dan helper teks/pencatatan log terkait
    plugin-sdk/text-chunking Helper pemotongan teks Helper pemotongan teks keluar
    plugin-sdk/speech Helper wicara Jenis penyedia wicara plus helper direktif, registri, validasi yang menghadap penyedia, dan builder TTS kompatibel OpenAI
    plugin-sdk/speech-core Inti wicara bersama Jenis penyedia wicara, registri, direktif, normalisasi
    plugin-sdk/realtime-transcription Helper transkripsi realtime Jenis penyedia, helper registri, dan helper sesi WebSocket bersama
    plugin-sdk/realtime-voice Helper suara realtime Jenis penyedia, helper registri/resolusi, helper sesi bridge, antrean bicara-balik agen bersama, kesehatan transkrip/peristiwa, penekanan gema, dan helper konsultasi konteks cepat
    plugin-sdk/image-generation Helper pembuatan gambar Jenis penyedia pembuatan gambar plus helper aset gambar/URL data dan builder penyedia gambar kompatibel OpenAI
    plugin-sdk/image-generation-core Inti pembuatan gambar bersama Jenis pembuatan gambar, failover, autentikasi, dan helper registri
    plugin-sdk/music-generation Helper pembuatan musik Jenis penyedia/permintaan/hasil pembuatan musik
    plugin-sdk/music-generation-core Inti pembuatan musik bersama Jenis pembuatan musik, helper failover, pencarian penyedia, dan penguraian ref model
    plugin-sdk/video-generation Helper pembuatan video Jenis penyedia/permintaan/hasil pembuatan video
    plugin-sdk/video-generation-core Inti pembuatan video bersama Jenis pembuatan video, helper failover, pencarian penyedia, dan penguraian ref model
    plugin-sdk/interactive-runtime Helper balasan interaktif Normalisasi/reduksi payload balasan interaktif
    plugin-sdk/channel-config-primitives Primitif konfigurasi channel Primitif skema konfigurasi channel yang sempit
    plugin-sdk/channel-config-writes Helper penulisan konfigurasi channel Helper otorisasi penulisan konfigurasi channel
    plugin-sdk/channel-plugin-common Prelude channel bersama Ekspor prelude Plugin channel bersama
    plugin-sdk/channel-status Helper status channel Helper snapshot/ringkasan status channel bersama
    plugin-sdk/allowlist-config-edit Helper konfigurasi allowlist Helper edit/baca konfigurasi allowlist
    plugin-sdk/group-access Helper akses grup Helper keputusan akses grup bersama
    plugin-sdk/direct-dm Helper DM langsung Helper autentikasi/penjaga DM langsung bersama
    plugin-sdk/extension-shared Helper ekstensi bersama Primitif helper channel/status pasif dan proxy ambien
    plugin-sdk/webhook-targets Helper target Webhook Registri target Webhook dan helper pemasangan rute
    plugin-sdk/webhook-path Helper jalur Webhook Helper normalisasi jalur Webhook
    plugin-sdk/web-media Helper media web bersama Helper pemuatan media jarak jauh/lokal
    plugin-sdk/zod Ekspor ulang Zod zod yang diekspor ulang untuk konsumen SDK Plugin
    plugin-sdk/memory-core Helper memory-core bawaan Permukaan helper manajer/konfigurasi/berkas/CLI memori
    plugin-sdk/memory-core-engine-runtime Fasad runtime mesin memori Fasad runtime indeks/pencarian memori
    plugin-sdk/memory-core-host-engine-foundation Mesin fondasi host memori Ekspor mesin fondasi host memori
    plugin-sdk/memory-core-host-engine-embeddings Mesin embedding host memori Kontrak embedding memori, akses registri, penyedia lokal, dan helper batch/jarak jauh generik; penyedia jarak jauh konkret berada di Plugin pemiliknya
    plugin-sdk/memory-core-host-engine-qmd Mesin QMD host memori Ekspor mesin QMD host memori
    plugin-sdk/memory-core-host-engine-storage Mesin penyimpanan host memori Ekspor mesin penyimpanan host memori
    plugin-sdk/memory-core-host-multimodal Helper multimodal host memori Helper multimodal host memori
    plugin-sdk/memory-core-host-query Helper kueri host memori Helper kueri host memori
    plugin-sdk/memory-core-host-secret Helper rahasia host memori Helper rahasia host memori
    plugin-sdk/memory-core-host-events Helper jurnal peristiwa host memori Helper jurnal peristiwa host memori
    plugin-sdk/memory-core-host-status Helper status host memori Helper status host memori
    plugin-sdk/memory-core-host-runtime-cli Runtime CLI host memori Helper runtime CLI host memori
    plugin-sdk/memory-core-host-runtime-core Runtime inti host memori Helper runtime inti host memori
    plugin-sdk/memory-core-host-runtime-files Helper berkas/runtime host memori Helper berkas/runtime host memori
    plugin-sdk/memory-host-core Alias runtime inti host memori Alias netral vendor untuk helper runtime inti host memori
    plugin-sdk/memory-host-events Alias jurnal peristiwa host memori Alias netral vendor untuk helper jurnal peristiwa host memori
    plugin-sdk/memory-host-files Alias berkas/runtime host memori Alias netral vendor untuk helper berkas/runtime host memori
    plugin-sdk/memory-host-markdown Helper markdown terkelola Helper markdown terkelola bersama untuk Plugin yang berdekatan dengan memori
    plugin-sdk/memory-host-search Fasad pencarian memori aktif Fasad runtime manajer pencarian memori aktif yang malas
    plugin-sdk/memory-host-status Alias status host memori Alias netral vendor untuk helper status host memori
    plugin-sdk/testing Utilitas pengujian Barrel kompatibilitas luas warisan; utamakan subjalur pengujian 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. Daftar lengkap 200+ titik masuk berada di scripts/lib/plugin-sdk-entrypoints.json.

    Seam pembantu bundled-plugin yang dicadangkan telah dipensiunkan dari peta ekspor SDK publik kecuali facade kompatibilitas yang didokumentasikan secara eksplisit seperti shim plugin-sdk/discord yang tidak digunakan lagi tetapi dipertahankan untuk paket @openclaw/[email protected] 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 pekerjaan. Jika Anda tidak dapat menemukan ekspor, periksa sumber di src/plugin-sdk/ atau tanyakan kepada maintainer kontrak generik mana yang seharusnya memilikinya.

    Penghentian aktif

    Penghentian yang lebih sempit yang berlaku di seluruh SDK plugin, kontrak penyedia, permukaan runtime, dan manifest. Masing-masing masih berfungsi saat ini tetapi akan dihapus dalam rilis mayor mendatang. Entri di bawah setiap item memetakan API lama ke pengganti kanonisnya.

    pembuat bantuan command-auth → command-status

    Lama (openclaw/plugin-sdk/command-auth): buildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage.

    Baru (openclaw/plugin-sdk/command-status): tanda tangan sama, ekspor sama - hanya diimpor dari subpath yang lebih sempit. command-auth mengekspornya kembali sebagai stub kompatibilitas.

    // Before
    import { buildHelpMessage } from "openclaw/plugin-sdk/command-auth";
    
    // After
    import { buildHelpMessage } from "openclaw/plugin-sdk/command-status";
    
    Pembantu gating mention → resolveInboundMentionDecision

    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 saluran hilir (Slack, Discord, Matrix, MS Teams) sudah beralih.

    Shim runtime saluran dan pembantu tindakan saluran

    openclaw/plugin-sdk/channel-runtime adalah shim kompatibilitas untuk plugin saluran lama. Jangan impor dari kode baru; gunakan openclaw/plugin-sdk/channel-runtime-context untuk mendaftarkan objek runtime.

    Pembantu channelActions* di openclaw/plugin-sdk/channel-actions tidak digunakan lagi bersama ekspor saluran "actions" mentah. Ekspos kapabilitas melalui permukaan semantik presentation sebagai gantinya - plugin saluran mendeklarasikan apa yang mereka render (kartu, tombol, pilihan), bukan nama tindakan mentah mana yang mereka terima.

    Pembantu tool() penyedia pencarian web → createTool() pada plugin

    Lama: factory tool() dari openclaw/plugin-sdk/provider-web-search.

    Baru: implementasikan createTool(...) langsung pada plugin penyedia. OpenClaw tidak lagi membutuhkan pembantu SDK untuk mendaftarkan wrapper tool.

    Envelope saluran plaintext → BodyForAgent

    Lama: formatInboundEnvelope(...) (dan ChannelMessageForAgent.channelEnvelope) untuk membangun envelope prompt plaintext datar dari pesan saluran masuk.

    Baru: BodyForAgent plus blok konteks pengguna terstruktur. Plugin saluran melampirkan metadata routing (thread, topik, balas-ke, reaksi) sebagai field bertipe, bukan menggabungkannya ke dalam string prompt. Pembantu formatAgentEnvelope(...) masih didukung untuk envelope sintetis yang ditujukan ke asisten, tetapi envelope plaintext masuk sedang menuju penghentian.

    Area terdampak: inbound_claim, message_received, dan plugin saluran kustom apa pun yang memproses lanjut teks channelEnvelope.

    Tipe penemuan penyedia → tipe katalog penyedia

    Empat alias tipe penemuan sekarang menjadi wrapper tipis di atas tipe era katalog:

    Alias lama Tipe baru
    ProviderDiscoveryOrder ProviderCatalogOrder
    ProviderDiscoveryContext ProviderCatalogContext
    ProviderDiscoveryResult ProviderCatalogResult
    ProviderPluginDiscovery ProviderPluginCatalog

    Ditambah kantong statis ProviderCapabilities lama - plugin penyedia sebaiknya menggunakan hook penyedia eksplisit seperti buildReplayPolicy, normalizeToolSchemas, dan wrapStreamFn, bukan objek statis.

    Hook kebijakan berpikir → resolveThinkingProfile

    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 usang berdasarkan peringkat profil secara otomatis.

    Implementasikan satu hook, bukan tiga. Hook lama tetap berfungsi selama jendela penghentian tetapi tidak dikomposisikan dengan hasil profil.

    Fallback penyedia OAuth eksternal → contracts.externalAuthProviders

    Lama: mengimplementasikan resolveExternalOAuthProfiles(...) tanpa mendeklarasikan penyedia dalam manifest plugin.

    Baru: deklarasikan contracts.externalAuthProviders dalam manifest plugin dan implementasikan resolveExternalAuthProfiles(...). Jalur "fallback auth" lama memancarkan peringatan saat runtime dan akan dihapus.

    {
      "contracts": {
        "externalAuthProviders": ["anthropic", "openai"]
      }
    }
    
    Lookup env-var penyedia → setup.providers[].envVars

    Field manifest lama: providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }.

    Baru: cerminkan lookup env-var yang sama ke setup.providers[].envVars pada manifest. Ini mengonsolidasikan metadata env setup/status di satu tempat dan menghindari boot runtime plugin hanya untuk menjawab lookup env-var.

    providerAuthEnvVars tetap didukung melalui adaptor kompatibilitas sampai jendela penghentian ditutup.

    Pendaftaran plugin memori → registerMemoryCapability

    Lama: tiga panggilan terpisah - api.registerMemoryPromptSection(...), api.registerMemoryFlushPlan(...), api.registerMemoryRuntime(...).

    Baru: satu panggilan pada API memory-state - registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime }).

    Slot sama, satu panggilan pendaftaran. Pembantu memori aditif (registerMemoryPromptSupplement, registerMemoryCorpusSupplement, registerMemoryEmbeddingProvider) tidak terdampak.

    Tipe pesan sesi subagent diganti nama

    Dua alias tipe lama masih diekspor dari src/plugins/runtime/types.ts:

    Lama Baru
    SubagentReadSessionParams SubagentGetSessionMessagesParams
    SubagentReadSessionResult SubagentGetSessionMessagesResult

    Metode runtime readSession tidak digunakan lagi dan digantikan oleh getSessionMessages. Tanda tangan sama; metode lama meneruskan panggilan ke yang baru.

    runtime.tasks.flow → runtime.tasks.managedFlows

    Lama: runtime.tasks.flow (tunggal) mengembalikan pengakses task-flow langsung.

    Baru: runtime.tasks.managedFlows mempertahankan runtime mutasi TaskFlow terkelola untuk plugin yang membuat, memperbarui, membatalkan, atau menjalankan tugas anak dari sebuah flow. Gunakan runtime.tasks.flows saat plugin hanya membutuhkan pembacaan berbasis DTO.

    // Before
    const flow = api.runtime.tasks.flow.fromToolContext(ctx);
    // After
    const flow = api.runtime.tasks.managedFlows.fromToolContext(ctx);
    
    Factory ekstensi tertanam → middleware hasil-tool agen

    Dicakup dalam "Cara bermigrasi → Migrasikan ekstensi hasil-tool Pi ke middleware" di atas. Disertakan di sini demi kelengkapan: jalur khusus Pi yang telah dihapus api.registerEmbeddedExtensionFactory(...) digantikan oleh api.registerAgentToolResultMiddleware(...) dengan daftar runtime eksplisit di contracts.agentToolResultMiddleware.

    Alias OpenClawSchemaType → OpenClawConfig

    OpenClawSchemaType yang diekspor ulang dari openclaw/plugin-sdk sekarang menjadi alias satu baris untuk OpenClawConfig. Lebih baik gunakan nama kanonisnya.

    // Before
    import type { OpenClawSchemaType } from "openclaw/plugin-sdk";
    // After
    import type { OpenClawConfig } from "openclaw/plugin-sdk/config-schema";
    

    Linimasa penghapusan

    Kapan Apa yang terjadi
    Sekarang Permukaan yang tidak digunakan lagi memancarkan peringatan runtime
    Rilis mayor berikutnya Permukaan yang tidak digunakan lagi akan dihapus; plugin yang masih menggunakannya akan gagal

    Semua plugin inti sudah dimigrasikan. Plugin eksternal sebaiknya bermigrasi sebelum rilis mayor berikutnya.

    Menekan peringatan untuk 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 jalan keluar sementara, bukan solusi permanen.

    Terkait