SDK pluginów jest typowanym kontraktem między pluginami a rdzeniem. Ta strona jest odniesieniem dla tego, co importować i co można rejestrować.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Ta strona jest przeznaczona dla autorów pluginów używających
openclaw/plugin-sdk/* wewnątrz
OpenClaw. W przypadku zewnętrznych aplikacji, skryptów, pulpitów, zadań CI i rozszerzeń IDE,
które chcą uruchamiać agentów przez Gateway, użyj zamiast tego
SDK aplikacji OpenClaw i pakietu @openclaw/sdk.Konwencja importu
Zawsze importuj z konkretnej podścieżki:openclaw/plugin-sdk/channel-core; zachowaj openclaw/plugin-sdk/core dla
szerszej powierzchni zbiorczej i współdzielonych pomocników, takich jak
buildChannelConfigSchema.
Dla konfiguracji kanału publikuj należący do kanału JSON Schema przez
openclaw.plugin.json#channelConfigs. Podścieżka plugin-sdk/channel-config-schema
jest przeznaczona dla współdzielonych prymitywów schematu i ogólnego konstruktora. Dołączone do OpenClaw
pluginy używają plugin-sdk/bundled-channel-config-schema dla zachowanych
schematów dołączonych kanałów. Przestarzałe eksporty zgodności pozostają w
plugin-sdk/channel-config-schema-legacy; żadna z podścieżek schematów dołączonych nie jest
wzorcem dla nowych pluginów.
Odniesienie podścieżek
SDK pluginów jest udostępniany jako zestaw wąskich podścieżek pogrupowanych według obszaru (wejście pluginu, kanał, dostawca, uwierzytelnianie, środowisko wykonawcze, capability, pamięć oraz zarezerwowane pomocniki dołączonych pluginów). Pełny katalog — pogrupowany i podlinkowany — zobacz w Podścieżki SDK pluginów. Inwentarz punktów wejścia kompilatora znajduje się wscripts/lib/plugin-sdk-entrypoints.json; eksporty pakietu są generowane z
publicznego podzbioru po odjęciu lokalnych dla repozytorium podścieżek testowych/wewnętrznych wymienionych w
scripts/lib/plugin-sdk-private-local-only-subpaths.json. Uruchom
pnpm plugin-sdk:surface, aby skontrolować liczbę publicznych eksportów. Przestarzałe publiczne
podścieżki, które są wystarczająco stare i nieużywane przez kod produkcyjny dołączonych rozszerzeń, są
śledzone w scripts/lib/plugin-sdk-deprecated-public-subpaths.json; szerokie
przestarzałe baryłki reeksportów są śledzone w
scripts/lib/plugin-sdk-deprecated-barrel-subpaths.json.
API rejestracji
Callbackregister(api) otrzymuje obiekt OpenClawPluginApi z tymi
metodami:
Rejestracja capability
| Metoda | Co rejestruje |
|---|---|
api.registerProvider(...) | Wnioskowanie tekstowe (LLM) |
api.registerAgentHarness(...) | Eksperymentalny niskopoziomowy wykonawca agenta |
api.registerCliBackend(...) | Lokalne zaplecze wnioskowania CLI |
api.registerChannel(...) | Kanał wiadomości |
api.registerSpeechProvider(...) | Synteza text-to-speech / STT |
api.registerRealtimeTranscriptionProvider(...) | Strumieniowa transkrypcja w czasie rzeczywistym |
api.registerRealtimeVoiceProvider(...) | Dwukierunkowe sesje głosowe w czasie rzeczywistym |
api.registerMediaUnderstandingProvider(...) | Analiza obrazów/audio/wideo |
api.registerImageGenerationProvider(...) | Generowanie obrazów |
api.registerMusicGenerationProvider(...) | Generowanie muzyki |
api.registerVideoGenerationProvider(...) | Generowanie wideo |
api.registerWebFetchProvider(...) | Dostawca pobierania / scrapowania sieci |
api.registerWebSearchProvider(...) | Wyszukiwanie w sieci |
Narzędzia i polecenia
| Metoda | Co rejestruje |
|---|---|
api.registerTool(tool, opts?) | Narzędzie agenta (wymagane lub { optional: true }) |
api.registerCommand(def) | Polecenie niestandardowe (omija LLM) |
agentPromptGuidance, gdy agent potrzebuje krótkiej,
należącej do polecenia wskazówki routingu. Niech ten tekst dotyczy samego polecenia; nie dodawaj
polityki specyficznej dla dostawcy lub pluginu do konstruktorów promptów rdzenia.
Infrastruktura
| Metoda | Co rejestruje |
|---|---|
api.registerHook(events, handler, opts?) | Hook zdarzenia |
api.registerHttpRoute(params) | Punkt końcowy HTTP Gateway |
api.registerGatewayMethod(name, handler) | Metoda RPC Gateway |
api.registerGatewayDiscoveryService(service) | Lokalny reklamodawca wykrywania Gateway |
api.registerCli(registrar, opts?) | Podpolecenie CLI |
api.registerNodeCliFeature(registrar, opts?) | Funkcja CLI Node pod openclaw nodes |
api.registerService(service) | Usługa w tle |
api.registerInteractiveHandler(registration) | Interaktywny handler |
api.registerAgentToolResultMiddleware(...) | Middleware wyniku narzędzia środowiska wykonawczego |
api.registerMemoryPromptSupplement(builder) | Addytywna sekcja promptu sąsiadująca z pamięcią |
api.registerMemoryCorpusSupplement(adapter) | Addytywny korpus wyszukiwania/odczytu pamięci |
Hooki hosta dla pluginów przepływu pracy
Hooki hosta są połączeniami SDK dla pluginów, które muszą uczestniczyć w cyklu życia hosta, a nie tylko dodawać dostawcę, kanał lub narzędzie. Są to kontrakty ogólne; Plan Mode może ich używać, ale mogą też przepływy zatwierdzania, bramki polityki obszaru roboczego, monitory w tle, kreatory konfiguracji i pluginy towarzyszące UI.| Metoda | Kontrakt, którego jest właścicielem |
|---|---|
api.session.state.registerSessionExtension(...) | Należący do pluginu, zgodny z JSON stan sesji projektowany przez sesje Gateway |
api.session.workflow.enqueueNextTurnInjection(...) | Trwały, dokładnie jednorazowy kontekst wstrzykiwany do następnej tury agenta dla jednej sesji |
api.registerTrustedToolPolicy(...) | Dołączona/zaufana polityka narzędzi przed pluginem, która może blokować lub przepisywać parametry narzędzi |
api.registerToolMetadata(...) | Metadane wyświetlania katalogu narzędzi bez zmiany implementacji narzędzia |
api.registerCommand(...) | Polecenia o określonym zakresie pluginu; wyniki poleceń mogą ustawiać continueAgent: true; natywne polecenia Discord obsługują descriptionLocalizations |
api.session.controls.registerControlUiDescriptor(...) | Deskryptory wkładu UI sterowania dla powierzchni sesji, narzędzia, uruchomienia lub ustawień |
api.lifecycle.registerRuntimeLifecycle(...) | Callbacki czyszczenia dla należących do pluginu zasobów środowiska wykonawczego na ścieżkach resetowania/usuwania/przeładowania |
api.agent.events.registerAgentEventSubscription(...) | Oczyszczone subskrypcje zdarzeń dla stanu przepływu pracy i monitorów |
api.runContext.setRunContext(...) / getRunContext(...) / clearRunContext(...) | Tymczasowy stan pluginu dla pojedynczego uruchomienia, czyszczony przy terminalnym cyklu życia uruchomienia |
api.session.workflow.registerSessionSchedulerJob(...) | Metadane czyszczenia dla należących do pluginu zadań harmonogramu; nie harmonogramuje pracy ani nie tworzy rekordów zadań |
api.session.workflow.sendSessionAttachment(...) | Wyłącznie dołączane dostarczanie załączników plików pośredniczone przez hosta do aktywnej bezpośredniej trasy wychodzącej sesji |
api.session.workflow.scheduleSessionTurn(...) / unscheduleSessionTurnsByTag(...) | Wyłącznie dołączane, wspierane przez Cron zaplanowane tury sesji oraz czyszczenie oparte na tagach |
api.session.controls.registerSessionAction(...) | Typowane akcje sesji, które klienci mogą wysyłać przez Gateway |
api.session.state.registerSessionExtension(...)api.session.workflow.enqueueNextTurnInjection(...)api.session.workflow.registerSessionSchedulerJob(...)api.session.workflow.sendSessionAttachment(...)api.session.workflow.scheduleSessionTurn(...)api.session.workflow.unscheduleSessionTurnsByTag(...)api.session.controls.registerSessionAction(...)api.session.controls.registerControlUiDescriptor(...)api.agent.events.registerAgentEventSubscription(...)api.agent.events.emitAgentEvent(...)api.runContext.setRunContext(...)/getRunContext(...)/clearRunContext(...)api.lifecycle.registerRuntimeLifecycle(...)
api.registerSessionExtension, api.enqueueNextTurnInjection,
api.registerControlUiDescriptor, api.registerRuntimeLifecycle,
api.registerAgentEventSubscription, api.emitAgentEvent,
api.setRunContext, api.getRunContext, api.clearRunContext,
api.registerSessionSchedulerJob, api.registerSessionAction,
api.sendSessionAttachment, api.scheduleSessionTurn ani
api.unscheduleSessionTurnsByTag bezpośrednio.
scheduleSessionTurn(...) to wygodne API o zakresie sesji nad harmonogramem Gateway
Cron. Cron odpowiada za czas wykonywania i tworzy rekord zadania w tle, gdy
turn jest uruchamiany; Plugin SDK ogranicza tylko sesję docelową, nazewnictwo
własne pluginu i czyszczenie. Użyj api.runtime.tasks.managedFlows wewnątrz
zaplanowanego turn, gdy sama praca wymaga trwałego, wieloetapowego stanu Task Flow.
Kontrakty celowo rozdzielają uprawnienia:
- Zewnętrzne pluginy mogą być właścicielami rozszerzeń sesji, deskryptorów UI, poleceń, metadanych narzędzi, wstrzyknięć do następnego turn i zwykłych hooków.
- Zaufane polityki narzędzi uruchamiają się przed zwykłymi hookami
before_tool_calli są dostępne tylko dla elementów dołączonych w pakiecie, ponieważ uczestniczą w polityce bezpieczeństwa hosta. - Zastrzeżona własność poleceń jest dostępna tylko dla elementów dołączonych w pakiecie. Zewnętrzne pluginy powinny używać własnych nazw poleceń lub aliasów.
allowPromptInjection=falsewyłącza hooki modyfikujące prompt, w tymagent_turn_prepare,before_prompt_build,heartbeat_prompt_contribution, pola promptu ze starszegobefore_agent_startorazenqueueNextTurnInjection.
| Archetyp pluginu | Używane hooki |
|---|---|
| Workflow zatwierdzania | Rozszerzenie sesji, kontynuacja polecenia, wstrzyknięcie do następnego turn, deskryptor UI |
| Bramka polityki budżetu/obszaru roboczego | Zaufana polityka narzędzi, metadane narzędzi, projekcja sesji |
| Monitor cyklu życia w tle | Czyszczenie cyklu życia runtime, subskrypcja zdarzeń agenta, własność/czyszczenie harmonogramu sesji, wkład Heartbeat do promptu, deskryptor UI |
| Kreator konfiguracji lub onboardingu | Rozszerzenie sesji, polecenia o ograniczonym zakresie, deskryptor Control UI |
Zastrzeżone główne przestrzenie nazw administratora (
config.*, exec.approvals.*, wizard.*,
update.*) zawsze pozostają operator.admin, nawet jeśli plugin spróbuje przypisać
węższy zakres metody Gateway. Preferuj prefiksy specyficzne dla pluginu dla
metod będących własnością pluginu.Kiedy używać middleware wyników narzędzi
Kiedy używać middleware wyników narzędzi
Pluginy dołączone w pakiecie mogą używać
api.registerAgentToolResultMiddleware(...), gdy
muszą przepisać wynik narzędzia po wykonaniu i zanim runtime
przekaże ten wynik z powrotem do modelu. To zaufane, neutralne względem runtime
połączenie dla asynchronicznych reduktorów wyjścia, takich jak tokenjuice.Pluginy dołączone w pakiecie muszą zadeklarować contracts.agentToolResultMiddleware dla każdego
docelowego runtime, na przykład ["pi", "codex"]. Zewnętrzne pluginy
nie mogą rejestrować tego middleware; zachowaj zwykłe hooki pluginów OpenClaw dla pracy,
która nie wymaga czasu wykonania wyniku narzędzia przed modelem. Stara ścieżka rejestracji
wbudowanej fabryki rozszerzeń tylko dla Pi została usunięta.Rejestracja odkrywania Gateway
api.registerGatewayDiscoveryService(...) pozwala pluginowi ogłaszać aktywny
Gateway w lokalnym transporcie odkrywania, takim jak mDNS/Bonjour. OpenClaw wywołuje
usługę podczas uruchamiania Gateway, gdy lokalne odkrywanie jest włączone, przekazuje
bieżące porty Gateway i niesekretne dane podpowiedzi TXT oraz wywołuje zwrócony
handler stop podczas zamykania Gateway.
Metadane rejestracji CLI
api.registerCli(registrar, opts?) akceptuje dwa rodzaje metadanych poleceń:
commands: jawne nazwy poleceń będących własnością rejestratoradescriptors: deskryptory poleceń używane podczas parsowania dla pomocy CLI, routingu i leniwej rejestracji CLI pluginuparentPath: opcjonalna ścieżka polecenia nadrzędnego dla zagnieżdżonych grup poleceń, takich jak["nodes"]
api.registerNodeCliFeature(registrar, opts?). To mały wrapper wokół
api.registerCli(..., { parentPath: ["nodes"] }), który sprawia, że polecenia takie jak
openclaw nodes canvas są jawnymi funkcjami węzłów będącymi własnością pluginu.
Jeśli chcesz, aby polecenie pluginu pozostało leniwie ładowane w zwykłej ścieżce głównej CLI,
podaj descriptors, które obejmują każdy główny korzeń poleceń najwyższego poziomu udostępniany przez ten
rejestrator.
program:
commands tylko wtedy, gdy nie potrzebujesz leniwej rejestracji głównego CLI.
Ta gorliwa ścieżka zgodności pozostaje obsługiwana, ale nie instaluje
symboli zastępczych opartych na deskryptorach dla leniwego ładowania podczas parsowania.
Rejestracja backendu CLI
api.registerCliBackend(...) pozwala pluginowi posiadać domyślną konfigurację dla lokalnego
backendu CLI AI, takiego jak codex-cli.
idbackendu staje się prefiksem dostawcy w referencjach modeli, takich jakcodex-cli/gpt-5.configbackendu używa tego samego kształtu coagents.defaults.cliBackends.<id>.- Konfiguracja użytkownika nadal wygrywa. OpenClaw scala
agents.defaults.cliBackends.<id>nad domyślną konfiguracją pluginu przed uruchomieniem CLI. - Użyj
normalizeConfig, gdy backend wymaga przepisania zgodności po scaleniu (na przykład normalizacji starych kształtów flag). - Użyj
resolveExecutionArgsdla przepisania argv o zakresie żądania, które należy do dialektu CLI, takiego jak mapowanie poziomów myślenia OpenClaw na natywną flagę effort.
Wyłączne sloty
| Metoda | Co rejestruje |
|---|---|
api.registerContextEngine(id, factory) | Silnik kontekstu (jeden aktywny naraz). Callback assemble() otrzymuje availableTools i citationsMode, aby silnik mógł dostosować dodatki do promptu. |
api.registerMemoryCapability(capability) | Ujednolicona zdolność pamięci |
api.registerMemoryPromptSection(builder) | Builder sekcji promptu pamięci |
api.registerMemoryFlushPlan(resolver) | Resolver planu opróżniania pamięci |
api.registerMemoryRuntime(runtime) | Adapter runtime pamięci |
Adaptery embeddingów pamięci
| Metoda | Co rejestruje |
|---|---|
api.registerMemoryEmbeddingProvider(adapter) | Adapter embeddingów pamięci dla aktywnego pluginu |
registerMemoryCapabilityjest preferowanym, wyłącznym API pluginu pamięci.registerMemoryCapabilitymoże także udostępniaćpublicArtifacts.listArtifacts(...), aby pluginy towarzyszące mogły konsumować wyeksportowane artefakty pamięci przezopenclaw/plugin-sdk/memory-host-corezamiast sięgać do prywatnego układu konkretnego pluginu pamięci.registerMemoryPromptSection,registerMemoryFlushPlaniregisterMemoryRuntimeto zgodne ze starszymi wersjami, wyłączne API pluginu pamięci.MemoryFlushPlan.modelmoże przypiąć turn opróżniania do dokładnej referencjiprovider/model, takiej jakollama/qwen3:8b, bez dziedziczenia aktywnego łańcucha fallback.registerMemoryEmbeddingProviderpozwala aktywnemu pluginowi pamięci zarejestrować jeden lub więcej identyfikatorów adapterów embeddingów (na przykładopenai,geminialbo niestandardowy identyfikator zdefiniowany przez plugin).- Konfiguracja użytkownika, taka jak
agents.defaults.memorySearch.provideriagents.defaults.memorySearch.fallback, jest rozwiązywana względem tych zarejestrowanych identyfikatorów adapterów.
Zdarzenia i cykl życia
| Metoda | Co robi |
|---|---|
api.on(hookName, handler, opts?) | Typowany hook cyklu życia |
api.onConversationBindingResolved(handler) | Callback powiązania konwersacji |
Semantyka decyzji hooków
before_tool_call: zwrócenie{ block: true }jest końcowe. Gdy dowolny handler je ustawi, handlery o niższym priorytecie są pomijane.before_tool_call: zwrócenie{ block: false }jest traktowane jako brak decyzji (tak samo jak pominięcieblock), a nie jako nadpisanie.before_install: zwrócenie{ block: true }jest końcowe. Gdy dowolny handler je ustawi, handlery o niższym priorytecie są pomijane.before_install: zwrócenie{ block: false }jest traktowane jako brak decyzji (tak samo jak pominięcieblock), a nie jako nadpisanie.reply_dispatch: zwrócenie{ handled: true, ... }jest końcowe. Gdy dowolny handler przejmie wysyłkę, handlery o niższym priorytecie i domyślna ścieżka wysyłki modelu są pomijane.message_sending: zwrócenie{ cancel: true }jest końcowe. Gdy dowolny handler je ustawi, handlery o niższym priorytecie są pomijane.message_sending: zwrócenie{ cancel: false }jest traktowane jako brak decyzji (tak samo jak pominięciecancel), a nie jako nadpisanie.message_received: użyj typowanego polathreadId, gdy potrzebujesz routingu przychodzącego wątku/tematu. Zachowajmetadatadla dodatków specyficznych dla kanału.message_sending: użyj typowanych pól routingureplyToId/threadId, zanim przejdziesz do specyficznego dla kanałumetadata.gateway_start: użyjctx.config,ctx.workspaceDirictx.getCron?.()dla stanu startowego będącego własnością Gateway zamiast polegać na wewnętrznych hookachgateway:startup.cron_changed: obserwuj zmiany cyklu życia Cron będącego własnością Gateway. Użyjevent.job?.state?.nextRunAtMsictx.getCron?.()podczas synchronizacji zewnętrznych harmonogramów wybudzania i utrzymuj OpenClaw jako źródło prawdy dla sprawdzania terminów oraz wykonania.
Pola obiektu API
| Pole | Typ | Opis |
|---|---|---|
api.id | string | Identyfikator Plugin |
api.name | string | Nazwa wyświetlana |
api.version | string? | Wersja Plugin (opcjonalna) |
api.description | string? | Opis Plugin (opcjonalny) |
api.source | string | Ścieżka źródłowa Plugin |
api.rootDir | string? | Katalog główny Plugin (opcjonalny) |
api.config | OpenClawConfig | Bieżąca migawka konfiguracji (aktywna migawka środowiska uruchomieniowego w pamięci, gdy jest dostępna) |
api.pluginConfig | Record<string, unknown> | Konfiguracja specyficzna dla Plugin z plugins.entries.<id>.config |
api.runtime | PluginRuntime | Pomocniki środowiska uruchomieniowego |
api.logger | PluginLogger | Logger o ograniczonym zakresie (debug, info, warn, error) |
api.registrationMode | PluginRegistrationMode | Bieżący tryb ładowania; "setup-runtime" to lekkie okno uruchamiania/konfiguracji przed pełnym wejściem |
api.resolvePath(input) | (string) => string | Rozwiązuje ścieżkę względem katalogu głównego pluginu |
Konwencja modułów wewnętrznych
W obrębie pluginu używaj lokalnych plików zbiorczych do importów wewnętrznych:api.ts, runtime-api.ts,
index.ts, setup-entry.ts i podobne publiczne pliki wejściowe) preferują
aktywną migawkę konfiguracji środowiska uruchomieniowego, gdy OpenClaw już działa. Jeśli migawka
środowiska uruchomieniowego jeszcze nie istnieje, przechodzą awaryjnie do rozwiązanego pliku konfiguracji na dysku.
Fasady spakowanych dołączonych pluginów powinny być ładowane przez loadery fasad pluginów
OpenClaw; bezpośrednie importy z dist/extensions/... omijają manifest
i kontrole runtime sidecar, których instalacje pakietowe używają dla kodu należącego do pluginu.
Pluginy dostawców mogą udostępniać wąski, lokalny dla pluginu plik zbiorczy kontraktu, gdy
pomocnik jest celowo specyficzny dla dostawcy i nie należy jeszcze do generycznej podścieżki SDK.
Dołączone przykłady:
- Anthropic: publiczna granica
api.ts/contract-api.tsdla pomocników strumienia nagłówka beta Claude iservice_tier. @openclaw/openai-provider:api.tseksportuje konstruktory dostawcy, pomocniki modelu domyślnego i konstruktory dostawcy czasu rzeczywistego.@openclaw/openrouter-provider:api.tseksportuje konstruktor dostawcy oraz pomocniki onboardingu/konfiguracji.
Powiązane
Punkty wejścia
Opcje
definePluginEntry i defineChannelPluginEntry.Pomocniki środowiska uruchomieniowego
Pełna referencja przestrzeni nazw
api.runtime.Konfiguracja początkowa i konfiguracja
Pakowanie, manifesty i schematy konfiguracji.
Testowanie
Narzędzia testowe i reguły lintowania.
Migracja SDK
Migracja z przestarzałych powierzchni.
Wewnętrzna architektura Plugin
Szczegółowa architektura i model zdolności.