Plugins
Plugin SDK genel bakışı
Plugin SDK, pluginler ile çekirdek arasındaki türlendirilmiş sözleşmedir. Bu sayfa, neyi içe aktaracağınız ve neyi kaydedebileceğiniz için referanstır.
İçe aktarma kuralı
Her zaman belirli bir alt yoldan içe aktarın:
Her alt yol küçük, kendi kendine yeten bir modüldür. Bu, başlatmayı hızlı tutar
ve döngüsel bağımlılık sorunlarını önler. Kanala özgü giriş/oluşturma
yardımcıları için openclaw/plugin-sdk/channel-core tercih edin;
openclaw/plugin-sdk/core yolunu daha geniş şemsiye yüzey ve
buildChannelConfigSchema gibi paylaşılan yardımcılar için ayırın.
Kanal yapılandırması için kanalın sahibi olduğu JSON Schema'yı
openclaw.plugin.json#channelConfigs üzerinden yayımlayın. plugin-sdk/channel-config-schema
alt yolu, paylaşılan şema ilkelleri ve genel oluşturucu içindir. OpenClaw'ın
paketlenmiş pluginleri, korunmuş paketli kanal şemaları için
plugin-sdk/bundled-channel-config-schema kullanır. Kullanımdan kaldırılmış
uyumluluk dışa aktarımları plugin-sdk/channel-config-schema-legacy üzerinde
kalmaya devam eder; paketli şema alt yollarının hiçbiri yeni pluginler için bir
kalıp değildir.
Alt yol referansı
Plugin SDK, alana göre gruplanmış dar alt yollar kümesi olarak sunulur (Plugin girişi, kanal, sağlayıcı, kimlik doğrulama, çalışma zamanı, kabiliyet, bellek ve ayrılmış paketli Plugin yardımcıları). Gruplanmış ve bağlantılanmış tam katalog için Plugin SDK alt yolları sayfasına bakın.
Oluşturulan 200+ alt yol listesi scripts/lib/plugin-sdk-entrypoints.json içinde bulunur.
Kayıt API'si
register(api) geri çağrısı, şu yöntemlere sahip bir OpenClawPluginApi nesnesi alır:
Kabiliyet kaydı
| Yöntem | Neyi kaydeder |
|---|---|
api.registerProvider(...) |
Metin çıkarımı (LLM) |
api.registerAgentHarness(...) |
Deneysel düşük seviyeli ajan yürütücü |
api.registerCliBackend(...) |
Yerel CLI çıkarım arka ucu |
api.registerChannel(...) |
Mesajlaşma kanalı |
api.registerSpeechProvider(...) |
Metinden konuşmaya / STT sentezi |
api.registerRealtimeTranscriptionProvider(...) |
Akışlı gerçek zamanlı transkripsiyon |
api.registerRealtimeVoiceProvider(...) |
Çift yönlü gerçek zamanlı ses oturumları |
api.registerMediaUnderstandingProvider(...) |
Görüntü/ses/video analizi |
api.registerImageGenerationProvider(...) |
Görüntü üretimi |
api.registerMusicGenerationProvider(...) |
Müzik üretimi |
api.registerVideoGenerationProvider(...) |
Video üretimi |
api.registerWebFetchProvider(...) |
Web getirme / kazıma sağlayıcısı |
api.registerWebSearchProvider(...) |
Web araması |
Araçlar ve komutlar
| Yöntem | Neyi kaydeder |
|---|---|
api.registerTool(tool, opts?) |
Ajan aracı (zorunlu veya { optional: true }) |
api.registerCommand(def) |
Özel komut (LLM'yi atlar) |
Plugin komutları, ajanın kısa ve komutun sahibi olduğu bir yönlendirme ipucuna
ihtiyacı olduğunda agentPromptGuidance ayarlayabilir. Bu metni komutun
kendisiyle ilgili tutun; çekirdek istem oluşturucularına sağlayıcıya veya
Plugin'e özgü politika eklemeyin.
Altyapı
| Yöntem | Neyi kaydeder |
|---|---|
api.registerHook(events, handler, opts?) |
Olay kancası |
api.registerHttpRoute(params) |
Gateway HTTP uç noktası |
api.registerGatewayMethod(name, handler) |
Gateway RPC yöntemi |
api.registerGatewayDiscoveryService(service) |
Yerel Gateway keşif duyurucusu |
api.registerCli(registrar, opts?) |
CLI alt komutu |
api.registerService(service) |
Arka plan hizmeti |
api.registerInteractiveHandler(registration) |
Etkileşimli işleyici |
api.registerAgentToolResultMiddleware(...) |
Çalışma zamanı araç sonucu ara katmanı |
api.registerMemoryPromptSupplement(builder) |
Eklemeli, belleğe bitişik istem bölümü |
api.registerMemoryCorpusSupplement(adapter) |
Eklemeli bellek arama/okuma külliyatı |
İş akışı pluginleri için ana makine kancaları
Ana makine kancaları, yalnızca bir sağlayıcı, kanal veya araç eklemek yerine ana makine yaşam döngüsüne katılması gereken pluginler için SDK bağlantılarıdır. Bunlar genel sözleşmelerdir; Plan Mode bunları kullanabilir, ancak onay iş akışları, çalışma alanı politika kapıları, arka plan izleyicileri, kurulum sihirbazları ve UI eşlikçi pluginleri de kullanabilir.
| Yöntem | Sahip olduğu sözleşme |
|---|---|
api.registerSessionExtension(...) |
Gateway oturumları üzerinden yansıtılan, Plugin'in sahibi olduğu JSON uyumlu oturum durumu |
api.enqueueNextTurnInjection(...) |
Bir oturum için sonraki ajan turuna enjekte edilen dayanıklı, tam olarak bir kezlik bağlam |
api.registerTrustedToolPolicy(...) |
Araç parametrelerini engelleyebilen veya yeniden yazabilen paketli/güvenilir Plugin öncesi araç politikası |
api.registerToolMetadata(...) |
Araç uygulamasını değiştirmeden araç kataloğu görüntüleme meta verisi |
api.registerCommand(...) |
Kapsamlı Plugin komutları; komut sonuçları continueAgent: true ayarlayabilir; Discord yerel komutları descriptionLocalizations destekler |
api.registerControlUiDescriptor(...) |
Oturum, araç, çalıştırma veya ayarlar yüzeyleri için Control UI katkı tanımlayıcıları |
api.registerRuntimeLifecycle(...) |
Sıfırlama/silme/yeniden yükleme yollarında Plugin'in sahibi olduğu çalışma zamanı kaynakları için temizlik geri çağrıları |
api.registerAgentEventSubscription(...) |
İş akışı durumu ve izleyiciler için temizlenmiş olay abonelikleri |
api.setRunContext(...) / getRunContext(...) / clearRunContext(...) |
Terminal çalıştırma yaşam döngüsünde temizlenen çalıştırma başına Plugin geçici durumu |
api.registerSessionSchedulerJob(...) |
Deterministik temizlikle Plugin'in sahibi olduğu oturum zamanlayıcı işi kayıtları |
Sözleşmeler yetkiyi bilinçli olarak ayırır:
- Harici pluginler oturum uzantılarına, UI tanımlayıcılarına, komutlara, araç meta verilerine, sonraki tur enjeksiyonlarına ve normal kancalara sahip olabilir.
- Güvenilir araç politikaları sıradan
before_tool_callkancalarından önce çalışır ve ana makine güvenlik politikasına katıldıkları için yalnızca paketlidir. - Ayrılmış komut sahipliği yalnızca paketlidir. Harici pluginler kendi komut adlarını veya takma adlarını kullanmalıdır.
allowPromptInjection=false,agent_turn_prepare,before_prompt_build,heartbeat_prompt_contribution, eskibefore_agent_startiçindeki istem alanları veenqueueNextTurnInjectiondahil istemi değiştiren kancaları devre dışı bırakır.
Plan dışı tüketici örnekleri:
| Plugin arketipi | Kullanılan kancalar |
|---|---|
| Onay iş akışı | Oturum uzantısı, komut devamı, sonraki tur enjeksiyonu, UI tanımlayıcısı |
| Bütçe/çalışma alanı politika kapısı | Güvenilir araç politikası, araç meta verisi, oturum projeksiyonu |
| Arka plan yaşam döngüsü izleyicisi | Çalışma zamanı yaşam döngüsü temizliği, ajan olay aboneliği, oturum zamanlayıcı sahipliği/temizliği, Heartbeat istem katkısı, UI tanımlayıcısı |
| Kurulum veya ilk kullanım sihirbazı | Oturum uzantısı, kapsamlı komutlar, Control UI tanımlayıcısı |
Araç sonucu ara katmanı ne zaman kullanılır
Paketli pluginler, yürütmeden sonra ve çalışma zamanı sonucu modele geri
beslemeden önce bir araç sonucunu yeniden yazmaları gerektiğinde
api.registerAgentToolResultMiddleware(...) kullanabilir. Bu, tokenjuice gibi
async çıktı indirgeyicileri için güvenilir, çalışma zamanından bağımsız
bağlantıdır.
Paketli pluginler, hedeflenen her çalışma zamanı için
contracts.agentToolResultMiddleware bildirmelidir; örneğin ["pi", "codex"].
Harici pluginler bu ara katmanı kaydedemez; model öncesi araç sonucu
zamanlamasına ihtiyaç duymayan işler için normal OpenClaw Plugin kancalarını
kullanın. Eski yalnızca Pi için olan gömülü uzantı fabrikası kayıt yolu
kaldırılmıştır.
Gateway keşif kaydı
api.registerGatewayDiscoveryService(...), bir Plugin'in etkin Gateway'i mDNS/Bonjour gibi bir yerel keşif aktarımı üzerinde duyurmasını sağlar. OpenClaw, yerel keşif etkinleştirildiğinde Gateway başlatma sırasında hizmeti çağırır, mevcut Gateway portlarını ve gizli olmayan TXT ipucu verilerini iletir ve döndürülen stop işleyicisini Gateway kapatma sırasında çağırır.
api.registerGatewayDiscoveryService({
id: "my-discovery",
async advertise(ctx) {
const handle = await startMyAdvertiser({
gatewayPort: ctx.gatewayPort,
tls: ctx.gatewayTlsEnabled,
displayName: ctx.machineDisplayName,
});
return { stop: () => handle.stop() };
},
});
Gateway keşif Plugin'leri, duyurulan TXT değerlerini sır veya kimlik doğrulama olarak ele almamalıdır. Keşif bir yönlendirme ipucudur; güven Gateway kimlik doğrulaması ve TLS sabitlemesine aittir.
CLI kayıt üst verileri
api.registerCli(registrar, opts?) iki tür üst düzey üst veri kabul eder:
commands: kayıt edene ait açık komut kökleridescriptors: kök CLI yardımı, yönlendirme ve tembel Plugin CLI kaydı için kullanılan ayrıştırma zamanı komut tanımlayıcıları
Bir Plugin komutunun normal kök CLI yolunda tembel yüklenmiş kalmasını istiyorsanız, o kayıt edenin açığa çıkardığı her üst düzey komut kökünü kapsayan descriptors sağlayın.
api.registerCli(
async ({ program }) => {
const { registerMatrixCli } = await import("./src/cli.js");
registerMatrixCli({ program });
},
{
descriptors: [
{
name: "matrix",
description: "Manage Matrix accounts, verification, devices, and profile state",
hasSubcommands: true,
},
],
},
);
commands öğesini tek başına yalnızca tembel kök CLI kaydına ihtiyacınız olmadığında kullanın. Bu istekli uyumluluk yolu desteklenmeye devam eder, ancak ayrıştırma zamanı tembel yükleme için tanımlayıcı destekli yer tutucular kurmaz.
CLI backend kaydı
api.registerCliBackend(...), bir Plugin'in codex-cli gibi yerel bir AI CLI backend'i için varsayılan yapılandırmaya sahip olmasını sağlar.
- Backend
iddeğeri,codex-cli/gpt-5gibi model başvurularında sağlayıcı öneki olur. - Backend
config,agents.defaults.cliBackends.<id>ile aynı şekli kullanır. - Kullanıcı yapılandırması yine önceliklidir. OpenClaw, CLI'ı çalıştırmadan önce
agents.defaults.cliBackends.<id>değerini Plugin varsayılanının üzerine birleştirir. - Bir backend birleştirme sonrasında uyumluluk yeniden yazmalarına ihtiyaç duyduğunda
normalizeConfigkullanın (örneğin eski bayrak şekillerini normalleştirme). - OpenClaw düşünme düzeylerini yerel bir çaba bayrağına eşlemek gibi CLI lehçesine ait istek kapsamlı argv yeniden yazmaları için
resolveExecutionArgskullanın.
Özel yuvalar
| Yöntem | Kaydettiği şey |
|---|---|
api.registerContextEngine(id, factory) |
Bağlam motoru (aynı anda bir tane etkin). assemble() geri çağrısı availableTools ve citationsMode alır, böylece motor istem eklemelerini uyarlayabilir. |
api.registerMemoryCapability(capability) |
Birleşik bellek yeteneği |
api.registerMemoryPromptSection(builder) |
Bellek istem bölümü oluşturucu |
api.registerMemoryFlushPlan(resolver) |
Bellek boşaltma planı çözümleyici |
api.registerMemoryRuntime(runtime) |
Bellek çalışma zamanı adaptörü |
Bellek embedding adaptörleri
| Yöntem | Kaydettiği şey |
|---|---|
api.registerMemoryEmbeddingProvider(adapter) |
Etkin Plugin için bellek embedding adaptörü |
registerMemoryCapabilitytercih edilen özel bellek Plugin'i API'sidir.registerMemoryCapability, eşlik eden Plugin'lerin dışa aktarılan bellek yapıtlarını belirli bir bellek Plugin'inin özel düzenine erişmek yerineopenclaw/plugin-sdk/memory-host-coreüzerinden tüketebilmesi içinpublicArtifacts.listArtifacts(...)de açığa çıkarabilir.registerMemoryPromptSection,registerMemoryFlushPlanveregisterMemoryRuntimeeski sürüm uyumlu özel bellek Plugin'i API'leridir.MemoryFlushPlan.model, boşaltma turunu etkin yedek zincirini devralmadanollama/qwen3:8bgibi tam birprovider/modelbaşvurusuna sabitleyebilir.registerMemoryEmbeddingProvider, etkin bellek Plugin'inin bir veya daha fazla embedding adaptörü kimliği kaydetmesini sağlar (örneğinopenai,geminiveya Plugin tarafından tanımlanan özel bir kimlik).agents.defaults.memorySearch.providerveagents.defaults.memorySearch.fallbackgibi kullanıcı yapılandırmaları bu kayıtlı adaptör kimliklerine göre çözümlenir.
Olaylar ve yaşam döngüsü
| Yöntem | Yaptığı şey |
|---|---|
api.on(hookName, handler, opts?) |
Tipli yaşam döngüsü kancası |
api.onConversationBindingResolved(handler) |
Konuşma bağlama geri çağrısı |
Örnekler, yaygın kanca adları ve koruma semantiği için Plugin kancaları bölümüne bakın.
Kanca karar semantiği
before_tool_call:{ block: true }döndürmek sonlandırıcıdır. Herhangi bir işleyici bunu ayarladığında, daha düşük öncelikli işleyiciler atlanır.before_tool_call:{ block: false }döndürmek karar yok olarak ele alınır (blocköğesini atlamakla aynı), geçersiz kılma olarak değil.before_install:{ block: true }döndürmek sonlandırıcıdır. Herhangi bir işleyici bunu ayarladığında, daha düşük öncelikli işleyiciler atlanır.before_install:{ block: false }döndürmek karar yok olarak ele alınır (blocköğesini atlamakla aynı), geçersiz kılma olarak değil.reply_dispatch:{ handled: true, ... }döndürmek sonlandırıcıdır. Herhangi bir işleyici gönderimi üstlendiğinde, daha düşük öncelikli işleyiciler ve varsayılan model gönderim yolu atlanır.message_sending:{ cancel: true }döndürmek sonlandırıcıdır. Herhangi bir işleyici bunu ayarladığında, daha düşük öncelikli işleyiciler atlanır.message_sending:{ cancel: false }döndürmek karar yok olarak ele alınır (cancelöğesini atlamakla aynı), geçersiz kılma olarak değil.message_received: gelen iş parçacığı/konu yönlendirmesine ihtiyaç duyduğunuzda tiplithreadIdalanını kullanın.metadataöğesini kanala özgü ekler için tutun.message_sending: kanala özgümetadatadeğerine geri dönmeden önce tiplireplyToId/threadIdyönlendirme alanlarını kullanın.gateway_start: dahiligateway:startupkancalarına güvenmek yerine Gateway'e ait başlatma durumu içinctx.config,ctx.workspaceDirvectx.getCron?.()kullanın.cron_changed: Gateway'e ait Cron yaşam döngüsü değişikliklerini gözlemleyin. Harici uyandırma zamanlayıcılarını senkronize ederkenevent.job?.state?.nextRunAtMsvectx.getCron?.()kullanın ve vade denetimleri ile yürütme için doğruluk kaynağı olarak OpenClaw'ı koruyun.
API nesnesi alanları
| Alan | Tür | Açıklama |
|---|---|---|
api.id |
string |
Plugin kimliği |
api.name |
string |
Görünen ad |
api.version |
string? |
Plugin sürümü (isteğe bağlı) |
api.description |
string? |
Plugin açıklaması (isteğe bağlı) |
api.source |
string |
Plugin kaynak yolu |
api.rootDir |
string? |
Plugin kök dizini (isteğe bağlı) |
api.config |
OpenClawConfig |
Mevcut yapılandırma anlık görüntüsü (varsa etkin bellek içi çalışma zamanı anlık görüntüsü) |
api.pluginConfig |
Record<string, unknown> |
plugins.entries.<id>.config içinden Plugin'e özgü yapılandırma |
api.runtime |
PluginRuntime |
Çalışma zamanı yardımcıları |
api.logger |
PluginLogger |
Kapsamlı günlükleyici (debug, info, warn, error) |
api.registrationMode |
PluginRegistrationMode |
Mevcut yükleme modu; "setup-runtime" hafif tam giriş öncesi başlatma/kurulum penceresidir |
api.resolvePath(input) |
(string) => string |
Plugin köküne göre yolu çözümle |
Dahili modül düzeni
Plugin'iniz içinde, dahili içe aktarmalar için yerel barrel dosyaları kullanın:
my-plugin/
api.ts # Public exports for external consumers
runtime-api.ts # Internal-only runtime exports
index.ts # Plugin entry point
setup-entry.ts # Lightweight setup-only entry (optional)
Facade ile yüklenen paketlenmiş Plugin ortak yüzeyleri (api.ts, runtime-api.ts, index.ts, setup-entry.ts ve benzer ortak giriş dosyaları), OpenClaw zaten çalışıyorken etkin çalışma zamanı yapılandırma anlık görüntüsünü tercih eder. Henüz çalışma zamanı anlık görüntüsü yoksa, diskte çözümlenen yapılandırma dosyasına geri dönerler. Paketlenmiş paket Plugin facade'ları OpenClaw'ın Plugin facade yükleyicileri üzerinden yüklenmelidir; dist/extensions/... içinden doğrudan içe aktarmalar, paketli kurulumların Plugin'e ait kod için kullandığı manifest ve çalışma zamanı sidecar denetimlerini atlar.
Sağlayıcı Plugin'leri, bir yardımcı bilerek sağlayıcıya özgü olduğunda ve henüz genel bir SDK alt yoluna ait olmadığında dar bir Plugin yerel sözleşme barrel'ı açığa çıkarabilir. Paketlenmiş örnekler:
- Anthropic: Claude beta-header ve
service_tierakış yardımcıları için ortakapi.ts/contract-api.tsyüzeyi. @openclaw/openai-provider:api.tssağlayıcı oluşturucuları, varsayılan model yardımcılarını ve realtime sağlayıcı oluşturucularını dışa aktarır.@openclaw/openrouter-provider:api.tssağlayıcı oluşturucusunu ve onboarding/yapılandırma yardımcılarını dışa aktarır.
İlgili
definePluginEntry ve defineChannelPluginEntry seçenekleri.
Tam api.runtime ad alanı başvurusu.
Paketleme, manifestler ve yapılandırma şemaları.
Test yardımcıları ve lint kuralları.
Kullanımdan kaldırılan yüzeylerden geçiş.
Derin mimari ve yetenek modeli.