Yükleme işlem hattı
Başlangıçta OpenClaw kabaca şunları yapar:- aday plugin köklerini keşfeder
- yerel veya uyumlu paket bildirimlerini ve paket meta verilerini okur
- güvenli olmayan adayları reddeder
- plugin yapılandırmasını normalleştirir (
plugins.enabled,allow,deny,entries,slots,load.paths) - her aday için etkinleştirme durumuna karar verir
- etkin yerel modülleri yükler: derlenmiş paket içi modüller yerel bir yükleyici kullanır; üçüncü taraf yerel kaynak TypeScript, acil durum Jiti yedek mekanizmasını kullanır
- yerel
register(api)kancalarını çağırır ve kayıtları plugin kayıt defterinde toplar - kayıt defterini komutlara/çalışma zamanı yüzeylerine sunar
- çözümlenen giriş noktası plugin kökünün dışına çıkıyorsa
- yolu (veya kök dizini) herkes tarafından yazılabiliyorsa
- paket içi olmayan pluginlerde yol sahipliği mevcut uid (veya root) ile eşleşmiyorsa
chmod onarım denemesi yapılır
(npm/genel kurulumlar paket dizinlerini 0777 konumunda sunabilir);
paket içi kaynaklar için sahiplik denetimleri tamamen atlanır.
Engellenen adaylar, biliniyorsa plugin kimliklerini yayımlanan tanılamada
taşımaya devam eder (başka nedenlerle reddedilen bir dizinin içindeki
bildirimden çözümlenen kimlikler dâhil). Böylece bu kimliğe başvuran yapılandırma,
ilgisiz bir “bilinmeyen plugin” hatası yerine yol güvenliği uyarısına bağlı
engellenmiş bir plugin görür.
Bildirim öncelikli davranış
Bildirim, kontrol düzleminin doğruluk kaynağıdır. OpenClaw bunu şu amaçlarla kullanır:- plugini 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 çalışma zamanını yüklemeden düşük maliyetli 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; çalışma zamanı kaydının, register(...) veya setupEntry yerini almazlar.
Canlı etkinleştirme tüketicileri, daha geniş kayıt defteri oluşturulmadan önce
plugin yüklemesini daraltmak için bildirimdeki komut, kanal ve sağlayıcı ipuçlarını kullanır:
- CLI yüklemesi, istenen birincil komutun sahibi olan pluginlerle sınırlandırılır
- kanal kurulumu/plugin çözümlemesi, istenen kanal kimliğinin sahibi olan pluginlerle sınırlandırılır
- açık sağlayıcı kurulumu/çalışma zamanı çözümlemesi, istenen sağlayıcı kimliğinin sahibi olan pluginlerle sınırlandırılır
- Gateway başlangıç planlaması açık başlangıç içe aktarmaları için
activation.onStartupkullanır; başlangıç meta verisi olmayan pluginler yalnızca daha dar etkinleştirme tetikleyicileri üzerinden yüklenir
activation.* ipuçlarını bildirim sahipliği yedek davranışından ayırır:
Bu neden ayrımı uyumluluk sınırıdır: mevcut plugin meta verileri çalışmaya devam
ederken yeni kod, çalışma zamanı yükleme anlamını değiştirmeden geniş ipuçlarını
veya yedek davranışı algılayabilir.
Geniş
all kapsamını isteyen istek zamanındaki çalışma zamanı ön yüklemeleri,
yine de yapılandırma, başlangıç planlaması, yapılandırılmış kanallar, yuvalar ve
otomatik etkinleştirme kurallarından
(src/plugins/effective-plugin-ids.ts içindeki resolveEffectivePluginIds) açık bir etkin plugin kimliği kümesi türetir.
Bu türetilmiş küme boşsa OpenClaw, kapsamı keşfedilebilir her plugini içerecek
şekilde genişletmek yerine boş tutar.
Kurulum keşfi, aday pluginleri daraltmak için setup.providers ve
setup.cliBackends gibi tanımlayıcıya ait kimlikleri tercih eder; ardından
kurulum zamanı çalışma kancalarına hâlâ ihtiyaç duyan pluginler için
setup-api değerine geri döner. Sağlayıcı kurulum listeleri, sağlayıcı
çalışma zamanını yüklemeden bildirim providerAuthChoices, tanımlayıcıdan türetilen
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; belirtilmeyen
requiresRuntime, uyumluluk için eski kurulum API’si yedek davranışını korur.
Keşfedilen birden fazla plugin aynı normalleştirilmiş kurulum sağlayıcısı veya
CLI arka uç kimliğini sahiplenirse kurulum araması, keşif sırasına güvenmek
yerine belirsiz sahibi reddeder. Kurulum çalışma zamanı yürütüldüğünde kayıt
defteri tanılamaları, eski pluginleri engellemeden setup.providers /
setup.cliBackends ile kurulum API’si tarafından gerçekten kaydedilen sağlayıcılar
veya CLI arka uçları arasındaki sapmayı bildirir.
Plugin önbellek sınırı
OpenClaw, plugin keşif sonuçlarını veya doğrudan bildirim kayıt defteri verilerini duvar saati zaman aralıklarının arkasında önbelleğe almaz. Kurulumlar, bildirim 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 hâle gelmelidir. Bildirim dosyası ayrıştırıcısı, açılan bildirim yolu ile aygıt/inode, boyut ve mtime/ctime değerlerine göre anahtarlanan sınırlı bir dosya imzası önbelleği tutar; bu önbellek yalnızca değişmemiş baytların yeniden ayrıştırılmasını önler ve keşif, kayıt defteri, sahip veya ilke yanıtlarını önbelleğe almamalıdır. Güvenli ve hızlı meta veri yolu, gizli bir önbellek değil açık nesne sahipliğidir. Gateway başlangıç hızlı yolları mevcutPluginMetadataSnapshot, türetilmiş
PluginLookUpTable veya açık bir bildirim kayıt defterini çağrı zinciri boyunca
aktarmalıdır. Yapılandırma doğrulaması, başlangıçta otomatik etkinleştirme, plugin
önyüklemesi ve sağlayıcı seçimi, bu nesneler mevcut yapılandırmayı ve plugin
envanterini temsil ettiği sürece bunları yeniden kullanabilir. İlgili kurulum
yoluna açık bir bildirim kayıt defteri verilmediği sürece kurulum araması,
bildirim meta verilerini yine isteğe bağlı olarak yeniden oluşturur; gizli arama
önbellekleri eklemek yerine bunu soğuk yol yedek davranışı olarak tutun. Girdi
değiştiğinde anlık görüntüyü değiştirmek veya geçmiş kopyaları saklamak yerine
yeniden oluşturup değiştirin. Etkin plugin kayıt defteri üzerindeki görünümler
ve paket içi kanal önyükleme yardımcıları mevcut kayıt defterinden/kökten
yeniden hesaplanmalıdır. Kısa ömürlü eşlemeler, tek bir çağrı içinde yinelenen
işleri kaldırmak veya yeniden girişi engellemek için uygundur; süreç meta verisi
önbelleklerine dönüşmemelidir.
Plugin yüklemesinde kalıcı önbellek katmanı çalışma zamanı yüklemesidir. Kod veya
kurulu yapılar gerçekten yüklendiğinde yükleyici durumunu yeniden kullanabilir;
örneğin:
PluginLoaderCacheStateve uyumlu etkin çalışma zamanı kayıt defterleri- aynı çalışma zamanı yüzeyini tekrar tekrar içe aktarmaktan kaçınmak için kullanılan jiti/modül önbellekleri ve genel yüzey yükleyici önbellekleri
- kurulu plugin yapıları için dosya sistemi önbellekleri
- yol normalleştirme veya yinelenen çözümleme için kısa ömürlü çağrı başına eşlemeler
- keşif sonuçları
- doğrudan bildirim kayıt defterleri
- kurulu plugin dizininden yeniden oluşturulan bildirim kayıt defterleri
- sağlayıcı sahibi araması, model engelleme, sağlayıcı ilkesi veya genel yapı meta verileri
- değişen bir bildirimin, kurulu dizinin veya yükleme yolunun bir sonraki meta veri okumasında görünmesi gereken, bildirimden türetilmiş diğer tüm yanıtlar
Kayıt defteri modeli
Yüklenen pluginler rastgele çekirdek genel değişkenlerini doğrudan değiştirmez. Plugin kayıtlarını (kimlik, kaynak, köken, durum, tanılamalar) ve her yetenek için dizileri izleyen merkezi bir plugin kayıt defterine (src/plugins/registry-types.ts içindeki PluginRegistry) kayıt yaparlar: araçlar, eski
kancalar ve türü belirlenmiş kancalar, kanallar, sağlayıcılar, Gateway RPC
işleyicileri, HTTP rotaları, CLI kaydedicileri, arka plan hizmetleri, plugine ait
komutlar ve düzinelerce başka türü belirlenmiş sağlayıcı ailesi (konuşma,
gömmeler, görüntü/video/müzik üretimi, web getirme/arama, aracı düzenekleri,
oturum eylemleri ve benzerleri).
Ardından çekirdek özellikler plugin modülleriyle doğrudan iletişim kurmak yerine
bu kayıt defterinden okur. Bu, yüklemeyi tek yönlü tutar:
- plugin modülü -> kayıt defteri kaydı
- çekirdek çalışma zamanı -> kayıt defteri tüketimi
Konuşma bağlama geri çağrıları
Bir konuşmayı bağlayan pluginler, onay sonuçlandığında 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ümlenen bağlamarequest: özgün istek özeti, ayırma ipucu, gönderen kimliği ve konuşma meta verileri
Sağlayıcı çalışma zamanı kancaları
Sağlayıcı pluginleri üç katmana sahiptir:- Çalışma zamanı öncesi düşük maliyetli arama için bildirim meta verileri:
setup.providers[].envVars,providerAuthAliases,providerAuthChoicesvechannelConfigs. - Yapılandırma zamanı kancaları:
catalogileapplyConfigDefaults. - Çalışma zamanı kancaları: kimlik doğrulama, model çözümleme, akış sarmalama, düşünme düzeyleri, yeniden oynatma ilkesi ve kullanım uç noktalarını kapsayan 40’tan fazla isteğe bağlı kanca. Bkz. Kanca sırası ve kullanımı.
setup.providers[].envVars
kullanın. Bir sağlayıcı kimliğinin başka bir sağlayıcı kimliğine ait ortam değişkenlerini,
kimlik doğrulama profillerini, yapılandırma destekli kimlik doğrulamayı ve API anahtarı ilk katılım
seçeneğini yeniden kullanması gerektiğinde manifest providerAuthAliases
kullanın. İlk katılım/kimlik doğrulama seçimi CLI yüzeylerinin, sağlayıcı çalışma zamanı
yüklenmeden sağlayıcının seçim kimliğini, grup etiketlerini ve basit tek bayraklı kimlik doğrulama
bağlantısını bilmesi gerektiğinde manifest providerAuthChoices kullanın. İlk katılım etiketleri veya OAuth
istemci kimliği/istemci gizli anahtarı kurulum değişkenleri gibi operatöre yönelik ipuçları için sağlayıcı çalışma zamanı
envVars kullanın.
Ortam tarafından yönlendirilen kanal kurulumunu ve kimlik doğrulamayı bunların sahibi olan
channelConfigs.<id>.schema ve kurulum tanımlayıcıları aracılığıyla açıklayın.
Kanca sırası ve kullanımı
Model/sağlayıcı Pluginleri için OpenClaw, kancaları kabaca bu sırayla çağırır. “Ne zaman kullanılmalı” sütunu hızlı karar kılavuzudur. OpenClaw’ın artık çağırmadığı, yalnızca uyumluluk amaçlıProviderPlugin.capabilities
ve suppressBuiltInModel gibi sağlayıcı alanları kasıtlı olarak
burada listelenmemiştir.
normalizeModelId, normalizeTransport ve normalizeConfig önce
eşleşen sağlayıcı Plugin’ini denetler, ardından biri model kimliğini veya
aktarım/yapılandırmayı gerçekten değiştirene kadar kanca özelliğine sahip diğer
sağlayıcı Plugin’lerine geçer. Bu, çağıranın yeniden yazmanın hangi paketlenmiş
Plugin’e ait olduğunu bilmesini gerektirmeden takma ad/uyumluluk sağlayıcı
katmanlarının çalışmasını sürdürür. Hiçbir sağlayıcı kancası desteklenen bir
Google ailesi yapılandırma girdisini yeniden yazmazsa paketlenmiş Google
yapılandırma normalleştiricisi bu uyumluluk temizliğini yine uygular.
Sağlayıcı tamamen özel bir kablo protokolüne veya özel bir istek yürütücüsüne
ihtiyaç duyuyorsa bu, farklı bir uzantı sınıfıdır. Bu kancalar, OpenClaw’ın
normal çıkarım döngüsünde çalışmaya devam eden sağlayıcı davranışı içindir.
resolveUsageAuth, OpenClaw’ın fetchUsageSnapshot öğesini çağırması mı yoksa
kullanım/durum yüzeyleri için genel kimlik bilgisi çözümlemeye geri dönmesi mi
gerektiğine karar verir. Sağlayıcının bir kullanım kimlik bilgisi olduğunda
{ token, accountId?, subscriptionType?, rateLimitTier? } döndürün (isteğe bağlı plan meta verileri
fetchUsageSnapshot içine aktarılır), sağlayıcıya ait kullanım kimlik doğrulaması
isteği işlediğinde ve genel API anahtarı/OAuth geri dönüşünü engellemesi
gerektiğinde { handled: true } döndürün; sağlayıcı kullanım kimlik doğrulamasını
işlemediğinde ise null veya undefined döndürün.
Kuruluş veya faturalandırma kimlik bilgilerini manifest
providerUsageAuthEnvVars içinde bildirin. Bu, genel keşif ve gizli bilgi temizleme
yüzeylerinin bunları çıkarım kimlik doğrulaması adayları hâline getirmeden
tanımasını sağlar.
Sağlayıcı örneği
Yerleşik örnekler
Paketlenmiş sağlayıcı Plugin’leri, her satıcının katalog, kimlik doğrulama, düşünme, yeniden oynatma ve kullanım gereksinimlerine uyum sağlamak için yukarıdaki kancaları birleştirir. Yetkili kanca kümesiextensions/
altındaki her Plugin ile birlikte bulunur; bu sayfa listeyi yansıtmak yerine
biçimleri gösterir.
Doğrudan geçişli katalog sağlayıcıları
Doğrudan geçişli katalog sağlayıcıları
OpenRouter, Kilocode, Z.AI ve xAI, üst kaynak model kimliklerini OpenClaw’ın
statik kataloğundan önce sunabilmek için
catalog ile birlikte
resolveDynamicModel / prepareDynamicModel kaydeder.OAuth ve kullanım uç noktası sağlayıcıları
OAuth ve kullanım uç noktası sağlayıcıları
GitHub Copilot, Gemini CLI, ChatGPT Codex, MiniMax, Xiaomi ve z.ai, belirteç
değişimini ve
/usage entegrasyonunu sahiplenmek için
prepareRuntimeAuth veya formatApiKey öğesini resolveUsageAuth +
fetchUsageSnapshot ile eşleştirir.Yeniden oynatma ve transkript temizleme aileleri
Yeniden oynatma ve transkript temizleme aileleri
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 aracılığıyla transkript
politikasına katılmasını sağlar.Yalnızca katalog sağlayıcıları
Yalnızca katalog sağlayıcıları
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'e özgü akış yardımcıları
Anthropic'e özgü akış yardımcıları
Beta üst bilgileri,
/fast / serviceTier ve context1m,
genel SDK yerine Anthropic Plugin’inin herkese açık api.ts /
contract-api.ts bağlantı noktasında (wrapAnthropicProviderStream, resolveAnthropicBetas,
resolveAnthropicFastMode, resolveAnthropicServiceTier) bulunur.Çalışma zamanı yardımcıları
Plugin’ler,api.runtime aracılığıyla seçili çekirdek yardımcılarına
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
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 örneklemeli/kodlamalı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.- Çekirdek, sağlayıcı
listVoiceskancalarına çözümlenmiş bir istek son tarihi iletir; sağlayıcıya özgü zaman aşımı ayarları bunu geçersiz kılabilir. - Ses listeleri, sağlayıcıya duyarlı seçiciler için yerel ayar, cinsiyet ve kişilik etiketleri gibi daha zengin meta veriler içerebilir.
- OpenAI ve ElevenLabs şu anda telefonu destekler. Microsoft desteklemez.
api.registerSpeechProvider(...) aracılığıyla konuşma sağlayıcıları
kaydedebilir.
- TTS politikasını, geri dönüşü ve yanıt teslimini çekirdekte tutun.
- Satıcıya ait sentez davranışı için konuşma sağlayıcılarını kullanın.
- Eski Microsoft
edgegirdisi,microsoftsağ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ına sahip 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şletme türlü 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ı örüntüyü 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ı ve sağlayıcıya ait, öncelikle görüntü tabanlı çıkarım için Plugin’e dönük bağlantı noktasıdı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 sahipken 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. - Hiçbir transkripsiyon çıktısı üretilmediğinde (örneğin atlanan/desteklenmeyen girdi)
{ text: undefined }döndürür.
api.runtime.subagent aracılığıyla arka planda alt aracı
çalıştırmaları başlatabilir:
providervemodel, kalıcı oturum değişiklikleri değil, çalıştırma başına isteğe bağlı geçersiz kılmalardır.toolsAlsoAllow, çağıran Plugin tarafından kaydedilmiş tam ve benzersiz sahipli araç adlarını kabul eder. Çekirdek ve belirsiz adlar reddedilir. Normal profile eklemelidir ancak operatör izin listeleri ve retleri yetkili olmaya devam eder.- 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örlerin
plugins.entries.<id>.subagent.allowModelOverride: trueile katılım sağlaması gerekir. - Güvenilir Plugin’leri belirli standart
provider/modelhedefleriyle sınırlamak içinplugins.entries.<id>.subagent.allowedModels, herhangi bir hedefe açıkça izin vermek için ise"*"kullanın. - Güvenilmeyen Plugin alt aracı çalıştırmaları yine çalışır ancak geçersiz kılma istekleri sessizce geri dönmek yerine reddedilir.
- Plugin tarafından oluşturulan alt aracı oturumları, oluşturan Plugin kimliğiyle etiketlenir. Geri dönüş
api.runtime.subagent.deleteSession(...)yalnızca sahip olunan bu oturumları silebilir; rastgele oturum silme işlemi yine de yönetici kapsamlı bir Gateway isteği gerektirir.
api.registerWebSearchProvider(...) aracılığıyla web araması sağlayıcıları
kaydedebilir.
Notlar:
- Sağlayıcı seçimini, kimlik bilgisi çözümlemesini ve paylaşılan istek semantiğini çekirdekte tutun.
- Satıcıya özgü arama aktarımları için web araması sağlayıcılarını kullanın.
api.runtime.webSearch.*, aracı 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örüntü oluşturma sağlayıcı zincirini kullanarak bir görüntü oluşturur.listProviders(...): kullanılabilir görüntü oluşturma sağlayıcılarını ve bunların yeteneklerini listeler.
Gateway HTTP rotaları
Plugin’ler,api.registerHttpRoute(...) ile HTTP uç noktaları sunabilir.
path: Gateway HTTP sunucusu altındaki rota yolu.auth: zorunludur;"gateway"veya"plugin". Normal Gateway kimlik doğrulamasını zorunlu kılmak için"gateway", Plugin tarafından yönetilen kimlik doğrulama/Webhook doğrulaması için"plugin"kullanın.match: isteğe bağlıdır."exact"(varsayılan) veya"prefix".handleUpgrade: aynı rotadaki WebSocket yükseltme istekleri için isteğe bağlı işleyici.replaceExisting: isteğe bağlıdır. 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ılmıştır 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/prefixzincirlerini yalnızca aynı kimlik doğrulama 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. Varsayılan yüzey (gatewayRuntimeScopeSurface: "write-default") kasıtlı olarak ihtiyatlıdır:- paylaşılan gizli anahtar taşıyıcı kimlik doğrulaması (
gateway.auth.mode = "token"/"password") ve güvenilir proxy dışındaki tüm kimlik doğrulama yöntemleri, çağıranx-openclaw-scopesgönderse bile tek biroperator.writekapsamı alır - açık bir
x-openclaw-scopesüstbilgisi olmayantrusted-proxyçağıranları da eski, yalnızcaoperator.writeyüzeyini korur x-openclaw-scopesgönderentrusted-proxyçağıranları bunun yerine bildirilen kapsamları alır- bir rota, kimlik taşıyan kimlik doğrulama modlarında
x-openclaw-scopesdeğerini her zaman dikkate almak içingatewayRuntimeScopeSurface: "trusted-operator"seçeneğini etkinleştirebilir (üstbilgi yoksa tam CLI varsayılan kapsam kümesine geri döner)
- paylaşılan gizli anahtar taşıyıcı kimlik doğrulaması (
auth: "gateway"rotaları tarafından desteklenen korumalı alan içindeki harici Control UI sekmeleri, yalnızca kimliği doğrulanmış başlangıç işlemi tarafından oluşturulan kısa ömürlü, imzalı bir çerez izni kullanır; Plugin kimlik doğrulamalı sekmeler doğrudan iframe yollarını korur. Üst öğe, bağlamadan önce aynı opak korumalı alan içinde rotanın sahip olduğu bir yoklama çalıştırır ve tarayıcı gizlilik politikası çerezi engellediğinde güvenli biçimde başarısız olur. İzin, sahip olan Plugin’e, eşleşen rota köküne ve geçerli kimlik doğrulama nesline bağlıdır; süreç için rastgele oluşturulan çerez adı, aynı ana bilgisayardaki güvenilir Gateway’lerin birbirlerinin üzerine yazmasını önler ancak çerezler TCP bağlantı noktalarını hiçbir zaman birbirinden yalıtmaz. Bu nedenle Gateway ana bilgisayar adı tek bir kimlik bilgisi sınırıdır: diğer bağlantı noktaları dâhil olmak üzere karşılıklı olarak güvenilmeyen hizmetleri bu ana bilgisayar adında birlikte barındırmayın. Rota gönderimi, başka bir Plugin’e ait iç içe geçmiş bir rotada yeniden kullanımı reddeder. Korumalı alan alt öğeleri çerez amaçları bakımından siteler arası olduğundan izin, yalnızcaoperator.readileGETveHEADkabul eder; değişiklikler ve WebSocket yükseltmeleri açıkça Gateway kimlik doğrulamalı yüzeylerde kalır. Çerez kasıtlı olarak CHIPS kullanamaz: güncel tarayıcılar bölüm anahtarına bir siteler arası üst öğe biti eklediğinden, iç içe opak korumalı alan çerçeveleri aynı rotadaki varlıklara erişimi kaybeder. Çerez güvenli bir bağlam ve siteler arası çerezler için tarayıcı izni gerektirir; bu nedenle Gateway kimlik doğrulamalı harici sekmeler düz HTTP kullanan LAN kaynaklarında veya üçüncü taraf çerezlerin tamamen engellendiği durumlarda kullanılamaz; HTTPS/Tailscale Serve veya uyumlu bir çerez politikasıyla tarayıcının güvendiği geri döngüyü kullanın.- İzin, Gateway taşıyıcı belirtecinin açığa çıkmasını ve rotanın/kapsamın yanlışlıkla yeniden kullanılmasını önler; yerel Plugin’ler arasında bir güvenlik sınırı oluşturmaz. Yerel Plugin kodu ve sunduğu UI içeriği, aynı güvenilir işlem içi Plugin sınırının parçası olmaya devam eder.
- Pratik kural: Gateway kimlik doğrulamalı bir Plugin rotasının örtük bir yönetici yüzeyi olduğunu varsaymayın. Rotanız yalnızca yöneticiye özel davranış gerektiriyorsa
trusted-operatorkapsam yüzeyini etkinleştirin, kimlik taşıyan bir kimlik doğrulama modunu zorunlu kılın ve açıkx-openclaw-scopesüstbilgi sözleşmesini belgeleyin. - Rota eşleştirmesi ve kimlik doğrulamasından sonra sıradan işleyiciler Gateway kök iş kabulüne katılır. Hazırlanmakta veya yeniden başlatılmakta olan bir Gateway, işleyiciyi çağırmadan önce
503döndürür. Dar kapsamlı istisna, rota özelindekitrusted-operatoryüzeyini de etkinleştiren ve manifest tarafından yetkilendirilmiş birauth: "gateway"rotasıdır; askıya alma denetimi gönderiminin erişilemez hâle gelmemesi için rota erişilebilir kalırken aynı Plugin’in sıradan kardeş rotaları kabul sınırının arkasında kalır. WebSockethandleUpgradesahipliği aynı atomik kabul sınırını kullanır; işleyici bir soketi kabul ettikten sonra soketin sonraki yaşam döngüsünün sahibi Plugin olur ve bu sınır tarafından izlenmez.
Plugin SDK içe aktarma yolları
Yeni Plugin’ler yazarken tek parçaopenclaw/plugin-sdk kök
barrel’ı yerine dar SDK alt yollarını kullanın. Temel alt yollar:
Kanal Plugin’leri dar bağlantı noktaları ailesinden seçim yapar:
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ırılmak 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 odaklanmış *-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’ı
yerine config-contracts, plugin-config-runtime, runtime-config-snapshot
ve config-mutation tercih edin.
openclaw/plugin-sdk/channel-lifecycle, küçük kanal yardımcı cepheleri,
openclaw/plugin-sdk/config-runtime ve openclaw/plugin-sdk/infra-runtime,
eski Plugin’ler için kullanımdan kaldırılmış uyumluluk katmanlarıdır. Yeni kod bunun yerine
daha dar genel ilkelleri içe aktarmalıdır.index.js— paketle gelen Plugin girişiapi.js— yardımcı/tür barrel’ıruntime-api.js— yalnızca çalışma zamanı barrel’ısetup-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/* ögesini hiçbir zaman içe aktarmayın.
Cephe üzerinden 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, paketle gelen Plugin’ler bunları bugün kullandığı için vardır. Bunlar
otomatik olarak uzun vadeli, değişmez harici sözleşmeler değildir; bunlara güvenirken ilgili SDK
başvuru sayfasını kontrol edin.
İleti aracı şemaları
Plugin’ler; tepkiler, okumalar ve anketler gibi ileti dışı ilkeller için kanala özeldescribeMessageTool(...) şema katkılarının sahibi 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
bkz. İleti Sunumu.
Gönderim yapabilen Plugin’ler, ileti yetenekleri aracılığıyla neleri işleyebileceklerini bildirir:
- anlamsal sunum blokları için
presentation(text,context,divider,chart,table,buttons,select) - sabitlenmiş teslimat istekleri için
delivery-pin
Kanal hedefi çözümleme
Kanal Plugin’leri kanala özel hedef anlamlarının sahibi olmalıdır. Paylaşılan giden ana bilgisayarı genel tutun ve sağlayıcı kuralları için mesajlaşma bağdaştırıcısı yüzeyini kullanın:messaging.inferTargetChatType({ to }), normalleştirilmiş bir hedefin dizin aramasından öncedirect,groupveyachannelolarak değerlendirilip değerlendirilmeyeceğine karar verir.messaging.targetResolver.looksLikeId(raw, normalized), bir girdinin dizin araması yerine doğrudan kimlik benzeri çözümlemeye geçip geçmemesi gerektiğini çekirdeğe bildirir.messaging.targetResolver.reservedLiterals, söz konusu sağlayıcı için kanal/oturum başvurusu olan yalın sözcükleri listeler. Çözümleme, ayrılmış sabit değerleri reddetmeden önce yapılandırılmış dizin girdilerini korur, ardından bir dizin eşleşmesi bulunamazsa güvenli biçimde başarısız olur.messaging.targetResolver.resolveTarget(...), normalleştirmeden veya bir dizin eşleşmesi bulunamadıktan sonra çekirdeğin sağlayıcının sahip olduğu son bir çözümlemeye ihtiyacı olduğunda Plugin geri dönüşüdür.messaging.resolveOutboundSessionRoute(...), bir hedef çözümlendikten sonra sağlayıcıya özel oturum rotası oluşturmanın sahibidir.
- Eşleri/grupları aramadan önce gerçekleşmesi gereken kategori kararları için
inferTargetChatTypekullanın. - “Bunu açık/yerel bir hedef kimliği olarak değerlendir” kontrolleri için
looksLikeIdkullanın. - Geniş dizin araması için değil, sağlayıcıya özel normalleştirme geri dönüşü için
resolveTargetkullanın. - Sohbet kimlikleri, ileti dizisi kimlikleri, JID’ler, tanıtıcılar ve oda
kimlikleri gibi sağlayıcıya özgü kimlikleri genel SDK alanlarında değil,
targetdeğerlerinde veya sağlayıcıya özel parametrelerde 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 listesi tarafından yönlendirilen 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 gerçekleştirir:
- sorgu filtreleme
- sınır uygulama
- yinelenenleri kaldırma/normalleştirme yardımcıları
ChannelDirectoryEntry[]oluşturma
Sağlayıcı katalogları
Sağlayıcı Plugin’leri,registerProvider({ catalog: { run(...) { ... } } }) ile çıkarım için
model katalogları tanımlayabilir.
catalog.run(...), OpenClaw’ın models.providers
içine yazdığı biçimin aynısını döndürür:
{ provider }tek bir sağlayıcı girdisi için{ providers }birden çok sağlayıcı girdisi için
catalog kullanın.
catalog.order, bir Plugin kataloğunun OpenClaw’ın yerleşik örtük
sağlayıcılarına göre ne zaman birleştirileceğini denetler:
simple: düz API anahtarlı veya ortam tarafından yönlendirilen sağlayıcılarprofile: kimlik doğrulama profilleri mevcut olduğunda görünen sağlayıcılarpaired: birbiriyle ilişkili birden çok sağlayıcı girdisi sentezleyen sağlayıcılarlate: diğer örtük sağlayıcılardan sonraki son geçiş
api.registerModelCatalogProvider({ provider, kinds, staticCatalog, liveCatalog }) aracılığıyla salt okunur model
satırları yayımlayabilir. Bu, liste/yardım/seçici yüzeyleri için ileriye dönük yoldur ve
text, voice, image_generation, video_generation ve music_generation
satırlarını destekler. Sağlayıcı Plugin’leri canlı uç nokta çağrılarının, token değişiminin ve
satıcı yanıtı eşlemesinin sahibi olmaya devam eder; ortak satır şeklinin, kaynak etiketlerinin ve
medya aracı yardım biçimlendirmesinin sahibi çekirdektir. Medya üretimi sağlayıcı kayıtları,
defaultModel, models ve capabilities üzerinden statik katalog
satırlarını otomatik olarak sentezler.
Uyumluluk:
discoveryeski bir diğer ad olarak çalışmaya devam eder ancak kullanımdan kaldırma uyarısı verir- hem
cataloghem dediscoverykaydedilirse OpenClaw,catalogkullanır ve bir uyarı verir 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 kaydediyorsaresolveAccount(...) ile birlikte
plugin.config.inspectAccount(cfg, accountId) uygulamayı tercih edin.
Nedeni:
resolveAccount(...)çalışma zamanı yoludur. Kimlik bilgilerinin tamamen oluşturulduğunu varsayabilir ve gerekli gizli bilgiler eksik olduğunda hemen başarısız olabilir.openclaw status,openclaw status --all,openclaw channels status,openclaw channels resolvegibi salt okunur komut yollarının ve doctor/yapılandırma onarım akışlarının yalnızca yapılandırmayı açıklamak için çalışma zamanı kimlik bilgilerini oluşturması gerekmemelidir.
inspectAccount(...) davranışı:
- Yalnızca açıklayıcı hesap durumunu döndürün.
enabledveconfigureddeğerlerini koruyun.- Uygun olduğunda aşağıdakiler gibi kimlik bilgisi kaynağı/durum alanlarını ekleyin:
tokenSource,tokenStatusbotTokenSource,botTokenStatusappTokenSource,appTokenStatussigningSecretSource,signingSecretStatus
- Yalnızca salt okunur kullanılabilirliği bildirmek için ham token
değerlerini döndürmeniz gerekmez. Durum tarzı komutlar için
tokenStatus: "available"(ve eşleşen kaynak alanını) döndürmek yeterlidir. - Bir kimlik bilgisi SecretRef aracılığıyla yapılandırılmış ancak geçerli
komut yolunda kullanılamıyorsa
configured_unavailablekullanın.
Paket paketleri
Bir Plugin dizini,openclaw.extensions içeren bir package.json barındırabilir:
<manifestOrPackageName>/<fileBase> olur (mevcutsa manifest kimliği
önceliklidir; aksi takdirde kapsamlandırılmamış package.json adı kullanılır).
Plugin’iniz npm bağımlılıklarını içe aktarıyorsa node_modules
kullanılabilir olacak şekilde bunları bu dizine yükleyin (npm install / pnpm install).
Güvenlik koruması: Her openclaw.extensions girdisi, sembolik bağlantı
çözümlemesinden sonra Plugin dizininin içinde kalmalıdır. Paket dizininin dışına
çıkan girdiler reddedilir.
Güvenlik notu: openclaw plugins install, devralınan genel npm yükleme ayarlarını
yok sayarak Plugin bağımlılıklarını proje yerelinde bir npm install --omit=dev --ignore-scripts ile
yükler (yaşam döngüsü betikleri yoktur, çalışma zamanında geliştirme bağımlılıkları yoktur).
Plugin bağımlılık ağaçlarını “saf JS/TS” olarak tutun ve
postinstall derlemeleri gerektiren paketlerden kaçının.
İsteğe bağlı: openclaw.setupEntry, yalnızca kurulum için kullanılan hafif bir modülü 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 ancak hâlâ yapılandırılmamış olduğunda tam Plugin girdisi yerine
setupEntry yükler. Bu, ana Plugin girdiniz araçları, kancaları veya yalnızca çalışma
zamanına ait başka kodları da bağladığında başlangıcı ve kurulumu daha hafif tutar.
İsteğe bağlı: openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen, kanal zaten yapılandırılmış olsa bile bir kanal
Plugin’ini Gateway’in dinleme öncesi başlangıç aşamasında aynı setupEntry
yoluna dahil edebilir.
Bunu yalnızca setupEntry, Gateway dinlemeye başlamadan önce mevcut olması gereken
başlangıç yüzeyini tamamen kapsıyorsa kullanın. Pratikte bu, kurulum girdisinin başlangıcın
bağımlı olduğu kanala ait 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ı zaman aralığında mevcut olması gereken tüm Gateway yöntemleri, araçları veya hizmetleri
singleAccountKeysToMovenamedAccountPromotionKeysresolveSingleAccountPromotionTarget(...)
channels.<id>.accounts.* biçimine yükseltmesi gerektiğinde bu yüzeyi kullanır.
Matrix, mevcut paketlenmiş örnektir: Adlandırılmış hesaplar zaten mevcut olduğunda yalnızca
kimlik doğrulama/önyükleme anahtarlarını adlandırılmış ve yükseltilmiş bir hesaba taşır;
ayrıca her zaman accounts.default oluşturmak yerine yapılandırılmış, standart dışı 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 süresi hafif kalır; yükseltme yüzeyi, modül içe aktarılırken paketlenmiş kanal
başlangıcına yeniden girmek yerine yalnızca ilk kullanımda yüklenir.
Bu başlangıç yüzeyleri Gateway RPC yöntemlerini içerdiğinde bunları Plugin’e özgü bir
önek altında tutun. Çekirdek yönetim ad alanları (config.*,
exec.approvals.*, wizard.*, update.*) ayrılmış olarak kalır ve bir Plugin
daha dar bir kapsam istese bile her zaman operator.admin olarak çözümlenir.
Örnek:
Kanal kataloğu meta verileri
Kanal Plugin’leriopenclaw.channel aracılığıyla kurulum/keşif meta verilerini,
openclaw.install aracılığıyla da yükleme ipuçlarını duyurabilir. Bu, çekirdek
kataloğunu veriden bağımsız tutar.
Örnek:
openclaw.channel alanları:
detailLabel: daha zengin katalog/durum yüzeyleri için ikincil etiketdocsLabel: doküman bağlantısının bağlantı metnini geçersiz kılmapreferOver: bu katalog girdisinin geride bırakması gereken daha düşük öncelikli Plugin/kanal kimlikleriselectionDocsPrefix,selectionDocsOmitLabel,selectionExtras: seçim yüzeyi metin denetimlerimarkdownCapable: giden biçimlendirme kararları için kanalı Markdown özellikli olarak işaretlerexposure.configured:falseolarak ayarlandığında kanalı yapılandırılmış kanal listeleme yüzeylerinden gizlerexposure.setup:falseolarak ayarlandığında kanalı etkileşimli kurulum/yapılandırma seçicilerinden gizlerexposure.docs: doküman gezinme yüzeyleri için kanalı dahili/özel olarak işaretlerquickstartAllowFrom: kanalı standart hızlı başlangıçallowFromakışına dahil ederforceAccountBinding: yalnızca bir hesap mevcut olsa bile açık hesap bağlaması gerektirirpreferSessionLookupForAnnounceTarget: duyuru hedeflerini çözümlerken oturum aramasını tercih eder
~/.openclaw/mpm/plugins.json~/.openclaw/mpm/catalog.json~/.openclaw/plugins/catalog.json
OPENCLAW_PLUGIN_CATALOG_PATHS (veya OPENCLAW_MPM_CATALOG_PATHS) öğesini
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ı ayrıca "entries" anahtarının
eski diğer adları olarak "packages" veya "plugins" kabul eder.
Oluşturulan kanal kataloğu girdileri ve sağlayıcı yükleme kataloğu girdileri,
ham openclaw.install bloğunun yanında normalleştirilmiş yükleme kaynağı bilgilerini sunar.
Normalleştirilmiş bilgiler npm belirtiminin kesin bir sürüm mü yoksa değişken bir seçici mi
olduğunu, beklenen bütünlük meta verilerinin bulunup bulunmadığını ve yerel bir kaynak yolunun da
kullanılabilir olup olmadığını belirtir. Katalog/paket kimliği biliniyorsa normalleştirilmiş bilgiler,
ayrıştırılan npm paket adı bu kimlikten saparsa uyarır. Ayrıca defaultChoice geçersizse veya
kullanılamayan bir kaynağı gösteriyorsa ve geçerli bir npm kaynağı olmadan npm bütünlük meta verileri
mevcutsa uyarır. Tüketiciler, elle oluşturulmuş girdilerin ve katalog uyumluluk katmanlarının bunu
sentezlemesi gerekmemesi için installSource alanını eklenebilir, isteğe bağlı bir alan olarak
ele almalıdır.
Bu, ilk kullanım ve tanılama süreçlerinin Plugin çalışma zamanını içe aktarmadan
kaynak düzlemi durumunu açıklamasını sağlar.
Resmî harici npm girdileri, kesin bir npmSpec ile birlikte
expectedIntegrity kullanmayı tercih etmelidir. Yalın paket adları ve dist-tag’ler uyumluluk
için çalışmaya devam eder ancak kataloğun mevcut Plugin’leri bozmadan sabitlenmiş, bütünlüğü
denetlenmiş yüklemelere geçebilmesi için kaynak düzlemi uyarıları gösterir.
İlk kullanım yerel bir katalog yolundan yükleme yaptığında source: "path" ve mümkün olduğunda
çalışma alanına göreli bir sourcePath içeren yönetilen bir Plugin Plugin dizini girdisi
kaydeder. Mutlak operasyonel yükleme yolu plugins.load.paths içinde kalır; yükleme kaydı yerel
iş istasyonu yollarını uzun ömürlü yapılandırmaya çoğaltmaz. Bu, yerel geliştirme yüklemelerini
ikinci bir ham dosya sistemi yolu ifşa yüzeyi eklemeden kaynak düzlemi tanılamasında görünür tutar.
Kalıcı installed_plugin_index SQLite tablosu, yükleme için tek doğruluk kaynağıdır ve Plugin çalışma
zamanı modülleri yüklenmeden yenilenebilir. Bir Plugin manifesti eksik veya geçersiz olsa bile
installRecords eşlemesi kalıcıdır; plugins yükü ise yeniden oluşturulabilir bir
manifest görünümüdür.
Bağlam motoru Plugin’leri
Bağlam motoru Plugin’leri; alım, birleştirme ve Compaction için oturum bağlamı orkestrasyonunun sahibidir. Bunları Plugin’inizdenapi.registerContextEngine(id, factory) ile
kaydedin, ardından etkin motoru plugins.slots.contextEngine ile seçin.
Plugin’inizin yalnızca bellek araması veya kancalar eklemek yerine varsayılan bağlam
işlem hattını değiştirmesi ya da genişletmesi gerektiğinde bunu kullanın.
ctx, oluşturma zamanında başlatma için isteğe bağlı config, agentDir ve workspaceDir
değerlerini kullanıma sunar.
Ana makine, eski olmayan bir motorun assemble() çağrısını yapmadan önce kayıtlı eşzamansız bellek istemi hazırlığını tamamlar. buildMemorySystemPromptAddition(...)
eşzamanlı kalır ve assemble() etkinken bu değişmez çalıştırma anlık görüntüsünü okur.
Sağlanan araç ve alıntı bağlamını değiştirmeden aktarın; böylece anlık görüntü
çalıştırma sınırlarını aşamaz.
Etkin test düzeneğinin kalıcı bir arka uç iş parçacığı olduğunda
assemble(), contextProjection döndürebilir. Eski tur başına yansıtma için bunu atlayın.
Birleştirilmiş bağlamın bir arka uç iş parçacığına bir kez eklenmesi ve dönem
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 dönemi değiştirin.
Ana makineler, yeni arka uç iş parçacıklarının ham, gizli bilgi içeren
yükleri kopyalamadan araç sürekliliğini koruması için iş parçacığı önyükleme yansıtmasında araç çağrısı meta verilerini, girdi
şeklini ve sansürlenmiş araç sonuçlarını koruyabilir.
Motorunuz Compaction algoritmasının sahibi değilse, compact()
uygulanmış durumda tutun ve açıkça devredin:
Yeni bir yetenek ekleme
Bir Plugin, mevcut API’ye uymayan bir davranışa ihtiyaç duyduğunda özel bir iç erişimle Plugin sistemini atlamayın. 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: ilke, geri dönüş, yapılandırma birleştirme, yaşam döngüsü, kanal odaklı anlamlar ve çalışma zamanı yardımcısının şekli.
- Türü belirlenmiş Plugin kayıt/çalışma zamanı yüzeylerini ekleyin.
En küçük kullanışlı türü belirlenmiş yetenek yüzeyiyle
OpenClawPluginApive/veyaapi.runtimeöğesini genişletin. - Çekirdek ile kanal/özellik tüketicilerini bağlayın. Kanallar ve özellik Pluginleri, bir sağlayıcı uygulamasını doğrudan içe aktarmak yerine yeni yeteneği çekirdek üzerinden tüketmelidir.
- Sağlayıcı uygulamalarını kaydedin. Ardından sağlayıcı Pluginleri kendi arka uçlarını yeteneğe 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 aşağıdaki yüzeylere birlikte dokunmalıdır:src/<capability>/types.tsiçindeki çekirdek sözleşme türlerisrc/<capability>/runtime.tsiçindeki çekirdek yürütücüsü/ç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ıları- özellik/kanal Pluginlerinin bunu tüketmesi gerektiğinde
src/plugins/runtime/*içindeki Plugin çalışma zamanı sunumu 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 kalıp:src/plugins/contracts/registry.ts, providerContractPluginIds gibi sahiplik
aramalarını kullanıma sunar; testler bir Pluginin
contracts.videoGenerationProviders listesinin gerçekten kaydettiği öğelerle eşleştiğini doğrular):
- çekirdek, yetenek sözleşmesinin ve orkestrasyonun sahibidir
- sağlayıcı Pluginleri, sağlayıcı uygulamalarının sahibidir
- özellik/kanal Pluginleri çalışma zamanı yardımcılarını tüketir
- sözleşme testleri sahipliği açık tutar
İlgili
- Plugin mimarisi — genel yetenek modeli ve şekilleri
- Plugin SDK alt yolları
- Plugin SDK kurulumu
- Plugin oluşturma