Plugin İç Yapısı
Bu, derin mimari başvurusudur. Pratik kılavuzlar için şunlara bakın:
- Plugin yükleme ve kullanma — kullanıcı kılavuzu
- Başlangıç — ilk plugin öğreticisi
- Kanal Plugin’leri — bir mesajlaşma kanalı oluşturun
- Sağlayıcı Plugin’leri — bir model sağlayıcısı oluşturun
- SDK Genel Bakış — içe aktarma haritası ve kayıt API’si
Genel yetenek modeli
Yetenekler, OpenClaw içindeki genel yerel plugin modelidir. Her yerel OpenClaw plugin’i bir veya daha fazla yetenek türüne kayıt olur:| Yetenek | Kayıt yöntemi | Örnek plugin’ler |
|---|---|---|
| Metin çıkarımı | api.registerProvider(...) | openai, anthropic |
| CLI çıkarım arka ucu | api.registerCliBackend(...) | openai, anthropic |
| Konuşma | api.registerSpeechProvider(...) | elevenlabs, microsoft |
| Gerçek zamanlı yazıya dökme | api.registerRealtimeTranscriptionProvider(...) | openai |
| Gerçek zamanlı ses | api.registerRealtimeVoiceProvider(...) | openai |
| Medya anlama | api.registerMediaUnderstandingProvider(...) | openai, google |
| Görsel oluşturma | api.registerImageGenerationProvider(...) | openai, google, fal, minimax |
| Müzik oluşturma | api.registerMusicGenerationProvider(...) | google, minimax |
| Video oluşturma | api.registerVideoGenerationProvider(...) | qwen |
| Web getirme | api.registerWebFetchProvider(...) | firecrawl |
| Web arama | api.registerWebSearchProvider(...) | google |
| Kanal / mesajlaşma | api.registerChannel(...) | msteams, matrix |
Dış uyumluluk duruşu
Yetenek modeli çekirdeğe yerleşti ve bugün paketlenmiş/yerel plugin’ler tarafından kullanılıyor, ancak dış plugin uyumluluğu için hâlâ “aktarılıyor, dolayısıyla sabitlenmiştir” ifadesinden daha sıkı bir eşik gerekir. Güncel rehberlik:- mevcut dış plugin’ler: kanca tabanlı entegrasyonları çalışır durumda tutun; bunu uyumluluk temeli olarak değerlendirin
- yeni paketlenmiş/yerel plugin’ler: satıcıya özgü iç erişimler veya yeni yalnızca kanca tasarımları yerine açık yetenek kaydını tercih edin
- yetenek kaydını benimseyen dış plugin’ler: izin verilir, ancak belgelerde açıkça kararlı bir sözleşme olarak işaretlenmedikçe yeteneğe özgü yardımcı yüzeyleri gelişmekte olan yüzeyler olarak değerlendirin
- yetenek kayıt API’leri amaçlanan yöndür
- geçiş sırasında eski kancalar dış plugin’ler için en güvenli, kırılmasız yol olmaya devam eder
- dışa aktarılan yardımcı alt yolların hepsi eşdeğer değildir; rastlantısal yardımcı aktarımlarını değil, belgelenmiş dar sözleşmeyi tercih edin
Plugin biçimleri
OpenClaw, yüklenen her plugin’i gerçek kayıt davranışına göre bir biçime sınıflandırır (yalnızca statik meta veriye göre değil):- plain-capability — tam olarak bir yetenek türü kaydeder (örneğin
mistralgibi yalnızca sağlayıcı olan bir plugin) - hybrid-capability — birden fazla yetenek türü kaydeder (örneğin
openai, metin çıkarımı, konuşma, medya anlama ve görsel oluşturma sahipliğine sahiptir) - hook-only — yalnızca kanca kaydeder (yazımlı veya özel), yetenek, araç, komut veya hizmet kaydetmez
- non-capability — yetenek olmadan araç, komut, hizmet veya rota kaydeder
openclaw plugins inspect <id> kullanın. Ayrıntılar için CLI başvurusu sayfasına bakın.
Eski kancalar
before_agent_start kancası, yalnızca kanca kullanan plugin’ler için
bir uyumluluk yolu olarak desteklenmeye devam eder. Eski gerçek dünya plugin’leri hâlâ buna bağımlıdır.
Yön:
- çalışır durumda tutun
- bunu eski olarak belgelendirin
- model/sağlayıcı geçersiz kılma işleri için
before_model_resolvetercih edin - istem değiştirme işleri için
before_prompt_buildtercih edin - yalnızca gerçek kullanım düştüğünde ve fikstür kapsamı geçiş güvenliğini kanıtladığında kaldırın
Uyumluluk sinyalleri
openclaw doctor veya openclaw plugins inspect <id> çalıştırdığınızda,
şu etiketlerden birini görebilirsiniz:
| Sinyal | Anlamı |
|---|---|
| config valid | Yapılandırma sorunsuz ayrıştırılır ve plugin’ler çözülür |
| compatibility advisory | Plugin desteklenen ama daha eski bir desen kullanıyor (ör. hook-only) |
| legacy warning | Plugin, kullanımdan kaldırılmış olan before_agent_start kullanıyor |
| hard error | Yapılandırma geçersiz veya plugin yüklenemedi |
hook-only ne de before_agent_start plugin’inizi bugün bozmaz —
hook-only bir tavsiye niteliğindedir ve before_agent_start yalnızca bir uyarı tetikler. Bu
sinyaller ayrıca openclaw status --all ve openclaw plugins doctor içinde de görünür.
Mimariye genel bakış
OpenClaw’un plugin sistemi dört katmandan oluşur:- Manifest + keşif
OpenClaw, yapılandırılmış yollardan, çalışma alanı köklerinden,
genel uzantı köklerinden ve paketlenmiş uzantılardan aday plugin’leri bulur.
Keşif önce yerel
openclaw.plugin.jsonmanifestlerini ve desteklenen paket manifestlerini okur. - Etkinleştirme + doğrulama Çekirdek, keşfedilen bir plugin’in etkin, devre dışı, engellenmiş veya bellek gibi özel bir yuva için seçilmiş olup olmadığına karar verir.
- Çalışma zamanı yükleme Yerel OpenClaw plugin’leri jiti aracılığıyla işlem içi yüklenir ve yetenekleri merkezi bir kayıt sistemine kaydeder. Uyumlu paketler, çalışma zamanı kodu içe aktarılmadan kayıt kayıtlarına normalize edilir.
- Yüzey tüketimi OpenClaw’un geri kalanı araçları, kanalları, sağlayıcı kurulumunu, kancaları, HTTP rotalarını, CLI komutlarını ve hizmetleri açığa çıkarmak için kayıt sistemini okur.
- ayrıştırma zamanı meta verisi
registerCli(..., { descriptors: [...] })içinden gelir - gerçek plugin CLI modülü tembel kalabilir ve ilk çağrıda kaydolabilir
- keşif + yapılandırma doğrulaması, plugin kodu yürütülmeden manifest/şema meta verisinden çalışabilmelidir
- yerel çalışma zamanı davranışı, plugin modülünün
register(api)yolundan gelir
Kanal plugin’leri ve paylaşılan message aracı
Kanal plugin’lerinin normal sohbet eylemleri için ayrı bir gönder/düzenle/tepki verme aracı kaydetmesi gerekmez. OpenClaw çekirdekte tek bir paylaşılanmessage aracını tutar ve
kanala özgü keşif ile yürütme bunun arkasında kanal plugin’lerine aittir.
Mevcut sınır şöyledir:
- çekirdek, paylaşılan
messagearacı ana makinesine, istem bağlamasına, oturum/iş parçacığı muhasebesine ve yürütme sevkine sahiptir - kanal plugin’leri kapsamlı eylem keşfine, yetenek keşfine ve kanala özgü şema parçalarına sahiptir
- kanal plugin’leri, konuşma kimliklerinin iş parçacığı kimliklerini nasıl kodladığı veya üst konuşmalardan nasıl miras aldığı gibi, sağlayıcıya özgü oturum konuşma dil bilgisine sahiptir
- kanal plugin’leri son eylemi kendi eylem bağdaştırıcıları üzerinden yürütür
ChannelMessageActionAdapter.describeMessageTool(...) şeklindedir. Bu birleşik keşif
çağrısı, bir plugin’in görünür eylemlerini, yeteneklerini ve şema
katkılarını birlikte döndürmesine olanak verir; böylece bu parçalar birbirinden ayrışmaz.
Çekirdek, bu keşif adımına çalışma zamanı kapsamını geçirir. Önemli alanlar şunlardır:
accountIdcurrentChannelIdcurrentThreadTscurrentMessageIdsessionKeysessionIdagentId- güvenilir gelen
requesterSenderId
message aracının mevcut tur için doğru kanala ait
yüzeyi açığa çıkarması amacıyla geçerli sohbet/oturum kimliğini plugin
keşif sınırına iletmekten sorumludur.
Kanala ait yürütme yardımcıları için paketlenmiş plugin’ler, yürütme
çalışma zamanını kendi uzantı modülleri içinde tutmalıdır. Çekirdek artık
src/agents/tools altında Discord, Slack, Telegram veya WhatsApp mesaj-eğlemi çalışma zamanlarına sahip değildir.
Ayrı plugin-sdk/*-action-runtime alt yolları yayımlamıyoruz ve paketlenmiş
plugin’ler kendi yerel çalışma zamanı kodlarını doğrudan kendi
uzantı modüllerinden içe aktarmalıdır.
Aynı sınır genel olarak sağlayıcı adlı SDK geçişleri için de geçerlidir: çekirdek,
Slack, Discord, Signal,
WhatsApp veya benzeri uzantılar için kanala özgü kolaylık varillerini içe aktarmamalıdır. Çekirdeğin bir davranışa ihtiyacı varsa ya
paketlenmiş plugin’in kendi api.ts / runtime-api.ts varilini tüketmeli ya da bu ihtiyacı
paylaşılan SDK içinde dar ve genel bir yeteneğe yükseltmelidir.
Özellikle anketler için iki yürütme yolu vardır:
outbound.sendPoll, ortak anket modeline uyan kanallar için paylaşılan temel yolduractions.handleAction("poll"), kanala özgü anket anlamları veya ek anket parametreleri için tercih edilen yoldur
Yetenek sahipliği modeli
OpenClaw, yerel bir plugin’i ilgisiz entegrasyonlardan oluşan bir torba olarak değil, bir şirketin veya bir özelliğin sahiplik sınırı olarak ele alır. Bu şu anlama gelir:- bir şirket plugin’i genellikle o şirketin OpenClaw’a dönük tüm yüzeylerine sahip olmalıdır
- bir özellik plugin’i genellikle tanıttığı özelliğin tam yüzeyine sahip olmalıdır
- kanallar, sağlayıcı davranışını geçici olarak yeniden uygulamak yerine paylaşılan çekirdek yetenekleri tüketmelidir
- paketlenmiş
openaiplugin’i OpenAI model-sağlayıcı davranışına ve OpenAI konuşma + gerçek zamanlı ses + medya anlama + görsel oluşturma davranışına sahiptir - paketlenmiş
elevenlabsplugin’i ElevenLabs konuşma davranışına sahiptir - paketlenmiş
microsoftplugin’i Microsoft konuşma davranışına sahiptir - paketlenmiş
googleplugin’i Google model-sağlayıcı davranışına artı Google medya anlama + görsel oluşturma + web arama davranışına sahiptir - paketlenmiş
firecrawlplugin’i Firecrawl web-getirme davranışına sahiptir - paketlenmiş
minimax,mistral,moonshotvezaiplugin’leri medya anlama arka uçlarına sahiptir voice-callplugin’i bir özellik plugin’idir: çağrı aktarımı, araçlar, CLI, rotalar ve Twilio medya akışı köprülemesine sahiptir, ancak satıcı plugin’lerini doğrudan içe aktarmak yerine paylaşılan konuşma ile gerçek zamanlı yazıya dökme ve gerçek zamanlı ses yeteneklerini tüketir
- metin modelleri, konuşma, görseller ve gelecekteki video gibi alanları kapsasa bile OpenAI tek bir plugin’de yaşar
- başka bir satıcı da kendi yüzey alanı için aynı şeyi yapabilir
- kanallar, sağlayıcının hangi satıcı plugin’ine ait olduğunu önemsemez; çekirdek tarafından açığa çıkarılan paylaşılan yetenek sözleşmesini tüketir
- plugin = sahiplik sınırı
- capability = birden çok plugin’in uygulayabileceği veya tüketebileceği çekirdek sözleşme
- eksik yeteneği çekirdekte tanımlayın
- bunu plugin API’si/çalışma zamanı üzerinden yazımlı biçimde açığa çıkarın
- kanalları/özellikleri bu yeteneğe bağlayın
- satıcı plugin’lerinin uygulamaları kaydetmesine izin verin
Yetenek katmanları
Kodun nereye ait olduğuna karar verirken şu zihinsel modeli kullanın:- çekirdek yetenek katmanı: paylaşılan orkestrasyon, politika, geri dönüş, yapılandırma birleştirme kuralları, teslimat anlamları ve yazımlı sözleşmeler
- satıcı plugin katmanı: satıcıya özgü API’ler, kimlik doğrulama, model katalogları, konuşma sentezi, görsel oluşturma, gelecekteki video arka uçları, kullanım uç noktaları
- kanal/özellik plugin katmanı: paylaşılan çekirdek yetenekleri tüketen ve bunları bir yüzeyde sunan Slack/Discord/voice-call/vb. entegrasyonlar
- çekirdek, yanıt zamanı TTS politikasına, geri dönüş sırasına, tercihlere ve kanal teslimatına sahiptir
openai,elevenlabsvemicrosoftsentez uygulamalarına sahiptirvoice-calltelefon TTS çalışma zamanı yardımcısını tüketir
Çok yetenekli şirket plugin’i örneği
Bir şirket plugin’i dışarıdan bakıldığında tutarlı hissettirmelidir. OpenClaw; modeller, konuşma, gerçek zamanlı yazıya dökme, gerçek zamanlı ses, medya anlama, görsel oluşturma, video oluşturma, web getirme ve web arama için paylaşılan sözleşmelere sahipse, bir satıcı tüm yüzeylerine tek bir yerde sahip olabilir:- tek bir plugin satıcı yüzeyine sahiptir
- çekirdek yine de yetenek sözleşmelerine sahiptir
- kanallar ve özellik plugin’leri satıcı kodunu değil,
api.runtime.*yardımcılarını tüketir - sözleşme testleri, plugin’in sahip olduğunu iddia ettiği yetenekleri kaydettiğini doğrulayabilir
Yetenek örneği: video anlama
OpenClaw, görsel/ses/video anlamayı zaten tek bir paylaşılan yetenek olarak ele alır. Aynı sahiplik modeli burada da geçerlidir:- çekirdek medya-anlama sözleşmesini tanımlar
- satıcı plugin’leri uygun olduğunda
describeImage,transcribeAudiovedescribeVideokaydı yapar - kanal ve özellik plugin’leri satıcı koduna doğrudan bağlanmak yerine paylaşılan çekirdek davranışını tüketir
api.registerVideoGenerationProvider(...) uygulamaları kaydeder.
Somut bir dağıtım kontrol listesi mi gerekiyor? Bkz.
Capability Cookbook.
Sözleşmeler ve zorunlu uygulama
Plugin API yüzeyi bilerek yazımlı veOpenClawPluginApi içinde merkezidir. Bu sözleşme desteklenen kayıt noktalarını ve
bir plugin’in güvenebileceği çalışma zamanı yardımcılarını tanımlar.
Bunun neden önemli olduğu:
- plugin yazarları tek bir kararlı iç standart elde eder
- çekirdek, aynı sağlayıcı kimliğini kaydeden iki plugin gibi yinelenen sahipliği reddedebilir
- başlangıç, bozuk kayıtlar için uygulanabilir tanılamaları yüzeye çıkarabilir
- sözleşme testleri paketlenmiş plugin sahipliğini zorunlu kılabilir ve sessiz sürüklenmeyi önleyebilir
- çalışma zamanı kayıt zorlaması Plugin kayıt sistemi, plugin’ler yüklenirken kayıtları doğrular. Örnekler: yinelenen sağlayıcı kimlikleri, yinelenen konuşma sağlayıcı kimlikleri ve bozuk kayıtlar, tanımsız davranış yerine plugin tanılamaları üretir.
- sözleşme testleri Paketlenmiş plugin’ler, test çalıştırmaları sırasında sözleşme kayıt sistemlerinde yakalanır; böylece OpenClaw sahipliği açıkça doğrulayabilir. Bugün bu, model sağlayıcıları, konuşma sağlayıcıları, web arama sağlayıcıları ve paketlenmiş kayıt sahipliği için kullanılır.
Bir sözleşmede ne bulunmalı
İyi plugin sözleşmeleri:- yazımlıdır
- küçüktür
- yeteneğe özgüdür
- çekirdeğe aittir
- birden çok plugin tarafından yeniden kullanılabilir
- satıcı bilgisi olmadan kanallar/özellikler tarafından tüketilebilir
- çekirdekte gizlenmiş satıcıya özgü politika
- kayıt sistemini baypas eden tek seferlik plugin kaçış kapıları
- doğrudan satıcı uygulamasına erişen kanal kodu
OpenClawPluginApiveyaapi.runtimeparçası olmayan geçici çalışma zamanı nesneleri
Yürütme modeli
Yerel OpenClaw plugin’leri Gateway ile işlem içinde çalışır. Kum havuzuna alınmazlar. Yüklenmiş bir yerel plugin, çekirdek kodla aynı süreç düzeyindeki güven sınırına sahiptir. Sonuçlar:- yerel bir plugin araçlar, ağ işleyicileri, kancalar ve hizmetler kaydedebilir
- yerel bir plugin hatası gateway’i çökertebilir veya dengesizleştirebilir
- kötü amaçlı bir yerel plugin, OpenClaw süreci içinde keyfi kod yürütmeye denktir
@openclaw/<id> veya
paket bilerek daha dar bir plugin rolü açığa çıkarıyorsa
-provider, -plugin, -speech, -sandbox veya -media-understanding gibi onaylı yazımlı son ekler kullanın.
Önemli güven notu:
plugins.allow, kaynak kökenine değil plugin kimliklerine güvenir.- Paketlenmiş bir plugin ile aynı kimliğe sahip bir çalışma alanı plugin’i etkinleştirildiğinde/allowlist’e alındığında kasıtlı olarak paketlenmiş kopyayı gölgeler.
- Bu normaldir ve yerel geliştirme, yama testi ve hotfix’ler için kullanışlıdır.
Dışa aktarma sınırı
OpenClaw uygulama kolaylıklarını değil, yetenekleri dışa aktarır. Yetenek kaydını genel tutun. Sözleşme olmayan yardımcı dışa aktarmaları azaltın:- paketlenmiş plugin’e özgü yardımcı alt yollar
- genel API olması amaçlanmayan çalışma zamanı tesisat alt yolları
- satıcıya özgü kolaylık yardımcıları
- uygulama ayrıntısı olan kurulum/katılım yardımcıları
plugin-sdk/feishu, plugin-sdk/feishu-setup, plugin-sdk/zalo,
plugin-sdk/zalo-setup ve birkaç plugin-sdk/matrix* geçişidir. Bunları yeni üçüncü taraf plugin’ler için
önerilen SDK deseni olarak değil, ayrılmış uygulama ayrıntısı dışa aktarmaları olarak değerlendirin.
Yükleme işlem hattı
Başlangıçta OpenClaw kabaca şunları yapar:- aday plugin köklerini keşfeder
- yerel veya uyumlu paket manifestlerini ve paket meta verilerini okur
- güvenli olmayan adayları reddeder
- plugin yapılandırmasını normalize eder (
plugins.enabled,allow,deny,entries,slots,load.paths) - her aday için etkinleştirmeye karar verir
- etkin yerel modülleri jiti aracılığıyla yükler
- yerel
register(api)(veya eski bir takma ad olanactivate(api)) kancalarını çağırır ve kayıtları plugin kayıt sisteminde toplar - kayıt sistemini komutlara/çalışma zamanı yüzeylerine açığa çıkarır
activate, register için eski bir takma addır — yükleyici mevcut olanı çözer (def.register ?? def.activate) ve aynı noktada çağırır. Tüm paketlenmiş plugin’ler register kullanır; yeni plugin’ler için register tercih edin.Manifest-öncelikli davranış
Manifest denetim düzlemi için doğruluk kaynağıdır. OpenClaw bunu şunlar için kullanır:- plugin’i tanımlamak
- bildirilen kanalları/Skills/yapılandırma şemasını veya paket yeteneklerini keşfetmek
plugins.entries.<id>.configdeğerini doğrulamak- Control UI etiketlerini/yer tutucularını zenginleştirmek
- kurulum/katalog meta verisini göstermek
Yükleyicinin önbelleğe aldıkları
OpenClaw şu öğeler için kısa süreli işlem içi önbellekler tutar:- keşif sonuçları
- manifest kayıt sistemi verisi
- yüklenmiş plugin kayıt sistemleri
- Bu önbellekleri devre dışı bırakmak için
OPENCLAW_DISABLE_PLUGIN_DISCOVERY_CACHE=1veyaOPENCLAW_DISABLE_PLUGIN_MANIFEST_CACHE=1ayarlayın. - Önbellek pencerelerini
OPENCLAW_PLUGIN_DISCOVERY_CACHE_MSveOPENCLAW_PLUGIN_MANIFEST_CACHE_MSile ayarlayın.
Kayıt sistemi modeli
Yüklenmiş plugin’ler rastgele çekirdek küresellerini doğrudan değiştirmez. Bunun yerine merkezi bir plugin kayıt sistemine kayıt olurlar. Kayıt sistemi şunları izler:- plugin kayıtları (kimlik, kaynak, köken, durum, tanılamalar)
- araçlar
- eski kancalar ve yazımlı kancalar
- kanallar
- sağlayıcılar
- gateway RPC işleyicileri
- HTTP rotaları
- CLI kayıtçıları
- arka plan hizmetleri
- plugin’e ait komutlar
- plugin modülü -> kayıt sistemi kaydı
- çekirdek çalışma zamanı -> kayıt sistemi tüketimi
Konuşma bağlama geri çağrıları
Bir konuşmayı bağlayan plugin’ler, bir onay çözümlendiğinde tepki verebilir. Bir bağlama isteği onaylandıktan veya reddedildikten sonra geri çağrı almak içinapi.onConversationBindingResolved(...) kullanın:
status:"approved"veya"denied"decision:"allow-once","allow-always"veya"deny"binding: onaylanan istekler için çözülmüş bağrequest: özgün istek özeti, ayırma ipucu, gönderen kimliği ve konuşma meta verisi
Sağlayıcı çalışma zamanı kancaları
Sağlayıcı plugin’lerinin artık iki katmanı vardır:- manifest meta verisi: çalışma zamanı yüklemesinden
önce ucuz sağlayıcı ortam kimlik doğrulama araması için
providerAuthEnvVars, kimlik doğrulamayı paylaşan sağlayıcı varyantları içinproviderAuthAliases, çalışma zamanı yüklemesinden önce ucuz kanal ortamı/kurulum araması içinchannelEnvVars, ayrıca çalışma zamanı yüklemesinden önce ucuz katılım/kimlik doğrulama seçimi etiketleri ve CLI bayrağı meta verisi içinproviderAuthChoices - yapılandırma zamanı kancaları:
catalog/ eskidiscoveryileapplyConfigDefaults - çalışma zamanı kancaları:
normalizeModelId,normalizeTransport,normalizeConfig,applyNativeStreamingUsageCompat,resolveConfigApiKey,resolveSyntheticAuth,resolveExternalAuthProfiles,shouldDeferSyntheticProfileAuth,resolveDynamicModel,prepareDynamicModel,normalizeResolvedModel,contributeResolvedModelCompat,capabilities,normalizeToolSchemas,inspectToolSchemas,resolveReasoningOutputMode,prepareExtraParams,createStreamFn,wrapStreamFn,resolveTransportTurnState,resolveWebSocketSessionPolicy,formatApiKey,refreshOAuth,buildAuthDoctorHint,matchesContextOverflowError,classifyFailoverReason,isCacheTtlEligible,buildMissingAuthMessage,suppressBuiltInModel,augmentModelCatalog,isBinaryThinking,supportsXHighThinking,resolveDefaultThinkingLevel,isModernModelRef,prepareRuntimeAuth,resolveUsageAuth,fetchUsageSnapshot,createEmbeddingProvider,buildReplayPolicy,sanitizeReplayHistory,validateReplayTurns,onModelSelected
providerAuthEnvVars kullanın.
Bir sağlayıcı kimliği başka bir sağlayıcı kimliğinin ortam değişkenlerini, kimlik doğrulama profillerini, yapılandırma tabanlı kimlik doğrulamayı ve
API anahtarı katılım seçimini yeniden kullanacaksa manifest providerAuthAliases kullanın. Katılım/kimlik doğrulama seçimi
CLI yüzeylerinin sağlayıcının seçim kimliğini, grup etiketlerini ve basit
tek bayraklı kimlik doğrulama bağlamasını sağlayıcı çalışma zamanını yüklemeden bilmesi gerektiğinde manifest providerAuthChoices kullanın.
Sağlayıcı çalışma zamanındaki envVars alanını ise katılım etiketleri veya OAuth
client-id/client-secret kurulum değişkenleri gibi operatöre dönük ipuçları için tutun.
Bir kanal, genel kabuk ortamı geri dönüşünün, yapılandırma/durum denetimlerinin veya kurulum istemlerinin
kanal çalışma zamanını yüklemeden görebileceği ortam güdümlü kimlik doğrulama ya da kurulum kullanıyorsa manifest channelEnvVars kullanın.
Kanca sırası ve kullanım
Model/sağlayıcı plugin’leri için OpenClaw kancaları kabaca şu sırayla çağırır. “Ne zaman kullanılmalı” sütunu hızlı karar rehberidir.| # | Kanca | Ne yapar | Ne zaman kullanılmalı |
|---|---|---|---|
| 1 | catalog | models.json üretimi sırasında sağlayıcı yapılandırmasını models.providers içine yayımlar | Sağlayıcı bir kataloğa veya temel URL varsayılanlarına sahipse |
| 2 | applyConfigDefaults | Yapılandırma somutlaştırması sırasında sağlayıcıya ait genel yapılandırma varsayılanlarını uygular | Varsayılanlar kimlik doğrulama moduna, ortama veya sağlayıcı model ailesi anlamlarına bağlıysa |
| — | (yerleşik model araması) | OpenClaw önce normal kayıt sistemi/katalog yolunu dener | (plugin kancası değildir) |
| 3 | normalizeModelId | Aramadan önce eski veya önizleme model kimliği takma adlarını normalize eder | Sağlayıcı, kanonik model çözümünden önce takma ad temizliğine sahipse |
| 4 | normalizeTransport | Genel model birleştirmesinden önce sağlayıcı ailesine ait api / baseUrl değerlerini normalize eder | Sağlayıcı, aynı aktarım ailesindeki özel sağlayıcı kimlikleri için aktarım temizliğine sahipse |
| 5 | normalizeConfig | Çalışma zamanı/sağlayıcı çözümünden önce models.providers.<id> değerini normalize eder | Sağlayıcının plugin ile yaşaması gereken yapılandırma temizliğine ihtiyacı varsa; paketlenmiş Google ailesi yardımcıları da desteklenen Google yapılandırma girdilerini geriden destekler |
| 6 | applyNativeStreamingUsageCompat | Yapılandırma sağlayıcılarına doğal akış kullanımı uyumluluk yeniden yazımlarını uygular | Sağlayıcının uç nokta güdümlü doğal akış kullanımı meta veri düzeltmelerine ihtiyacı varsa |
| 7 | resolveConfigApiKey | Çalışma zamanı kimlik doğrulaması yüklenmeden önce yapılandırma sağlayıcıları için ortam işaretleyici kimlik doğrulamasını çözer | Sağlayıcının kendine ait ortam işaretleyici API anahtarı çözümlemesi varsa; amazon-bedrock burada ayrıca yerleşik bir AWS ortam işaretleyici çözümleyiciye sahiptir |
| 8 | resolveSyntheticAuth | Düz metin kalıcı olmadan yerel/kendi kendine barındırılan veya yapılandırma tabanlı kimlik doğrulamayı yüzeye çıkarır | Sağlayıcı sentetik/yerel bir kimlik bilgisi işaretleyicisi ile çalışabiliyorsa |
| 9 | resolveExternalAuthProfiles | Sağlayıcıya ait harici kimlik doğrulama profillerini üstüne bindirir; CLI/uygulama sahipli kimlik bilgileri için varsayılan persistence, runtime-only olur | Sağlayıcı kopyalanmış yenileme belirteçlerini kalıcı yapmadan harici kimlik doğrulama bilgilerini yeniden kullanıyorsa |
| 10 | shouldDeferSyntheticProfileAuth | Saklanan sentetik profil yer tutucularını ortam/yapılandırma tabanlı kimlik doğrulamanın altına düşürür | Sağlayıcı, öncelik kazanmaması gereken sentetik yer tutucu profiller saklıyorsa |
| 11 | resolveDynamicModel | Yerel kayıt sisteminde henüz bulunmayan sağlayıcıya ait model kimlikleri için eşzamanlı geri dönüş | Sağlayıcı herhangi bir üst akış model kimliğini kabul ediyorsa |
| 12 | prepareDynamicModel | Eşzamansız ısınma yapar, sonra resolveDynamicModel yeniden çalışır | Sağlayıcı bilinmeyen kimlikleri çözmeden önce ağ meta verisine ihtiyaç duyuyorsa |
| 13 | normalizeResolvedModel | Gömülü çalıştırıcı çözülmüş modeli kullanmadan önce son yeniden yazımı yapar | Sağlayıcının aktarım yeniden yazımlarına ihtiyacı varsa ancak yine de bir çekirdek aktarımı kullanıyorsa |
| 14 | contributeResolvedModelCompat | Başka bir uyumlu aktarım arkasındaki satıcı modelleri için uyumluluk bayrakları katkısı yapar | Sağlayıcı, sağlayıcıyı devralmadan kendi modellerini vekil aktarımlarda tanıyorsa |
| 15 | capabilities | Paylaşılan çekirdek mantık tarafından kullanılan sağlayıcıya ait transcript/araç meta verisi | Sağlayıcı transcript/sağlayıcı ailesi tuhaflıklarına ihtiyaç duyuyorsa |
| 16 | normalizeToolSchemas | Gömülü çalıştırıcı görmeden önce araç şemalarını normalize eder | Sağlayıcının aktarım ailesine ait şema temizliğine ihtiyacı varsa |
| 17 | inspectToolSchemas | Normalizasyondan sonra sağlayıcıya ait şema tanılamalarını yüzeye çıkarır | Sağlayıcı çekirdeğe sağlayıcıya özgü kurallar öğretmeden anahtar sözcük uyarıları istiyorsa |
| 18 | resolveReasoningOutputMode | Doğal ile etiketli gerekçelendirme-çıktısı sözleşmesi arasında seçim yapar | Sağlayıcı doğal alanlar yerine etiketli gerekçelendirme/nihai çıktı istiyorsa |
| 19 | prepareExtraParams | Genel akış seçeneği sarmalayıcılarından önce istek parametresi normalizasyonu yapar | Sağlayıcının varsayılan istek parametrelerine veya sağlayıcı başına parametre temizliğine ihtiyacı varsa |
| 20 | createStreamFn | Normal akış yolunu tamamen özel bir aktarım ile değiştirir | Sağlayıcının yalnızca bir sarmalayıcıya değil, özel bir kablo protokolüne ihtiyacı varsa |
| 21 | wrapStreamFn | Genel sarmalayıcılar uygulandıktan sonra akışı sarar | Sağlayıcının özel bir aktarım olmadan istek üstbilgisi/gövdesi/model uyumluluk sarmalayıcılarına ihtiyacı varsa |
| 22 | resolveTransportTurnState | Sağlayıcıya özgü tur başına aktarım üstbilgileri veya meta veri ekler | Sağlayıcı, genel aktarımların sağlayıcıya özgü doğal tur kimliğini göndermesini istiyorsa |
| 23 | resolveWebSocketSessionPolicy | Doğal WebSocket üstbilgileri veya oturum soğuma politikası ekler | Sağlayıcı, genel WS aktarımlarının oturum üstbilgilerini veya geri dönüş politikasını ayarlamasını istiyorsa |
| 24 | formatApiKey | Kimlik doğrulama profili biçimleyicisi: saklanan profil çalışma zamanı apiKey dizgesi olur | Sağlayıcı ek kimlik doğrulama meta verisi saklıyorsa ve özel bir çalışma zamanı belirteç biçimine ihtiyaç duyuyorsa |
| 25 | refreshOAuth | Özel yenileme uç noktaları veya yenileme hatası politikası için OAuth yenileme geçersiz kılması | Sağlayıcı paylaşılan pi-ai yenileyicilerine uymuyorsa |
| 26 | buildAuthDoctorHint | OAuth yenilemesi başarısız olduğunda eklenen onarım ipucu | Sağlayıcının yenileme hatasından sonra sağlayıcıya ait kimlik doğrulama onarım rehberliğine ihtiyacı varsa |
| 27 | matchesContextOverflowError | Sağlayıcıya ait bağlam penceresi taşması eşleştiricisi | Sağlayıcının, genel sezgilerin kaçıracağı ham taşma hataları varsa |
| 28 | classifyFailoverReason | Sağlayıcıya ait failover nedeni sınıflandırması | Sağlayıcı ham API/aktarım hatalarını hız sınırı/aşırı yük/vb. olarak eşleyebiliyorsa |
| 29 | isCacheTtlEligible | Proxy/arka taşıma sağlayıcıları için istem önbelleği politikası | Sağlayıcının vekile özgü önbellek TTL geçitlemesine ihtiyacı varsa |
| 30 | buildMissingAuthMessage | Genel eksik kimlik doğrulama kurtarma mesajının yerine geçer | Sağlayıcının sağlayıcıya özgü eksik kimlik doğrulama kurtarma ipucuna ihtiyacı varsa |
| 31 | suppressBuiltInModel | Eski üst akış model bastırması ve isteğe bağlı kullanıcıya dönük hata ipucu | Sağlayıcının eski üst akış satırlarını gizlemesi veya bunları bir satıcı ipucuyla değiştirmesi gerekiyorsa |
| 32 | augmentModelCatalog | Keşiften sonra sentetik/nihai katalog satırları ekler | Sağlayıcının models list ve seçicilerde sentetik ileri uyumluluk satırlarına ihtiyacı varsa |
| 33 | isBinaryThinking | İkili düşünme sağlayıcıları için açık/kapalı gerekçelendirme anahtarı | Sağlayıcı yalnızca ikili düşünme açık/kapalı sunuyorsa |
| 34 | supportsXHighThinking | Seçili modeller için xhigh gerekçelendirme desteği | Sağlayıcı xhigh değerini yalnızca modellerin bir alt kümesinde istiyorsa |
| 35 | resolveDefaultThinkingLevel | Belirli bir model ailesi için varsayılan /think düzeyi | Sağlayıcı bir model ailesi için varsayılan /think politikasına sahipse |
| 36 | isModernModelRef | Canlı profil filtreleri ve smoke seçimi için modern model eşleştiricisi | Sağlayıcı canlı/smoke tercih edilen model eşleştirmesine sahipse |
| 37 | prepareRuntimeAuth | Çıkarımdan hemen önce yapılandırılmış kimlik bilgisini gerçek çalışma zamanı belirtecine/anahtarına dönüştürür | Sağlayıcı belirteç değişimine veya kısa ömürlü istek kimlik bilgisine ihtiyaç duyuyorsa |
| 38 | resolveUsageAuth | /usage ve ilgili durum yüzeyleri için kullanım/faturalama kimlik bilgilerini çözer | Sağlayıcının özel kullanım/kota belirteci ayrıştırmasına veya farklı bir kullanım kimlik bilgisine ihtiyacı varsa |
| 39 | fetchUsageSnapshot | Kimlik doğrulama çözüldükten sonra sağlayıcıya özgü kullanım/kota anlık görüntülerini getirir ve normalize eder | Sağlayıcının sağlayıcıya özgü kullanım uç noktasına veya yük ayrıştırıcısına ihtiyacı varsa |
| 40 | createEmbeddingProvider | Bellek/arama için sağlayıcıya ait bir embedding bağdaştırıcısı oluşturur | Bellek embedding davranışı sağlayıcı plugin’i ile birlikte olmalıdır |
| 41 | buildReplayPolicy | Sağlayıcı için transcript işlemeyi kontrol eden bir yeniden oynatma politikası döndürür | Sağlayıcının özel transcript politikasına ihtiyacı varsa (örneğin düşünme bloklarını çıkarma) |
| 42 | sanitizeReplayHistory | Genel transcript temizliğinden sonra yeniden oynatma geçmişini yeniden yazar | Sağlayıcı, paylaşılan sıkıştırma yardımcılarının ötesinde sağlayıcıya özgü yeniden oynatma yeniden yazımlarına ihtiyaç duyuyorsa |
| 43 | validateReplayTurns | Gömülü çalıştırıcıdan önce yeniden oynatma turlarını son kez doğrular veya yeniden şekillendirir | Sağlayıcı aktarımı, genel temizlikten sonra daha sıkı tur doğrulaması gerektiriyorsa |
| 44 | onModelSelected | Sağlayıcıya ait seçim sonrası yan etkileri çalıştırır | Sağlayıcının bir model etkin olduğunda telemetriye veya sağlayıcıya ait duruma ihtiyacı varsa |
normalizeModelId, normalizeTransport ve normalizeConfig önce
eşleşen sağlayıcı plugin’ini kontrol eder, ardından model
kimliğini veya aktarımı/yapılandırmayı gerçekten değiştiren biri bulunana kadar kanca yetenekli diğer sağlayıcı plugin’lerine düşer. Bu,
çağıranın hangi paketlenmiş plugin’in yeniden yazıma sahip olduğunu bilmesini gerektirmeden
takma ad/uyumluluk sağlayıcı geçişlerinin çalışmasını sağlar. Hiçbir sağlayıcı kancası desteklenen
bir Google ailesi yapılandırma girdisini yeniden yazmazsa, paketlenmiş Google yapılandırma normalleştiricisi yine de
bu uyumluluk temizliğini uygular.
Sağlayıcının tamamen özel bir kablo protokolüne veya özel istek yürütücüsüne ihtiyacı varsa,
bu farklı bir uzantı sınıfıdır. Bu kancalar,
OpenClaw’un normal çıkarım döngüsü üzerinde çalışan sağlayıcı davranışı içindir.
Sağlayıcı örneği
Yerleşik örnekler
- Anthropic;
resolveDynamicModel,capabilities,buildAuthDoctorHint,resolveUsageAuth,fetchUsageSnapshot,isCacheTtlEligible,resolveDefaultThinkingLevel,applyConfigDefaults,isModernModelRefvewrapStreamFnkullanır çünkü Claude 4.6 ileri uyumluluğuna, sağlayıcı ailesi ipuçlarına, kimlik doğrulama onarım rehberliğine, kullanım uç noktası entegrasyonuna, istem önbelleği uygunluğuna, kimlik doğrulama farkındalıklı yapılandırma varsayılanlarına, Claude varsayılan/uyarlanabilir düşünme politikasına ve beta üstbilgileri,/fast/serviceTierilecontext1miçin Anthropic’e özgü akış şekillendirmesine sahiptir. - Anthropic’in Claude’a özgü akış yardımcıları şimdilik paketlenmiş plugin’in kendi
genel
api.ts/contract-api.tsgeçişinde kalır. Bu paket yüzeyi, genel SDK’yi tek bir sağlayıcının beta-header kuralları çevresinde genişletmek yerinewrapAnthropicProviderStream,resolveAnthropicBetas,resolveAnthropicFastMode,resolveAnthropicServiceTierve daha alt düzey Anthropic sarmalayıcı oluşturucularını dışa aktarır. - OpenAI;
resolveDynamicModel,normalizeResolvedModelvecapabilitiesile birliktebuildMissingAuthMessage,suppressBuiltInModel,augmentModelCatalog,supportsXHighThinkingveisModernModelRefkullanır çünkü GPT-5.4 ileri uyumluluğuna, doğrudan OpenAIopenai-completions->openai-responsesnormalizasyonuna, Codex farkındalıklı kimlik doğrulama ipuçlarına, Spark bastırmasına, sentetik OpenAI liste satırlarına ve GPT-5 düşünme / canlı model politikasına sahiptir;openai-responses-defaultsakış ailesi ise atıf üstbilgileri,/fast/serviceTier, metin ayrıntı düzeyi, doğal Codex web arama, gerekçelendirme uyumluluğu yük şekillendirmesi ve Responses bağlam yönetimi için paylaşılan doğal OpenAI Responses sarmalayıcılarına sahiptir. - OpenRouter; sağlayıcı bir geçiş sağlayıcısı olduğu ve OpenClaw’un durağan
kataloğu güncellenmeden önce yeni model kimlikleri açığa çıkarabileceği için
catalogile birlikteresolveDynamicModelveprepareDynamicModelkullanır; ayrıca sağlayıcıya özgü istek üstbilgilerini, yönlendirme meta verisini, gerekçelendirme yamalarını ve istem önbelleği politikasını çekirdekten uzak tutmak içincapabilities,wrapStreamFnveisCacheTtlEligiblede kullanır. Yeniden oynatma politikasıpassthrough-geminiailesinden gelirken,openrouter-thinkingakış ailesi ise proxy gerekçelendirme ekleme ile desteklenmeyen model /autoatlamalarına sahiptir. - GitHub Copilot; sağlayıcıya ait cihaz oturum açma, model geri dönüş davranışı, Claude transcript tuhaflıkları,
GitHub belirteci -> Copilot belirteci değişimi ve sağlayıcıya ait kullanım uç noktası gerektiği için
catalog,auth,resolveDynamicModelvecapabilitiesile birlikteprepareRuntimeAuthvefetchUsageSnapshotkullanır. - OpenAI Codex; hâlâ çekirdek OpenAI aktarımları üzerinde çalışmasına rağmen
kendi aktarım/temel URL normalizasyonuna, OAuth yenileme geri dönüş politikasına, varsayılan aktarım seçimine,
sentetik Codex katalog satırlarına ve ChatGPT kullanım uç noktası entegrasyonuna sahip olduğu için
catalog,resolveDynamicModel,normalizeResolvedModel,refreshOAuthveaugmentModelCatalogile birlikteprepareExtraParams,resolveUsageAuthvefetchUsageSnapshotkullanır; doğrudan OpenAI ile aynıopenai-responses-defaultsakış ailesini paylaşır. - Google AI Studio ve Gemini CLI OAuth;
google-geminiyeniden oynatma ailesi Gemini 3.1 ileri uyumluluk geri dönüşüne, doğal Gemini yeniden oynatma doğrulamasına, önyükleme yeniden oynatma temizliğine, etiketli gerekçelendirme-çıktı moduna ve modern model eşleştirmesine sahip olduğu içinresolveDynamicModel,buildReplayPolicy,sanitizeReplayHistory,resolveReasoningOutputMode,wrapStreamFnveisModernModelRefkullanır;google-thinkingakış ailesi ise Gemini düşünme yükü normalizasyonuna sahiptir; Gemini CLI OAuth ayrıca belirteç biçimlendirme, belirteç ayrıştırma ve kota uç noktası bağlantısı içinformatApiKey,resolveUsageAuthvefetchUsageSnapshotkullanır. - Anthropic Vertex,
anthropic-by-modelyeniden oynatma ailesi aracılığıylabuildReplayPolicykullanır; böylece Claude’a özgü yeniden oynatma temizliği tümanthropic-messagesaktarımı yerine Claude kimlikleriyle sınırlı kalır. - Amazon Bedrock; Anthropic-on-Bedrock trafiği için Bedrock’a özgü daraltma/hazır değil/bağlam taşması hata sınıflandırmasına sahip olduğu için
buildReplayPolicy,matchesContextOverflowError,classifyFailoverReasonveresolveDefaultThinkingLevelkullanır; yeniden oynatma politikası ise yine aynı yalnızca-Claudeanthropic-by-modelkorumasını paylaşır. - OpenRouter, Kilocode, Opencode ve Opencode Go;
Gemini modellerini OpenAI uyumlu aktarımlar üzerinden vekil sundukları ve doğal Gemini yeniden oynatma doğrulaması veya
önyükleme yeniden yazımları olmadan Gemini düşünce-imzası temizliğine ihtiyaç duydukları için
passthrough-geminiyeniden oynatma ailesi aracılığıylabuildReplayPolicykullanır. - MiniMax,
hybrid-anthropic-openaiyeniden oynatma ailesi aracılığıylabuildReplayPolicykullanır çünkü tek bir sağlayıcı hem Anthropic-message hem de OpenAI uyumlu anlamlara sahiptir; Anthropic tarafında yalnızca Claude’a özgü düşünme bloğu düşürmeyi sürdürürken gerekçelendirme çıktı modunu tekrar doğala geçersiz kılar veminimax-fast-modeakış ailesi paylaşılan akış yolunda hızlı mod model yeniden yazımlarına sahiptir. - Moonshot; hâlâ paylaşılan OpenAI aktarımını kullandığı ancak sağlayıcıya ait düşünme yükü normalizasyonuna ihtiyaç duyduğu için
catalogile birliktewrapStreamFnkullanır;moonshot-thinkingakış ailesi ise yapılandırma ile/thinkdurumunu kendi doğal ikili düşünme yüküne eşler. - Kilocode; sağlayıcıya ait istek üstbilgilerine,
gerekçelendirme yükü normalizasyonuna, Gemini transcript ipuçlarına ve Anthropic
önbellek-TTL geçitlemesine ihtiyaç duyduğu için
catalog,capabilities,wrapStreamFnveisCacheTtlEligiblekullanır;kilocode-thinkingakış ailesi ise paylaşılan proxy akış yolunda Kilo düşünme eklemeyi tutarkenkilo/autove açık gerekçelendirme yüklerini desteklemeyen diğer proxy model kimliklerini atlar. - Z.AI; GLM-5 geri dönüşüne,
tool_streamvarsayılanlarına, ikili düşünme UX’ine, modern model eşleştirmesine ve hem kullanım kimlik doğrulaması hem de kota getirmeye sahip olduğu içinresolveDynamicModel,prepareExtraParams,wrapStreamFn,isCacheTtlEligible,isBinaryThinking,isModernModelRef,resolveUsageAuthvefetchUsageSnapshotkullanır;tool-stream-default-onakış ailesi ise varsayılan açıktool_streamsarmalayıcısını sağlayıcı başına elle yazılmış yapıştırma kodundan uzak tutar. - xAI; doğal xAI Responses aktarımı normalizasyonuna, Grok hızlı mod
takma ad yeniden yazımlarına, varsayılan
tool_streame, katı araç / gerekçelendirme yükü temizliğine, plugin’e ait araçlar için geri dönüş kimlik doğrulaması yeniden kullanımına, ileri uyumluluk Grok model çözümlemesine ve xAI araç-şema profili, desteklenmeyen şema anahtar sözcükleri, doğalweb_searchve HTML varlık araç çağrısı argüman çözümlemesi gibi sağlayıcıya ait uyumluluk yamalarına sahip olduğu içinnormalizeResolvedModel,normalizeTransport,contributeResolvedModelCompat,prepareExtraParams,wrapStreamFn,resolveSyntheticAuth,resolveDynamicModelveisModernModelRefkullanır. - Mistral, OpenCode Zen ve OpenCode Go; transcript/araç
tuhaflıklarını çekirdekten uzak tutmak için yalnızca
capabilitieskullanır. byteplus,cloudflare-ai-gateway,huggingface,kimi-coding,nvidia,qianfan,synthetic,together,venice,vercel-ai-gatewayvevolcenginegibi yalnızca katalog kullanan paketlenmiş sağlayıcılar yalnızcacatalogkullanır.- Qwen, metin sağlayıcısı için
catalogile birlikte çok modlu yüzeyleri için paylaşılan medya-anlama ve video-oluşturma kayıtlarını kullanır. - MiniMax ve Xiaomi, çıkarım hâlâ paylaşılan aktarımlardan geçse de
/usagedavranışları plugin’e ait olduğu içincatalogile birlikte kullanım kancalarını kullanır.
Çalışma zamanı yardımcıları
Plugin’ler seçilmiş çekirdek yardımcılarınaapi.runtime üzerinden erişebilir. TTS için:
textToSpeech, dosya/sesli not yüzeyleri için normal çekirdek TTS çıktı yükünü döndürür.- Çekirdek
messages.ttsyapılandırmasını ve sağlayıcı seçimini kullanır. - PCM ses arabelleği + örnekleme hızı döndürür. Plugin’ler sağlayıcılar için yeniden örnekleme/kodlama yapmalıdır.
listVoices, sağlayıcı başına isteğe bağlıdır. Satıcıya ait ses seçiciler veya kurulum akışları için kullanın.- Ses listeleri yerel ayar, cinsiyet ve kişilik etiketleri gibi daha zengin meta veriler içerebilir.
- OpenAI ve ElevenLabs bugün telefon desteği sunuyor. Microsoft sunmuyor.
api.registerSpeechProvider(...) üzerinden konuşma sağlayıcıları kaydedebilir.
- TTS politikasını, geri dönüşü ve yanıt teslimatını çekirdekte tutun.
- Satıcıya ait sentez davranışı için konuşma sağlayıcıları kullanın.
- Eski Microsoft
edgegirdisimicrosoftsağlayıcı kimliğine normalize edilir. - Tercih edilen sahiplik modeli şirket odaklıdır: tek bir satıcı plugin’i OpenClaw bu yetenek sözleşmelerini ekledikçe metin, konuşma, görsel ve gelecekteki medya sağlayıcılarına sahip olabilir.
- Orkestrasyonu, geri dönüşü, yapılandırmayı ve kanal bağlamasını çekirdekte tutun.
- Satıcı davranışını sağlayıcı plugin’inde tutun.
- Artımlı genişleme yazımlı kalmalıdır: yeni isteğe bağlı yöntemler, yeni isteğe bağlı sonuç alanları, yeni isteğe bağlı yetenekler.
- Video oluşturma zaten aynı deseni izler:
- çekirdek yetenek sözleşmesine ve çalışma zamanı yardımcısına sahiptir
- satıcı plugin’leri
api.registerVideoGenerationProvider(...)kaydeder - özellik/kanal plugin’leri
api.runtime.videoGeneration.*tüketir
api.runtime.mediaUnderstanding.*, görsel/ses/video anlama için tercih edilen paylaşılan yüzeydir.- Çekirdek medya-anlama ses yapılandırmasını (
tools.media.audio) ve sağlayıcı geri dönüş sırasını kullanır. - Hiçbir yazıya dökme çıktısı üretilmediğinde
{ text: undefined }döndürür (örneğin atlanan/desteklenmeyen girdi). api.runtime.stt.transcribeAudioFile(...)uyumluluk takma adı olarak kalır.
api.runtime.subagent üzerinden arka plan alt ajan çalıştırmaları başlatabilir:
providervemodel, kalıcı oturum değişiklikleri değil, çalışma başına isteğe bağlı geçersiz kılmalardır.- OpenClaw bu geçersiz kılma alanlarını yalnızca güvenilir çağıranlar için dikkate alır.
- Plugin’e ait geri dönüş çalıştırmaları için operatörler
plugins.entries.<id>.subagent.allowModelOverride: trueile açıkça izin vermelidir. - Güvenilir plugin’leri belirli kanonik
provider/modelhedefleriyle sınırlamak içinplugins.entries.<id>.subagent.allowedModelskullanın veya herhangi bir hedefe açıkça izin vermek için"*"kullanın. - Güvenilmeyen plugin alt ajan çalıştırmaları yine de çalışır, ancak geçersiz kılma istekleri sessizce geri dönmek yerine reddedilir.
api.registerWebSearchProvider(...) üzerinden web arama sağlayıcıları da kaydedebilir.
Notlar:
- Sağlayıcı seçimini, kimlik bilgisi çözümlemesini ve paylaşılan istek anlamlarını çekirdekte tutun.
- Satıcıya özgü arama aktarımları için web arama sağlayıcıları kullanın.
api.runtime.webSearch.*, ajan araç sarmalayıcısına bağımlı olmadan arama davranışına ihtiyaç duyan özellik/kanal plugin’leri için tercih edilen paylaşılan yüzeydir.
api.runtime.imageGeneration
generate(...): yapılandırılmış görsel oluşturma sağlayıcı zincirini kullanarak görsel oluşturur.listProviders(...): kullanılabilir görsel oluşturma sağlayıcılarını ve yeteneklerini listeler.
Gateway HTTP rotaları
Plugin’lerapi.registerHttpRoute(...) ile HTTP uç noktaları açığa çıkarabilir.
path: gateway HTTP sunucusu altındaki rota yolu.auth: gerekli. Normal gateway kimlik doğrulaması gerektirmek için"gateway", plugin tarafından yönetilen kimlik doğrulama/webhook doğrulaması için"plugin"kullanın.match: isteğe bağlı."exact"(varsayılan) veya"prefix".replaceExisting: isteğe bağlı. Aynı plugin’in kendi mevcut rota kaydını değiştirmesine izin verir.handler: rota isteği işlediğindetruedöndürmelidir.
api.registerHttpHandler(...)kaldırıldı ve plugin yükleme hatasına neden olur. Bunun yerineapi.registerHttpRoute(...)kullanın.- Plugin rotaları
authdeğerini açıkça bildirmelidir. - Tam
path + matchçakışmaları,replaceExisting: trueolmadığı sürece reddedilir ve bir plugin başka bir plugin’in rotasını değiştiremez. - Farklı
authdüzeylerine sahip çakışan rotalar reddedilir.exact/prefixardışık geçiş zincirlerini yalnızca aynı kimlik doğrulama düzeyinde tutun. auth: "plugin"rotaları otomatik olarak operatör çalışma zamanı kapsamları almaz. Bunlar ayrıcalıklı Gateway yardımcı çağrıları için değil, plugin tarafından yönetilen webhook’lar/imza doğrulaması içindir.auth: "gateway"rotaları bir Gateway istek çalışma zamanı kapsamında çalışır, ancak bu kapsam bilerek muhafazakârdır:- paylaşılan gizli bearer kimlik doğrulaması (
gateway.auth.mode = "token"/"password") kullanıldığında, çağıranx-openclaw-scopesgönderse bile plugin-rotası çalışma zamanı kapsamlarıoperator.writeolarak sabitlenir - güvenilir kimlik taşıyan HTTP modları (örneğin
trusted-proxyveya özel giriştegateway.auth.mode = "none")x-openclaw-scopesdeğerini yalnızca üstbilgi açıkça mevcutsa dikkate alır - bu kimlik taşıyan plugin-rotası isteklerinde
x-openclaw-scopesyoksa, çalışma zamanı kapsamıoperator.writedeğerine geri düşer
- paylaşılan gizli bearer kimlik doğrulaması (
- Pratik kural: gateway kimlik doğrulamalı bir plugin rotasının örtük bir yönetici yüzeyi olduğunu varsaymayın. Rotanız yöneticiye özel davranış gerektiriyorsa, kimlik taşıyan bir kimlik doğrulama modu isteyin ve açık
x-openclaw-scopesüstbilgisi sözleşmesini belgelendirin.
Plugin SDK içe aktarma yolları
Plugin yazarken tek parçaopenclaw/plugin-sdk içe aktarması yerine
SDK alt yollarını kullanın:
- plugin kayıt ilkelleri için
openclaw/plugin-sdk/plugin-entry. - genel paylaşılan plugin’e dönük sözleşme için
openclaw/plugin-sdk/core. - kök
openclaw.jsonZod şema dışa aktarımı (OpenClawSchema) içinopenclaw/plugin-sdk/config-schema. openclaw/plugin-sdk/channel-setup,openclaw/plugin-sdk/setup-runtime,openclaw/plugin-sdk/setup-adapter-runtime,openclaw/plugin-sdk/setup-tools,openclaw/plugin-sdk/channel-pairing,openclaw/plugin-sdk/channel-contract,openclaw/plugin-sdk/channel-feedback,openclaw/plugin-sdk/channel-inbound,openclaw/plugin-sdk/channel-lifecycle,openclaw/plugin-sdk/channel-reply-pipeline,openclaw/plugin-sdk/command-auth,openclaw/plugin-sdk/secret-inputveopenclaw/plugin-sdk/webhook-ingressgibi kararlı kanal ilkelleri, paylaşılan kurulum/kimlik doğrulama/yanıt/webhook bağlaması içindir.channel-inbound; debounce, mention eşleştirme, gelen mention-policy yardımcıları, zarf biçimlendirme ve gelen zarf bağlam yardımcıları için paylaşılan yuvadır.channel-setup, dar isteğe bağlı kurulum geçişidir.setup-runtime,setupEntry/ ertelenmiş başlangıç tarafından kullanılan, içe aktarma açısından güvenli kurulum yama bağdaştırıcıları dahil çalışma zamanı güvenli kurulum yüzeyidir.setup-adapter-runtime, ortama duyarlı hesap-kurulum bağdaştırıcısı geçişidir.setup-tools, küçük CLI/arşiv/belge yardımcı geçişidir (formatCliCommand,detectBinary,extractArchive,resolveBrewExecutable,formatDocsLink,CONFIG_DIR).openclaw/plugin-sdk/channel-config-helpers,openclaw/plugin-sdk/allow-from,openclaw/plugin-sdk/channel-config-schema,openclaw/plugin-sdk/telegram-command-config,openclaw/plugin-sdk/channel-policy,openclaw/plugin-sdk/approval-gateway-runtime,openclaw/plugin-sdk/approval-handler-adapter-runtime,openclaw/plugin-sdk/approval-handler-runtime,openclaw/plugin-sdk/approval-runtime,openclaw/plugin-sdk/config-runtime,openclaw/plugin-sdk/infra-runtime,openclaw/plugin-sdk/agent-runtime,openclaw/plugin-sdk/lazy-runtime,openclaw/plugin-sdk/reply-history,openclaw/plugin-sdk/routing,openclaw/plugin-sdk/status-helpers,openclaw/plugin-sdk/text-runtime,openclaw/plugin-sdk/runtime-storeveopenclaw/plugin-sdk/directory-runtimegibi alan alt yolları, paylaşılan çalışma zamanı/yapılandırma yardımcıları içindir.telegram-command-config, Telegram özel komut normalizasyonu/doğrulaması için dar genel geçiştir ve paketlenmiş Telegram sözleşme yüzeyi geçici olarak kullanılamasa bile kullanılabilir kalır.text-runtime, yardımcıya görünür metin çıkarma, markdown render/parçalama yardımcıları, sansürleme yardımcıları, yönerge etiketi yardımcıları ve güvenli metin yardımcıları dahil paylaşılan metin/markdown/günlükleme geçişidir.- Onaya özgü kanal geçişleri, plugin üzerinde tek bir
approvalCapabilitysözleşmesini tercih etmelidir. Çekirdek daha sonra onay kimlik doğrulaması, teslimat, render, doğal yönlendirme ve tembel doğal işleyici davranışını alakasız plugin alanlarına karıştırmak yerine bu tek yetenek üzerinden okur. openclaw/plugin-sdk/channel-runtimekullanımdan kaldırılmıştır ve yalnızca eski plugin’ler için uyumluluk geçişi olarak kalır. Yeni kod bunun yerine daha dar genel ilkelleri içe aktarmalıdır ve repo kodu bu geçiş için yeni içe aktarmalar eklememelidir.- Paketlenmiş uzantı iç yapıları özel kalır. Dış plugin’ler yalnızca
openclaw/plugin-sdk/*alt yollarını kullanmalıdır. OpenClaw çekirdeği/test kodu,index.js,api.js,runtime-api.js,setup-entry.jsvelogin-qr-api.jsgibi dar kapsamlı dosyalar gibi bir plugin paket kökü altındaki repo genel giriş noktalarını kullanabilir. Çekirdekten veya başka bir uzantıdan asla bir plugin paketininsrc/*yolunu içe aktarmayın. - Repo giriş noktası ayrımı:
<plugin-package-root>/api.jsyardımcı/türler varilidir,<plugin-package-root>/runtime-api.jsyalnızca çalışma zamanı varilidir,<plugin-package-root>/index.jspaketlenmiş plugin girişidir, ve<plugin-package-root>/setup-entry.jskurulum plugin girişidir. - Güncel paketlenmiş sağlayıcı örnekleri:
- Anthropic,
wrapAnthropicProviderStream, beta-header yardımcıları veservice_tierayrıştırması gibi Claude akış yardımcıları içinapi.js/contract-api.jskullanır. - OpenAI, sağlayıcı oluşturucuları, varsayılan model yardımcıları ve
gerçek zamanlı sağlayıcı oluşturucuları için
api.jskullanır. - OpenRouter, kendi sağlayıcı oluşturucusu ve katılım/yapılandırma
yardımcıları için
api.jskullanırkenregister.runtime.js, repo içi kullanım için genelplugin-sdk/provider-streamyardımcılarını yeniden dışa aktarabilir.
- Anthropic,
- Yüklenen yüzler üzerinden gelen genel giriş noktaları, mevcutsa etkin çalışma zamanı yapılandırma anlık görüntüsünü tercih eder; OpenClaw henüz çalışma zamanı anlık görüntüsü sunmuyorsa diskteki çözülmüş yapılandırma dosyasına geri döner.
- Genel paylaşılan ilkeller tercih edilen genel SDK sözleşmesi olmaya devam eder. Kanal markalı küçük,
ayrılmış bir uyumluluk kümesi hâlâ mevcuttur. Bunları yeni
üçüncü taraf içe aktarma hedefleri olarak değil, paket bakımı/uyumluluk geçişleri olarak değerlendirin; yeni çapraz kanal sözleşmeleri yine genel
plugin-sdk/*alt yollarında veya plugin’in yerelapi.js/runtime-api.jsvarillerinde yer almalıdır.
- Yeni kod için kök
openclaw/plugin-sdkvarilinden kaçının. - Önce dar kararlı ilkelleri tercih edin. Daha yeni setup/pairing/reply/
feedback/contract/inbound/threading/command/secret-input/webhook/infra/
allowlist/status/message-tool alt yolları, yeni
paketlenmiş ve dış plugin çalışmaları için amaçlanan sözleşmedir.
Hedef ayrıştırma/eşleştirme
openclaw/plugin-sdk/channel-targetsüzerinde olmalıdır. Mesaj eylemi geçitleri ve tepki mesaj kimliği yardımcılarıopenclaw/plugin-sdk/channel-actionsüzerinde olmalıdır. - Paketlenmiş uzantıya özgü yardımcı varilleri varsayılan olarak kararlı değildir. Eğer bir
yardımcı yalnızca paketlenmiş bir uzantı tarafından gerekiyorsa, bunu
openclaw/plugin-sdk/<extension>içine yükseltmek yerine uzantının yerelapi.jsveyaruntime-api.jsgeçişi arkasında tutun. - Yeni paylaşılan yardımcı geçişleri kanal markalı değil, genel olmalıdır. Paylaşılan hedef
ayrıştırma
openclaw/plugin-sdk/channel-targetsüzerinde olmalıdır; kanala özgü iç yapılar ise sahip plugin’in yerelapi.jsveyaruntime-api.jsgeçişi arkasında kalmalıdır. image-generation,media-understandingvespeechgibi yeteneğe özgü alt yollar bugün paketlenmiş/yerel plugin’ler bunları kullandığı için vardır. Bunların varlığı tek başına, dışa aktarılan her yardımcının uzun vadede sabitlenmiş bir dış sözleşme olduğu anlamına gelmez.
Message aracı şemaları
Plugin’ler kanala özgüdescribeMessageTool(...) şema
katkılarına sahip olmalıdır. Sağlayıcıya özgü alanları paylaşılan çekirdekte değil plugin içinde tutun.
Paylaşılan taşınabilir şema parçaları için
openclaw/plugin-sdk/channel-actions üzerinden dışa aktarılan genel yardımcıları yeniden kullanın:
- düğme ızgarası tarzı yükler için
createMessageToolButtonsSchema() - yapılandırılmış kart yükleri için
createMessageToolCardSchema()
Kanal hedef çözümleme
Kanal plugin’leri kanala özgü hedef anlamlarına sahip olmalıdır. Paylaşılan giden ana makineyi genel tutun ve sağlayıcı kuralları için mesajlaşma bağdaştırıcı yüzeyini kullanın:messaging.inferTargetChatType({ to }), normalize edilmiş bir hedefin dizin aramasından öncedirect,groupveyachannelolarak ele alınıp alınmayacağına karar verir.messaging.targetResolver.looksLikeId(raw, normalized), bir girdinin dizin araması yerine doğrudan kimlik benzeri çözümlemeye atlayıp atlamayacağını çekirdeğe söyler.messaging.targetResolver.resolveTarget(...), çekirdeğin normalizasyondan veya dizin kaçırmasından sonra son sağlayıcıya ait çözümlemeye ihtiyaç duyduğunda plugin geri dönüş yoludur.messaging.resolveOutboundSessionRoute(...), hedef çözüldükten sonra sağlayıcıya özgü oturum rota kurulumuna sahiptir.
- eşler/gruplar aranmadan önce gerçekleşmesi gereken kategori kararları için
inferTargetChatTypekullanın. - “bunu açık/doğal hedef kimliği olarak işle” denetimleri için
looksLikeIdkullanın. - geniş dizin araması için değil, sağlayıcıya özgü normalizasyon geri dönüşü için
resolveTargetkullanın. - sohbet kimlikleri, iş parçacığı kimlikleri, JID’ler, tanıtıcılar ve oda
kimlikleri gibi sağlayıcıya özgü doğal kimlikleri genel SDK alanlarında değil
targetdeğerlerinde veya sağlayıcıya özgü parametrelerde tutun.
Yapılandırma destekli dizinler
Yapılandırmadan dizin girdileri türeten plugin’ler, bu mantığı plugin içinde tutmalı ve paylaşılan yardımcılarıopenclaw/plugin-sdk/directory-runtime üzerinden yeniden kullanmalıdır.
Bir kanal aşağıdakiler gibi yapılandırma destekli eşlere/gruplara ihtiyaç duyduğunda bunu kullanın:
- allowlist güdümlü DM eşleri
- yapılandırılmış kanal/grup haritaları
- hesap kapsamlı durağan dizin geri dönüşleri
directory-runtime içindeki paylaşılan yardımcılar yalnızca genel işlemleri yönetir:
- sorgu filtreleme
- limit uygulama
- tekilleştirme/normalizasyon yardımcıları
ChannelDirectoryEntry[]oluşturma
Sağlayıcı katalogları
Sağlayıcı plugin’leri, çıkarım için model kataloglarınıregisterProvider({ catalog: { run(...) { ... } } }) ile tanımlayabilir.
catalog.run(...), OpenClaw’un
models.providers içine yazdığıyla aynı biçimi döndürür:
- tek bir sağlayıcı girdisi için
{ provider } - birden çok sağlayıcı girdisi için
{ providers }
catalog kullanın.
catalog.order, bir plugin’in kataloğunun OpenClaw’un
yerleşik örtük sağlayıcılarına göre ne zaman birleşeceğini denetler:
simple: düz API anahtarı veya ortam güdümlü sağlayıcılarprofile: kimlik doğrulama profilleri olduğunda görünen sağlayıcılarpaired: birden çok ilişkili sağlayıcı girdisi sentezleyen sağlayıcılarlate: diğer örtük sağlayıcılardan sonra son geçiş
discoveryeski bir takma ad olarak hâlâ çalışır- hem
cataloghemdiscoverykayıtlıysa OpenClawcatalogkullanır
Salt okunur kanal inceleme
Plugin’iniz bir kanal kaydediyorsa,resolveAccount(...) ile birlikte
plugin.config.inspectAccount(cfg, accountId) uygulamayı tercih edin.
Neden:
resolveAccount(...)çalışma zamanı yoludur. Kimlik bilgilerinin tamamen somutlaştığını varsayabilir ve gerekli sırlar eksik olduğunda hızlıca hata verebilir.openclaw status,openclaw status --all,openclaw channels status,openclaw channels resolveve doctor/config onarım akışları gibi salt okunur komut yollarının, yapılandırmayı açıklamak için çalışma zamanı kimlik bilgilerini somutlaştırması gerekmez.
inspectAccount(...) davranışı:
- Yalnızca açıklayıcı hesap durumu döndürün.
enabledveconfigureddeğerlerini koruyun.- Gerektiğinde şu gibi kimlik bilgisi kaynağı/durum alanları ekleyin:
tokenSource,tokenStatusbotTokenSource,botTokenStatusappTokenSource,appTokenStatussigningSecretSource,signingSecretStatus
- Salt okunur kullanılabilirliği bildirmek için ham belirteç değerlerini döndürmeniz gerekmez.
Durum tarzı komutlar için
tokenStatus: "available"(ve eşleşen kaynak alanı) döndürmek yeterlidir. - Bir kimlik bilgisi SecretRef üzerinden yapılandırılmış ancak mevcut komut yolunda kullanılamıyorsa
configured_unavailablekullanın.
Paket paketleri
Bir plugin dizini,openclaw.extensions içeren bir package.json dosyası içerebilir:
name/<fileBase> olur.
Plugin’iniz npm bağımlılıklarını içe aktarıyorsa, node_modules
mevcut olsun diye bunları o dizine kurun (npm install / pnpm install).
Güvenlik koruması: her openclaw.extensions girdisi, sembolik bağ çözümlemesinden sonra plugin
dizini içinde kalmalıdır. Paket dizininden çıkan girdiler
reddedilir.
Güvenlik notu: openclaw plugins install, plugin bağımlılıklarını
npm install --omit=dev --ignore-scripts ile kurar (yaşam döngüsü betikleri yok, çalışma zamanında geliştirme bağımlılıkları yok). Plugin bağımlılık
ağaçlarını “salt JS/TS” tutun ve postinstall derlemeleri gerektiren paketlerden kaçının.
İsteğe bağlı: openclaw.setupEntry hafif bir yalnızca kurulum modülünü işaret edebilir.
OpenClaw, devre dışı bir kanal plugin’i için kurulum yüzeylerine ihtiyaç duyduğunda veya
bir kanal plugin’i etkin ancak hâlâ yapılandırılmamış olduğunda tam plugin girişi yerine setupEntry
yükler. Bu, ana plugin girişiniz araçlar, kancalar veya diğer yalnızca çalışma zamanı
kodlarını da bağlıyorsa başlangıç ve kurulumu daha hafif tutar.
İsteğe bağlı: openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen,
bir kanal plugin’ini, kanal zaten yapılandırılmış olsa bile gateway’nin
dinleme öncesi başlangıç aşamasında aynı setupEntry yoluna almayı seçebilir.
Bunu yalnızca setupEntry, gateway dinlemeye başlamadan önce
var olması gereken başlangıç yüzeyini tamamen kapsıyorsa kullanın. Pratikte bu, kurulum girdisinin
başlangıcın bağlı olduğu aşağıdaki gibi tüm kanala ait yetenekleri kaydetmesi gerektiği anlamına gelir:
- kanal kaydının kendisi
- gateway dinlemeye başlamadan önce kullanılabilir olması gereken tüm HTTP rotaları
- aynı pencere sırasında var olması gereken tüm gateway yöntemleri, araçlar veya hizmetleri
singleAccountKeysToMovenamedAccountPromotionKeysresolveSingleAccountPromotionTarget(...)
channels.<id>.accounts.* içine yükseltmesi gerektiğinde kullanır.
Matrix mevcut paketlenmiş örnektir: adlandırılmış hesaplar zaten varsa yalnızca auth/bootstrap anahtarlarını
adlandırılmış yükseltilmiş bir hesaba taşır ve her zaman
accounts.default oluşturmadan yapılandırılmış kanonik olmayan bir varsayılan hesap anahtarını koruyabilir.
Bu kurulum yama bağdaştırıcıları paketlenmiş sözleşme yüzeyi keşfini tembel tutar.
İçe aktarma zamanı hafif kalır; yükseltme yüzeyi modül içe aktarımında paketlenmiş kanal başlangıcına yeniden girmek yerine
yalnızca ilk kullanımda yüklenir.
Bu başlangıç yüzeyleri gateway RPC yöntemleri içerdiğinde, bunları
plugin’e özgü bir ön ek üzerinde tutun. Çekirdek yönetici ad alanları (config.*,
exec.approvals.*, wizard.*, update.*) ayrılmış kalır ve bir plugin daha dar kapsam istese bile
her zaman operator.admin olarak çözülür.
Örnek:
Kanal katalog meta verisi
Kanal plugin’leriopenclaw.channel üzerinden kurulum/keşif meta verisi ve
openclaw.install üzerinden kurulum ipuçları duyurabilir. Bu, çekirdek katalog verisini verisiz tutar.
Örnek:
openclaw.channel alanları:
- daha zengin katalog/durum yüzeyleri için
detailLabel: ikincil etiket - belge bağlantısı metnini geçersiz kılmak için
docsLabel - bu katalog girdisinin geride bırakması gereken daha düşük öncelikli plugin/kanal kimlikleri için
preferOver - seçim yüzeyi metin denetimleri için
selectionDocsPrefix,selectionDocsOmitLabel,selectionExtras - giden biçimlendirme kararları için kanalın markdown yeteneğine sahip olduğunu işaretleyen
markdownCapable falseolarak ayarlandığında kanalı yapılandırılmış kanal listeleme yüzeylerinden gizleyenexposure.configuredfalseolarak ayarlandığında kanalı etkileşimli kurulum/yapılandırma seçicilerinden gizleyenexposure.setup- belge gezinme yüzeyleri için kanalı dahili/özel olarak işaretleyen
exposure.docs - uyumluluk için eski takma adlar hâlâ kabul edilir:
showConfigured/showInSetup; tercih edilen alanexposuredur - kanalı standart hızlı başlangıç
allowFromakışına dâhil edenquickstartAllowFrom - yalnızca tek hesap olsa bile açık hesap bağlamasını zorunlu kılan
forceAccountBinding - duyuru hedeflerini çözerken oturum aramasını tercih eden
preferSessionLookupForAnnounceTarget
~/.openclaw/mpm/plugins.json~/.openclaw/mpm/catalog.json~/.openclaw/plugins/catalog.json
OPENCLAW_PLUGIN_CATALOG_PATHS (veya OPENCLAW_MPM_CATALOG_PATHS) değişkenini
bir veya daha fazla JSON dosyasına yönlendirin (virgül/noktalı virgül/PATH ayırımlı). Her dosya
{ "entries": [ { "name": "@scope/pkg", "openclaw": { "channel": {...}, "install": {...} } } ] } içermelidir. Ayrıştırıcı, "entries" anahtarı için
eski takma adlar olarak "packages" veya "plugins" anahtarlarını da kabul eder.
Bağlam motoru plugin’leri
Bağlam motoru plugin’leri, alma, birleştirme ve sıkıştırma için oturum bağlamı orkestrasyonuna sahiptir. Bunları plugin’inizdenapi.registerContextEngine(id, factory) ile kaydedin, ardından etkin motoru
plugins.slots.contextEngine ile seçin.
Bunu, plugin’inizin varsayılan bağlam
işlem hattısını sadece bellek araması veya kanca eklemek yerine değiştirmesi ya da genişletmesi gerektiğinde kullanın.
compact()
uygulamasını koruyun ve açıkça ona devredin:
Yeni bir yetenek ekleme
Bir plugin mevcut API’ye uymayan davranışa ihtiyaç duyduğunda, plugin sistemini özel bir iç erişimle baypas etmeyin. Eksik yeteneği ekleyin. Önerilen sıra:- çekirdek sözleşmesini tanımlayın Çekirdeğin hangi paylaşılan davranışa sahip olması gerektiğine karar verin: politika, geri dönüş, yapılandırma birleştirme, yaşam döngüsü, kanala dönük anlamlar ve çalışma zamanı yardımcı biçimi.
- yazımlı plugin kayıt/çalışma zamanı yüzeyleri ekleyin
En küçük yararlı
yazımlı yetenek yüzeyiyle
OpenClawPluginApive/veyaapi.runtimeöğesini genişletin. - çekirdek + kanal/özellik tüketicilerini bağlayın Kanal ve özellik plugin’leri yeni yeteneği bir satıcı uygulamasını doğrudan içe aktararak değil, çekirdek üzerinden tüketmelidir.
- satıcı uygulamalarını kaydedin Satıcı plugin’leri ardından arka uçlarını bu yeteneğe kaydeder.
- sözleşme kapsamı ekleyin Sahiplik ve kayıt biçimi zaman içinde açık kalsın diye testler ekleyin.
Yetenek kontrol listesi
Yeni bir yetenek eklediğinizde uygulama genellikle bu yüzeylere birlikte dokunmalıdır:src/<capability>/types.tsiçindeki çekirdek sözleşme türlerisrc/<capability>/runtime.tsiçindeki çekirdek çalıştırıcı/çalışma zamanı yardımcısısrc/plugins/types.tsiçindeki plugin API kayıt yüzeyisrc/plugins/registry.tsiçindeki plugin kayıt sistemi bağlaması- özellik/kanal plugin’lerinin bunu tüketmesi gerektiğinde
src/plugins/runtime/*içindeki plugin çalışma zamanı açığa çıkarımı src/test-utils/plugin-registration.tsiçindeki yakalama/test yardımcılarısrc/plugins/contracts/registry.tsiçindeki sahiplik/sözleşme doğrulamalarıdocs/içindeki operatör/plugin belgeleri
Yetenek şablonu
Asgari desen:- çekirdek yetenek sözleşmesine + orkestrasyona sahiptir
- satıcı plugin’leri satıcı uygulamalarına sahiptir
- özellik/kanal plugin’leri çalışma zamanı yardımcılarını tüketir
- sözleşme testleri sahipliği açık tutar