Ana içeriğe atla

Plugin Giriş Noktaları

Her plugin varsayılan bir giriş nesnesi dışa aktarır. SDK bunları oluşturmak için üç yardımcı sağlar.
Adım adım bir kılavuz mu arıyorsunuz? Adım adım kılavuzlar için Channel Plugins veya Provider Plugins sayfalarına bakın.

definePluginEntry

İçe aktarma: openclaw/plugin-sdk/plugin-entry Provider plugin’leri, araç plugin’leri, hook plugin’leri ve mesajlaşma kanalı olmayan her şey için.
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";

export default definePluginEntry({
  id: "my-plugin",
  name: "My Plugin",
  description: "Short summary",
  register(api) {
    api.registerProvider({
      /* ... */
    });
    api.registerTool({
      /* ... */
    });
  },
});
AlanTürGerekliVarsayılan
idstringEvet
namestringEvet
descriptionstringEvet
kindstringHayır
configSchemaOpenClawPluginConfigSchema | () => OpenClawPluginConfigSchemaHayırBoş nesne şeması
register(api: OpenClawPluginApi) => voidEvet
  • id, openclaw.plugin.json manifest dosyanızla eşleşmelidir.
  • kind, ayrıcalıklı slot’lar içindir: "memory" veya "context-engine".
  • configSchema, gecikmeli değerlendirme için bir işlev olabilir.
  • OpenClaw bu şemayı ilk erişimde çözer ve belleğe alır; böylece maliyetli şema oluşturucular yalnızca bir kez çalışır.

defineChannelPluginEntry

İçe aktarma: openclaw/plugin-sdk/channel-core Kanal-özel bağlamayla definePluginEntry’yi sarar. Otomatik olarak api.registerChannel({ plugin }) çağırır, isteğe bağlı bir kök yardım CLI meta verisi yüzeyi sunar ve registerFull işlemini kayıt moduna göre sınırlar.
import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core";

export default defineChannelPluginEntry({
  id: "my-channel",
  name: "My Channel",
  description: "Short summary",
  plugin: myChannelPlugin,
  setRuntime: setMyRuntime,
  registerCliMetadata(api) {
    api.registerCli(/* ... */);
  },
  registerFull(api) {
    api.registerGatewayMethod(/* ... */);
  },
});
AlanTürGerekliVarsayılan
idstringEvet
namestringEvet
descriptionstringEvet
pluginChannelPluginEvet
configSchemaOpenClawPluginConfigSchema | () => OpenClawPluginConfigSchemaHayırBoş nesne şeması
setRuntime(runtime: PluginRuntime) => voidHayır
registerCliMetadata(api: OpenClawPluginApi) => voidHayır
registerFull(api: OpenClawPluginApi) => voidHayır
  • setRuntime, çalışma zamanı başvurusunu saklayabilmeniz için kayıt sırasında çağrılır (genellikle createPluginRuntimeStore ile). CLI meta verisi yakalama sırasında atlanır.
  • registerCliMetadata, hem api.registrationMode === "cli-metadata" hem de api.registrationMode === "full" sırasında çalışır. Bunu, kök yardımın etkinleştirme yapmamasını sağlarken normal CLI komut kaydının tam plugin yüklemeleriyle uyumlu kalması için kanalın sahip olduğu CLI tanımlayıcılarının standart yeri olarak kullanın.
  • registerFull, yalnızca api.registrationMode === "full" olduğunda çalışır. Yalnızca kurulum yüklemesi sırasında atlanır.
  • definePluginEntry gibi configSchema da gecikmeli bir fabrika olabilir ve OpenClaw çözülen şemayı ilk erişimde belleğe alır.
  • Plugin’e ait kök CLI komutları için, komutun kök CLI ayrıştırma ağacından kaybolmadan gecikmeli yüklenmesini istediğinizde api.registerCli(..., { descriptors: [...] }) tercih edin. Kanal plugin’leri için bu tanımlayıcıları registerCliMetadata(...) içinden kaydetmeyi tercih edin ve registerFull(...) işlemini yalnızca çalışma zamanı işlerine odaklı tutun.
  • registerFull(...) ayrıca gateway RPC yöntemleri de kaydediyorsa bunları plugin’e özgü bir önek üzerinde tutun. Ayrılmış çekirdek yönetici ad alanları (config.*, exec.approvals.*, wizard.*, update.*) her zaman operator.admin olarak zorlanır.

defineSetupPluginEntry

İçe aktarma: openclaw/plugin-sdk/channel-core Hafif setup-entry.ts dosyası için. Çalışma zamanı veya CLI bağlaması olmadan yalnızca { plugin } döndürür.
import { defineSetupPluginEntry } from "openclaw/plugin-sdk/channel-core";

export default defineSetupPluginEntry(myChannelPlugin);
OpenClaw bunu, bir kanal devre dışı olduğunda, yapılandırılmadığında veya ertelenmiş yükleme etkin olduğunda tam giriş yerine yükler. Bunun ne zaman önemli olduğu için Setup and Config sayfasına bakın. Pratikte defineSetupPluginEntry(...) ile dar kurulum yardımcı ailelerini eşleyin:
  • openclaw/plugin-sdk/setup-runtime: içe aktarma açısından güvenli kurulum yama bağdaştırıcıları, lookup-note çıktısı, promptResolvedAllowFrom, splitSetupEntries ve devredilmiş kurulum proxy’leri gibi çalışma zamanı açısından güvenli kurulum yardımcıları için
  • openclaw/plugin-sdk/channel-setup: isteğe bağlı yükleme kurulum yüzeyleri için
  • openclaw/plugin-sdk/setup-tools: kurulum/yükleme CLI/arşiv/belge yardımcıları için
Ağır SDK’ları, CLI kaydını ve uzun ömürlü çalışma zamanı hizmetlerini tam girişte tutun.

Kayıt modu

api.registrationMode, plugin’inize nasıl yüklendiğini söyler:
ModNe zamanNe kaydedilmeli
"full"Normal gateway başlangıcıHer şey
"setup-only"Devre dışı/yapılandırılmamış kanalYalnızca kanal kaydı
"setup-runtime"Çalışma zamanı mevcut kurulum akışıKanal kaydı artı tam giriş yüklenmeden önce gereken yalnızca hafif çalışma zamanı
"cli-metadata"Kök yardım / CLI meta verisi yakalamaYalnızca CLI tanımlayıcıları
defineChannelPluginEntry bu ayrımı otomatik olarak yönetir. Bir kanal için doğrudan definePluginEntry kullanıyorsanız modu kendiniz denetleyin:
register(api) {
  if (api.registrationMode === "cli-metadata" || api.registrationMode === "full") {
    api.registerCli(/* ... */);
    if (api.registrationMode === "cli-metadata") return;
  }

  api.registerChannel({ plugin: myPlugin });
  if (api.registrationMode !== "full") return;

  // Yalnızca çalışma zamanına ait ağır kayıtlar
  api.registerService(/* ... */);
}
"setup-runtime" durumunu, tam paketlenmiş kanal çalışma zamanına yeniden girmeden yalnızca kurulum başlangıç yüzeylerinin var olması gereken pencere olarak değerlendirin. Uygun örnekler arasında kanal kaydı, kurulum açısından güvenli HTTP rotaları, kurulum açısından güvenli gateway yöntemleri ve devredilmiş kurulum yardımcıları bulunur. Ağır arka plan hizmetleri, CLI kaydedicileri ve provider/client SDK önyüklemeleri yine "full" moduna aittir. Özellikle CLI kaydedicileri için:
  • Kaydedici bir veya daha fazla kök komutun sahibiyse ve OpenClaw’un ilk çağrıda gerçek CLI modülünü gecikmeli yüklemesini istiyorsanız descriptors kullanın
  • Bu tanımlayıcıların, kaydedici tarafından açığa çıkarılan her üst düzey komut kökünü kapsadığından emin olun
  • Açgözlü uyumluluk yolları için yalnızca commands kullanın

Plugin şekilleri

OpenClaw, yüklü plugin’leri kayıt davranışlarına göre sınıflandırır:
ŞekilAçıklama
plain-capabilityTek yetenek türü (ör. yalnızca provider)
hybrid-capabilityBirden çok yetenek türü (ör. provider + speech)
hook-onlyYetenek yok, yalnızca hook’lar
non-capabilityAraçlar/komutlar/hizmetler var ama yetenek yok
Bir plugin’in şeklini görmek için openclaw plugins inspect <id> kullanın.

İlgili