Daha önce herhangi bir OpenClaw Plugin’i oluşturmadıysanız, temel paket
yapısı ve manifest kurulumu için önce
Başlarken bölümünü okuyun.
İzlenecek yol
Package and manifest
Adım 1: Paket ve manifest
setup.providers[].envVars bildirir. Bir sağlayıcı
varyantının başka bir sağlayıcı kimliğinin kimlik doğrulamasını yeniden
kullanması gerektiğinde providerAuthAliases ekleyin. modelSupport
isteğe bağlıdır ve çalışma zamanı hook’ları mevcut olmadan önce OpenClaw’ın
sağlayıcı Plugin’inizi acme-large gibi kısaltılmış model kimliklerinden
otomatik yüklemesini sağlar. Sağlayıcıyı ClawHub’da yayımlarsanız,
package.json içinde bu openclaw.compat ve openclaw.build alanları
zorunludur.Register the provider
En küçük metin sağlayıcısının bir Sağlayıcı API’si daha zengin metadata döndürüyorsa ve Plugin’in satırları
OpenClaw model tanımlarına kendisinin yansıtması gerekiyorsa
id, label, auth ve catalog
değerine ihtiyacı vardır. catalog, sağlayıcıya ait çalışma
zamanı/yapılandırma hook’udur; canlı tedarikçi API’lerini çağırabilir ve
models.providers girdileri döndürür.index.ts
registerModelCatalogProvider, liste/yardım/seçici arayüzü için daha yeni
kontrol düzlemi katalog yüzeyidir. Bunu metin, görüntü oluşturma,
video oluşturma ve müzik oluşturma satırları için kullanın. Tedarikçi uç
nokta çağrılarını ve yanıt eşlemesini Plugin içinde tutun; ortak satır
biçiminin, kaynak etiketlerinin ve yardım işleme mantığının sahibi
OpenClaw’dır.Bu, çalışan bir sağlayıcıdır. Kullanıcılar artık
openclaw onboard --acme-ai-api-key <key> çalıştırabilir ve model olarak
acme-ai/acme-large seçebilir.Canlı model keşfi
Sağlayıcınız/models tarzı bir API sunuyorsa, sağlayıcıya özgü uç noktayı
ve satır izdüşümünü Plugin’inizde tutun ve ortak fetch yaşam döngüsü için
openclaw/plugin-sdk/provider-catalog-live-runtime kullanın. Yardımcı,
sağlayıcı ilkesini OpenClaw çekirdeğine koymadan size korumalı HTTP
fetch’leri, sağlayıcı kimlik doğrulama başlıkları, yapılandırılmış HTTP
hataları, TTL önbellekleme ve statik geri dönüş davranışı sağlar.Canlı API yalnızca sağlayıcıya ait hangi statik katalog satırlarının o anda
kullanılabilir olduğunu söylüyorsa buildLiveModelProviderConfig kullanın:index.ts
getCachedLiveProviderModelRows kullanın:index.ts
run, kimlik doğrulama kapılı kalmalı ve kullanılabilir kimlik bilgisi
olmadığında null döndürmelidir. Kurulum, dokümanlar, testler ve seçici
yüzeylerinin canlı ağ erişimine bağlı olmaması için çevrimdışı bir
staticRun veya statik geri dönüş bulundurun. Model listesi güncelliğine
uygun bir TTL kullanın, istek zamanında dosya sistemi polling’inden kaçının
ve sağlayıcıya özgü readRows / readModelId değerlerini yalnızca upstream
yanıtı OpenAI uyumlu { data: [{ id, object }] } biçiminde değilse geçirin.Upstream sağlayıcı OpenClaw’dan farklı kontrol token’ları kullanıyorsa, akış
yolunu değiştirmek yerine küçük bir çift yönlü metin dönüştürmesi ekleyin:input, taşıma öncesinde son sistem prompt’unu ve metin mesajı içeriğini
yeniden yazar. output, OpenClaw kendi kontrol işaretlerini ayrıştırmadan
veya kanala teslim etmeden önce asistan metin deltalarını ve son metni
yeniden yazar.Yalnızca API anahtarı kimlik doğrulaması ve tek katalog destekli çalışma
zamanı ile bir metin sağlayıcısı kaydeden paketli sağlayıcılar için daha dar
defineSingleProviderPluginEntry(...) yardımcısını tercih edin:buildProvider, OpenClaw gerçek sağlayıcı kimlik doğrulamasını çözebildiğinde kullanılan canlı katalog yoludur. Sağlayıcıya özgü keşif gerçekleştirebilir. buildStaticProvider yalnızca kimlik doğrulama yapılandırılmadan önce gösterilmesi güvenli olan çevrimdışı satırlar için kullanılmalıdır; kimlik bilgisi gerektirmemeli veya ağ isteği yapmamalıdır. OpenClaw’ın models list --all gösterimi şu anda statik katalogları yalnızca paketlenmiş sağlayıcı Plugin’leri için, boş yapılandırma, boş ortam ve agent/workspace yolları olmadan çalıştırır.Kimlik doğrulama akışınızın onboarding sırasında models.providers.*, alias’lar ve agent varsayılan modelini de yamaması gerekiyorsa openclaw/plugin-sdk/provider-onboard içindeki preset yardımcılarını kullanın. En dar kapsamlı yardımcılar createDefaultModelPresetAppliers(...), createDefaultModelsPresetAppliers(...) ve createModelCatalogPresetAppliers(...) şeklindedir.Bir sağlayıcının yerel uç noktası normal openai-completions taşımasında akışlı kullanım bloklarını destekliyorsa sağlayıcı kimliği kontrollerini sabit kodlamak yerine openclaw/plugin-sdk/provider-catalog-shared içindeki paylaşılan katalog yardımcılarını tercih edin. supportsNativeStreamingUsageCompat(...) ve applyProviderNativeStreamingUsageCompat(...) desteği uç nokta yetenek haritasından algılar; böylece yerel Moonshot/DashScope tarzı uç noktalar, bir Plugin özel sağlayıcı kimliği kullanıyor olsa bile yine de opt in yapar.Yukarıdaki canlı keşif örnekleri /models tarzı sağlayıcı API’lerini kapsar. Bu keşfi kullanılabilir kimlik doğrulamayla sınırlandırarak catalog.run içinde tutun ve çevrimdışı katalog üretimi için staticRun yolunu ağsız bırakın.Dinamik model çözümlemesi ekle
Sağlayıcınız rastgele model kimliklerini kabul ediyorsa (proxy veya router gibi), Çözümleme bir ağ çağrısı gerektiriyorsa eşzamansız ısınma için
resolveDynamicModel ekleyin:prepareDynamicModel kullanın; tamamlandıktan sonra resolveDynamicModel yeniden çalışır.Çalışma zamanı hook'ları ekle (gerektiğinde)
Çoğu sağlayıcı yalnızca Bugün kullanılabilen replay aileleri:
Bugün kullanılabilen stream aileleri:
catalog + resolveDynamicModel gerektirir. Sağlayıcınız ihtiyaç duydukça hook’ları kademeli olarak ekleyin.Paylaşılan yardımcı oluşturucular artık en yaygın replay/tool-compat ailelerini kapsıyor; bu nedenle Plugin’lerin genellikle her hook’u tek tek elle bağlaması gerekmez:| Aile | Neyi bağlar | Paketlenmiş örnekler |
|---|---|---|
openai-compatible | OpenAI uyumlu taşımalar için paylaşılan OpenAI tarzı replay ilkesi; tool-call-id temizleme, assistant-first sıralama düzeltmeleri ve taşımanın ihtiyaç duyduğu yerlerde genel Gemini-turn doğrulaması dahil | moonshot, ollama, xai, zai |
anthropic-by-model | modelId tarafından seçilen Claude duyarlı replay ilkesi; böylece Anthropic-message taşımaları yalnızca çözümlenen model gerçekten bir Claude kimliği olduğunda Claude’a özgü thinking-block temizliği alır | amazon-bedrock, anthropic-vertex |
google-gemini | Yerel Gemini replay ilkesi ve bootstrap replay temizliği. Paylaşılan aile, metin çıktılı Gemini CLI’yi etiketli reasoning üzerinde tutar; doğrudan google sağlayıcısı Gemini API thinking’i yerel thought parçaları olarak geldiği için resolveReasoningOutputMode değerini native olarak override eder. | google, google-gemini-cli |
passthrough-gemini | OpenAI uyumlu proxy taşımaları üzerinden çalışan Gemini modelleri için Gemini thought-signature temizliği; yerel Gemini replay doğrulamasını veya bootstrap yeniden yazımlarını etkinleştirmez | openrouter, kilocode, opencode, opencode-go |
hybrid-anthropic-openai | Tek bir Plugin içinde Anthropic-message ve OpenAI uyumlu model yüzeylerini karıştıran sağlayıcılar için hibrit ilke; isteğe bağlı yalnızca Claude thinking-block düşürme Anthropic tarafıyla sınırlı kalır | minimax |
| Aile | Neyi bağlar | Paketlenmiş örnekler |
|---|---|---|
google-thinking | Paylaşılan stream yolunda Gemini thinking payload normalizasyonu | google, google-gemini-cli |
kilocode-thinking | Paylaşılan proxy stream yolunda Kilo reasoning sarmalayıcısı; kilo/auto ve desteklenmeyen proxy reasoning kimlikleri enjekte edilen thinking’i atlar | kilocode |
moonshot-thinking | Yapılandırma + /think seviyesinden Moonshot ikili yerel-thinking payload eşlemesi | moonshot |
minimax-fast-mode | Paylaşılan stream yolunda MiniMax fast-mode model yeniden yazımı | minimax, minimax-portal |
openai-responses-defaults | Paylaşılan yerel OpenAI/Codex Responses sarmalayıcıları: atıf üstbilgileri, /fast/serviceTier, metin ayrıntı düzeyi, yerel Codex web araması, reasoning-compat payload biçimlendirme ve Responses bağlam yönetimi | openai |
openrouter-thinking | Proxy rotaları için OpenRouter reasoning sarmalayıcısı; desteklenmeyen-model/auto atlamaları merkezi olarak ele alınır | openrouter |
tool-stream-default-on | Açıkça devre dışı bırakılmadıkça tool streaming isteyen Z.AI gibi sağlayıcılar için varsayılan olarak açık tool_stream sarmalayıcısı | zai |
Aile oluşturucuları destekleyen SDK sınırları
Aile oluşturucuları destekleyen SDK sınırları
Her aile oluşturucu, aynı paketten dışa aktarılan daha düşük düzeyli genel yardımcıların bileşiminden oluşur; bir sağlayıcının ortak kalıbın dışına çıkması gerektiğinde bunları kullanabilirsiniz:
openclaw/plugin-sdk/provider-model-shared-ProviderReplayFamily,buildProviderReplayFamilyHooks(...)ve ham replay oluşturucuları (buildOpenAICompatibleReplayPolicy,buildAnthropicReplayPolicyForModel,buildGoogleGeminiReplayPolicy,buildHybridAnthropicOrOpenAIReplayPolicy). Ayrıca Gemini replay yardımcılarını (sanitizeGoogleGeminiReplayHistory,resolveTaggedReasoningOutputMode) ve uç nokta/model yardımcılarını (resolveProviderEndpoint,normalizeProviderId,normalizeGooglePreviewModelId) dışa aktarır.openclaw/plugin-sdk/provider-stream-ProviderStreamFamily,buildProviderStreamFamilyHooks(...),composeProviderStreamWrappers(...), ayrıca paylaşılan OpenAI/Codex sarmalayıcıları (createOpenAIAttributionHeadersWrapper,createOpenAIFastModeWrapper,createOpenAIServiceTierWrapper,createOpenAIResponsesContextManagementWrapper,createCodexNativeWebSearchWrapper), DeepSeek V4 OpenAI uyumlu sarmalayıcısı (createDeepSeekV4OpenAICompatibleThinkingWrapper), Anthropic Messages thinking prefill temizliği (createAnthropicThinkingPrefillPayloadWrapper), düz metin tool-call compat (createPlainTextToolCallCompatWrapper) ve paylaşılan proxy/sağlayıcı sarmalayıcıları (createOpenRouterWrapper,createToolStreamWrapper,createMinimaxFastModeWrapper).openclaw/plugin-sdk/provider-stream-shared- sıcak sağlayıcı yolları için hafif payload ve olay sarmalayıcıları;createOpenAICompatibleCompletionsThinkingOffWrapper,createPayloadPatchStreamWrapper,createPlainTextToolCallCompatWrapper,normalizeOpenAICompatibleReasoningPayload(...)vesetQwenChatTemplateThinking(...)dahil.openclaw/plugin-sdk/provider-tools-ProviderToolCompatFamily,buildProviderToolCompatFamilyHooks("deepseek" | "gemini" | "openai")ve temel sağlayıcı şema yardımcıları.
native reasoning çıktısı kullanmalıdır; böylece OpenClaw yerel thought parçalarını <think> / <final> prompt yönergeleri eklemeden tüketir. Son JSON/metin yanıtını ayrıştıran yalnızca metin Gemini CLI tarzı backend’ler paylaşılan google-gemini etiketli sözleşmesini koruyabilir.Bazı stream yardımcıları bilerek sağlayıcıya yerel kalır. @openclaw/anthropic-provider, wrapAnthropicProviderStream, resolveAnthropicBetas, resolveAnthropicFastMode, resolveAnthropicServiceTier ve daha düşük düzeyli Anthropic sarmalayıcı oluşturucularını kendi genel api.ts / contract-api.ts sınırında tutar; çünkü bunlar Claude OAuth beta işleme ve context1m kapılamasını kodlar. xAI Plugin’i de yerel xAI Responses biçimlendirmesini kendi wrapStreamFn içinde tutar (/fast alias’ları, varsayılan tool_stream, desteklenmeyen strict-tool temizliği, xAI’ye özgü reasoning-payload kaldırma).Aynı paket kökü kalıbı @openclaw/openai-provider (sağlayıcı oluşturucular, varsayılan model yardımcıları, realtime sağlayıcı oluşturucuları) ve @openclaw/openrouter-provider (sağlayıcı oluşturucu ve onboarding/yapılandırma yardımcıları) için de temel oluşturur.- Token değişimi
- Özel üstbilgiler
- Yerel taşıma kimliği
- Kullanım ve faturalandırma
Her çıkarım çağrısından önce token değişimine ihtiyaç duyan sağlayıcılar için:
Kullanılabilir tüm sağlayıcı hook'ları
Kullanılabilir tüm sağlayıcı hook'ları
OpenClaw hook’ları bu sırayla çağırır. Çoğu sağlayıcı yalnızca 2-3 tanesini kullanır:
OpenClaw’ın artık çağırmadığı,
Çalışma zamanı geri dönüş notları:
ProviderPlugin.capabilities ve suppressBuiltInModel gibi yalnızca uyumluluk amaçlı sağlayıcı alanları burada listelenmez.| # | Hook | Ne zaman kullanılır |
|---|---|---|
| 1 | catalog | Model kataloğu veya temel URL varsayılanları |
| 2 | applyConfigDefaults | Yapılandırma somutlaştırması sırasında sağlayıcıya ait genel varsayılanlar |
| 3 | normalizeModelId | Aramadan önce eski/önizleme model kimliği takma ad temizliği |
| 4 | normalizeTransport | Genel model birleştirmesinden önce sağlayıcı ailesi api / baseUrl temizliği |
| 5 | normalizeConfig | models.providers.<id> yapılandırmasını normalleştirme |
| 6 | applyNativeStreamingUsageCompat | Yapılandırma sağlayıcıları için yerel akış kullanım uyumluluğu yeniden yazımları |
| 7 | resolveConfigApiKey | Sağlayıcıya ait env-marker kimlik doğrulaması çözümleme |
| 8 | resolveSyntheticAuth | Yerel/kendi barındırılan veya yapılandırma destekli sentetik kimlik doğrulama |
| 9 | shouldDeferSyntheticProfileAuth | Env/yapılandırma kimlik doğrulamasının arkasındaki sentetik saklanan profil yer tutucularını düşürme |
| 10 | resolveDynamicModel | Rastgele upstream model kimliklerini kabul etme |
| 11 | prepareDynamicModel | Çözümlemeden önce zaman uyumsuz metadata getirme |
| 12 | normalizeResolvedModel | Çalıştırıcıdan önce taşıma yeniden yazımları |
| 13 | normalizeToolSchemas | Kayıttan önce sağlayıcıya ait araç şeması temizliği |
| 14 | inspectToolSchemas | Sağlayıcıya ait araç şeması tanılamaları |
| 15 | resolveReasoningOutputMode | Etiketli ve yerel reasoning çıktısı sözleşmesi |
| 16 | prepareExtraParams | Varsayılan istek parametreleri |
| 17 | createStreamFn | Tamamen özel StreamFn taşıması |
| 19 | wrapStreamFn | Normal akış yolunda özel header/body sarmalayıcıları |
| 20 | resolveTransportTurnState | Her turn için yerel header/metadata |
| 21 | resolveWebSocketSessionPolicy | Yerel WS oturum header’ları/bekleme süresi |
| 22 | formatApiKey | Özel çalışma zamanı belirteç biçimi |
| 23 | refreshOAuth | Özel OAuth yenileme |
| 24 | buildAuthDoctorHint | Kimlik doğrulama onarım rehberliği |
| 25 | matchesContextOverflowError | Sağlayıcıya ait overflow algılama |
| 26 | classifyFailoverReason | Sağlayıcıya ait hız sınırı/aşırı yük sınıflandırması |
| 27 | isCacheTtlEligible | Prompt önbelleği TTL geçidi |
| 28 | buildMissingAuthMessage | Özel eksik kimlik doğrulama ipucu |
| 29 | augmentModelCatalog | Sentetik ileriye dönük uyumluluk satırları |
| 30 | resolveThinkingProfile | Modele özgü /think seçenek kümesi |
| 31 | isBinaryThinking | İkili düşünme açık/kapalı uyumluluğu |
| 32 | supportsXHighThinking | xhigh reasoning desteği uyumluluğu |
| 33 | resolveDefaultThinkingLevel | Varsayılan /think ilkesi uyumluluğu |
| 34 | isModernModelRef | Canlı/smoke model eşleştirme |
| 35 | prepareRuntimeAuth | Çıkarımdan önce belirteç değişimi |
| 36 | resolveUsageAuth | Özel kullanım kimlik bilgisi ayrıştırma |
| 37 | fetchUsageSnapshot | Özel kullanım endpoint’i |
| 38 | createEmbeddingProvider | Bellek/arama için sağlayıcıya ait embedding adaptörü |
| 39 | buildReplayPolicy | Özel transcript yeniden oynatma/Compaction ilkesi |
| 40 | sanitizeReplayHistory | Genel temizlikten sonra sağlayıcıya özgü yeniden oynatma yeniden yazımları |
| 41 | validateReplayTurns | Gömülü çalıştırıcıdan önce katı yeniden oynatma turn doğrulaması |
| 42 | onModelSelected | Seçim sonrası callback (örn. telemetri) |
normalizeConfigönce eşleşen sağlayıcıyı, ardından biri yapılandırmayı gerçekten değiştirene kadar hook destekli diğer sağlayıcı Plugin’lerini kontrol eder. Hiçbir sağlayıcı hook’u desteklenen bir Google ailesi yapılandırma girdisini yeniden yazmazsa, paketlenmiş Google yapılandırma normalleştiricisi yine de uygulanır.resolveConfigApiKey, sunulduğunda sağlayıcı hook’unu kullanır. Amazon Bedrock AWS env-marker çözümlemesini kendi sağlayıcı Plugin’inde tutar; çalışma zamanı kimlik doğrulamasının kendisiauth: "aws-sdk"ile yapılandırıldığında hâlâ AWS SDK varsayılan zincirini kullanır.resolveThinkingProfile(ctx), seçilenprovider,modelId, isteğe bağlı birleştirilmişreasoningkatalog ipucu ve isteğe bağlı birleştirilmiş modelcompatbilgilerini alır.compatdeğerini yalnızca sağlayıcının düşünme UI/profilini seçmek için kullanın.resolveSystemPromptContribution, bir sağlayıcının bir model ailesi için önbellek duyarlı sistem prompt rehberliği enjekte etmesine olanak tanır. Davranış tek bir sağlayıcı/model ailesine ait olduğunda ve kararlı/dinamik önbellek ayrımını koruması gerektiğindebefore_prompt_buildyerine bunu tercih edin.
Ek yetenekler ekleyin (isteğe bağlı)
Adım 5: Ek yetenekler ekleyin
Bir sağlayıcı Plugin’i metin çıkarımının yanında embedding’ler, konuşma, gerçek zamanlı transkripsiyon, gerçek zamanlı ses, medya anlama, görüntü oluşturma, video oluşturma, web getirme ve web arama kaydedebilir. OpenClaw bunu bir hibrit-yetenek Plugin’i olarak sınıflandırır; şirket Plugin’leri için önerilen kalıp budur (satıcı başına bir Plugin). Bkz. İç Mekanizmalar: Yetenek Sahipliği.Her yeteneği mevcutapi.registerProvider(...) çağrınızın yanında register(api) içinde kaydedin. Yalnızca ihtiyacınız olan sekmeleri seçin:- Konuşma (TTS)
- Gerçek zamanlı transkripsiyon
- Gerçek zamanlı ses
- Medya anlama
- Embeddings
- Görüntü ve video oluşturma
- Web getirme ve arama
assertOkOrThrowProviderError(...) kullanın; böylece Plugin’ler sınırlandırılmış hata gövdesi okumalarını, JSON hata ayrıştırmasını ve istek kimliği son eklerini paylaşır.Test
Adım 6: Test
src/provider.test.ts
ClawHub’a yayımlama
Provider plugin’leri, diğer harici kod plugin’leriyle aynı şekilde yayımlanır:clawhub package publish kullanmalıdır.
Dosya yapısı
Katalog sırası referansı
catalog.order, kataloğunuzun yerleşik provider’lara göre ne zaman
birleştirileceğini kontrol eder:
| Sıra | Ne zaman | Kullanım durumu |
|---|---|---|
simple | İlk geçiş | Düz API anahtarlı provider’lar |
profile | simple sonrası | Kimlik doğrulama profillerine bağlı provider’lar |
paired | profile sonrası | Birden fazla ilgili girdiyi sentezle |
late | Son geçiş | Mevcut provider’ları geçersiz kıl (çakışmada kazanır) |
Sonraki adımlar
- Kanal Plugin’leri - plugin’iniz bir kanal da sağlıyorsa
- SDK Runtime -
api.runtimeyardımcıları (TTS, arama, alt ajan) - SDK Genel Bakış - tam alt yol içe aktarma referansı
- Plugin İçleri - hook ayrıntıları ve paketle gelen örnekler