Yükleme 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 yükler: derlenmiş paketli modüller yerel yükleyici kullanır; üçüncü taraf yerel kaynak TypeScript acil durum Jiti fallback’ini kullanır
- yerel
register(api)hook’larını çağırır ve kayıtları Plugin kayıt defterinde toplar - kayıt defterini komutlara/runtime yüzeylerine açar
activate, register için eski bir takma addır — yükleyici hangisi mevcutsa onu çözer (def.register ?? def.activate) ve aynı noktada çağırır. Tüm paketli Plugin’ler register kullanır; yeni Plugin’ler için register tercih edin.Manifest öncelikli davranış
Manifest, kontrol düzleminin doğruluk kaynağıdır. OpenClaw bunu şu amaçlarla 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 verilerini göstermek
- Plugin runtime’ını yüklemeden ucuz etkinleştirme ve kurulum tanımlayıcılarını korumak
activation ve setup blokları kontrol düzleminde kalır.
Bunlar etkinleştirme planlaması ve kurulum keşfi için yalnızca meta veri
tanımlayıcılarıdır; runtime kaydının, register(...) veya setupEntry yerine
geçmezler. İlk canlı etkinleştirme tüketicileri artık daha geniş kayıt defteri
materyalizasyonundan önce Plugin yüklemeyi daraltmak için manifest komut, kanal
ve sağlayıcı ipuçlarını kullanır:
- CLI yüklemesi, istenen birincil komuta sahip Plugin’lere daraltılır
- kanal kurulumu/Plugin çözümlemesi, istenen kanal id’sine sahip Plugin’lere daraltılır
- açık sağlayıcı kurulumu/runtime çözümlemesi, istenen sağlayıcı id’sine sahip Plugin’lere daraltılır
- Gateway başlangıç planlaması, açık başlangıç içe aktarmaları ve başlangıçtan
çıkışlar için
activation.onStartupkullanır; başlangıç meta verisi olmayan Plugin’ler yalnızca daha dar etkinleştirme tetikleyicileriyle yüklenir
all kapsamını isteyen istek zamanı runtime ön yüklemeleri yine de
yapılandırma, başlangıç planlaması, yapılandırılmış kanallar, yuvalar ve
otomatik etkinleştirme kurallarından açık bir etkili Plugin id kümesi türetir.
Bu türetilmiş küme boşsa OpenClaw, keşfedilebilir her Plugin’e genişletmek
yerine boş bir runtime kayıt defteri yükler.
Etkinleştirme planlayıcısı, mevcut çağıranlar için yalnızca id’lerden oluşan
bir API ve yeni tanılamalar için bir plan API’si sunar. Plan girdileri bir
Plugin’in neden seçildiğini raporlar; açık activation.* planlayıcı ipuçlarını
providers, channels, commandAliases, setup.providers,
contracts.tools ve hook’lar gibi manifest sahipliği fallback’inden ayırır.
Bu neden ayrımı uyumluluk sınırıdır: mevcut Plugin meta verileri çalışmaya
devam ederken yeni kod, runtime yükleme semantiğini değiştirmeden geniş
ipuçlarını veya fallback davranışını algılayabilir.
Kurulum keşfi artık setup-api’ye fallback yapmadan önce aday Plugin’leri
daraltmak için setup.providers ve setup.cliBackends gibi tanımlayıcıya ait
id’leri tercih eder; bu fallback hâlâ kurulum zamanı runtime hook’larına ihtiyaç
duyan Plugin’ler içindir. Sağlayıcı kurulum listeleri, sağlayıcı runtime’ını
yüklemeden manifest providerAuthChoices, tanımlayıcıdan türetilmiş kurulum
seçenekleri ve kurulum kataloğu meta verilerini kullanır. Açık
setup.requiresRuntime: false yalnızca tanımlayıcıya dayalı bir kesme noktasıdır;
atlanmış requiresRuntime, uyumluluk için eski setup-api fallback’ini korur.
Birden fazla keşfedilmiş Plugin aynı normalize edilmiş kurulum sağlayıcısını
veya CLI arka uç id’sini sahiplenirse kurulum araması, keşif sırasına dayanmak
yerine belirsiz sahibi reddeder. Kurulum runtime’ı yürütüldüğünde kayıt defteri
tanılamaları, eski Plugin’leri engellemeden setup.providers /
setup.cliBackends ile setup-api tarafından kaydedilen sağlayıcılar veya CLI
arka uçları arasındaki sapmayı raporlar.
Plugin önbelleği sınırı
OpenClaw, Plugin keşif sonuçlarını veya doğrudan manifest kayıt defteri verilerini duvar saati pencerelerinin arkasında önbelleğe almaz. Kurulumlar, manifest düzenlemeleri ve yükleme yolu değişiklikleri bir sonraki açık meta veri okumasında veya anlık görüntü yeniden oluşturmasında görünür olmalıdır. Manifest dosya ayrıştırıcısı, açılan manifest yolu, inode, boyut ve zaman damgalarıyla anahtarlanan sınırlı bir dosya imzası önbelleği tutabilir; bu önbellek yalnızca değişmemiş baytları yeniden ayrıştırmayı önler ve keşif, kayıt defteri, sahip veya politika yanıtlarını önbelleğe almamalıdır. Güvenli meta veri hızlı yolu gizli bir önbellek değil, açık nesne sahipliğidir. Gateway başlangıç sıcak yolları geçerliPluginMetadataSnapshot değerini,
türetilmiş PluginLookUpTable değerini veya açık bir manifest kayıt defterini
çağrı zinciri boyunca geçirmelidir. Yapılandırma doğrulaması, başlangıç
otomatik etkinleştirmesi, Plugin bootstrap’i ve sağlayıcı seçimi bu nesneleri
geçerli yapılandırmayı ve Plugin envanterini temsil ettikleri sürece yeniden
kullanabilir. Kurulum araması, belirli kurulum yolu açık bir manifest kayıt
defteri almadığı sürece manifest meta verilerini hâlâ isteğe bağlı olarak
yeniden oluşturur; bunu gizli arama önbellekleri eklemek yerine soğuk yol
fallback’i olarak tutun. Girdi değiştiğinde, anlık görüntüyü mutasyona uğratmak
veya geçmiş kopyaları tutmak yerine yeniden oluşturup değiştirin.
Etkin Plugin kayıt defteri üzerindeki görünümler ve paketli kanal bootstrap
yardımcıları geçerli kayıt defterinden/kökten yeniden hesaplanmalıdır. Tek bir
çağrı içinde işi tekilleştirmek veya yeniden girişi korumak için kısa ömürlü
haritalar uygundur; bunlar süreç meta veri önbelleklerine dönüşmemelidir.
Plugin yükleme için kalıcı önbellek katmanı runtime yüklemesidir. Kod veya
kurulu yapıtlar gerçekten yüklendiğinde yükleyici durumunu yeniden kullanabilir,
örneğin:
PluginLoaderCacheStateve uyumlu etkin runtime kayıt defterleri- aynı runtime yüzeyini tekrar tekrar içe aktarmayı önlemek için kullanılan jiti/modül önbellekleri ve genel yüzey yükleyici önbellekleri
- kurulu Plugin yapıtları için dosya sistemi önbellekleri
- yol normalizasyonu veya yinelenen çözümleme için kısa ömürlü çağrı başına haritalar
- keşif sonuçları
- doğrudan manifest kayıt defterleri
- kurulu Plugin dizininden yeniden oluşturulan manifest kayıt defterleri
- sağlayıcı sahibi araması, model bastırma, sağlayıcı politikası veya genel yapıt meta verileri
- değişen bir manifestin, kurulu dizinin veya yükleme yolunun bir sonraki meta veri okumasında görünür olması gereken manifestten türetilmiş diğer yanıtlar
Kayıt defteri modeli
Yüklenmiş Plugin’ler rastgele çekirdek global değerleri doğrudan mutasyona uğratmaz. Merkezi bir Plugin kayıt defterine kaydolurlar. Kayıt defteri şunları izler:- Plugin kayıtları (kimlik, kaynak, köken, durum, tanılamalar)
- araçlar
- eski hook’lar ve tipli hook’lar
- kanallar
- sağlayıcılar
- Gateway RPC işleyicileri
- HTTP rotaları
- CLI kaydedicileri
- arka plan servisleri
- Plugin’e ait komutlar
- Plugin modülü -> kayıt defteri kaydı
- çekirdek runtime -> kayıt defteri tüketimi
Konuşma bağlama geri çağrıları
Bir konuşmayı bağlayan Plugin’ler, onay çözüldüğünde 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: onaylanmış istekler için çözümlenmiş bağlamarequest: özgün istek özeti, ayırma ipucu, gönderen id’si ve konuşma meta verileri
Sağlayıcı runtime hook’ları
Sağlayıcı Plugin’lerinin üç katmanı vardır:- Ucuz runtime öncesi arama için manifest meta verileri:
setup.providers[].envVars, kullanımdan kaldırılmış uyumlulukproviderAuthEnvVars,providerAuthAliases,providerAuthChoicesvechannelEnvVars. - Yapılandırma zamanı hook’ları:
catalog(eskidiscovery) veapplyConfigDefaults. - Runtime hook’ları: kimlik doğrulama, model çözümleme, akış sarmalama, düşünme seviyeleri, yeniden oynatma politikası ve kullanım uç noktalarını kapsayan 40+ isteğe bağlı hook. Tam liste için bkz. Hook sırası ve kullanım.
setup.providers[].envVars kullanın. Kullanımdan kaldırılmış
providerAuthEnvVars, kullanımdan kaldırma penceresi boyunca uyumluluk
adaptörü tarafından hâlâ okunur ve bunu kullanan paketli olmayan Plugin’ler bir
manifest tanılaması alır. Bir sağlayıcı id’sinin başka bir sağlayıcı id’sinin
env var’larını, auth profillerini, yapılandırma destekli auth değerlerini ve
API anahtarı onboarding seçimini yeniden kullanması gerektiğinde manifest
providerAuthAliases kullanın. Onboarding/auth seçimi CLI yüzeylerinin
Plugin runtime’ını yüklemeden sağlayıcının seçim id’sini, grup etiketlerini ve
basit tek bayraklı auth kablolamasını bilmesi gerektiğinde manifest
providerAuthChoices kullanın. Sağlayıcı runtime envVars değerlerini
onboarding etiketleri veya OAuth client-id/client-secret kurulum değişkenleri
gibi operatöre dönük ipuçları için tutun.
Bir kanalın, genel shell-env fallback’inin, yapılandırma/durum kontrollerinin
veya kurulum istemlerinin kanal runtime’ını yüklemeden görmesi gereken env
odaklı auth veya kurulumu olduğunda manifest channelEnvVars kullanın.
Hook sırası ve kullanım
Model/sağlayıcı Plugin’leri için OpenClaw hook’ları kabaca şu sırayla çağırır. “When to use” sütunu hızlı karar kılavuzudur.ProviderPlugin.capabilities ve suppressBuiltInModel gibi OpenClaw’ın artık
çağırmadığı yalnızca uyumluluk amaçlı sağlayıcı alanları kasıtlı olarak burada
listelenmemiştir.
| # | Kanca | Ne yapar | Ne zaman kullanılır |
|---|---|---|---|
| 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 katalog veya temel URL varsayılanlarına sahipse |
| 2 | applyConfigDefaults | Yapılandırma somutlaştırması sırasında sağlayıcının sahip olduğu genel yapılandırma varsayılanlarını uygular | Varsayılanlar kimlik doğrulama moduna, ortama veya sağlayıcı model ailesi semantiklerine bağlıysa |
| — | (yerleşik model araması) | OpenClaw önce normal kayıt/katalog yolunu dener | (bir Plugin kancası değildir) |
| 3 | normalizeModelId | Aramadan önce eski veya önizleme model kimliği takma adlarını normalleştirir | Sağlayıcı, kanonik model çözümlemesinden önce takma ad temizliğine sahipse |
| 4 | normalizeTransport | Genel model derlemesinden önce sağlayıcı ailesi api / baseUrl değerlerini normalleştirir | Sağlayıcı, aynı taşıma ailesindeki özel sağlayıcı kimlikleri için taşıma temizliğine sahipse |
| 5 | normalizeConfig | Çalışma zamanı/sağlayıcı çözümlemesinden önce models.providers.<id> değerini normalleştirir | Sağlayıcı, Plugin ile birlikte yaşaması gereken yapılandırma temizliğine ihtiyaç duyarsa; paketli Google ailesi yardımcıları desteklenen Google yapılandırma girdilerini de yedekler |
| 6 | applyNativeStreamingUsageCompat | Yapılandırma sağlayıcılarına yerel akış kullanım uyumluluğu yeniden yazımlarını uygular | Sağlayıcı, uç nokta kaynaklı yerel akış kullanım meta verisi düzeltmelerine ihtiyaç duyarsa |
| 7 | resolveConfigApiKey | Çalışma zamanı kimlik doğrulaması yüklenmeden önce yapılandırma sağlayıcıları için ortam işaretçisi kimlik doğrulamasını çözümler | Sağlayıcılar kendi ortam işaretçisi API anahtarı çözümleme kancalarını sunarsa |
| 8 | resolveSyntheticAuth | Düz metin kalıcılaştırmadan yerel/kendi barındırılan veya yapılandırma destekli kimlik doğrulamasını görünür kılar | Sağlayıcı sentetik/yerel bir kimlik bilgisi işaretçisiyle çalışabiliyorsa |
| 9 | resolveExternalAuthProfiles | Sağlayıcının sahip olduğu harici kimlik doğrulama profillerini üst katmana bindirir; CLI/uygulama sahipliğindeki kimlik bilgileri için varsayılan persistence, runtime-only değeridir | Sağlayıcı, kopyalanmış yenileme belirteçlerini kalıcılaştırmadan harici kimlik doğrulama kimlik bilgilerini yeniden kullanırsa; manifest içinde contracts.externalAuthProviders bildirin |
| 10 | shouldDeferSyntheticProfileAuth | Saklanan sentetik profil yer tutucularını ortam/yapılandırma destekli kimlik doğrulamasının arkasına düşürür | Sağlayıcı, önceliği kazanmaması gereken sentetik yer tutucu profilleri saklıyorsa |
| 11 | resolveDynamicModel | Henüz yerel kayıtta olmayan, sağlayıcının sahip olduğu model kimlikleri için senkron yedek çözüm | Sağlayıcı rastgele üst kaynak model kimliklerini kabul ediyorsa |
| 12 | prepareDynamicModel | Eşzamansız ısınma, ardından resolveDynamicModel yeniden çalışır | Sağlayıcı bilinmeyen kimlikleri çözümlemeden önce ağ meta verisine ihtiyaç duyarsa |
| 13 | normalizeResolvedModel | Gömülü çalıştırıcı çözümlenmiş modeli kullanmadan önce son yeniden yazım | Sağlayıcı taşıma yeniden yazımlarına ihtiyaç duyar ancak hâlâ bir çekirdek taşıma kullanırsa |
| 14 | normalizeToolSchemas | Gömülü çalıştırıcı görmeden önce araç şemalarını normalleştirir | Sağlayıcı taşıma ailesi şema temizliğine ihtiyaç duyarsa |
| 15 | inspectToolSchemas | Normalleştirmeden sonra sağlayıcının sahip olduğu şema tanılarını görünür kılar | Sağlayıcı, çekirdeğe sağlayıcıya özgü kurallar öğretmeden anahtar sözcük uyarıları isterse |
| 16 | resolveReasoningOutputMode | Yerel ve etiketli akıl yürütme çıktısı sözleşmesi arasında seçim yapar | Sağlayıcı, yerel alanlar yerine etiketli akıl yürütme/nihai çıktıya ihtiyaç duyarsa |
| 17 | prepareExtraParams | Genel akış seçeneği sarmalayıcılarından önce istek parametresi normalleştirmesi | Sağlayıcı varsayılan istek parametrelerine veya sağlayıcı başına parametre temizliğine ihtiyaç duyarsa |
| 18 | createStreamFn | Normal akış yolunu özel bir taşıma ile tamamen değiştirir | Sağlayıcı yalnızca bir sarmalayıcı değil, özel bir kablo protokolüne ihtiyaç duyarsa |
| 20 | wrapStreamFn | Genel sarmalayıcılar uygulandıktan sonraki akış sarmalayıcısı | Sağlayıcı özel taşıma olmadan istek başlığı/gövde/model uyumluluk sarmalayıcılarına ihtiyaç duyarsa |
| 21 | resolveTransportTurnState | Tur başına yerel taşıma başlıkları veya meta verileri ekler | Sağlayıcı, genel taşımaların sağlayıcıya yerel tur kimliğini göndermesini isterse |
| 22 | resolveWebSocketSessionPolicy | Yerel WebSocket başlıkları veya oturum soğuma politikası ekler | Sağlayıcı, genel WS taşımalarının oturum başlıklarını veya yedek politikasını ayarlamasını isterse |
| 23 | formatApiKey | Kimlik doğrulama profili biçimlendiricisi: saklanan profil çalışma zamanı apiKey dizesine dönüşür | Sağlayıcı ek kimlik doğrulama meta verisi saklar ve özel bir çalışma zamanı belirteç şekline ihtiyaç duyarsa |
| 24 | refreshOAuth | Özel yenileme uç noktaları veya yenileme hatası politikası için OAuth yenileme geçersiz kılması | Sağlayıcı paylaşılan OpenClaw yenileyicilerine uymuyorsa |
| 25 | buildAuthDoctorHint | OAuth yenilemesi başarısız olduğunda eklenen onarım ipucu | Sağlayıcı, yenileme hatasından sonra sağlayıcıya ait kimlik doğrulama onarım rehberliğine ihtiyaç duyarsa |
| 26 | matchesContextOverflowError | Sağlayıcının sahip olduğu bağlam penceresi taşması eşleştiricisi | Sağlayıcının, genel sezgisellerin kaçıracağı ham taşma hataları varsa |
| 27 | classifyFailoverReason | Sağlayıcının sahip olduğu yük devretme nedeni sınıflandırması | Sağlayıcı ham API/taşıma hatalarını hız sınırı/aşırı yük/vb. nedenlere eşleyebiliyorsa |
| 28 | isCacheTtlEligible | Proxy/backhaul sağlayıcıları için istem önbelleği politikası | Sağlayıcı proxy’ye özgü önbellek TTL kapılamasına ihtiyaç duyarsa |
| 29 | buildMissingAuthMessage | Genel eksik kimlik doğrulama kurtarma iletisinin yerine geçer | Sağlayıcı, sağlayıcıya özgü eksik kimlik doğrulama kurtarma ipucuna ihtiyaç duyarsa |
| 30 | augmentModelCatalog | Keşiften sonra eklenen sentetik/nihai katalog satırları | Sağlayıcı models list ve seçicilerde sentetik ileri uyumluluk satırlarına ihtiyaç duyarsa |
| 31 | resolveThinkingProfile | Modele özgü /think düzey kümesi, görüntüleme etiketleri ve varsayılan | Sağlayıcı, seçili modeller için özel bir düşünme basamağı veya ikili etiket sunuyorsa |
| 32 | isBinaryThinking | Açık/kapalı akıl yürütme geçişi uyumluluk kancası | Sağlayıcı yalnızca ikili düşünme açık/kapalı sunuyorsa |
| 33 | supportsXHighThinking | xhigh akıl yürütme desteği uyumluluk kancası | Sağlayıcı yalnızca modellerin bir alt kümesinde xhigh isterse |
| 34 | resolveDefaultThinkingLevel | Varsayılan /think düzeyi uyumluluk kancası | Sağlayıcı bir model ailesi için varsayılan /think politikasına sahipse |
| 35 | 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 |
| 36 | prepareRuntimeAuth | Çıkarımdan hemen önce yapılandırılmış bir kimlik bilgisini gerçek çalışma zamanı belirtecine/anahtarına dönüştürür | Sağlayıcı bir belirteç değişimine veya kısa ömürlü istek kimlik bilgisine ihtiyaç duyarsa |
| 37 | resolveUsageAuth | /usage ve ilgili durum yüzeyleri için kullanım/faturalama kimlik bilgilerini çözümler | Sağlayıcı özel kullanım/kota belirteci ayrıştırmasına veya farklı bir kullanım kimlik bilgisine ihtiyaç duyarsa |
| 38 | fetchUsageSnapshot | Kimlik doğrulama çözümlendikten sonra sağlayıcıya özgü kullanım/kota anlık görüntülerini getir ve normalleştir | Sağlayıcının sağlayıcıya özgü bir kullanım uç noktasına veya yük ayrıştırıcısına ihtiyacı vardır |
| 39 | createEmbeddingProvider | Bellek/arama için sağlayıcıya ait bir embedding bağdaştırıcısı oluştur | Bellek embedding davranışı sağlayıcı Plugin’ine aittir |
| 40 | buildReplayPolicy | Sağlayıcı için transkript işlemeyi denetleyen bir yeniden oynatma ilkesi döndür | Sağlayıcının özel transkript ilkesine ihtiyacı vardır (örneğin, düşünme bloklarının çıkarılması) |
| 41 | sanitizeReplayHistory | Genel transkript temizliğinden sonra yeniden oynatma geçmişini yeniden yaz | Sağlayıcının paylaşılan Compaction yardımcılarının ötesinde sağlayıcıya özgü yeniden oynatma yeniden yazımlarına ihtiyacı vardır |
| 42 | validateReplayTurns | Gömülü çalıştırıcıdan önce son yeniden oynatma turu doğrulamasını veya yeniden şekillendirmesini yap | Sağlayıcı aktarımı, genel temizlemeden sonra daha sıkı tur doğrulamasına ihtiyaç duyar |
| 43 | onModelSelected | Sağlayıcıya ait seçim sonrası yan etkileri çalıştır | Bir model etkin hale geldiğinde sağlayıcının telemetriye veya sağlayıcıya ait duruma ihtiyacı vardır |
normalizeModelId, normalizeTransport ve normalizeConfig önce eşleşen sağlayıcı Plugin’ini denetler, ardından model kimliğini veya taşıma/yapılandırmayı gerçekten değiştiren bir tane bulana kadar kanca yetenekli diğer sağlayıcı Plugin’lerine geçer. Bu, çağıranın yeniden yazımı hangi paketli Plugin’in sahip olduğunu bilmesini gerektirmeden alias/compat sağlayıcı şimlerinin çalışmasını sağlar. Hiçbir sağlayıcı kancası desteklenen bir Google ailesi yapılandırma girdisini yeniden yazmazsa, paketli 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’ın normal çıkarım döngüsünde hâlâ çalışan sağlayıcı davranışı içindir.
resolveUsageAuth, OpenClaw’ın kullanım/durum yüzeyleri için fetchUsageSnapshot çağırıp çağırmayacağına veya genel kimlik bilgisi çözümlemesine geri dönüp dönmeyeceğine karar verir. Sağlayıcının kullanım kimlik bilgisi varsa { token, accountId? } döndürün, sağlayıcıya ait kullanım kimlik doğrulaması isteği işlediyse ve genel API anahtarı/OAuth geri dönüşünü bastırması gerekiyorsa { handled: true } döndürün, sağlayıcı kullanım kimlik doğrulamasını işlemediyse null veya undefined döndürün.
Sağlayıcı örneği
Yerleşik örnekler
Paketli sağlayıcı Plugin’leri, her satıcının katalog, kimlik doğrulama, düşünme, yeniden oynatma ve kullanım ihtiyaçlarına uyacak şekilde yukarıdaki kancaları birleştirir. Yetkili kanca kümesi her Plugin ile birlikteextensions/ altında bulunur; bu sayfa listeyi yansıtmak yerine şekilleri gösterir.
Pass-through catalog providers
Pass-through catalog providers
OpenRouter, Kilocode, Z.AI, xAI; OpenClaw’ın statik kataloğundan önce yukarı akış model kimliklerini gösterebilmek için
catalog ile birlikte resolveDynamicModel / prepareDynamicModel kaydeder.OAuth and usage endpoint providers
OAuth and usage endpoint providers
GitHub Copilot, Gemini CLI, ChatGPT Codex, MiniMax, Xiaomi, z.ai; token değişimi ve
/usage entegrasyonunun sahibi olmak için prepareRuntimeAuth veya formatApiKey ile resolveUsageAuth + fetchUsageSnapshot eşleştirir.Replay and transcript cleanup families
Replay and transcript cleanup families
Paylaşılan adlandırılmış aileler (
google-gemini, passthrough-gemini, anthropic-by-model, hybrid-anthropic-openai), her Plugin’in temizliği yeniden uygulaması yerine sağlayıcıların buildReplayPolicy üzerinden transkript ilkesine katılmasını sağlar.Catalog-only providers
Catalog-only providers
byteplus, cloudflare-ai-gateway, huggingface, kimi-coding, nvidia, qianfan, synthetic, together, venice, vercel-ai-gateway ve volcengine yalnızca catalog kaydeder ve paylaşılan çıkarım döngüsünü kullanır.Anthropic-specific stream helpers
Anthropic-specific stream helpers
Beta başlıkları,
/fast / serviceTier ve context1m; genel SDK yerine Anthropic Plugin’inin herkese açık api.ts / contract-api.ts sınırında bulunur (wrapAnthropicProviderStream, resolveAnthropicBetas, resolveAnthropicFastMode, resolveAnthropicServiceTier).Çalışma zamanı yardımcıları
Plugin’ler, seçili ç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ını döndürür. Plugin’ler sağlayıcılar için yeniden örneklemeli/kodlamalıdır.
listVoicessağlayıcı başına isteğe bağlıdır. Bunu satıcıya ait ses seçiciler veya kurulum akışları için kullanın.- Ses listeleri, sağlayıcı farkındalıklı seçiciler için yerel ayar, cinsiyet ve kişilik etiketleri gibi daha zengin meta veriler içerebilir.
- OpenAI ve ElevenLabs bugün telefon desteğini destekler. Microsoft desteklemez.
api.registerSpeechProvider(...) üzerinden konuşma sağlayıcıları kaydedebilir.
- TTS ilkesini, geri dönüşü ve yanıt teslimini çekirdekte tutun.
- Konuşma sağlayıcılarını satıcıya ait sentez davranışı için kullanın.
- Eski Microsoft
edgegirdisimicrosoftsağlayıcı kimliğine normalleştirilir. - Tercih edilen sahiplik modeli şirket odaklıdır: OpenClaw bu yetenek sözleşmelerini ekledikçe tek bir satıcı Plugin’i metin, konuşma, görüntü ve gelecekteki medya sağlayıcılarının sahibi olabilir.
- Orkestrasyonu, geri dönüşü, yapılandırmayı ve kanal bağlantılarını çekirdekte tutun.
- Satıcı davranışını sağlayıcı Plugin’inde tutun.
- Eklemeli genişleme yazılmış kalmalıdır: yeni isteğe bağlı yöntemler, yeni isteğe bağlı sonuç alanları, yeni isteğe bağlı yetenekler.
- Video üretimi zaten aynı kalıbı 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örüntü/ses/video anlama için tercih edilen paylaşılan yüzeydir.extractStructuredWithModel(...), sınırlı sağlayıcıya ait görüntü öncelikli çıkarım için Plugin’e dönük sınırdır. En az bir görüntü girdisi ekleyin; metin girdileri tamamlayıcı bağlamdır. Ürün Plugin’leri kendi rotalarına ve şemalarına sahip olurken OpenClaw sağlayıcı/çalışma zamanı sınırına sahiptir.- Çekirdek medya anlama ses yapılandırmasını (
tools.media.audio) ve sağlayıcı geri dönüş sırasını kullanır. - Transkripsiyon çıktısı üretilmediğinde (örneğin atlanan/desteklenmeyen girdi)
{ text: undefined }döndürür. api.runtime.stt.transcribeAudioFile(...)uyumluluk alias’ı 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 katılmalıdır. - 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ı hâlâ çalışır, ancak geçersiz kılma istekleri sessizce geri dönmek yerine reddedilir.
- Plugin tarafından oluşturulan alt ajan oturumları, oluşturan Plugin kimliğiyle etiketlenir. Geri dönüş
api.runtime.subagent.deleteSession(...)yalnızca bu sahip olunan oturumları silebilir; rastgele oturum silme hâlâ yönetici kapsamlı bir Gateway isteği gerektirir.
api.registerWebSearchProvider(...) üzerinden web arama sağlayıcıları kaydedebilir.
Notlar:
- Sağlayıcı seçimini, kimlik bilgisi çözümlemesini ve paylaşılan istek semantiğini çekirdekte tutun.
- Web arama sağlayıcılarını satıcıya özgü arama taşımaları için kullanın.
api.runtime.webSearch.*, ajan aracı 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örüntü üretimi sağlayıcı zincirini kullanarak bir görüntü üretir.listProviders(...): kullanılabilir görüntü üretimi sağlayıcılarını ve yeteneklerini listeler.
Gateway HTTP rotaları
Plugin’lerapi.registerHttpRoute(...) ile HTTP uç noktaları açabilir.
path: Gateway HTTP sunucusu altındaki rota yolu.auth: zorunlu. Normal Gateway kimlik doğrulaması gerektirmek için"gateway", Plugin tarafından yönetilen kimlik doğrulaması/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ürün.
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 örtüşen rotalar reddedilir.exact/prefixdüşüş zincirlerini yalnızca aynı auth düzeyinde tutun. auth: "plugin"rotaları operatör çalışma zamanı kapsamlarını otomatik olarak 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 isteği çalışma zamanı kapsamı içinde çalışır, ancak bu kapsam kasıtlı olarak kısıtlayıcıdır:- paylaşılan gizli bearer auth (
gateway.auth.mode = "token"/"password"), çağıranx-openclaw-scopesgönderse bile Plugin rota çalışma zamanı kapsamlarınıoperator.writedeğerine sabitler - güvenilir kimlik taşıyan HTTP modları (örneğin özel bir girişte
trusted-proxyveyagateway.auth.mode = "none") yalnızca başlık açıkça bulunduğundax-openclaw-scopesdeğerini kabul eder - bu kimlik taşıyan Plugin rota isteklerinde
x-openclaw-scopesyoksa, çalışma zamanı kapsamıoperator.writedeğerine geri döner
- paylaşılan gizli bearer auth (
- Pratik kural: gateway-auth Plugin rotasının örtük bir yönetici yüzeyi olduğunu varsaymayın. Rotanız yalnızca yönetici davranışı gerektiriyorsa, kimlik taşıyan bir auth modu gerektirin ve açık
x-openclaw-scopesbaşlık sözleşmesini belgeleyin.
Plugin SDK içe aktarma yolları
Yeni Plugin’ler yazarken monolitikopenclaw/plugin-sdk kök barrel yerine dar SDK alt yollarını kullanın. Çekirdek alt yollar:
| Alt yol | Amaç |
|---|---|
openclaw/plugin-sdk/plugin-entry | Plugin kayıt temel öğeleri |
openclaw/plugin-sdk/channel-core | Kanal giriş/oluşturma yardımcıları |
openclaw/plugin-sdk/core | Genel paylaşılan yardımcılar ve şemsiye sözleşme |
openclaw/plugin-sdk/config-schema | Kök openclaw.json Zod şeması (OpenClawSchema) |
channel-setup,
setup-runtime, setup-tools, channel-pairing,
channel-contract, channel-feedback, channel-inbound, channel-outbound,
command-auth, secret-input, webhook-ingress,
channel-targets ve channel-actions. Onay davranışı, ilgisiz
Plugin alanları arasında karıştırmak yerine tek bir approvalCapability
sözleşmesinde birleştirilmelidir. Bkz. Kanal Plugin’leri.
Çalışma zamanı ve yapılandırma yardımcıları, eşleşen odaklı *-runtime alt yolları
altında bulunur (approval-runtime, agent-runtime, lazy-runtime, directory-runtime,
text-runtime, runtime-store, system-event-runtime, heartbeat-runtime,
channel-activity-runtime vb.). Geniş config-runtime uyumluluk barrel’i yerine
config-contracts, plugin-config-runtime, runtime-config-snapshot ve config-mutation
tercih edin.
openclaw/plugin-sdk/channel-runtime, openclaw/plugin-sdk/channel-lifecycle,
küçük kanal yardımcı facade’leri, openclaw/plugin-sdk/outbound-runtime,
openclaw/plugin-sdk/outbound-send-deps, openclaw/plugin-sdk/config-runtime
ve openclaw/plugin-sdk/infra-runtime, eski Plugin’ler için kullanımdan kaldırılmış uyumluluk shim’leridir. Yeni kod bunun yerine daha dar genel temel öğeleri içe aktarmalıdır.index.js— paketlenmiş Plugin girişiapi.js— yardımcı/tip barrel’iruntime-api.js— yalnızca çalışma zamanı barrel’isetup-entry.js— kurulum Plugin girişi
openclaw/plugin-sdk/* alt yollarını içe aktarmalıdır. Çekirdekten veya başka bir Plugin’den başka bir Plugin paketinin src/* yolunu asla içe aktarmayın.
Facade ile yüklenen giriş noktaları, varsa etkin çalışma zamanı yapılandırma anlık görüntüsünü tercih eder, ardından diskteki çözümlenmiş yapılandırma dosyasına geri döner.
image-generation, media-understanding ve speech gibi yeteneğe özel alt yollar, paketlenmiş Plugin’ler bugün bunları kullandığı için vardır. Bunlar otomatik olarak uzun vadeli donmuş harici sözleşmeler değildir; bunlara dayanırken ilgili SDK başvuru sayfasını kontrol edin.
Mesaj aracı şemaları
Plugin’ler, tepkiler, okumalar ve anketler gibi mesaj dışı temel öğeler için kanala özeldescribeMessageTool(...) şema katkılarına sahip olmalıdır.
Paylaşılan gönderim sunumu, sağlayıcıya özgü düğme, bileşen, blok veya kart alanları yerine genel MessagePresentation sözleşmesini kullanmalıdır.
Sözleşme, geri dönüş kuralları, sağlayıcı eşlemesi ve Plugin yazarı kontrol listesi için Mesaj Sunumu bölümüne bakın.
Gönderim yapabilen Plugin’ler, mesaj yetenekleri aracılığıyla neyi işleyebileceklerini bildirir:
- semantik sunum blokları (
text,context,divider,buttons,select) içinpresentation - sabitlenmiş teslim istekleri için
delivery-pin
Kanal hedef çözümlemesi
Kanal Plugin’leri kanala özel hedef semantiklerine sahip olmalıdır. Paylaşılan giden ana makineyi genel tutun ve sağlayıcı kuralları için mesajlaşma adaptörü yüzeyini kullanın:messaging.inferTargetChatType({ to }), normalleştirilmiş 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 id benzeri çözümlemeye atlanıp atlanmayacağını çekirdeğe söyler.messaging.targetResolver.reservedLiterals, o sağlayıcı için kanal/oturum başvurusu olan yalın sözcükleri listeler. Çözümleme, ayrılmış sabitleri reddetmeden önce yapılandırılmış dizin girdilerini korur, ardından dizin eşleşmesi yoksa kapalı şekilde başarısız olur.messaging.targetResolver.resolveTarget(...), çekirdeğin normalleştirmeden sonra veya dizin eşleşmesi kaçırıldıktan sonra son sağlayıcıya ait çözümlemeye ihtiyaç duyması durumunda Plugin geri dönüşüdür.messaging.resolveOutboundSessionRoute(...), hedef çözümlendikten sonra sağlayıcıya özgü oturum rotası oluşturmayı sahiplenir.
- Eşleri/grupları aramadan önce gerçekleşmesi gereken kategori kararları için
inferTargetChatTypekullanın. - “Bunu açık/yerel hedef id olarak ele al” kontrolleri için
looksLikeIdkullanın. - Geniş dizin araması için değil, sağlayıcıya özgü normalleştirme geri dönüşü için
resolveTargetkullanın. - Sohbet id’leri, konu id’leri, JID’ler, handle’lar ve oda id’leri gibi sağlayıcıya özgü yerel id’leri genel SDK alanlarında değil,
targetdeğerleri veya sağlayıcıya özgü parametreler içinde tutun.
Yapılandırma destekli dizinler
Yapılandırmadan dizin girdileri türeten Plugin’ler, bu mantığı Plugin içinde tutmalı veopenclaw/plugin-sdk/directory-runtime içindeki paylaşılan yardımcıları yeniden kullanmalıdır.
Bir kanal aşağıdakiler gibi yapılandırma destekli eşlere/gruplara ihtiyaç duyduğunda bunu kullanın:
- izin listesiyle yönetilen DM eşleri
- yapılandırılmış kanal/grup eşlemeleri
- hesap kapsamlı statik dizin geri dönüşleri
directory-runtime içindeki paylaşılan yardımcılar yalnızca genel işlemleri ele alır:
- sorgu filtreleme
- limit uygulama
- yinelenenleri kaldırma/normalleştirme 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ığı şeklin aynısını döndürür:
- tek sağlayıcı girdisi için
{ provider } - birden çok sağlayıcı girdisi için
{ providers }
catalog kullanın.
catalog.order, bir Plugin kataloğunun OpenClaw’un yerleşik örtük sağlayıcılarına göre ne zaman birleştirileceğini denetler:
simple: düz API anahtarı veya env odaklı sağlayıcılarprofile: auth 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ş
api.registerModelCatalogProvider({ provider, kinds, staticCatalog, liveCatalog }) aracılığıyla yayımlayabilir. Bu, liste/yardım/seçici yüzeyleri için ileri yoldur ve
text, image_generation, video_generation ve music_generation satırlarını destekler.
Sağlayıcı Plugin’leri canlı uç nokta çağrılarına, token değişimine ve satıcı yanıt eşlemesine hâlâ sahiptir; çekirdek ortak satır şekline, kaynak etiketlerine ve medya aracı yardım biçimlendirmesine sahiptir. Medya oluşturma sağlayıcı kayıtları, defaultModel, models ve capabilities değerlerinden statik katalog satırlarını otomatik olarak sentezler.
Uyumluluk:
discoveryeski bir diğer ad olarak hâlâ çalışır, ancak kullanımdan kaldırma uyarısı yayar- hem
cataloghem dediscoverykayıtlıysa, OpenClawcatalogkullanır augmentModelCatalogkullanımdan kaldırılmıştır; paketlenmiş sağlayıcılar ek satırlarıregisterModelCatalogProvideraracılığıyla yayımlamalıdır
Salt okunur kanal incelemesi
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ırıldığını varsaymasına izin verilir ve gerekli secret’lar eksik olduğunda hızlı şekilde başarısız olabilir.openclaw status,openclaw status --all,openclaw channels status,openclaw channels resolvegibi salt okunur komut yolları ve doctor/yapılandırma onarım akışları, yalnızca yapılandırmayı tanımlamak için çalışma zamanı kimlik bilgilerini somutlaştırmak zorunda kalmamalıdır.
inspectAccount(...) davranışı:
- Yalnızca açıklayıcı hesap durumu döndürün.
enabledveconfigureddeğerlerini koruyun.- İlgili olduğunda kimlik bilgisi kaynak/durum alanlarını ekleyin, örneğin:
tokenSource,tokenStatusbotTokenSource,botTokenStatusappTokenSource,appTokenStatussigningSecretSource,signingSecretStatus
- Salt okunur kullanılabilirliği raporlamak için ham token değerleri döndürmeniz gerekmez.
tokenStatus: "available"(ve eşleşen kaynak alanı) döndürmek durum tarzı komutlar için yeterlidir. - Bir kimlik bilgisi SecretRef ile 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 içerebilir:
name/<fileBase> olur.
Plugin’iniz npm bağımlılıkları içe aktarıyorsa, node_modules kullanılabilir olsun diye bunları o dizine kurun (npm install / pnpm install).
Güvenlik bariyeri: her openclaw.extensions girişi, symlink çözümlemesinden sonra Plugin dizini içinde kalmalıdır. Paket dizininden dışarı çıkan girişler reddedilir.
Güvenlik notu: openclaw plugins install, plugin bağımlılıklarını proje yerelinde npm install --omit=dev --ignore-scripts ile kurar (yaşam döngüsü betikleri yoktur, çalışma zamanında geliştirme bağımlılıkları yoktur) ve devralınan global npm kurulum ayarlarını yok sayar. Plugin bağımlılık ağaçlarını “saf 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ü gösterebilir. OpenClaw devre dışı bırakılmış bir kanal plugin’i için kurulum yüzeylerine ihtiyaç duyduğunda veya bir kanal plugin’i etkin olup hâlâ yapılandırılmadığında, tam plugin girişinin yerine setupEntry yükler. Bu, ana plugin girişiniz araçları, kancaları veya diğer yalnızca çalışma zamanı kodunu da bağladığında 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’in dinleme öncesi başlangıç aşamasında aynı setupEntry yoluna dahil edebilir.
Bunu yalnızca setupEntry, gateway dinlemeye başlamadan önce var olması gereken başlangıç yüzeyini tamamen kapsıyorsa kullanın. Pratikte bu, kurulum girişinin başlangıcın bağımlı olduğu kanalın sahip olduğu her yeteneği kaydetmesi gerektiği anlamına gelir; örneğin:
- 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 bu yüzeyi kullanır. Matrix geçerli paketlenmiş örnektir: adlandırılmış hesaplar zaten mevcut olduğunda yalnızca auth/bootstrap anahtarlarını adlandırılmış yükseltilmiş bir hesaba taşır ve her zaman accounts.default oluşturmak yerine yapılandırılmış kanonik olmayan bir varsayılan hesap anahtarını koruyabilir.
Bu kurulum yama adaptörleri, paketlenmiş sözleşme yüzeyi keşfini tembel tutar. İçe aktarma süresi 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 önekte tutun. Çekirdek yönetici ad alanları (config.*, exec.approvals.*, wizard.*, update.*) ayrılmış kalır ve bir plugin daha dar bir kapsam istese bile her zaman operator.admin olarak çözümlenir.
Örnek:
Kanal katalog metaverileri
Kanal plugin’leri,openclaw.channel üzerinden kurulum/keşif metaverilerini ve openclaw.install üzerinden kurulum ipuçlarını duyurabilir. Bu, çekirdek kataloğunu verisiz tutar.
Örnek:
openclaw.channel alanları:
detailLabel: daha zengin katalog/durum yüzeyleri için ikincil etiketdocsLabel: dokümantasyon bağlantısı için bağlantı metnini geçersiz kılpreferOver: bu katalog girdisinin önüne geçmesi gereken daha düşük öncelikli plugin/kanal kimlikleriselectionDocsPrefix,selectionDocsOmitLabel,selectionExtras: seçim yüzeyi metin denetimlerimarkdownCapable: kanalı giden biçimlendirme kararları için markdown yetenekli olarak işaretlerexposure.configured:falseolarak ayarlandığında kanalı yapılandırılmış kanal listeleme yüzeylerinden gizleexposure.setup:falseolarak ayarlandığında kanalı etkileşimli kurulum/yapılandırma seçicilerinden gizleexposure.docs: kanalı dokümantasyon gezinti yüzeyleri için dahili/özel olarak işaretleshowConfigured/showInSetup: uyumluluk için hâlâ kabul edilen eski takma adlar;exposuretercih edinquickstartAllowFrom: kanalı standart hızlı başlangıçallowFromakışına dahil etforceAccountBinding: yalnızca bir hesap var olsa bile açık hesap bağlamayı zorunlu kılpreferSessionLookupForAnnounceTarget: duyuru hedeflerini çözerken oturum aramasını tercih et
~/.openclaw/mpm/plugins.json~/.openclaw/mpm/catalog.json~/.openclaw/plugins/catalog.json
OPENCLAW_PLUGIN_CATALOG_PATHS (ya da OPENCLAW_MPM_CATALOG_PATHS) değişkenini bir veya daha fazla JSON dosyasına yönlendirin (virgül/noktalı virgül/PATH ile ayrılmış). 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" değerlerini de kabul eder.
Oluşturulan kanal katalog girdileri ve sağlayıcı kurulum katalog girdileri, ham openclaw.install bloğunun yanında normalize edilmiş kurulum kaynağı olgularını açığa çıkarır. Normalize edilmiş olgular, npm belirtiminin kesin bir sürüm mü yoksa değişken bir seçici mi olduğunu, beklenen bütünlük metaverilerinin mevcut olup olmadığını ve yerel kaynak yolunun da kullanılabilir olup olmadığını belirler. Katalog/paket kimliği bilindiğinde, normalize edilmiş olgular ayrıştırılan npm paket adının bu kimlikten sapması durumunda uyarır. Ayrıca defaultChoice geçersiz olduğunda veya kullanılabilir olmayan bir kaynağı gösterdiğinde ve geçerli bir npm kaynağı olmadan npm bütünlük metaverileri mevcut olduğunda da uyarırlar. Tüketiciler, elle oluşturulmuş girdilerin ve katalog shim’lerinin bunu sentezlemek zorunda kalmaması için installSource alanını eklemeli isteğe bağlı bir alan olarak ele almalıdır. Bu, onboarding ve tanılamanın plugin çalışma zamanını içe aktarmadan kaynak düzlemi durumunu açıklamasını sağlar.
Resmi harici npm girdileri kesin bir npmSpec ile expectedIntegrity tercih etmelidir. Çıplak paket adları ve dist-tag’ler uyumluluk için hâlâ çalışır, ancak kaynak düzlemi uyarıları gösterirler; böylece katalog, mevcut plugin’leri bozmadan sabitlenmiş, bütünlük denetimli kurulumlara doğru ilerleyebilir. Onboarding yerel katalog yolundan kurulum yaptığında, mümkün olduğunda source: "path" ve çalışma alanına göreli sourcePath içeren yönetilen bir plugin plugin indeks girdisi kaydeder. Mutlak operasyonel yükleme yolu plugins.load.paths içinde kalır; kurulum kaydı yerel iş istasyonu yollarını uzun ömürlü yapılandırmaya kopyalamaktan kaçınır. Bu, yerel geliştirme kurulumlarını ikinci bir ham dosya sistemi yolu ifşa yüzeyi eklemeden kaynak düzlemi tanılamaları için görünür tutar. Kalıcı installed_plugin_index SQLite satırı, kurulum kaynağının doğruluk kaynağıdır ve plugin çalışma zamanı modülleri yüklenmeden yenilenebilir. installRecords eşlemesi, bir plugin manifest’i eksik veya geçersiz olduğunda bile dayanıklıdır; plugins yükü yeniden oluşturulabilir bir manifest görünümüdür.
Bağlam motoru plugin’leri
Bağlam motoru plugin’leri; alım, derleme ve Compaction için oturum bağlamı orkestrasyonuna sahip olur. Bunları plugin’inizdenapi.registerContextEngine(id, factory) ile kaydedin, ardından etkin motoru plugins.slots.contextEngine ile seçin.
Bunu, plugin’iniz yalnızca bellek araması veya kancalar eklemek yerine varsayılan bağlam işlem hattını değiştirmeye ya da genişletmeye ihtiyaç duyduğunda kullanın.
ctx, oluşturma zamanı başlatması için isteğe bağlı config, agentDir ve workspaceDir değerlerini açığa çıkarır.
Etkin harness’ın kalıcı bir backend thread’i olduğunda assemble(), contextProjection döndürebilir. Eski tur başına projeksiyon için bunu atlayın. Derlenmiş bağlamın bir backend thread’ine bir kez enjekte edilip epoch değişene kadar yeniden kullanılması gerektiğinde { mode: "thread_bootstrap", epoch } döndürün. Motorun anlamsal bağlamı değiştikten sonra, örneğin motorun sahip olduğu bir Compaction geçişinden sonra epoch’u değiştirin. Ana makineler, taze backend thread’lerinin ham gizli veri taşıyan yükleri kopyalamadan araç sürekliliğini koruması için araç çağrısı metaverilerini, girdi şeklini ve redakte edilmiş araç sonuçlarını thread-bootstrap projeksiyonunda koruyabilir.
Motorunuz Compaction algoritmasına sahip değilse, compact() uygulanmış kalsın ve açıkça devredin:
Yeni bir yetenek ekleme
Bir plugin, geçerli API’ye uymayan davranışa ihtiyaç duyduğunda, plugin sistemini özel bir içeri erişimle atlamayın. Eksik yeteneği ekleyin. Önerilen sıra:- çekirdek sözleşmeyi tanımlayın Çekirdeğin hangi ortak davranışa sahip olması gerektiğine karar verin: politika, fallback, yapılandırma birleştirme, yaşam döngüsü, kanala dönük semantik ve çalışma zamanı yardımcı şekli.
- tipli plugin kayıt/çalışma zamanı yüzeyleri ekleyin
OpenClawPluginApive/veyaapi.runtimeyüzeyini en küçük yararlı tipli yetenek yüzeyiyle genişletin. - çekirdeği + kanal/özellik tüketicilerini bağlayın Kanallar ve özellik plugin’leri, yeni yeteneği bir vendor uygulamasını doğrudan içe aktararak değil, çekirdek üzerinden tüketmelidir.
- vendor uygulamalarını kaydedin Vendor plugin’leri ardından backend’lerini yeteneğe karşı kaydeder.
- sözleşme kapsamı ekleyin Sahiplik ve kayıt şeklinin zaman içinde açık kalması için 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 tiplerisrc/<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 defteri bağlantısı- özellik/kanal plugin’lerinin 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 dokümantasyonu
Yetenek şablonu
Minimal desen:- core, yetenek sözleşmesine + orkestrasyona sahip olur
- satıcı plugin’leri satıcı uygulamalarına sahip olur
- feature/channel plugin’leri runtime yardımcılarını tüketir
- contract testleri sahipliği açık tutar
İlgili
- Plugin mimarisi — genel yetenek modeli ve şekilleri
- Plugin SDK alt yolları
- Plugin SDK kurulumu
- Plugin oluşturma