Przejdź do głównej treści

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.

OpenClaw przeszedł z szerokiej warstwy kompatybilności wstecznej na nowoczesną architekturę Pluginów z ukierunkowanymi, udokumentowanymi importami. Jeśli Twój Plugin został zbudowany przed nową architekturą, ten przewodnik pomoże Ci przeprowadzić migrację.

Co się zmienia

Stary system Pluginów udostępniał dwie szeroko otwarte powierzchnie, które pozwalały Pluginom importować wszystko, czego potrzebowały, z jednego punktu wejścia:
  • openclaw/plugin-sdk/compat - pojedynczy import, który reeksportował dziesiątki pomocników. Został wprowadzony, aby utrzymać działanie starszych Pluginów opartych na hookach podczas budowania nowej architektury Pluginów.
  • openclaw/plugin-sdk/infra-runtime - szeroki barrel pomocników runtime, który mieszał zdarzenia systemowe, stan heartbeat, kolejki dostarczania, pomocniki fetch/proxy, pomocniki plikowe, typy zatwierdzeń i niepowiązane narzędzia.
  • openclaw/plugin-sdk/config-runtime - szeroki barrel kompatybilności konfiguracji, który nadal przenosi przestarzałe bezpośrednie pomocniki odczytu/zapisu w oknie migracji.
  • openclaw/extension-api - most, który dawał Pluginom bezpośredni dostęp do pomocników po stronie hosta, takich jak wbudowany runner agenta.
  • api.registerEmbeddedExtensionFactory(...) - usunięty hook bundled extension tylko dla Pi, który mógł obserwować zdarzenia embedded-runnera, takie jak tool_result.
Szerokie powierzchnie importu są teraz przestarzałe. Nadal działają w runtime, ale nowe Pluginy nie mogą ich używać, a istniejące Pluginy powinny przeprowadzić migrację, zanim następne wydanie główne je usunie. API rejestracji embedded extension factory tylko dla Pi zostało usunięte; zamiast tego użyj middleware wyników narzędzi. OpenClaw nie usuwa ani nie reinterpretuje udokumentowanego zachowania Pluginów w tej samej zmianie, która wprowadza zamiennik. Zmiany łamiące kontrakt muszą najpierw przejść przez adapter kompatybilności, diagnostykę, dokumentację i okno deprecjacji. Dotyczy to importów SDK, pól manifestu, API konfiguracji, hooków i zachowania rejestracji runtime.
Warstwa kompatybilności wstecznej zostanie usunięta w przyszłym wydaniu głównym. Pluginy, które nadal importują z tych powierzchni, przestaną wtedy działać. Rejestracje embedded extension factory tylko dla Pi już się nie ładują.

Dlaczego to się zmieniło

Stare podejście powodowało problemy:
  • Wolny start - zaimportowanie jednego pomocnika ładowało dziesiątki niepowiązanych modułów
  • Zależności cykliczne - szerokie reeksporty ułatwiały tworzenie cykli importów
  • Niejasna powierzchnia API - nie było sposobu, aby określić, które eksporty były stabilne, a które wewnętrzne
Nowoczesny SDK Pluginów to naprawia: każda ścieżka importu (openclaw/plugin-sdk/\<subpath\>) jest małym, samodzielnym modułem z jasnym celem i udokumentowanym kontraktem. Starsze wygodne seam’y providerów dla bundled channels również zniknęły. Seam’y pomocnicze oznaczone marką kanału były prywatnymi skrótami mono-repo, a nie stabilnymi kontraktami Pluginów. Zamiast tego używaj wąskich, generycznych subścieżek SDK. W przestrzeni roboczej bundled Pluginu trzymaj pomocniki należące do providera w jego własnym api.ts lub runtime-api.ts. Aktualne przykłady bundled providerów:
  • Anthropic trzyma pomocniki strumieniowania specyficzne dla Claude we własnym seam’ie api.ts / contract-api.ts
  • OpenAI trzyma buildery providera, pomocniki modeli domyślnych i buildery providera realtime we własnym api.ts
  • OpenRouter trzyma builder providera oraz pomocniki onboardingu/konfiguracji we własnym api.ts

Plan migracji Talk i głosu realtime

Kod Talk dla głosu realtime, telefonii, spotkań i przeglądarki przechodzi z lokalnego dla powierzchni księgowania tur na wspólny kontroler sesji Talk eksportowany przez openclaw/plugin-sdk/realtime-voice. Nowy kontroler posiada wspólną kopertę zdarzeń Talk, stan aktywnej tury, stan przechwytywania, stan wyjściowego audio, historię ostatnich zdarzeń oraz odrzucanie nieaktualnych tur. Pluginy providerów powinny nadal posiadać sesje realtime specyficzne dla dostawcy; Pluginy powierzchni powinny nadal posiadać przechwytywanie, odtwarzanie, telefonię i osobliwości spotkań. Ta migracja Talk celowo zrywa zgodność w czysty sposób:
  1. Trzymaj współdzielony kontroler i prymitywy runtime w plugin-sdk/realtime-voice.
  2. Przenieś bundled powierzchnie na wspólny kontroler: relay przeglądarkowy, handoff managed-room, realtime rozmów głosowych, streaming STT rozmów głosowych, Google Meet realtime oraz natywny push-to-talk.
  3. Zastąp stare rodziny RPC Talk finalnym API talk.session.* i talk.client.*.
  4. Ogłaszaj jeden żywy kanał zdarzeń Talk w Gateway hello-ok.features.events: talk.event.
  5. Usuń stary endpoint HTTP realtime oraz każdą ścieżkę nadpisywania instrukcji w czasie żądania.
Nowy kod nie powinien wywoływać createTalkEventSequencer(...) bezpośrednio, chyba że implementuje niskopoziomowy adapter lub fixture testową. Preferuj wspólny kontroler, aby zdarzenia ograniczone do tury nie mogły być emitowane bez identyfikatora tury, nieaktualne wywołania turnEnd / turnCancel nie mogły czyścić nowszej aktywnej tury, a zdarzenia cyklu życia wyjściowego audio pozostawały spójne w telefonii, spotkaniach, relayu przeglądarkowym, handoffie managed-room i natywnych klientach Talk. Docelowy kształt publicznego API to:
// Gateway-owned Talk session API.
await gateway.request("talk.session.create", {
  mode: "realtime",
  transport: "gateway-relay",
  brain: "agent-consult",
  sessionKey: "main",
});
await gateway.request("talk.session.appendAudio", { sessionId, audioBase64 });
await gateway.request("talk.session.cancelOutput", { sessionId, reason: "barge-in" });
await gateway.request("talk.session.submitToolResult", {
  sessionId,
  callId,
  result: { status: "working" },
  options: { willContinue: true },
});
await gateway.request("talk.session.submitToolResult", {
  sessionId,
  callId,
  result: { status: "already_delivered" },
  options: { suppressResponse: true },
});
await gateway.request("talk.session.submitToolResult", { sessionId, callId, result });
await gateway.request("talk.session.close", { sessionId });

// Client-owned provider session API.
await gateway.request("talk.client.create", {
  mode: "realtime",
  transport: "webrtc",
  brain: "agent-consult",
  sessionKey: "main",
});
await gateway.request("talk.client.toolCall", { sessionKey, callId, name, args });
Sesje WebRTC/provider-websocket należące do przeglądarki używają talk.client.create, ponieważ przeglądarka posiada negocjację providera i transport mediów, podczas gdy Gateway posiada poświadczenia, instrukcje i politykę narzędzi. talk.session.* jest wspólną powierzchnią zarządzaną przez Gateway dla sesji realtime gateway-relay, transkrypcji gateway-relay oraz natywnych sesji STT/TTS managed-room. Starsze konfiguracje, które umieszczały selektory realtime obok talk.provider / talk.providers, powinny zostać naprawione za pomocą openclaw doctor --fix; runtime Talk nie reinterpretuje konfiguracji providera speech/TTS jako konfiguracji providera realtime. Obsługiwane kombinacje talk.session.create są celowo niewielkie:
TrybTransportLogikaWłaścicielUwagi
realtimegateway-relayagent-consultGatewayPełnodupleksowe audio providera mostkowane przez Gateway; wywołania narzędzi są routowane przez narzędzie agent-consult.
transcriptiongateway-relaynoneGatewayTylko streaming STT; wywołujący wysyłają audio wejściowe i odbierają zdarzenia transkrypcji.
stt-ttsmanaged-roomagent-consultPokój natywny/klientaPokoje w stylu push-to-talk i walkie-talkie, gdzie klient posiada przechwytywanie/odtwarzanie, a Gateway posiada stan tury.
stt-ttsmanaged-roomdirect-toolsPokój natywny/klientaTryb pokoju tylko dla administratorów, dla zaufanych powierzchni first-party, które bezpośrednio wykonują akcje narzędzi Gateway.
Mapa usuniętych metod:
StareNowe
talk.realtime.sessiontalk.client.create
talk.realtime.toolCalltalk.client.toolCall
talk.realtime.relayAudiotalk.session.appendAudio
talk.realtime.relayCanceltalk.session.cancelOutput lub talk.session.cancelTurn
talk.realtime.relayToolResulttalk.session.submitToolResult
talk.realtime.relayStoptalk.session.close
talk.transcription.sessiontalk.session.create({ mode: "transcription" })
talk.transcription.relayAudiotalk.session.appendAudio
talk.transcription.relayCanceltalk.session.cancelTurn
talk.transcription.relayStoptalk.session.close
talk.handoff.createtalk.session.create({ transport: "managed-room" })
talk.handoff.jointalk.session.join
talk.handoff.revoketalk.session.close
Ujednolicone słownictwo kontroli jest również celowo wąskie:
MetodaDotyczyKontrakt
talk.session.appendAudiorealtime/gateway-relay, transcription/gateway-relayDołącz fragment audio PCM w base64 do sesji providera należącej do tego samego połączenia Gateway.
talk.session.startTurnstt-tts/managed-roomRozpocznij turę użytkownika managed-room.
talk.session.endTurnstt-tts/managed-roomZakończ aktywną turę po walidacji nieaktualnej tury.
talk.session.cancelTurnwszystkie sesje należące do GatewayAnuluj aktywne przechwytywanie/pracę providera/agenta/TTS dla tury.
talk.session.cancelOutputrealtime/gateway-relayZatrzymaj wyjściowe audio asystenta bez koniecznego kończenia tury użytkownika.
talk.session.submitToolResultrealtime/gateway-relayZakończ wywołanie narzędzia providera wyemitowane przez relay; przekaż options.willContinue dla wyniku pośredniego lub options.suppressResponse, aby zaspokoić wywołanie bez kolejnej odpowiedzi asystenta.
talk.session.closewszystkie ujednolicone sesjeZatrzymaj sesje relay lub unieważnij stan managed-room, a następnie zapomnij ujednolicony identyfikator sesji.
Nie wprowadzaj w rdzeniu wyjątków specyficznych dla dostawcy lub platformy, aby to zadziałało. Rdzeń odpowiada za semantykę sesji Talk. Pluginy dostawców odpowiadają za konfigurację sesji dostawcy. Połączenia głosowe i Google Meet odpowiadają za adaptery telefonii/spotkań. Przeglądarka i natywne aplikacje odpowiadają za UX przechwytywania/odtwarzania z urządzeń.

Zasady zgodności

W przypadku zewnętrznych pluginów prace nad zgodnością przebiegają w tej kolejności:
  1. dodaj nowy kontrakt
  2. zachowaj stare zachowanie podłączone przez adapter zgodności
  3. wyemituj diagnostykę lub ostrzeżenie, które wskazuje starą ścieżkę i zamiennik
  4. pokryj obie ścieżki testami
  5. udokumentuj wycofanie oraz ścieżkę migracji
  6. usuń dopiero po ogłoszonym oknie migracji, zwykle w wydaniu głównym
Maintainerzy mogą przeprowadzić audyt bieżącej kolejki migracji za pomocą pnpm plugins:boundary-report. Użyj pnpm plugins:boundary-report:summary dla zwięzłych liczników, --owner <id> dla jednego pluginu lub właściciela zgodności oraz pnpm plugins:boundary-report:ci, gdy bramka CI powinna kończyć się niepowodzeniem przy zaległych rekordach zgodności, importach z zastrzeżonego SDK między właścicielami lub nieużywanych zastrzeżonych podścieżkach SDK. Raport grupuje przestarzałe rekordy zgodności według daty usunięcia, liczy lokalne odwołania w kodzie/dokumentacji, ujawnia importy z zastrzeżonego SDK między właścicielami i podsumowuje prywatny most SDK hosta pamięci, aby porządkowanie zgodności pozostawało jawne zamiast opierać się na doraźnych wyszukiwaniach. Zastrzeżone podścieżki SDK muszą mieć śledzone użycie przez właścicieli; nieużywane eksporty zastrzeżonych helperów należy usunąć z publicznego SDK. Jeśli pole manifestu jest nadal akceptowane, autorzy pluginów mogą dalej go używać, dopóki dokumentacja i diagnostyka nie powiedzą inaczej. Nowy kod powinien preferować udokumentowany zamiennik, ale istniejące pluginy nie powinny psuć się podczas zwykłych wydań pomniejszych.

Jak przeprowadzić migrację

1

Migrate runtime config load/write helpers

Dołączone pluginy powinny przestać wywoływać api.runtime.config.loadConfig() i api.runtime.config.writeConfigFile(...) bezpośrednio. Preferuj konfigurację, która została już przekazana do aktywnej ścieżki wywołania. Długotrwałe handlery, które potrzebują bieżącej migawki procesu, mogą używać api.runtime.config.current(). Długotrwałe narzędzia agentów powinny używać ctx.getRuntimeConfig() z kontekstu narzędzia wewnątrz execute, aby narzędzie utworzone przed zapisem konfiguracji nadal widziało odświeżoną konfigurację runtime.Zapisy konfiguracji muszą przechodzić przez helpery transakcyjne i wybierać zasadę po zapisie:
await api.runtime.config.mutateConfigFile({
  afterWrite: { mode: "auto" },
  mutate(draft) {
    draft.plugins ??= {};
  },
});
Użyj afterWrite: { mode: "restart", reason: "..." }, gdy wywołujący wie, że zmiana wymaga czystego restartu gatewaya, oraz afterWrite: { mode: "none", reason: "..." } tylko wtedy, gdy wywołujący odpowiada za dalsze działania i celowo chce pominąć planer przeładowania. Wyniki mutacji zawierają typowane podsumowanie followUp dla testów i logowania; gateway pozostaje odpowiedzialny za zastosowanie lub zaplanowanie restartu. loadConfig i writeConfigFile pozostają przestarzałymi helperami zgodności dla zewnętrznych pluginów podczas okna migracji i ostrzegają raz z kodem zgodności runtime-config-load-write. Dołączone pluginy i kod runtime repozytorium są chronione przez bariery skanera w pnpm check:deprecated-api-usage i pnpm check:no-runtime-action-load-config: nowe użycie w produkcyjnych pluginach kończy się bezwzględnym niepowodzeniem, bezpośrednie zapisy konfiguracji kończą się niepowodzeniem, metody serwera gatewaya muszą używać migawki runtime żądania, helpery wysyłania/akcji/klienta kanału runtime muszą otrzymywać konfigurację ze swojej granicy, a długotrwałe moduły runtime mają zero dozwolonych otaczających wywołań loadConfig().Nowy kod pluginów powinien także unikać importowania szerokiego barrela zgodności openclaw/plugin-sdk/config-runtime. Użyj wąskiej podścieżki SDK pasującej do zadania:
PotrzebaImport
Typy konfiguracji, takie jak OpenClawConfigopenclaw/plugin-sdk/config-contracts
Asercje już wczytanej konfiguracji i wyszukiwanie konfiguracji wpisu pluginuopenclaw/plugin-sdk/plugin-config-runtime
Odczyty bieżącej migawki runtimeopenclaw/plugin-sdk/runtime-config-snapshot
Zapisy konfiguracjiopenclaw/plugin-sdk/config-mutation
Helpery magazynu sesjiopenclaw/plugin-sdk/session-store-runtime
Konfiguracja tabel Markdownopenclaw/plugin-sdk/markdown-table-runtime
Helpery runtime zasad grupopenclaw/plugin-sdk/runtime-group-policy
Rozwiązywanie wejścia sekretówopenclaw/plugin-sdk/secret-input-runtime
Nadpisania modeli/sesjiopenclaw/plugin-sdk/model-session-runtime
Dołączone pluginy i ich testy są chronione skanerem przed szerokim barrelem, dzięki czemu importy i mocki pozostają lokalne względem zachowania, którego potrzebują. Szeroki barrel nadal istnieje dla zgodności zewnętrznej, ale nowy kod nie powinien od niego zależeć.
2

Migrate Pi tool-result extensions to middleware

Dołączone pluginy muszą zastąpić handlery wyników narzędzi specyficzne dla Pi api.registerEmbeddedExtensionFactory(...) neutralnym względem runtime middleware.
// Pi and Codex runtime dynamic tools
api.registerAgentToolResultMiddleware(async (event) => {
  return compactToolResult(event);
}, {
  runtimes: ["pi", "codex"],
});
Zaktualizuj manifest pluginu w tym samym czasie:
{
  "contracts": {
    "agentToolResultMiddleware": ["pi", "codex"]
  }
}
Zewnętrzne pluginy nie mogą rejestrować middleware wyników narzędzi, ponieważ może ono przepisać wynik narzędzia o wysokim zaufaniu, zanim model go zobaczy.
3

Migrate approval-native handlers to capability facts

Pluginy kanałów obsługujące zatwierdzanie udostępniają teraz natywne zachowanie zatwierdzania przez approvalCapability.nativeRuntime oraz współdzielony rejestr kontekstu runtime.Kluczowe zmiany:
  • Zastąp approvalCapability.handler.loadRuntime(...) przez approvalCapability.nativeRuntime
  • Przenieś autoryzację/dostarczanie specyficzne dla zatwierdzania ze starszego okablowania plugin.auth / plugin.approvals na approvalCapability
  • ChannelPlugin.approvals zostało usunięte z publicznego kontraktu pluginu kanału; przenieś pola dostarczania/natywne/renderowania na approvalCapability
  • plugin.auth pozostaje tylko dla przepływów logowania/wylogowania kanału; hooki autoryzacji zatwierdzania w tym miejscu nie są już odczytywane przez rdzeń
  • Rejestruj obiekty runtime należące do kanału, takie jak klienci, tokeny lub aplikacje Bolt, przez openclaw/plugin-sdk/channel-runtime-context
  • Nie wysyłaj powiadomień o przekierowaniu należących do pluginu z natywnych handlerów zatwierdzania; rdzeń odpowiada teraz za powiadomienia o dostarczeniu gdzie indziej na podstawie rzeczywistych wyników dostarczenia
  • Podczas przekazywania channelRuntime do createChannelManager(...) podaj rzeczywistą powierzchnię createPluginRuntime().channel. Częściowe stuby są odrzucane.
Zobacz /plugins/sdk-channel-plugins, aby sprawdzić bieżący układ capability zatwierdzania.
4

Audit Windows wrapper fallback behavior

Jeśli Twój plugin używa openclaw/plugin-sdk/windows-spawn, nierozwiązane wrappery Windows .cmd/.bat kończą się teraz zamkniętym niepowodzeniem, chyba że jawnie przekażesz allowShellFallback: true.
// Before
const program = applyWindowsSpawnProgramPolicy({ candidate });

// After
const program = applyWindowsSpawnProgramPolicy({
  candidate,
  // Only set this for trusted compatibility callers that intentionally
  // accept shell-mediated fallback.
  allowShellFallback: true,
});
Jeśli wywołujący nie opiera się celowo na awaryjnym użyciu powłoki, nie ustawiaj allowShellFallback i zamiast tego obsłuż zgłoszony błąd.
5

Find deprecated imports

Wyszukaj w swoim pluginie importy z jednej z przestarzałych powierzchni:
grep -r "plugin-sdk/compat" my-plugin/
grep -r "plugin-sdk/infra-runtime" my-plugin/
grep -r "plugin-sdk/config-runtime" my-plugin/
grep -r "openclaw/extension-api" my-plugin/
6

Replace with focused imports

Każdy eksport ze starej powierzchni mapuje się na konkretną nowoczesną ścieżkę importu:
// Before (deprecated backwards-compatibility layer)
import {
  createChannelReplyPipeline,
  createPluginRuntimeStore,
  resolveControlCommandGate,
} from "openclaw/plugin-sdk/compat";

// After (modern focused imports)
import { createChannelReplyPipeline } from "openclaw/plugin-sdk/channel-reply-pipeline";
import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
import { resolveControlCommandGate } from "openclaw/plugin-sdk/command-auth";
W przypadku helperów po stronie hosta użyj wstrzykniętego runtime pluginu zamiast importować bezpośrednio:
// Before (deprecated extension-api bridge)
import { runEmbeddedPiAgent } from "openclaw/extension-api";
const result = await runEmbeddedPiAgent({ sessionId, prompt });

// After (injected runtime)
const result = await api.runtime.agent.runEmbeddedPiAgent({ sessionId, prompt });
Ten sam wzorzec dotyczy innych starszych helperów mostu:
Stary importNowoczesny odpowiednik
resolveAgentDirapi.runtime.agent.resolveAgentDir
resolveAgentWorkspaceDirapi.runtime.agent.resolveAgentWorkspaceDir
resolveAgentIdentityapi.runtime.agent.resolveAgentIdentity
resolveThinkingDefaultapi.runtime.agent.resolveThinkingDefault
resolveAgentTimeoutMsapi.runtime.agent.resolveAgentTimeoutMs
ensureAgentWorkspaceapi.runtime.agent.ensureAgentWorkspace
helpery magazynu sesjiapi.runtime.agent.session.*
7

Replace broad infra-runtime imports

openclaw/plugin-sdk/infra-runtime nadal istnieje dla zgodności zewnętrznej, ale nowy kod powinien importować zawężoną powierzchnię helperów, której faktycznie potrzebuje:
PotrzebaImport
Helpery kolejki zdarzeń systemowychopenclaw/plugin-sdk/system-event-runtime
Helpery wybudzania, zdarzeń i widoczności Heartbeatopenclaw/plugin-sdk/heartbeat-runtime
Opróżnianie kolejki oczekujących dostarczeńopenclaw/plugin-sdk/delivery-queue-runtime
Telemetria aktywności kanałuopenclaw/plugin-sdk/channel-activity-runtime
Pamięci podręczne deduplikacji w pamięciopenclaw/plugin-sdk/dedupe-runtime
Bezpieczne helpery ścieżek lokalnych plików/mediówopenclaw/plugin-sdk/file-access-runtime
Pobieranie świadome dispatcheraopenclaw/plugin-sdk/runtime-fetch
Helpery proxy i chronionego pobieraniaopenclaw/plugin-sdk/fetch-runtime
Typy zasad dispatchera SSRFopenclaw/plugin-sdk/ssrf-dispatcher
Typy żądania/rozwiązania zatwierdzeniaopenclaw/plugin-sdk/approval-runtime
Helpery ładunku odpowiedzi zatwierdzenia i poleceńopenclaw/plugin-sdk/approval-reply-runtime
Helpery formatowania błędówopenclaw/plugin-sdk/error-runtime
Oczekiwania gotowości transportuopenclaw/plugin-sdk/transport-ready-runtime
Helpery bezpiecznych tokenówopenclaw/plugin-sdk/secure-random-runtime
Ograniczona współbieżność zadań asynchronicznychopenclaw/plugin-sdk/concurrency-runtime
Koercja liczbowaopenclaw/plugin-sdk/number-runtime
Lokalna dla procesu blokada asynchronicznaopenclaw/plugin-sdk/async-lock-runtime
Blokady plikówopenclaw/plugin-sdk/file-lock
Dołączone pluginy są chronione skanerem przed infra-runtime, więc kod repozytorium nie może cofnąć się do szerokiego barrela.
8

Migrate channel route helpers

Nowy kod tras kanałów powinien używać openclaw/plugin-sdk/channel-route. Starsze nazwy klucza trasy i porównywalnego celu pozostają aliasami zgodności podczas okna migracji, ale nowe pluginy powinny używać nazw tras, które bezpośrednio opisują zachowanie:
Stary helperNowoczesny helper
channelRouteIdentityKey(...)channelRouteDedupeKey(...)
channelRouteKey(...)channelRouteCompactKey(...)
ComparableChannelTargetChannelRouteParsedTarget
resolveComparableTargetForChannel(...)resolveRouteTargetForChannel(...)
resolveComparableTargetForLoadedChannel(...)resolveRouteTargetForLoadedChannel(...)
comparableChannelTargetsMatch(...)channelRouteTargetsMatchExact(...)
comparableChannelTargetsShareRoute(...)channelRouteTargetsShareConversation(...)
Nowoczesne helpery tras normalizują { channel, to, accountId, threadId } spójnie w natywnych zatwierdzeniach, pomijaniu odpowiedzi, deduplikacji przychodzącej, dostarczaniu cron oraz routingu sesji. Jeśli Twój plugin ma własną gramatykę celu, użyj resolveChannelRouteTargetWithParser(...), aby dostosować ten parser do tego samego kontraktu celu trasy.
9

Budowanie i testowanie

pnpm build
pnpm test -- my-plugin/

Referencja ścieżek importu

Ścieżka importuCelKluczowe eksporty
plugin-sdk/plugin-entryKanoniczny helper punktu wejścia PlugindefinePluginEntry
plugin-sdk/coreStarszy zbiorczy re-eksport dla definicji/builderów punktów wejścia kanałudefineChannelPluginEntry, createChatChannelPlugin
plugin-sdk/config-schemaEksport głównego schematu konfiguracjiOpenClawSchema
plugin-sdk/provider-entryHelper punktu wejścia dla pojedynczego dostawcydefineSingleProviderPluginEntry
plugin-sdk/channel-coreSkoncentrowane definicje i buildery punktów wejścia kanałudefineChannelPluginEntry, defineSetupPluginEntry, createChatChannelPlugin, createChannelPluginBase
plugin-sdk/setupWspólne helpery kreatora konfiguracjiPrompty allowlist, buildery stanu konfiguracji
plugin-sdk/setup-runtimeHelpery środowiska uruchomieniowego na czas konfiguracjiBezpieczne importowo adaptery łatek konfiguracji, helpery notatek wyszukiwania, promptResolvedAllowFrom, splitSetupEntries, delegowane proxy konfiguracji
plugin-sdk/setup-adapter-runtimePrzestarzały alias adaptera konfiguracjiUżyj plugin-sdk/setup-runtime
plugin-sdk/setup-toolsHelpery narzędziowe konfiguracjiformatCliCommand, detectBinary, extractArchive, resolveBrewExecutable, formatDocsLink, CONFIG_DIR
plugin-sdk/account-coreHelpery wielu kontHelpery listy kont/konfiguracji/bramki akcji
plugin-sdk/account-idHelpery identyfikatora kontaDEFAULT_ACCOUNT_ID, normalizacja identyfikatora konta
plugin-sdk/account-resolutionHelpery wyszukiwania kontHelpery wyszukiwania kont + domyślnego fallbacku
plugin-sdk/account-helpersWąskie helpery kontHelpery listy kont/akcji konta
plugin-sdk/channel-setupAdaptery kreatora konfiguracjicreateOptionalChannelSetupSurface, createOptionalChannelSetupAdapter, createOptionalChannelSetupWizard, plus DEFAULT_ACCOUNT_ID, createTopLevelChannelDmPolicy, setSetupChannelEnabled, splitSetupEntries
plugin-sdk/channel-pairingPrymitywy parowania DMcreateChannelPairingController
plugin-sdk/channel-reply-pipelinePowiązanie prefiksu odpowiedzi, wpisywania i dostarczania źródłacreateChannelReplyPipeline, resolveChannelSourceReplyDeliveryMode
plugin-sdk/channel-config-helpersFabryki adapterów konfiguracji i helpery dostępu DMcreateHybridChannelConfigAdapter, resolveChannelDmAccess, resolveChannelDmAllowFrom, resolveChannelDmPolicy, normalizeChannelDmPolicy, normalizeLegacyDmAliases
plugin-sdk/channel-config-schemaBuildery schematów konfiguracjiTylko wspólne prymitywy schematu konfiguracji kanału i ogólny builder
plugin-sdk/bundled-channel-config-schemaDołączone schematy konfiguracjiTylko dołączone pluginy utrzymywane przez OpenClaw; nowe pluginy muszą definiować schematy lokalne dla Plugin
plugin-sdk/channel-config-schema-legacyPrzestarzałe dołączone schematy konfiguracjiTylko alias zgodności; używaj plugin-sdk/bundled-channel-config-schema dla utrzymywanych dołączonych pluginów
plugin-sdk/telegram-command-configHelpery konfiguracji poleceń TelegramNormalizacja nazw poleceń, przycinanie opisów, walidacja duplikatów/konfliktów
plugin-sdk/channel-policyRozwiązywanie zasad grup/DMresolveChannelGroupRequireMention
plugin-sdk/channel-lifecycleHelpery stanu konta i cyklu życia strumienia szkicówcreateAccountStatusSink, helpery finalizacji podglądu szkicu
plugin-sdk/inbound-envelopeHelpery kopert przychodzącychWspólne helpery tras + buildera kopert
plugin-sdk/inbound-reply-dispatchHelpery odpowiedzi przychodzącychWspólne helpery rejestrowania i wysyłki
plugin-sdk/messaging-targetsParsowanie celów wiadomościHelpery parsowania/dopasowywania celów
plugin-sdk/outbound-mediaHelpery mediów wychodzącychWspólne ładowanie mediów wychodzących
plugin-sdk/outbound-send-depsHelpery zależności wysyłki wychodzącejLekkie wyszukiwanie resolveOutboundSendDep bez importowania pełnego środowiska wychodzącego
plugin-sdk/outbound-runtimeHelpery środowiska wychodzącegoHelpery dostarczania wychodzącego, delegata tożsamości/wysyłki, sesji, formatowania i planowania ładunku
plugin-sdk/thread-bindings-runtimeHelpery powiązań wątkówHelpery cyklu życia powiązań wątków i adapterów
plugin-sdk/agent-media-payloadStarsze helpery ładunku mediówBuilder ładunku mediów agenta dla starszych układów pól
plugin-sdk/channel-runtimePrzestarzała podkładka zgodnościTylko starsze narzędzia środowiska kanału
plugin-sdk/channel-send-resultTypy wyniku wysyłkiTypy wyniku odpowiedzi
plugin-sdk/runtime-storeTrwały magazyn PlugincreatePluginRuntimeStore
plugin-sdk/runtimeSzerokie helpery środowiska uruchomieniowegoHelpery środowiska uruchomieniowego/logowania/kopii zapasowej/instalacji Plugin
plugin-sdk/runtime-envWąskie helpery środowiska uruchomieniowegoLogger/środowisko uruchomieniowe, limit czasu, ponowienie i helpery backoff
plugin-sdk/plugin-runtimeWspólne helpery środowiska uruchomieniowego PluginHelpery poleceń/hooków/http/interaktywne Plugin
plugin-sdk/hook-runtimeHelpery potoku hookówWspólne helpery potoku webhooków/hooków wewnętrznych
plugin-sdk/lazy-runtimeHelpery leniwego środowiska uruchomieniowegocreateLazyRuntimeModule, createLazyRuntimeMethod, createLazyRuntimeMethodBinder, createLazyRuntimeNamedExport, createLazyRuntimeSurface
plugin-sdk/process-runtimeHelpery procesówWspólne helpery exec
plugin-sdk/cli-runtimeHelpery środowiska CLIFormatowanie poleceń, oczekiwania, helpery wersji
plugin-sdk/gateway-runtimeHelpery GatewayKlient Gateway, helper uruchamiania gotowego dla pętli zdarzeń oraz helpery łatek stanu kanału
plugin-sdk/config-runtimePrzestarzała podkładka zgodności konfiguracjiPreferuj config-contracts, plugin-config-runtime, runtime-config-snapshot i config-mutation
plugin-sdk/telegram-command-configHelpery poleceń TelegramStabilne względem fallbacku helpery walidacji poleceń Telegram, gdy powierzchnia kontraktu dołączonego Telegram jest niedostępna
plugin-sdk/approval-runtimeHelpery promptów zatwierdzaniaŁadunek zatwierdzania exec/Plugin, helpery możliwości/profilu zatwierdzania, natywne trasowanie/środowisko zatwierdzania oraz formatowanie ścieżki wyświetlania strukturalnego zatwierdzenia
plugin-sdk/approval-auth-runtimeHelpery autoryzacji zatwierdzaniaRozwiązywanie zatwierdzającego, autoryzacja akcji w tym samym czacie
plugin-sdk/approval-client-runtimeHelpery klienta zatwierdzaniaNatywne helpery profilu/filtra zatwierdzania exec
plugin-sdk/approval-delivery-runtimeHelpery dostarczania zatwierdzeńNatywne adaptery możliwości/dostarczania zatwierdzeń
plugin-sdk/approval-gateway-runtimeHelpery Gateway zatwierdzaniaWspólny helper rozwiązywania Gateway zatwierdzania
plugin-sdk/approval-handler-adapter-runtimeHelpery adaptera zatwierdzaniaLekkie helpery ładowania natywnego adaptera zatwierdzania dla gorących punktów wejścia kanału
plugin-sdk/approval-handler-runtimeHelpery obsługi zatwierdzaniaSzersze helpery środowiska obsługi zatwierdzania; preferuj węższe powierzchnie adaptera/Gateway, gdy wystarczają
plugin-sdk/approval-native-runtimeHelpery celu zatwierdzaniaNatywne helpery wiązania celu/konta zatwierdzania
plugin-sdk/approval-reply-runtimeHelpery odpowiedzi zatwierdzaniaHelpery ładunku odpowiedzi zatwierdzania exec/Plugin
plugin-sdk/channel-runtime-contextHelpery kontekstu środowiska kanałuOgólne helpery rejestrowania/pobierania/obserwowania kontekstu środowiska kanału
plugin-sdk/security-runtimeHelpery bezpieczeństwaWspólne helpery zaufania, bramkowania DM, plików/ścieżek ograniczonych do katalogu głównego, treści zewnętrznych i zbierania sekretów
plugin-sdk/ssrf-policyHelpery zasad SSRFHelpery allowlist hostów i zasad sieci prywatnych
plugin-sdk/ssrf-runtimeHelpery środowiska SSRFPrzypięty dyspozytor, chronione pobieranie, helpery zasad SSRF
plugin-sdk/system-event-runtimeHelpery zdarzeń systemowychenqueueSystemEvent, peekSystemEventEntries
plugin-sdk/heartbeat-runtimeHelpery HeartbeatHelpery wybudzania, zdarzeń i widoczności Heartbeat
plugin-sdk/delivery-queue-runtimeHelpery kolejki dostarczaniadrainPendingDeliveries
plugin-sdk/channel-activity-runtimeHelpery aktywności kanałurecordChannelActivity
plugin-sdk/dedupe-runtimeHelpery deduplikacjiPamięci podręczne deduplikacji w pamięci
plugin-sdk/file-access-runtimeHelpery dostępu do plikówHelpery bezpiecznych ścieżek plików/mediów lokalnych
plugin-sdk/transport-ready-runtimeHelpery gotowości transportuwaitForTransportReady
plugin-sdk/collection-runtimeHelpery ograniczonej pamięci podręcznejpruneMapToMaxSize
plugin-sdk/diagnostic-runtimeHelpery bramkowania diagnostykiisDiagnosticFlagEnabled, isDiagnosticsEnabled
plugin-sdk/error-runtimeHelpery formatowania błędówformatUncaughtError, isApprovalNotFoundError, helpery grafu błędów
plugin-sdk/fetch-runtimeHelpery opakowanego fetch/proxyresolveFetch, helpery proxy, helpery opcji EnvHttpProxyAgent
plugin-sdk/host-runtimeHelpery normalizacji hostównormalizeHostname, normalizeScpRemoteHost
plugin-sdk/retry-runtimeHelpery ponowieńRetryConfig, retryAsync, uruchamiacze zasad
plugin-sdk/allow-fromFormatowanie allowlistformatAllowFromLowercase
plugin-sdk/allowlist-resolutionMapowanie wejść allowlistmapAllowlistResolutionInputs
plugin-sdk/command-authBramkowanie poleceń i helpery powierzchni poleceńresolveControlCommandGate, helpery autoryzacji nadawcy, helpery rejestru poleceń obejmujące dynamiczne formatowanie menu argumentów
plugin-sdk/command-statusRenderery stanu/pomocy poleceńbuildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage
plugin-sdk/secret-inputParsowanie wejścia sekretówHelpery wejścia sekretów
plugin-sdk/webhook-ingressHelpery żądań WebhookNarzędzia celów Webhook
plugin-sdk/webhook-request-guardsHelpery strażników treści WebhookHelpery odczytu/limitu treści żądania
plugin-sdk/reply-runtimeWspólne środowisko odpowiedziWysyłka przychodząca, Heartbeat, planer odpowiedzi, dzielenie na fragmenty
plugin-sdk/reply-dispatch-runtimeWąskie helpery wysyłki odpowiedziFinalizacja, wysyłka dostawcy i helpery etykiet konwersacji
plugin-sdk/reply-historyHelpery historii odpowiedzibuildHistoryContext, buildPendingHistoryContextFromMap, recordPendingHistoryEntry, clearHistoryEntriesIfEnabled
plugin-sdk/reply-referencePlanowanie odwołań odpowiedzicreateReplyReferencePlanner
plugin-sdk/reply-chunkingHelpery fragmentów odpowiedziHelpery dzielenia tekstu/markdown na fragmenty
plugin-sdk/session-store-runtimeHelpery magazynu sesjiHelpery ścieżki magazynu + updated-at
plugin-sdk/state-pathsHelpery ścieżek stanuHelpery katalogów stanu i OAuth
plugin-sdk/routingHelpery trasowania/klucza sesjiresolveAgentRoute, buildAgentSessionKey, resolveDefaultAgentBoundAccountId, helpery normalizacji klucza sesji
plugin-sdk/status-helpersHelpery stanu kanałuBuildery podsumowania stanu kanału/konta, domyślne wartości stanu środowiska uruchomieniowego, helpery metadanych problemu
plugin-sdk/target-resolver-runtimeHelpery resolvera celówWspólne helpery resolvera celów
plugin-sdk/string-normalization-runtimeHelpery normalizacji ciągówHelpery normalizacji slug/ciągów
plugin-sdk/request-urlHelpery URL żądaniaWyodrębnianie URL-i jako ciągów z wejść podobnych do żądania
plugin-sdk/run-commandHelpery poleceń z limitem czasuRunner poleceń z limitem czasu i znormalizowanymi stdout/stderr
plugin-sdk/param-readersCzytniki parametrówWspólne czytniki parametrów narzędzi/CLI
plugin-sdk/tool-payloadWyodrębnianie ładunku narzędziaWyodrębnia znormalizowane ładunki z obiektów wyników narzędzi
plugin-sdk/tool-sendWyodrębnianie wysyłki narzędziaWyodrębnia kanoniczne pola celu wysyłki z argumentów narzędzia
plugin-sdk/temp-pathPomocniki ścieżek tymczasowychWspółdzielone pomocniki ścieżek pobierania tymczasowego
plugin-sdk/logging-corePomocniki rejestrowaniaPomocniki loggera podsystemu i redakcji
plugin-sdk/markdown-table-runtimePomocniki tabel MarkdownPomocniki trybu tabel Markdown
plugin-sdk/reply-payloadTypy odpowiedzi wiadomościTypy ładunku odpowiedzi
plugin-sdk/provider-setupWyselekcjonowane pomocniki konfiguracji lokalnych/samohostowanych dostawcówPomocniki wykrywania/konfiguracji samohostowanych dostawców
plugin-sdk/self-hosted-provider-setupSkupione pomocniki konfiguracji samohostowanych dostawców zgodnych z OpenAITe same pomocniki wykrywania/konfiguracji samohostowanych dostawców
plugin-sdk/provider-auth-runtimePomocniki uwierzytelniania środowiska uruchomieniowego dostawcyPomocniki rozwiązywania klucza API w czasie wykonywania
plugin-sdk/provider-auth-api-keyPomocniki konfiguracji klucza API dostawcyPomocniki onboardingu i zapisu profilu klucza API
plugin-sdk/provider-auth-resultPomocniki wyniku uwierzytelniania dostawcyStandardowy konstruktor wyniku uwierzytelniania OAuth
plugin-sdk/provider-selection-runtimePomocniki wyboru dostawcyWybór skonfigurowanego lub automatycznego dostawcy oraz scalanie surowej konfiguracji dostawcy
plugin-sdk/provider-env-varsPomocniki zmiennych środowiskowych dostawcyPomocniki wyszukiwania zmiennych środowiskowych uwierzytelniania dostawcy
plugin-sdk/provider-model-sharedWspółdzielone pomocniki modelu/odtwarzania dostawcyProviderReplayFamily, buildProviderReplayFamilyHooks, normalizeModelCompat, współdzielone konstruktory zasad odtwarzania, pomocniki punktów końcowych dostawcy i pomocniki normalizacji identyfikatorów modeli
plugin-sdk/provider-catalog-sharedWspółdzielone pomocniki katalogu dostawcyfindCatalogTemplate, buildSingleProviderApiKeyCatalog, buildManifestModelProviderConfig, supportsNativeStreamingUsageCompat, applyProviderNativeStreamingUsageCompat
plugin-sdk/provider-onboardPoprawki onboardingu dostawcyPomocniki konfiguracji onboardingu
plugin-sdk/provider-httpPomocniki HTTP dostawcyOgólne pomocniki możliwości HTTP/punktów końcowych dostawcy, w tym pomocniki formularza multipart do transkrypcji audio
plugin-sdk/provider-web-fetchPomocniki pobierania z sieci dostawcyPomocniki rejestracji/pamięci podręcznej dostawcy pobierania z sieci
plugin-sdk/provider-web-search-config-contractPomocniki konfiguracji wyszukiwania w sieci dostawcyWąskie pomocniki konfiguracji/poświadczeń wyszukiwania w sieci dla dostawców, którzy nie potrzebują okablowania włączania Plugin
plugin-sdk/provider-web-search-contractPomocniki kontraktu wyszukiwania w sieci dostawcyWąskie pomocniki kontraktu konfiguracji/poświadczeń wyszukiwania w sieci, takie jak createWebSearchProviderContractFields, enablePluginInConfig, resolveProviderWebSearchPluginConfig oraz zakresowe settery/gettery poświadczeń
plugin-sdk/provider-web-searchPomocniki wyszukiwania w sieci dostawcyPomocniki rejestracji/pamięci podręcznej/środowiska uruchomieniowego dostawcy wyszukiwania w sieci
plugin-sdk/provider-toolsPomocniki zgodności narzędzi/schematu dostawcyProviderToolCompatFamily, buildProviderToolCompatFamilyHooks oraz czyszczenie schematu Gemini i diagnostyka
plugin-sdk/provider-usagePomocniki użycia dostawcyfetchClaudeUsage, fetchGeminiUsage, fetchGithubCopilotUsage i inne pomocniki użycia dostawcy
plugin-sdk/provider-streamPomocniki opakowań strumienia dostawcyProviderStreamFamily, buildProviderStreamFamilyHooks, composeProviderStreamWrappers, typy opakowań strumieni oraz współdzielone pomocniki opakowań Anthropic/Bedrock/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot
plugin-sdk/provider-transport-runtimePomocniki transportu dostawcyNatywne pomocniki transportu dostawcy, takie jak chronione pobieranie, transformacje komunikatów transportu i zapisywalne strumienie zdarzeń transportu
plugin-sdk/keyed-async-queueUporządkowana kolejka asynchronicznaKeyedAsyncQueue
plugin-sdk/media-runtimeWspółdzielone pomocniki mediówPomocniki pobierania/przekształcania/przechowywania mediów, sondowanie wymiarów wideo oparte na ffprobe oraz konstruktory ładunków mediów
plugin-sdk/media-generation-runtimeWspółdzielone pomocniki generowania mediówWspółdzielone pomocniki przełączania awaryjnego, wybór kandydatów i komunikaty o brakujących modelach dla generowania obrazów/wideo/muzyki
plugin-sdk/media-understandingPomocniki rozumienia mediówTypy dostawców rozumienia mediów oraz eksporty pomocników obrazu/audio skierowane do dostawców
plugin-sdk/text-runtimePrzestarzały szeroki eksport zgodności tekstuUżyj string-coerce-runtime, text-chunking, text-utility-runtime i logging-core
plugin-sdk/text-chunkingPomocniki dzielenia tekstuPomocnik dzielenia tekstu wychodzącego
plugin-sdk/speechPomocniki mowyTypy dostawców mowy oraz skierowane do dostawców pomocniki dyrektyw, rejestru i walidacji, a także konstruktor TTS zgodny z OpenAI
plugin-sdk/speech-coreWspółdzielony rdzeń mowyTypy dostawców mowy, rejestr, dyrektywy, normalizacja
plugin-sdk/realtime-transcriptionPomocniki transkrypcji w czasie rzeczywistymTypy dostawców, pomocniki rejestru i współdzielony pomocnik sesji WebSocket
plugin-sdk/realtime-voicePomocniki głosu w czasie rzeczywistymTypy dostawców, pomocniki rejestru/rozwiązywania, pomocniki sesji mostka, współdzielone kolejki odpowiedzi głosowych agenta, kondycja transkrypcji/zdarzeń, tłumienie echa i pomocniki szybkiej konsultacji kontekstu
plugin-sdk/image-generationPomocniki generowania obrazówTypy dostawców generowania obrazów oraz pomocniki zasobów obrazu/adresów URL danych i konstruktor dostawcy obrazów zgodny z OpenAI
plugin-sdk/image-generation-coreWspółdzielony rdzeń generowania obrazówTypy generowania obrazów, przełączanie awaryjne, uwierzytelnianie i pomocniki rejestru
plugin-sdk/music-generationPomocniki generowania muzykiTypy dostawców/żądań/wyników generowania muzyki
plugin-sdk/music-generation-coreWspółdzielony rdzeń generowania muzykiTypy generowania muzyki, pomocniki przełączania awaryjnego, wyszukiwanie dostawcy i parsowanie odwołań do modeli
plugin-sdk/video-generationPomocniki generowania wideoTypy dostawców/żądań/wyników generowania wideo
plugin-sdk/video-generation-coreWspółdzielony rdzeń generowania wideoTypy generowania wideo, pomocniki przełączania awaryjnego, wyszukiwanie dostawcy i parsowanie odwołań do modeli
plugin-sdk/interactive-runtimePomocniki odpowiedzi interaktywnychNormalizacja/redukcja ładunku odpowiedzi interaktywnej
plugin-sdk/channel-config-primitivesPrymitywy konfiguracji kanałuWąskie prymitywy schematu konfiguracji kanału
plugin-sdk/channel-config-writesPomocniki zapisu konfiguracji kanałuPomocniki autoryzacji zapisu konfiguracji kanału
plugin-sdk/channel-plugin-commonWspółdzielona preambuła kanałuWspółdzielone eksporty preambuły Plugin kanału
plugin-sdk/channel-statusPomocniki statusu kanałuWspółdzielone pomocniki migawki/podsumowania statusu kanału
plugin-sdk/allowlist-config-editPomocniki konfiguracji listy dozwolonychPomocniki edycji/odczytu konfiguracji listy dozwolonych
plugin-sdk/group-accessPomocniki dostępu grupowegoWspółdzielone pomocniki decyzji dostępu grupowego
plugin-sdk/direct-dmPomocniki bezpośrednich DMWspółdzielone pomocniki uwierzytelniania/ochrony bezpośrednich DM
plugin-sdk/extension-sharedWspółdzielone pomocniki rozszerzeńPrymitywy pomocników kanału pasywnego/statusu i proxy otoczenia
plugin-sdk/webhook-targetsPomocniki celów WebhookRejestr celów Webhook i pomocniki instalacji tras
plugin-sdk/webhook-pathPrzestarzały alias ścieżki webhookaUżyj plugin-sdk/webhook-ingress
plugin-sdk/web-mediaWspółdzielone pomocniki mediów internetowychPomocniki ładowania mediów zdalnych/lokalnych
plugin-sdk/zodPrzestarzały reeksport zgodności ZodImportuj zod bezpośrednio z zod
plugin-sdk/memory-coreDołączone pomocniki rdzenia pamięciPowierzchnia pomocnicza menedżera/konfiguracji/plików/CLI pamięci
plugin-sdk/memory-core-engine-runtimeFasada środowiska uruchomieniowego silnika pamięciFasada środowiska uruchomieniowego indeksu/wyszukiwania pamięci
plugin-sdk/memory-core-host-engine-foundationSilnik fundamentu hosta pamięciEksporty silnika fundamentu hosta pamięci
plugin-sdk/memory-core-host-engine-embeddingsSilnik osadzania hosta pamięciKontrakty osadzania pamięci, dostęp do rejestru, dostawca lokalny oraz ogólne pomocniki wsadowe/zdalne; konkretni dostawcy zdalni żyją we własnych Plugin
plugin-sdk/memory-core-host-engine-qmdSilnik QMD hosta pamięciEksporty silnika QMD hosta pamięci
plugin-sdk/memory-core-host-engine-storageSilnik magazynu hosta pamięciEksporty silnika magazynu hosta pamięci
plugin-sdk/memory-core-host-multimodalPomocniki multimodalne hosta pamięciPomocniki multimodalne hosta pamięci
plugin-sdk/memory-core-host-queryPomocniki zapytań hosta pamięciPomocniki zapytań hosta pamięci
plugin-sdk/memory-core-host-secretPomocniki sekretów hosta pamięciPomocniki sekretów hosta pamięci
plugin-sdk/memory-core-host-eventsPrzestarzały alias zdarzeń pamięciUżyj plugin-sdk/memory-host-events
plugin-sdk/memory-core-host-statusPomocniki statusu hosta pamięciPomocniki statusu hosta pamięci
plugin-sdk/memory-core-host-runtime-cliŚrodowisko uruchomieniowe CLI hosta pamięciPomocniki środowiska uruchomieniowego CLI hosta pamięci
plugin-sdk/memory-core-host-runtime-coreRdzeniowe środowisko uruchomieniowe hosta pamięciPomocniki rdzeniowego środowiska uruchomieniowego hosta pamięci
plugin-sdk/memory-core-host-runtime-filesPomocniki plików/środowiska uruchomieniowego hosta pamięciPomocniki plików/środowiska uruchomieniowego hosta pamięci
plugin-sdk/memory-host-coreAlias rdzeniowego środowiska uruchomieniowego hosta pamięciNeutralny względem dostawcy alias pomocników rdzeniowego środowiska uruchomieniowego hosta pamięci
plugin-sdk/memory-host-eventsAlias dziennika zdarzeń hosta pamięciNeutralny względem dostawcy alias pomocników dziennika zdarzeń hosta pamięci
plugin-sdk/memory-host-filesPrzestarzały alias plików/środowiska uruchomieniowego pamięciUżyj plugin-sdk/memory-core-host-runtime-files
plugin-sdk/memory-host-markdownPomocniki zarządzanego MarkdownWspółdzielone pomocniki zarządzanego Markdown dla Plugin sąsiadujących z pamięcią
plugin-sdk/memory-host-searchFasada wyszukiwania aktywnej pamięciLeniwa fasada środowiska uruchomieniowego menedżera wyszukiwania aktywnej pamięci
plugin-sdk/memory-host-statusPrzestarzały alias statusu hosta pamięciUżyj plugin-sdk/memory-core-host-status
plugin-sdk/testingNarzędzia testoweLokalny dla repozytorium przestarzały barrel zgodności; używaj skupionych lokalnych podścieżek testowych repozytorium, takich jak plugin-sdk/plugin-test-runtime, plugin-sdk/channel-test-helpers, plugin-sdk/channel-target-testing, plugin-sdk/test-env i plugin-sdk/test-fixtures
Ta tabela celowo obejmuje wspólny podzbiór migracyjny, a nie całą powierzchnię SDK. Inwentarz punktów wejścia kompilatora znajduje się w scripts/lib/plugin-sdk-entrypoints.json; eksporty pakietu są generowane z publicznego podzbioru. Zarezerwowane pomocnicze punkty integracji wbudowanych Pluginów zostały wycofane z publicznej mapy eksportów SDK z wyjątkiem jawnie udokumentowanych fasad zgodności, takich jak przestarzały shim plugin-sdk/discord, zachowany dla opublikowanego pakietu @openclaw/discord@2026.3.13. Pomocnicy specyficzni dla właściciela znajdują się wewnątrz pakietu Pluginu właściciela; współdzielone zachowanie hosta powinno przechodzić przez ogólne kontrakty SDK, takie jak plugin-sdk/gateway-runtime, plugin-sdk/security-runtime i plugin-sdk/plugin-config-runtime. Używaj najwęższego importu pasującego do zadania. Jeśli nie możesz znaleźć eksportu, sprawdź źródło w src/plugin-sdk/ albo zapytaj maintainerów, który ogólny kontrakt powinien go posiadać.

Aktywne wycofania

Węższe wycofania, które dotyczą całego SDK Pluginów, kontraktu providera, powierzchni runtime i manifestu. Każde z nich nadal dziś działa, ale zostanie usunięte w przyszłym wydaniu głównym. Wpis pod każdym elementem mapuje stare API na jego kanoniczny zamiennik.
Stare (openclaw/plugin-sdk/command-auth): buildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage.Nowe (openclaw/plugin-sdk/command-status): te same sygnatury, te same eksporty - tylko importowane z węższej podścieżki. command-auth reeksportuje je jako stuby zgodności.
// Before
import { buildHelpMessage } from "openclaw/plugin-sdk/command-auth";

// After
import { buildHelpMessage } from "openclaw/plugin-sdk/command-status";
Stare: resolveInboundMentionRequirement({ facts, policy }) i shouldDropInboundForMention(...) z openclaw/plugin-sdk/channel-inbound albo openclaw/plugin-sdk/channel-mention-gating.Nowe: resolveInboundMentionDecision({ facts, policy }) - zwraca pojedynczy obiekt decyzji zamiast dwóch rozdzielonych wywołań.Niżej położone Pluginy kanałów (Slack, Discord, Matrix, MS Teams) już się przełączyły.
openclaw/plugin-sdk/channel-runtime to shim zgodności dla starszych Pluginów kanałów. Nie importuj go z nowego kodu; użyj openclaw/plugin-sdk/channel-runtime-context do rejestrowania obiektów runtime.Pomocnicy channelActions* w openclaw/plugin-sdk/channel-actions są przestarzali razem z surowymi eksportami kanałów typu “actions”. Zamiast tego wystawiaj możliwości przez semantyczną powierzchnię presentation - Pluginy kanałów deklarują, co renderują (karty, przyciski, selecty), a nie które surowe nazwy akcji akceptują.
Stare: fabryka tool() z openclaw/plugin-sdk/provider-web-search.Nowe: zaimplementuj createTool(...) bezpośrednio w Pluginie providera. OpenClaw nie potrzebuje już pomocnika SDK do rejestrowania wrappera narzędzia.
Stare: formatInboundEnvelope(...) (i ChannelMessageForAgent.channelEnvelope) do budowania płaskiej koperty promptu w tekście zwykłym z przychodzących wiadomości kanału.Nowe: BodyForAgent oraz ustrukturyzowane bloki kontekstu użytkownika. Pluginy kanałów dołączają metadane routingu (wątek, temat, odpowiedź-do, reakcje) jako typowane pola zamiast konkatenować je w string promptu. Pomocnik formatAgentEnvelope(...) jest nadal wspierany dla syntetyzowanych kopert skierowanych do asystenta, ale przychodzące koperty w tekście zwykłym są wycofywane.Obszary objęte zmianą: inbound_claim, message_received i każdy niestandardowy Plugin kanału, który przetwarzał tekst channelEnvelope po fakcie.
Cztery aliasy typów discovery są teraz cienkimi wrapperami nad typami z epoki katalogu:
Stary aliasNowy typ
ProviderDiscoveryOrderProviderCatalogOrder
ProviderDiscoveryContextProviderCatalogContext
ProviderDiscoveryResultProviderCatalogResult
ProviderPluginDiscoveryProviderPluginCatalog
Do tego starszy statyczny zbiór ProviderCapabilities - Pluginy providerów powinny używać jawnych hooków providera, takich jak buildReplayPolicy, normalizeToolSchemas i wrapStreamFn, zamiast statycznego obiektu.
Stare (trzy osobne hooki w ProviderThinkingPolicy): isBinaryThinking(ctx), supportsXHighThinking(ctx) i resolveDefaultThinkingLevel(ctx).Nowe: pojedyncze resolveThinkingProfile(ctx), które zwraca ProviderThinkingProfile z kanonicznym id, opcjonalnym label i rankingowaną listą poziomów. OpenClaw automatycznie obniża nieaktualne zapisane wartości według rankingu profilu.Zaimplementuj jeden hook zamiast trzech. Starsze hooki nadal działają w trakcie okna wycofania, ale nie są komponowane z wynikiem profilu.
Stare: implementowanie resolveExternalOAuthProfiles(...) bez deklarowania providera w manifeście Pluginu.Nowe: zadeklaruj contracts.externalAuthProviders w manifeście Pluginu oraz zaimplementuj resolveExternalAuthProfiles(...). Stara ścieżka “fallback auth” emituje ostrzeżenie w runtime i zostanie usunięta.
{
  "contracts": {
    "externalAuthProviders": ["anthropic", "openai"]
  }
}
Stare pole manifestu: providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }.Nowe: odzwierciedl to samo wyszukiwanie zmiennych środowiskowych w setup.providers[].envVars w manifeście. Konsoliduje to metadane środowiska setup/status w jednym miejscu i pozwala uniknąć uruchamiania runtime Pluginu tylko po to, aby odpowiedzieć na zapytania o zmienne środowiskowe.providerAuthEnvVars pozostaje wspierane przez adapter zgodności do zamknięcia okna wycofania.
Stare: trzy osobne wywołania - api.registerMemoryPromptSection(...), api.registerMemoryFlushPlan(...), api.registerMemoryRuntime(...).Nowe: jedno wywołanie w API stanu pamięci - registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime }).Te same sloty, pojedyncze wywołanie rejestrujące. Addytywne pomocniki pamięci (registerMemoryPromptSupplement, registerMemoryCorpusSupplement, registerMemoryEmbeddingProvider) nie są objęte zmianą.
Dwa starsze aliasy typów nadal eksportowane z src/plugins/runtime/types.ts:
StareNowe
SubagentReadSessionParamsSubagentGetSessionMessagesParams
SubagentReadSessionResultSubagentGetSessionMessagesResult
Metoda runtime readSession jest przestarzała na rzecz getSessionMessages. Ta sama sygnatura; stara metoda przekazuje wywołanie do nowej.
Stare: runtime.tasks.flow (liczba pojedyncza) zwracało aktywny accessor task-flow.Nowe: runtime.tasks.managedFlows zachowuje zarządzany runtime mutacji TaskFlow dla Pluginów, które tworzą, aktualizują, anulują lub uruchamiają zadania potomne z flow. Użyj runtime.tasks.flows, gdy Plugin potrzebuje tylko odczytów opartych na DTO.
// Before
const flow = api.runtime.tasks.flow.fromToolContext(ctx);
// After
const flow = api.runtime.tasks.managedFlows.fromToolContext(ctx);
Omówione w sekcji “Jak migrować → Migruj rozszerzenia wyników narzędzi Pi do middleware” powyżej. Uwzględnione tutaj dla kompletności: usunięta ścieżka tylko dla Pi api.registerEmbeddedExtensionFactory(...) jest zastąpiona przez api.registerAgentToolResultMiddleware(...) z jawną listą runtime w contracts.agentToolResultMiddleware.
OpenClawSchemaType reeksportowany z openclaw/plugin-sdk jest teraz jednoliniowym aliasem dla OpenClawConfig. Preferuj kanoniczną nazwę.
// Before
import type { OpenClawSchemaType } from "openclaw/plugin-sdk";
// After
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-schema";
Wycofania na poziomie rozszerzeń (wewnątrz wbudowanych Pluginów kanałów/providerów pod extensions/) są śledzone w ich własnych barrelach api.ts i runtime-api.ts. Nie wpływają na kontrakty Pluginów zewnętrznych i nie są tutaj wymienione. Jeśli konsumujesz lokalny barrel wbudowanego Pluginu bezpośrednio, przed aktualizacją przeczytaj komentarze o wycofaniu w tym barrelu.

Harmonogram usunięcia

KiedyCo się dzieje
TerazPrzestarzałe powierzchnie emitują ostrzeżenia runtime
Następne wydanie głównePrzestarzałe powierzchnie zostaną usunięte; Pluginy nadal ich używające zakończą się błędem
Wszystkie podstawowe Pluginy zostały już zmigrowane. Pluginy zewnętrzne powinny zmigrować przed następnym wydaniem głównym.

Tymczasowe wyciszanie ostrzeżeń

Ustaw te zmienne środowiskowe podczas pracy nad migracją:
OPENCLAW_SUPPRESS_PLUGIN_SDK_COMPAT_WARNING=1 openclaw gateway run
OPENCLAW_SUPPRESS_EXTENSION_API_WARNING=1 openclaw gateway run
To tymczasowa furtka, a nie trwałe rozwiązanie.

Powiązane