api.runtime yang disuntikkan ke setiap plugin selama registrasi. Gunakan helper ini alih-alih mengimpor internal host secara langsung.
Plugin channel
Panduan langkah demi langkah yang menggunakan helper ini dalam konteks untuk plugin channel.
Plugin provider
Panduan langkah demi langkah yang menggunakan helper ini dalam konteks untuk plugin provider.
Pemuatan dan penulisan konfigurasi
Utamakan konfigurasi yang sudah diteruskan ke jalur panggilan aktif, misalnyaapi.config selama registrasi atau argumen cfg pada callback channel/provider. Ini menjaga satu snapshot proses mengalir melalui pekerjaan alih-alih mem-parsing ulang konfigurasi pada jalur panas.
Gunakan api.runtime.config.current() hanya ketika handler berumur panjang membutuhkan snapshot proses saat ini dan tidak ada konfigurasi yang diteruskan ke fungsi tersebut. Nilai yang dikembalikan bersifat readonly; kloning atau gunakan helper mutasi sebelum mengedit.
Factory alat menerima ctx.runtimeConfig ditambah ctx.getRuntimeConfig(). Gunakan getter di dalam callback execute milik alat berumur panjang ketika konfigurasi dapat berubah setelah definisi alat dibuat.
Persistenkan perubahan dengan api.runtime.config.mutateConfigFile(...) atau api.runtime.config.replaceConfigFile(...). Setiap penulisan harus memilih kebijakan afterWrite eksplisit:
afterWrite: { mode: "auto" }membiarkan pemuat ulang gateway menentukan keputusan.afterWrite: { mode: "restart", reason: "..." }memaksa restart bersih ketika penulis mengetahui bahwa hot reload tidak aman.afterWrite: { mode: "none", reason: "..." }menekan reload/restart otomatis hanya ketika pemanggil memiliki tindak lanjutnya.
afterWrite ditambah ringkasan followUp bertipe sehingga pemanggil dapat mencatat log atau menguji apakah mereka meminta restart. Gateway tetap memiliki kendali atas kapan restart itu benar-benar terjadi.
api.runtime.config.loadConfig() dan api.runtime.config.writeConfigFile(...) adalah helper kompatibilitas yang tidak lagi disarankan di bawah runtime-config-load-write. Keduanya memperingatkan sekali saat runtime, dan tetap tersedia untuk plugin eksternal lama selama jendela migrasi. Plugin bawaan tidak boleh menggunakannya; penjaga batas konfigurasi gagal jika kode plugin memanggilnya atau mengimpor helper tersebut dari subpath SDK plugin.
Untuk impor SDK langsung, gunakan subpath konfigurasi yang terfokus alih-alih barrel kompatibilitas luas
openclaw/plugin-sdk/config-runtime: config-contracts untuk
tipe, plugin-config-runtime untuk asersi konfigurasi yang sudah dimuat dan pencarian entri
plugin, runtime-config-snapshot untuk snapshot proses saat ini, dan
config-mutation untuk penulisan. Pengujian plugin bawaan sebaiknya me-mock subpath terfokus ini
secara langsung alih-alih me-mock barrel kompatibilitas luas.
Kode runtime internal OpenClaw memiliki arah yang sama: muat konfigurasi sekali di batas CLI, gateway, atau proses, lalu teruskan nilai itu. Penulisan mutasi yang berhasil menyegarkan snapshot runtime proses dan memajukan revisi internalnya; cache berumur panjang sebaiknya memakai kunci cache milik runtime alih-alih menserialisasi konfigurasi secara lokal. Modul runtime berumur panjang memiliki pemindai tanpa toleransi untuk panggilan ambient loadConfig(); gunakan cfg yang diteruskan, context.getRuntimeConfig() permintaan, atau getRuntimeConfig() pada batas proses eksplisit.
Jalur eksekusi provider dan channel harus menggunakan snapshot konfigurasi runtime aktif, bukan snapshot file yang dikembalikan untuk pembacaan balik atau pengeditan konfigurasi. Snapshot file mempertahankan nilai sumber seperti penanda SecretRef untuk UI dan penulisan; callback provider membutuhkan tampilan runtime yang telah di-resolve. Ketika helper dapat dipanggil dengan snapshot sumber aktif atau snapshot runtime aktif, rutekan melalui selectApplicableRuntimeConfig() sebelum membaca kredensial.
Utilitas runtime yang dapat digunakan ulang
Gunakan faktabotLoopProtection masuk untuk pesan masuk yang dibuat bot. Core menerapkan penjaga sliding-window dalam memori bersama sebelum pencatatan sesi dan dispatch, tanpa mengikat kebijakan ke satu channel. Penjaga melacak kunci (scopeId, conversationId, participant pair), menghitung kedua arah dari satu pasangan bersama-sama, menerapkan cooldown setelah anggaran window terlampaui, dan memangkas entri tidak aktif secara oportunistik.
Plugin channel yang mengekspos perilaku ini kepada operator sebaiknya mengutamakan bentuk bersama channels.defaults.botLoopProtection untuk anggaran dasar, lalu melapisi override khusus channel/provider di atasnya. Konfigurasi bersama menggunakan detik karena bersifat menghadap pengguna:
enabled:
openclaw/plugin-sdk/pair-loop-guard-runtime secara langsung hanya untuk loop peristiwa
dua pihak khusus yang tidak melalui runner balasan masuk bersama.
Namespace runtime
api.runtime.agent
api.runtime.agent
Identitas agent, direktori, dan manajemen sesi.Utamakan
runEmbeddedAgent(...) adalah helper netral untuk memulai turn agent OpenClaw normal dari kode plugin. Ini menggunakan resolusi provider/model dan pemilihan agent-harness yang sama seperti balasan yang dipicu channel.runEmbeddedPiAgent(...) tetap menjadi alias kompatibilitas yang tidak lagi disarankan untuk plugin yang ada. Kode baru sebaiknya menggunakan runEmbeddedAgent(...).resolveThinkingPolicy(...) mengembalikan level berpikir yang didukung provider/model dan default opsional. Plugin provider memiliki profil khusus model melalui hook berpikir mereka, sehingga plugin alat sebaiknya memanggil helper runtime ini alih-alih mengimpor atau menduplikasi daftar provider.normalizeThinkingLevel(...) mengonversi teks pengguna seperti on, x-high, atau extra high ke level tersimpan kanonis sebelum memeriksanya terhadap kebijakan yang telah di-resolve.Helper penyimpanan sesi berada di bawah api.runtime.agent.session:getSessionEntry(...), listSessionEntries(...), patchSessionEntry(...), atau upsertSessionEntry(...) untuk alur kerja sesi. Helper ini mengalamatkan sesi berdasarkan identitas agent/sesi sehingga plugin tidak bergantung pada bentuk penyimpanan sessions.json lama. Gunakan preserveActivity: true untuk patch khusus metadata yang tidak boleh menyegarkan aktivitas sesi, dan replaceEntry: true hanya ketika callback mengembalikan entri lengkap dan field yang dihapus harus tetap terhapus.Gunakan runWithWorkAdmission(...) ketika plugin memulai pekerjaan pada sesi yang dipersistenkan. Callback menolak sesi yang diarsipkan atau diganti secara bersamaan, menjaga mutasi arsip/reset/hapus tetap terkoordinasi hingga selesai, dan menerima AbortSignal yang harus diteruskan ke run agent.Untuk pembacaan dan penulisan transkrip, impor openclaw/plugin-sdk/session-transcript-runtime dan gunakan resolveSessionTranscriptIdentity(...), resolveSessionTranscriptTarget(...), readSessionTranscriptEvents(...), appendSessionTranscriptMessageByIdentity(...), publishSessionTranscriptUpdateByIdentity(...), atau withSessionTranscriptWriteLock(...) dengan { agentId, sessionKey, sessionId }. API ini memungkinkan plugin mengidentifikasi transkrip, membaca peristiwanya, menambahkan pesan, memublikasikan pembaruan, dan menjalankan operasi terkait di bawah write lock transkrip yang sama. Meneruskan sessionFile, menggunakan resolveSessionTranscriptLegacyFileTarget(...), atau mengimpor appendSessionTranscriptMessage(...) / emitSessionTranscriptUpdate(...) tingkat rendah dari openclaw/plugin-sdk/agent-harness-runtime tidak lagi disarankan; jalur tersebut hanya ada untuk kode lama yang sudah menerima artefak transkrip aktif.loadSessionStore(...), saveSessionStore(...), updateSessionStore(...), resolveSessionFilePath(...), dan resolveAndPersistSessionFile(...) adalah helper kompatibilitas yang tidak lagi disarankan untuk plugin yang masih sengaja bergantung pada bentuk whole-store atau transcript-file lama. Kode plugin baru tidak boleh menggunakan helper tersebut, dan pemanggil yang ada sebaiknya bermigrasi ke helper entri dan helper identitas transkrip.api.runtime.agent.defaults
api.runtime.agent.defaults
Konstanta model dan provider default:
api.runtime.llm
api.runtime.llm
Jalankan penyelesaian teks milik host tanpa mengimpor internal provider atau
menduplikasi persiapan model/auth/base URL OpenClaw.Helper ini menggunakan jalur persiapan penyelesaian sederhana yang sama seperti runtime
bawaan OpenClaw dan snapshot konfigurasi runtime milik host. Mesin konteks
menerima kapabilitas
llm.complete yang terikat sesi, sehingga panggilan model menggunakan
agent milik sesi aktif dan tidak diam-diam fallback ke agent default. Hasilnya
menyertakan atribusi provider/model/agent ditambah penggunaan token,
cache, dan estimasi biaya yang dinormalisasi saat tersedia.api.runtime.subagent
api.runtime.subagent
Luncurkan dan kelola run subagen latar belakang.
deleteSession(...) dapat menghapus sesi yang dibuat oleh plugin yang sama melalui api.runtime.subagent.run(...). Menghapus sesi pengguna atau operator sembarang tetap memerlukan permintaan Gateway dengan cakupan admin.api.runtime.nodes
api.runtime.nodes
Cantumkan node yang terhubung dan panggil perintah host node dari kode plugin yang dimuat Gateway atau dari perintah CLI plugin. Gunakan ini ketika plugin memiliki pekerjaan lokal pada perangkat yang dipasangkan, misalnya browser atau jembatan audio di Mac lain.Di dalam Gateway, runtime ini berjalan dalam proses. Dalam perintah CLI plugin, runtime ini memanggil Gateway yang dikonfigurasi melalui RPC, sehingga perintah seperti
openclaw googlemeet recover-tab dapat memeriksa node yang dipasangkan dari terminal. Perintah Node tetap melewati pemasangan node Gateway normal, daftar izin perintah, kebijakan pemanggilan node plugin, dan penanganan perintah lokal node.Plugin yang mengekspos perintah host node berbahaya harus mendaftarkan kebijakan pemanggilan node dengan api.registerNodeInvokePolicy(...). Kebijakan berjalan di Gateway setelah pemeriksaan daftar izin perintah dan sebelum perintah diteruskan ke node, sehingga panggilan langsung node.invoke dan alat plugin tingkat lebih tinggi berbagi jalur penegakan yang sama.api.runtime.tasks.managedFlows
api.runtime.tasks.managedFlows
Ikat runtime Task Flow ke kunci sesi OpenClaw yang sudah ada atau konteks alat tepercaya, lalu buat dan kelola Task Flow tanpa meneruskan owner pada setiap panggilan.Task Flow melacak status alur kerja beberapa langkah yang tahan lama. Ini bukan penjadwal:
gunakan Cron atau Gunakan
api.session.workflow.scheduleSessionTurn(...) untuk wakeup
mendatang, lalu gunakan managedFlows dari giliran terjadwal ketika pekerjaan itu
memerlukan status flow, tugas anak, penantian, atau pembatalan.bindSession({ sessionKey, requesterOrigin }) ketika Anda sudah memiliki kunci sesi OpenClaw tepercaya dari lapisan binding Anda sendiri. Jangan ikat dari input pengguna mentah.api.runtime.tts
api.runtime.tts
Sintesis teks-ke-ucapan.Menggunakan konfigurasi inti
messages.tts dan pemilihan provider. Mengembalikan buffer audio PCM + laju sampel.api.runtime.mediaUnderstanding
api.runtime.mediaUnderstanding
Analisis gambar, audio, dan video.Mengembalikan
{ text: undefined } ketika tidak ada output yang dihasilkan (misalnya input dilewati).api.runtime.stt.transcribeAudioFile(...) tetap menjadi alias kompatibilitas untuk api.runtime.mediaUnderstanding.transcribeAudioFile(...).api.runtime.imageGeneration
api.runtime.imageGeneration
Pembuatan gambar.
api.runtime.webSearch
api.runtime.webSearch
Pencarian web.
api.runtime.media
api.runtime.media
Utilitas media tingkat rendah.
api.runtime.config
api.runtime.config
Snapshot config runtime saat ini dan penulisan config transaksional. Utamakan
config yang sudah diteruskan ke jalur panggilan aktif; gunakan
current() hanya ketika handler memerlukan snapshot proses secara langsung.mutateConfigFile(...) dan replaceConfigFile(...) mengembalikan nilai
followUp, misalnya { mode: "restart", requiresRestart: true, reason },
yang mencatat maksud penulis tanpa mengambil kendali restart dari
gateway.api.runtime.system
api.runtime.system
Utilitas tingkat sistem.
runCommandWithTimeout(...) mengembalikan stdout dan stderr yang ditangkap,
jumlah pemotongan opsional, code, signal, killed, termination, dan
noOutputTimedOut. Hasil timeout dan timeout-tanpa-output melaporkan code: 124
ketika proses anak tidak menyediakan kode keluar bukan nol. Keluar karena sinyal
non-timeout masih dapat mengembalikan code: null, jadi gunakan termination dan
noOutputTimedOut untuk membedakan alasan timeout.api.runtime.events
api.runtime.events
Langganan peristiwa.
api.runtime.logging
api.runtime.logging
Logging.
api.runtime.modelAuth
api.runtime.modelAuth
Resolusi autentikasi model dan provider.
api.runtime.state
api.runtime.state
Resolusi direktori state dan penyimpanan berkunci berbasis SQLite.Penyimpanan berkunci bertahan setelah restart dan diisolasi berdasarkan id plugin yang terikat runtime. Gunakan
registerIfAbsent(...) untuk klaim dedupe atomik: fungsi ini mengembalikan true ketika kunci tidak ada atau sudah kedaluwarsa lalu didaftarkan, atau false ketika nilai aktif sudah ada tanpa menimpa nilainya, waktu pembuatannya, atau TTL. Batas: maxEntries per namespace, 6.000 baris aktif per plugin, nilai JSON di bawah 64KB, dan kedaluwarsa TTL opsional. Ketika penulisan akan melampaui batas baris plugin, runtime dapat mengeluarkan baris aktif paling lama dari namespace yang sedang ditulis; namespace saudara tidak dikeluarkan untuk penulisan tersebut, dan penulisan tetap gagal jika namespace tidak dapat membebaskan cukup baris.api.runtime.tools
api.runtime.tools
Factory alat memori dan CLI.
api.runtime.channel
api.runtime.channel
Helper runtime khusus channel (tersedia ketika plugin channel dimuat).Gunakan Helper mention yang tersedia:
api.runtime.channel.media adalah permukaan yang disarankan untuk pengunduhan dan penyimpanan media channel:saveRemoteMedia(...) ketika URL jarak jauh harus menjadi media OpenClaw. Gunakan saveResponseMedia(...) ketika plugin sudah mengambil Response dengan penanganan autentikasi, pengalihan, atau allowlist milik plugin. Gunakan readRemoteMediaBuffer(...) hanya ketika plugin membutuhkan byte mentah untuk inspeksi, transformasi, dekripsi, atau unggah ulang. fetchRemoteMedia(...) tetap menjadi alias kompatibilitas yang sudah deprecated untuk readRemoteMediaBuffer(...).api.runtime.channel.mentions adalah permukaan kebijakan mention masuk bersama untuk plugin channel bundel yang menggunakan injeksi runtime:buildMentionRegexesmatchesMentionPatternsmatchesMentionWithExplicitimplicitMentionKindWhenresolveInboundMentionDecision
api.runtime.channel.mentions sengaja tidak mengekspos helper kompatibilitas lama resolveMentionGating*. Pilih jalur { facts, policy } yang sudah dinormalisasi.Menyimpan referensi runtime
GunakancreatePluginRuntimeStore untuk menyimpan referensi runtime agar dapat digunakan di luar callback register:
Pilih
pluginId untuk identitas runtime-store. Bentuk key tingkat lebih rendah ditujukan untuk kasus yang jarang terjadi ketika satu plugin sengaja membutuhkan lebih dari satu slot runtime.Bidang api tingkat atas lainnya
Selain api.runtime, objek API juga menyediakan:
Id plugin.
Nama tampilan plugin.
Snapshot config saat ini (snapshot runtime dalam memori yang aktif jika tersedia).
Config khusus plugin dari
plugins.entries.<id>.config.Logger berskup (
debug, info, warn, error).Mode pemuatan saat ini;
"setup-runtime" adalah jendela startup/setup ringan sebelum entri penuh.Selesaikan path relatif terhadap root plugin.
Terkait
- Internal Plugin — model capability dan registry
- Titik masuk SDK — opsi
definePluginEntry - Ikhtisar SDK — referensi subpath