Zum Hauptinhalt springen

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 ist von einer breiten Abwärtskompatibilitätsschicht zu einer modernen Plugin- Architektur mit fokussierten, dokumentierten Imports gewechselt. Wenn Ihr Plugin vor der neuen Architektur erstellt wurde, hilft Ihnen dieser Leitfaden bei der Migration.

Was sich ändert

Das alte Plugin-System stellte zwei weit geöffnete Oberflächen bereit, über die Plugins alles, was sie benötigten, von einem einzigen Einstiegspunkt importieren konnten:
  • openclaw/plugin-sdk/compat - ein einzelner Import, der Dutzende Hilfsfunktionen erneut exportierte. Er wurde eingeführt, um ältere Hook-basierte Plugins funktionsfähig zu halten, während die neue Plugin-Architektur aufgebaut wurde.
  • openclaw/plugin-sdk/infra-runtime - ein breites Runtime-Hilfs- barrel, das Systemereignisse, Heartbeat-Status, Zustellungswarteschlangen, Fetch-/Proxy-Hilfen, Dateihilfen, Genehmigungstypen und nicht verwandte Dienstprogramme vermischte.
  • openclaw/plugin-sdk/config-runtime - ein breites Config-Kompatibilitäts-barrel, das während des Migrationsfensters weiterhin veraltete direkte Lade-/Schreibhilfen enthält.
  • openclaw/extension-api - eine Brücke, die Plugins direkten Zugriff auf hostseitige Hilfen wie den eingebetteten Agent-Runner gab.
  • api.registerEmbeddedExtensionFactory(...) - ein entfernter, nur für Pi gebündelter Extension-Hook, der eingebettete Runner-Ereignisse wie tool_result beobachten konnte.
Die breiten Import-Oberflächen sind jetzt veraltet. Sie funktionieren zur Laufzeit weiterhin, aber neue Plugins dürfen sie nicht verwenden, und bestehende Plugins sollten migriert werden, bevor sie im nächsten Major-Release entfernt werden. Die Pi-only-API zur Registrierung einer eingebetteten Extension-Factory wurde entfernt; verwenden Sie stattdessen Tool-Result-Middleware. OpenClaw entfernt oder reinterpretieren dokumentiertes Plugin-Verhalten nicht in derselben Änderung, die einen Ersatz einführt. Breaking-Contract-Änderungen müssen zuerst durch einen Kompatibilitätsadapter, Diagnosen, Dokumentation und ein Deprecation-Fenster gehen. Das gilt für SDK-Imports, Manifest-Felder, Setup-APIs, Hooks und Runtime- Registrierungsverhalten.
Die Abwärtskompatibilitätsschicht wird in einem zukünftigen Major-Release entfernt. Plugins, die weiterhin von diesen Oberflächen importieren, werden dann nicht mehr funktionieren. Pi-only-Registrierungen für eingebettete Extension-Factories werden bereits nicht mehr geladen.

Warum sich das geändert hat

Der alte Ansatz verursachte Probleme:
  • Langsamer Start - das Importieren einer Hilfsfunktion lud Dutzende nicht verwandter Module
  • Zyklische Abhängigkeiten - breite Re-Exports machten es leicht, Import-Zyklen zu erzeugen
  • Unklare API-Oberfläche - es war nicht erkennbar, welche Exports stabil und welche intern waren
Das moderne Plugin-SDK behebt das: Jeder Import-Pfad (openclaw/plugin-sdk/\<subpath\>) ist ein kleines, eigenständiges Modul mit klarem Zweck und dokumentiertem Vertrag. Legacy-Komfortseams für Provider gebündelter Channels sind ebenfalls entfernt. Channel-gebrandete Hilfsseams waren private Mono-Repo-Abkürzungen, keine stabilen Plugin-Verträge. Verwenden Sie stattdessen schmale generische SDK-Subpaths. Innerhalb des gebündelten Plugin-Workspace sollten Provider-eigene Hilfen im jeweiligen eigenen api.ts oder runtime-api.ts des Plugins bleiben. Aktuelle Beispiele für gebündelte Provider:
  • Anthropic hält Claude-spezifische Stream-Hilfen in seinem eigenen api.ts- / contract-api.ts-Seam
  • OpenAI hält Provider-Builder, Default-Model-Hilfen und Realtime-Provider- Builder in seinem eigenen api.ts
  • OpenRouter hält Provider-Builder und Onboarding-/Config-Hilfen in seinem eigenen api.ts

Migrationsplan für Talk und Echtzeit-Sprache

Realtime-Voice-, Telefonie-, Meeting- und Browser-Talk-Code wird von oberflächenlokaler Turn-Buchführung zu einem gemeinsamen Talk-Session-Controller verschoben, der von openclaw/plugin-sdk/realtime-voice exportiert wird. Der neue Controller verwaltet die gemeinsame Talk-Event-Hülle, den aktiven Turn-Status, Capture-Status, Output-Audio-Status, die aktuelle Ereignishistorie und die Zurückweisung veralteter Turns. Provider-Plugins sollten weiterhin anbieterspezifische Realtime- Sessions besitzen; Surface-Plugins sollten weiterhin Capture, Wiedergabe, Telefonie und Meeting-Eigenheiten besitzen. Diese Talk-Migration ist absichtlich sauber brechend:
  1. Behalten Sie die gemeinsamen Controller-/Runtime-Primitiven in plugin-sdk/realtime-voice.
  2. Verschieben Sie gebündelte Surfaces auf den gemeinsamen Controller: Browser-Relay, Managed-Room-Handoff, Voice-Call-Realtime, Voice-Call-Streaming-STT, Google Meet-Realtime und natives Push-to-Talk.
  3. Ersetzen Sie alte Talk-RPC-Familien durch die endgültige talk.session.*- und talk.client.*-API.
  4. Bewerben Sie einen Live-Talk-Ereigniskanal in Gateway hello-ok.features.events: talk.event.
  5. Löschen Sie den alten Realtime-HTTP-Endpunkt und jeden Pfad für Request-time- Instruction-Overrides.
Neuer Code sollte createTalkEventSequencer(...) nicht direkt aufrufen, es sei denn, er implementiert einen Low-Level-Adapter oder eine Test-Fixture. Bevorzugen Sie den gemeinsamen Controller, damit turn-bezogene Ereignisse nicht ohne Turn-ID ausgegeben werden können, veraltete turnEnd- / turnCancel-Aufrufe keinen neueren aktiven Turn löschen können und Output-Audio-Lifecycle-Ereignisse über Telefonie, Meetings, Browser-Relay, Managed-Room-Handoff und native Talk-Clients hinweg konsistent bleiben. Die angestrebte öffentliche API-Form ist:
// 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 });
Browser-eigene WebRTC-/Provider-Websocket-Sessions verwenden talk.client.create, weil der Browser die Provider-Aushandlung und den Medientransport besitzt, während das Gateway Zugangsdaten, Instruktionen und Tool-Policy besitzt. talk.session.* ist die gemeinsame Gateway-verwaltete Oberfläche für Gateway-Relay-Realtime, Gateway-Relay- Transkription und native Managed-Room-STT-/TTS-Sessions. Legacy-Configs, die Realtime-Selektoren neben talk.provider / talk.providers platziert haben, sollten mit openclaw doctor --fix repariert werden; Runtime-Talk interpretiert Speech-/TTS-Provider-Config nicht als Realtime-Provider- Config um. Die unterstützten talk.session.create-Kombinationen sind absichtlich klein:
ModusTransportBrainBesitzerHinweise
realtimegateway-relayagent-consultGatewayFull-Duplex-Provider-Audio wird über das Gateway überbrückt; Tool-Aufrufe werden über das agent-consult-Tool geroutet.
transcriptiongateway-relaynoneGatewayNur Streaming-STT; Aufrufer senden Eingabeaudio und empfangen Transkriptionsereignisse.
stt-ttsmanaged-roomagent-consultNative/client roomPush-to-Talk- und Walkie-Talkie-artige Räume, in denen der Client Capture/Wiedergabe besitzt und das Gateway den Turn-Status besitzt.
stt-ttsmanaged-roomdirect-toolsNative/client roomAdmin-only-Raummodus für vertrauenswürdige First-Party-Surfaces, die Gateway-Tool-Aktionen direkt ausführen.
Entfernte Methodenzuordnung:
AltNeu
talk.realtime.sessiontalk.client.create
talk.realtime.toolCalltalk.client.toolCall
talk.realtime.relayAudiotalk.session.appendAudio
talk.realtime.relayCanceltalk.session.cancelOutput oder 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
Das vereinheitlichte Steuervokabular ist ebenfalls bewusst schmal:
MethodeGilt fürVertrag
talk.session.appendAudiorealtime/gateway-relay, transcription/gateway-relayHängt einen base64-PCM-Audio-Chunk an die Provider-Session an, die derselben Gateway-Verbindung gehört.
talk.session.startTurnstt-tts/managed-roomStartet einen Managed-Room-Benutzer-Turn.
talk.session.endTurnstt-tts/managed-roomBeendet den aktiven Turn nach der Validierung veralteter Turns.
talk.session.cancelTurnalle Gateway-eigenen SessionsBricht aktive Capture-/Provider-/Agent-/TTS-Arbeit für einen Turn ab.
talk.session.cancelOutputrealtime/gateway-relayStoppt die Audioausgabe des Assistenten, ohne den Benutzer-Turn zwangsläufig zu beenden.
talk.session.submitToolResultrealtime/gateway-relaySchließt einen vom Relay ausgegebenen Provider-Tool-Aufruf ab; übergeben Sie options.willContinue für Zwischenausgabe oder options.suppressResponse, um den Aufruf ohne weitere Assistentenantwort zu erfüllen.
talk.session.closealle vereinheitlichten SessionsStoppt Relay-Sessions oder widerruft Managed-Room-Status und vergisst anschließend die vereinheitlichte Session-ID.
Führen Sie keine Provider- oder Plattform-Sonderfälle im Core ein, damit dies funktioniert. Der Core besitzt die Talk-Sitzungssemantik. Provider-Plugins besitzen die Einrichtung von Vendor-Sitzungen. Sprachanruf und Google Meet besitzen Telefonie-/Meeting-Adapter. Browser und native Apps besitzen die UX für Geräteerfassung/-wiedergabe.

Kompatibilitätsrichtlinie

Für externe Plugins folgt Kompatibilitätsarbeit dieser Reihenfolge:
  1. neuen Vertrag hinzufügen
  2. altes Verhalten über einen Kompatibilitätsadapter weiter verdrahtet lassen
  3. Diagnose oder Warnung ausgeben, die den alten Pfad und den Ersatz nennt
  4. beide Pfade in Tests abdecken
  5. Deprecation und Migrationspfad dokumentieren
  6. erst nach dem angekündigten Migrationsfenster entfernen, üblicherweise in einem Major-Release
Maintainer können die aktuelle Migrationswarteschlange mit pnpm plugins:boundary-report prüfen. Verwenden Sie pnpm plugins:boundary-report:summary für kompakte Zählungen, --owner <id> für ein Plugin oder einen Kompatibilitätseigentümer und pnpm plugins:boundary-report:ci, wenn ein CI-Gate bei fälligen Kompatibilitätseinträgen, owner-übergreifenden reservierten SDK-Importen oder ungenutzten reservierten SDK- Subpfaden fehlschlagen soll. Der Bericht gruppiert veraltete Kompatibilitätseinträge nach Entfernungsdatum, zählt lokale Code-/Docs-Referenzen, zeigt owner-übergreifende reservierte SDK-Importe an und fasst die private Memory-Host-SDK-Bridge zusammen, damit Kompatibilitätsbereinigung explizit bleibt, statt sich auf Ad-hoc-Suchen zu verlassen. Reservierte SDK-Subpfade müssen nachverfolgte Owner-Nutzung haben; ungenutzte reservierte Helper-Exporte sollten aus dem öffentlichen SDK entfernt werden. Wenn ein Manifest-Feld weiterhin akzeptiert wird, können Plugin-Autoren es weiter verwenden, bis die Dokumentation und Diagnosen etwas anderes sagen. Neuer Code sollte den dokumentierten Ersatz bevorzugen, aber bestehende Plugins sollten während gewöhnlicher Minor- Releases nicht brechen.

Migration

1

Runtime-Config-Load-/Write-Helper migrieren

Gebündelte Plugins sollten aufhören, api.runtime.config.loadConfig() und api.runtime.config.writeConfigFile(...) direkt aufzurufen. Bevorzugen Sie Config, die bereits in den aktiven Aufrufpfad übergeben wurde. Langlebige Handler, die den aktuellen Prozess-Snapshot benötigen, können api.runtime.config.current() verwenden. Langlebige Agent-Tools sollten im execute den ctx.getRuntimeConfig() des Tool-Kontexts verwenden, damit ein vor einem Config-Schreibvorgang erstelltes Tool weiterhin die aktualisierte Runtime-Config sieht.Config-Schreibvorgänge müssen über die transaktionalen Helper laufen und eine After-Write-Richtlinie wählen:
await api.runtime.config.mutateConfigFile({
  afterWrite: { mode: "auto" },
  mutate(draft) {
    draft.plugins ??= {};
  },
});
Verwenden Sie afterWrite: { mode: "restart", reason: "..." }, wenn der Aufrufer weiß, dass die Änderung einen sauberen Gateway-Neustart erfordert, und afterWrite: { mode: "none", reason: "..." } nur, wenn der Aufrufer die Folgeaktion besitzt und den Reload-Planner bewusst unterdrücken möchte. Mutationsergebnisse enthalten eine typisierte followUp-Zusammenfassung für Tests und Logging; der Gateway bleibt dafür verantwortlich, den Neustart anzuwenden oder einzuplanen. loadConfig und writeConfigFile bleiben während des Migrationsfensters als veraltete Kompatibilitäts-Helper für externe Plugins erhalten und warnen einmal mit dem Kompatibilitätscode runtime-config-load-write. Gebündelte Plugins und Repo- Runtime-Code werden durch Scanner-Leitplanken in pnpm check:deprecated-api-usage und pnpm check:no-runtime-action-load-config geschützt: neue Nutzung in Produktions-Plugins schlägt sofort fehl, direkte Config-Schreibvorgänge schlagen fehl, Gateway-Server-Methoden müssen den Request-Runtime-Snapshot verwenden, Runtime-Channel-Send-/Action-/Client-Helper müssen Config von ihrer Grenze erhalten, und langlebige Runtime-Module haben null erlaubte umgebende loadConfig()-Aufrufe.Neuer Plugin-Code sollte außerdem den Import des breiten Kompatibilitäts-Barrels openclaw/plugin-sdk/config-runtime vermeiden. Verwenden Sie den schmalen SDK-Subpfad, der zur Aufgabe passt:
BedarfImport
Config-Typen wie OpenClawConfigopenclaw/plugin-sdk/config-contracts
Bereits geladene Config-Assertions und Config-Lookup für Plugin-Entrysopenclaw/plugin-sdk/plugin-config-runtime
Reads des aktuellen Runtime-Snapshotsopenclaw/plugin-sdk/runtime-config-snapshot
Config-Schreibvorgängeopenclaw/plugin-sdk/config-mutation
Session-Store-Helperopenclaw/plugin-sdk/session-store-runtime
Markdown-Tabellen-Configopenclaw/plugin-sdk/markdown-table-runtime
Runtime-Helper für Gruppenrichtlinienopenclaw/plugin-sdk/runtime-group-policy
Secret-Input-Auflösungopenclaw/plugin-sdk/secret-input-runtime
Modell-/Session-Overridesopenclaw/plugin-sdk/model-session-runtime
Gebündelte Plugins und ihre Tests werden per Scanner gegen das breite Barrel geschützt, damit Imports und Mocks lokal zu dem benötigten Verhalten bleiben. Das breite Barrel existiert weiterhin für externe Kompatibilität, aber neuer Code sollte nicht davon abhängen.
2

Pi-Tool-Result-Erweiterungen auf Middleware migrieren

Gebündelte Plugins müssen Pi-only api.registerEmbeddedExtensionFactory(...)-Tool-Result-Handler durch runtime-neutrale Middleware ersetzen.
// Pi and Codex runtime dynamic tools
api.registerAgentToolResultMiddleware(async (event) => {
  return compactToolResult(event);
}, {
  runtimes: ["pi", "codex"],
});
Aktualisieren Sie gleichzeitig das Plugin-Manifest:
{
  "contracts": {
    "agentToolResultMiddleware": ["pi", "codex"]
  }
}
Externe Plugins können keine Tool-Result-Middleware registrieren, weil sie hochvertrauenswürdige Tool-Ausgabe umschreiben kann, bevor das Modell sie sieht.
3

Approval-native Handler auf Capability-Facts migrieren

Approval-fähige Channel-Plugins machen natives Approval-Verhalten jetzt über approvalCapability.nativeRuntime plus die gemeinsame Runtime-Context-Registry verfügbar.Wichtige Änderungen:
  • Ersetzen Sie approvalCapability.handler.loadRuntime(...) durch approvalCapability.nativeRuntime
  • Verschieben Sie Approval-spezifische Auth-/Delivery-Logik von der alten plugin.auth- / plugin.approvals-Verdrahtung auf approvalCapability
  • ChannelPlugin.approvals wurde aus dem öffentlichen Channel-Plugin- Vertrag entfernt; verschieben Sie Delivery-/Native-/Render-Felder auf approvalCapability
  • plugin.auth bleibt nur für Channel-Login-/Logout-Flows; Approval-Auth- Hooks dort werden vom Core nicht mehr gelesen
  • Registrieren Sie channel-eigene Runtime-Objekte wie Clients, Tokens oder Bolt- Apps über openclaw/plugin-sdk/channel-runtime-context
  • Senden Sie keine plugin-eigenen Reroute-Hinweise aus nativen Approval-Handlern; der Core besitzt jetzt „anderswo zugestellt“-Hinweise aus tatsächlichen Delivery-Ergebnissen
  • Wenn Sie channelRuntime an createChannelManager(...) übergeben, stellen Sie eine echte createPluginRuntime().channel-Oberfläche bereit. Partielle Stubs werden abgelehnt.
Siehe /plugins/sdk-channel-plugins für das aktuelle Approval-Capability- Layout.
4

Windows-Wrapper-Fallback-Verhalten prüfen

Wenn Ihr Plugin openclaw/plugin-sdk/windows-spawn verwendet, schlagen nicht aufgelöste Windows- .cmd-/.bat-Wrapper jetzt geschlossen fehl, sofern Sie nicht explizit allowShellFallback: true übergeben.
// 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,
});
Wenn Ihr Aufrufer nicht bewusst auf Shell-Fallback angewiesen ist, setzen Sie allowShellFallback nicht und behandeln Sie stattdessen den ausgelösten Fehler.
5

Veraltete Imports finden

Durchsuchen Sie Ihr Plugin nach Imports aus einer der veralteten Oberflächen:
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

Durch fokussierte Imports ersetzen

Jeder Export aus der alten Oberfläche wird einem bestimmten modernen Importpfad zugeordnet:
// 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";
Verwenden Sie für hostseitige Helper die injizierte Plugin-Runtime statt eines direkten Imports:
// 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 });
Dasselbe Muster gilt für andere alte Bridge-Helper:
Alter ImportModerne Entsprechung
resolveAgentDirapi.runtime.agent.resolveAgentDir
resolveAgentWorkspaceDirapi.runtime.agent.resolveAgentWorkspaceDir
resolveAgentIdentityapi.runtime.agent.resolveAgentIdentity
resolveThinkingDefaultapi.runtime.agent.resolveThinkingDefault
resolveAgentTimeoutMsapi.runtime.agent.resolveAgentTimeoutMs
ensureAgentWorkspaceapi.runtime.agent.ensureAgentWorkspace
Session-Store-Helperapi.runtime.agent.session.*
7

Breite infra-runtime-Imports ersetzen

openclaw/plugin-sdk/infra-runtime existiert weiterhin für externe Kompatibilität, aber neuer Code sollte die fokussierte Helper-Oberfläche importieren, die er tatsächlich benötigt:
BedarfImport
System-Event-Queue-Helperopenclaw/plugin-sdk/system-event-runtime
Heartbeat-Wake-, Event- und Visibility-Helperopenclaw/plugin-sdk/heartbeat-runtime
Drain der Pending-Delivery-Queueopenclaw/plugin-sdk/delivery-queue-runtime
Channel-Aktivitätstelemetrieopenclaw/plugin-sdk/channel-activity-runtime
In-Memory-Dedupe-Cachesopenclaw/plugin-sdk/dedupe-runtime
Sichere Helper für lokale Datei-/Medienpfadeopenclaw/plugin-sdk/file-access-runtime
Dispatcher-bewusster Fetchopenclaw/plugin-sdk/runtime-fetch
Proxy- und Guarded-Fetch-Helperopenclaw/plugin-sdk/fetch-runtime
SSRF-Dispatcher-Richtlinientypenopenclaw/plugin-sdk/ssrf-dispatcher
Approval-Request-/Resolution-Typenopenclaw/plugin-sdk/approval-runtime
Approval-Reply-Payload- und Command-Helperopenclaw/plugin-sdk/approval-reply-runtime
Helper zur Fehlerformatierungopenclaw/plugin-sdk/error-runtime
Wartefunktionen für Transport-Readinessopenclaw/plugin-sdk/transport-ready-runtime
Sichere Token-Helperopenclaw/plugin-sdk/secure-random-runtime
Begrenzte Nebenläufigkeit für asynchrone Tasksopenclaw/plugin-sdk/concurrency-runtime
Numerische Koersionopenclaw/plugin-sdk/number-runtime
Prozesslokaler Async-Lockopenclaw/plugin-sdk/async-lock-runtime
Datei-Locksopenclaw/plugin-sdk/file-lock
Gebündelte Plugins werden per Scanner gegen infra-runtime geschützt, sodass Repo-Code nicht zum breiten Barrel regressieren kann.
8

Channel-Route-Helper migrieren

Neuer Channel-Route-Code sollte openclaw/plugin-sdk/channel-route verwenden. Die älteren Route-Key- und Comparable-Target-Namen bleiben während des Migrationsfensters als Kompatibilitäts- Aliasse erhalten, aber neue Plugins sollten die Route- Namen verwenden, die das Verhalten direkt beschreiben:
Alte HilfsfunktionModerne Hilfsfunktion
channelRouteIdentityKey(...)channelRouteDedupeKey(...)
channelRouteKey(...)channelRouteCompactKey(...)
ComparableChannelTargetChannelRouteParsedTarget
resolveComparableTargetForChannel(...)resolveRouteTargetForChannel(...)
resolveComparableTargetForLoadedChannel(...)resolveRouteTargetForLoadedChannel(...)
comparableChannelTargetsMatch(...)channelRouteTargetsMatchExact(...)
comparableChannelTargetsShareRoute(...)channelRouteTargetsShareConversation(...)
Die modernen Route-Hilfsfunktionen normalisieren { channel, to, accountId, threadId } konsistent über native Genehmigungen, Antwortunterdrückung, eingehende Deduplizierung, Cron-Zustellung und Sitzungs-Routing hinweg. Wenn Ihr Plugin eine eigene Zielgrammatik besitzt, verwenden Sie resolveChannelRouteTargetWithParser(...), um diesen Parser an denselben Vertrag für Route-Ziele anzupassen.
9

Build and test

pnpm build
pnpm test -- my-plugin/

Importpfad-Referenz

ImportpfadZweckWichtige Exporte
plugin-sdk/plugin-entryKanonische Einstiegshilfe fuer PluginsdefinePluginEntry
plugin-sdk/coreVeralteter Sammel-Re-Export fuer Kanal-Einstiegsdefinitionen/-BuilderdefineChannelPluginEntry, createChatChannelPlugin
plugin-sdk/config-schemaExport des Root-KonfigurationsschemasOpenClawSchema
plugin-sdk/provider-entryEinstiegshilfe fuer einen einzelnen ProviderdefineSingleProviderPluginEntry
plugin-sdk/channel-coreFokussierte Kanal-Einstiegsdefinitionen und -BuilderdefineChannelPluginEntry, defineSetupPluginEntry, createChatChannelPlugin, createChannelPluginBase
plugin-sdk/setupGemeinsame Hilfsfunktionen fuer den EinrichtungsassistentenAllowlist-Abfragen, Builder fuer den Einrichtungsstatus
plugin-sdk/setup-runtimeRuntime-Hilfsfunktionen zur EinrichtungszeitImportsichere Adapter fuer Einrichtungspatches, Hilfsfunktionen fuer Lookup-Hinweise, promptResolvedAllowFrom, splitSetupEntries, delegierte Einrichtungs-Proxys
plugin-sdk/setup-adapter-runtimeVeralteter Alias fuer EinrichtungsadapterVerwenden Sie plugin-sdk/setup-runtime
plugin-sdk/setup-toolsHilfsfunktionen fuer EinrichtungswerkzeugeformatCliCommand, detectBinary, extractArchive, resolveBrewExecutable, formatDocsLink, CONFIG_DIR
plugin-sdk/account-coreHilfsfunktionen fuer mehrere KontenHilfsfunktionen fuer Kontolisten, Konfiguration und Aktions-Gates
plugin-sdk/account-idHilfsfunktionen fuer Konto-IDsDEFAULT_ACCOUNT_ID, Normalisierung von Konto-IDs
plugin-sdk/account-resolutionHilfsfunktionen fuer die KontosucheHilfsfunktionen fuer Kontosuche und Standard-Fallbacks
plugin-sdk/account-helpersEnge Hilfsfunktionen fuer KontenHilfsfunktionen fuer Kontolisten und Kontoaktionen
plugin-sdk/channel-setupAdapter fuer den EinrichtungsassistentencreateOptionalChannelSetupSurface, createOptionalChannelSetupAdapter, createOptionalChannelSetupWizard, plus DEFAULT_ACCOUNT_ID, createTopLevelChannelDmPolicy, setSetupChannelEnabled, splitSetupEntries
plugin-sdk/channel-pairingPrimitive fuer DM-KopplungcreateChannelPairingController
plugin-sdk/channel-reply-pipelineVerkabelung fuer Antwortpraefix, Tippen und QuellzustellungcreateChannelReplyPipeline, resolveChannelSourceReplyDeliveryMode
plugin-sdk/channel-config-helpersFabriken fuer Konfigurationsadapter und Hilfsfunktionen fuer DM-ZugriffcreateHybridChannelConfigAdapter, resolveChannelDmAccess, resolveChannelDmAllowFrom, resolveChannelDmPolicy, normalizeChannelDmPolicy, normalizeLegacyDmAliases
plugin-sdk/channel-config-schemaBuilder fuer KonfigurationsschemataNur gemeinsame Primitive fuer Kanal-Konfigurationsschemata und der generische Builder
plugin-sdk/bundled-channel-config-schemaGebuendelte KonfigurationsschemataNur von OpenClaw gepflegte gebuendelte Plugins; neue Plugins muessen Plugin-lokale Schemata definieren
plugin-sdk/channel-config-schema-legacyVeraltete gebuendelte KonfigurationsschemataNur Kompatibilitaetsalias; verwenden Sie plugin-sdk/bundled-channel-config-schema fuer gepflegte gebuendelte Plugins
plugin-sdk/telegram-command-configHilfsfunktionen fuer Telegram-BefehlskonfigurationNormalisierung von Befehlsnamen, Kuerzen von Beschreibungen, Validierung auf Duplikate/Konflikte
plugin-sdk/channel-policyAufloesung von Gruppen-/DM-RichtlinienresolveChannelGroupRequireMention
plugin-sdk/channel-lifecycleHilfsfunktionen fuer Kontostatus und Lebenszyklus von EntwurfsstreamscreateAccountStatusSink, Hilfsfunktionen zum Finalisieren von Entwurfsvorschauen
plugin-sdk/inbound-envelopeHilfsfunktionen fuer eingehende UmschlaegeGemeinsame Hilfsfunktionen fuer Routen und Umschlag-Builder
plugin-sdk/inbound-reply-dispatchHilfsfunktionen fuer eingehende AntwortenGemeinsame Hilfsfunktionen fuer Aufzeichnung und Dispatch
plugin-sdk/messaging-targetsParsen von Messaging-ZielenHilfsfunktionen zum Parsen und Abgleichen von Zielen
plugin-sdk/outbound-mediaHilfsfunktionen fuer ausgehende MedienGemeinsames Laden ausgehender Medien
plugin-sdk/outbound-send-depsHilfsfunktionen fuer Abhaengigkeiten beim ausgehenden SendenSchlanker resolveOutboundSendDep-Lookup ohne Import der vollstaendigen ausgehenden Runtime
plugin-sdk/outbound-runtimeHilfsfunktionen fuer ausgehende RuntimeHilfsfunktionen fuer ausgehende Zustellung, Identitaets-/Sende-Delegation, Sitzung, Formatierung und Payload-Planung
plugin-sdk/thread-bindings-runtimeHilfsfunktionen fuer Thread-BindungLebenszyklus- und Adapter-Hilfsfunktionen fuer Thread-Bindung
plugin-sdk/agent-media-payloadVeraltete Hilfsfunktionen fuer Medien-PayloadsBuilder fuer Agent-Medien-Payloads fuer veraltete Feldlayouts
plugin-sdk/channel-runtimeVeralteter Kompatibilitaets-ShimNur veraltete Kanal-Runtime-Dienstprogramme
plugin-sdk/channel-send-resultTypen fuer SendeergebnisseTypen fuer Antwortergebnisse
plugin-sdk/runtime-storePersistenter Plugin-SpeichercreatePluginRuntimeStore
plugin-sdk/runtimeBreite Runtime-HilfsfunktionenHilfsfunktionen fuer Runtime, Protokollierung, Backup und Plugin-Installation
plugin-sdk/runtime-envEnge Hilfsfunktionen fuer Runtime-UmgebungenHilfsfunktionen fuer Logger/Runtime-Umgebung, Timeout, Wiederholung und Backoff
plugin-sdk/plugin-runtimeGemeinsame Hilfsfunktionen fuer Plugin-RuntimeHilfsfunktionen fuer Plugin-Befehle, Hooks, HTTP und Interaktion
plugin-sdk/hook-runtimeHilfsfunktionen fuer Hook-PipelinesGemeinsame Hilfsfunktionen fuer Webhook-/interne Hook-Pipelines
plugin-sdk/lazy-runtimeHilfsfunktionen fuer verzogerte RuntimecreateLazyRuntimeModule, createLazyRuntimeMethod, createLazyRuntimeMethodBinder, createLazyRuntimeNamedExport, createLazyRuntimeSurface
plugin-sdk/process-runtimeProzess-HilfsfunktionenGemeinsame Exec-Hilfsfunktionen
plugin-sdk/cli-runtimeCLI-Runtime-HilfsfunktionenHilfsfunktionen fuer Befehlsformatierung, Wartezeiten und Versionen
plugin-sdk/gateway-runtimeGateway-HilfsfunktionenGateway-Client, Starthilfe fuer ereignisschleifenbereite Starts und Hilfsfunktionen fuer Kanalstatus-Patches
plugin-sdk/config-runtimeVeralteter Shim fuer KonfigurationskompatibilitaetBevorzugen Sie config-contracts, plugin-config-runtime, runtime-config-snapshot und config-mutation
plugin-sdk/telegram-command-configHilfsfunktionen fuer Telegram-BefehleFallback-stabile Hilfsfunktionen zur Validierung von Telegram-Befehlen, wenn die gebuendelte Telegram-Vertragsoberflaeche nicht verfuegbar ist
plugin-sdk/approval-runtimeHilfsfunktionen fuer GenehmigungsaufforderungenExec-/Plugin-Genehmigungs-Payload, Hilfsfunktionen fuer Genehmigungsfaehigkeit/-profil, native Genehmigungsweiterleitung/-Runtime und strukturierte Formatierung des Anzeigepfads fuer Genehmigungen
plugin-sdk/approval-auth-runtimeHilfsfunktionen fuer GenehmigungsautorisierungAufloesung von Genehmigenden, Aktionsautorisierung im selben Chat
plugin-sdk/approval-client-runtimeHilfsfunktionen fuer GenehmigungsclientsNative Hilfsfunktionen fuer Exec-Genehmigungsprofile/-filter
plugin-sdk/approval-delivery-runtimeHilfsfunktionen fuer GenehmigungszustellungNative Adapter fuer Genehmigungsfaehigkeit/-zustellung
plugin-sdk/approval-gateway-runtimeHilfsfunktionen fuer Genehmigungs-GatewayGemeinsame Hilfsfunktion zur Aufloesung von Genehmigungs-Gateways
plugin-sdk/approval-handler-adapter-runtimeHilfsfunktionen fuer GenehmigungsadapterSchlanke Hilfsfunktionen zum Laden nativer Genehmigungsadapter fuer heisse Kanal-Einstiegspunkte
plugin-sdk/approval-handler-runtimeHilfsfunktionen fuer Genehmigungs-HandlerBreitere Runtime-Hilfsfunktionen fuer Genehmigungs-Handler; bevorzugen Sie die engeren Adapter-/Gateway-Schnittstellen, wenn sie ausreichen
plugin-sdk/approval-native-runtimeHilfsfunktionen fuer GenehmigungszieleNative Hilfsfunktionen fuer Ziel-/Kontobindung bei Genehmigungen
plugin-sdk/approval-reply-runtimeHilfsfunktionen fuer GenehmigungsantwortenHilfsfunktionen fuer Exec-/Plugin-Genehmigungsantwort-Payloads
plugin-sdk/channel-runtime-contextHilfsfunktionen fuer Kanal-Runtime-KontextGenerische Hilfsfunktionen zum Registrieren/Abrufen/Ueberwachen von Kanal-Runtime-Kontexten
plugin-sdk/security-runtimeSicherheits-HilfsfunktionenGemeinsame Hilfsfunktionen fuer Vertrauen, DM-Gating, root-begrenzte Dateien/Pfade, externe Inhalte und Secret-Sammlung
plugin-sdk/ssrf-policyHilfsfunktionen fuer SSRF-RichtlinienHilfsfunktionen fuer Host-Allowlist und Richtlinien fuer private Netzwerke
plugin-sdk/ssrf-runtimeSSRF-Runtime-HilfsfunktionenAngepinnter Dispatcher, geschuetzter Fetch, Hilfsfunktionen fuer SSRF-Richtlinien
plugin-sdk/system-event-runtimeHilfsfunktionen fuer SystemereignisseenqueueSystemEvent, peekSystemEventEntries
plugin-sdk/heartbeat-runtimeHeartbeat-HilfsfunktionenHilfsfunktionen fuer Heartbeat-Wecken, -Ereignisse und -Sichtbarkeit
plugin-sdk/delivery-queue-runtimeHilfsfunktionen fuer ZustellwarteschlangendrainPendingDeliveries
plugin-sdk/channel-activity-runtimeHilfsfunktionen fuer KanalaktivitaetrecordChannelActivity
plugin-sdk/dedupe-runtimeHilfsfunktionen fuer DeduplizierungIn-Memory-Deduplizierungs-Caches
plugin-sdk/file-access-runtimeHilfsfunktionen fuer DateizugriffSichere Hilfsfunktionen fuer lokale Datei-/Medienpfade
plugin-sdk/transport-ready-runtimeHilfsfunktionen fuer TransportbereitschaftwaitForTransportReady
plugin-sdk/collection-runtimeHilfsfunktionen fuer begrenzte CachespruneMapToMaxSize
plugin-sdk/diagnostic-runtimeHilfsfunktionen fuer Diagnose-GatingisDiagnosticFlagEnabled, isDiagnosticsEnabled
plugin-sdk/error-runtimeHilfsfunktionen fuer FehlerformatierungformatUncaughtError, isApprovalNotFoundError, Hilfsfunktionen fuer Fehlergraphen
plugin-sdk/fetch-runtimeHilfsfunktionen fuer umschlossenen Fetch/ProxyresolveFetch, Proxy-Hilfsfunktionen, Hilfsfunktionen fuer EnvHttpProxyAgent-Optionen
plugin-sdk/host-runtimeHilfsfunktionen fuer Host-NormalisierungnormalizeHostname, normalizeScpRemoteHost
plugin-sdk/retry-runtimeHilfsfunktionen fuer WiederholungenRetryConfig, retryAsync, Richtlinien-Runner
plugin-sdk/allow-fromAllowlist-FormatierungformatAllowFromLowercase
plugin-sdk/allowlist-resolutionZuordnung von Allowlist-EingabenmapAllowlistResolutionInputs
plugin-sdk/command-authHilfsfunktionen fuer Befehls-Gating und BefehlsoberflaechenresolveControlCommandGate, Hilfsfunktionen fuer Absenderautorisierung, Hilfsfunktionen fuer Befehlsregistrierung einschliesslich Formatierung dynamischer Argumentmenues
plugin-sdk/command-statusRenderer fuer Befehlsstatus/-hilfebuildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage
plugin-sdk/secret-inputParsen von Secret-EingabenHilfsfunktionen fuer Secret-Eingaben
plugin-sdk/webhook-ingressHilfsfunktionen fuer Webhook-AnfragenWebhook-Zieldienstprogramme
plugin-sdk/webhook-request-guardsHilfsfunktionen fuer Webhook-Body-GuardsHilfsfunktionen zum Lesen/Begrenzen von Anfrage-Bodys
plugin-sdk/reply-runtimeGemeinsame Antwort-RuntimeEingehender Dispatch, Heartbeat, Antwortplaner, Chunking
plugin-sdk/reply-dispatch-runtimeEnge Hilfsfunktionen fuer Antwort-DispatchHilfsfunktionen fuer Finalisierung, Provider-Dispatch und Konversationslabels
plugin-sdk/reply-historyHilfsfunktionen fuer AntwortverlaufbuildHistoryContext, buildPendingHistoryContextFromMap, recordPendingHistoryEntry, clearHistoryEntriesIfEnabled
plugin-sdk/reply-referencePlanung von AntwortreferenzencreateReplyReferencePlanner
plugin-sdk/reply-chunkingHilfsfunktionen fuer Antwort-ChunksHilfsfunktionen fuer Text-/Markdown-Chunking
plugin-sdk/session-store-runtimeHilfsfunktionen fuer SitzungsspeicherHilfsfunktionen fuer Speicherpfad und Aktualisiert-am
plugin-sdk/state-pathsHilfsfunktionen fuer ZustandspfadeHilfsfunktionen fuer Zustands- und OAuth-Verzeichnisse
plugin-sdk/routingHilfsfunktionen fuer Routing/SitzungsschluesselresolveAgentRoute, buildAgentSessionKey, resolveDefaultAgentBoundAccountId, Hilfsfunktionen fuer Sitzungsschluessel-Normalisierung
plugin-sdk/status-helpersHilfsfunktionen fuer KanalstatusBuilder fuer Kanal-/Kontostatus-Zusammenfassungen, Standardwerte fuer Runtime-Zustand, Hilfsfunktionen fuer Problem-Metadaten
plugin-sdk/target-resolver-runtimeHilfsfunktionen fuer ZielaufloeserGemeinsame Hilfsfunktionen fuer Zielaufloeser
plugin-sdk/string-normalization-runtimeHilfsfunktionen fuer String-NormalisierungHilfsfunktionen fuer Slug-/String-Normalisierung
plugin-sdk/request-urlHilfsfunktionen fuer Anfrage-URLsString-URLs aus anfrageaehnlichen Eingaben extrahieren
plugin-sdk/run-commandHilfsfunktionen fuer zeitgesteuerte BefehleRunner fuer zeitgesteuerte Befehle mit normalisiertem stdout/stderr
plugin-sdk/param-readersParameterleserGemeinsame Parameterleser fuer Tool/CLI
plugin-sdk/tool-payloadTool-Payload-ExtraktionNormalisierte Payloads aus Tool-Ergebnisobjekten extrahieren
plugin-sdk/tool-sendTool-Send-ExtraktionKanonische Send-Zielfelder aus Tool-Argumenten extrahieren
plugin-sdk/temp-pathTemp-Pfad-HelferGemeinsame Temp-Download-Pfadhelfer
plugin-sdk/logging-coreLogging-HelferSubsystem-Logger und Redaktionshelfer
plugin-sdk/markdown-table-runtimeMarkdown-Tabellen-HelferMarkdown-Tabellenmodus-Helfer
plugin-sdk/reply-payloadNachrichtenantworttypenAntwort-Payload-Typen
plugin-sdk/provider-setupKuratierte Helfer für lokale/selbst gehostete Provider-EinrichtungErkennungs-/Konfigurationshelfer für selbst gehostete Provider
plugin-sdk/self-hosted-provider-setupFokussierte Helfer für OpenAI-kompatible selbst gehostete Provider-EinrichtungDieselben Erkennungs-/Konfigurationshelfer für selbst gehostete Provider
plugin-sdk/provider-auth-runtimeProvider-Runtime-AuthentifizierungshelferRuntime-Helfer für API-Schlüssel-Auflösung
plugin-sdk/provider-auth-api-keyHelfer für Provider-API-Schlüssel-EinrichtungHelfer für API-Schlüssel-Onboarding/Profilschreiben
plugin-sdk/provider-auth-resultProvider-Authentifizierungsergebnis-HelferStandard-OAuth-Authentifizierungsergebnis-Builder
plugin-sdk/provider-selection-runtimeProvider-AuswahlhelferAuswahl konfigurierter oder automatischer Provider und Zusammenführung roher Provider-Konfiguration
plugin-sdk/provider-env-varsProvider-Umgebungsvariablen-HelferHelfer zum Nachschlagen von Provider-Authentifizierungsumgebungsvariablen
plugin-sdk/provider-model-sharedGemeinsame Provider-Modell-/Replay-HelferProviderReplayFamily, buildProviderReplayFamilyHooks, normalizeModelCompat, gemeinsame Replay-Richtlinien-Builder, Provider-Endpunkt-Helfer und Modell-ID-Normalisierungshelfer
plugin-sdk/provider-catalog-sharedGemeinsame Provider-KataloghelferfindCatalogTemplate, buildSingleProviderApiKeyCatalog, buildManifestModelProviderConfig, supportsNativeStreamingUsageCompat, applyProviderNativeStreamingUsageCompat
plugin-sdk/provider-onboardProvider-Onboarding-PatchesOnboarding-Konfigurationshelfer
plugin-sdk/provider-httpProvider-HTTP-HelferGenerische Provider-HTTP-/Endpunkt-Capability-Helfer, einschließlich Multipart-Formularhelfern für Audiotranskription
plugin-sdk/provider-web-fetchProvider-Web-Fetch-HelferWeb-Fetch-Provider-Registrierungs-/Cache-Helfer
plugin-sdk/provider-web-search-config-contractProvider-Websuche-KonfigurationshelferSchmale Websuche-Konfigurations-/Anmeldeinformationshelfer für Provider, die keine Plugin-Aktivierungsverdrahtung benötigen
plugin-sdk/provider-web-search-contractProvider-Websuche-VertragshelferSchmale Websuche-Konfigurations-/Anmeldeinformations-Vertragshelfer wie createWebSearchProviderContractFields, enablePluginInConfig, resolveProviderWebSearchPluginConfig und bereichsgebundene Anmeldeinformations-Setter/-Getter
plugin-sdk/provider-web-searchProvider-Websuche-HelferWebsuche-Provider-Registrierungs-/Cache-/Runtime-Helfer
plugin-sdk/provider-toolsProvider-Tool-/Schema-KompatibilitätshelferProviderToolCompatFamily, buildProviderToolCompatFamilyHooks und Gemini-Schema-Bereinigung + Diagnose
plugin-sdk/provider-usageProvider-NutzungshelferfetchClaudeUsage, fetchGeminiUsage, fetchGithubCopilotUsage und andere Provider-Nutzungshelfer
plugin-sdk/provider-streamProvider-Stream-Wrapper-HelferProviderStreamFamily, buildProviderStreamFamilyHooks, composeProviderStreamWrappers, Stream-Wrapper-Typen und gemeinsame Anthropic/Bedrock/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot-Wrapper-Helfer
plugin-sdk/provider-transport-runtimeProvider-TransporthelferNative Provider-Transporthelfer wie geschütztes Fetch, Transportnachrichten-Transformationen und beschreibbare Transportereignis-Streams
plugin-sdk/keyed-async-queueGeordnete asynchrone QueueKeyedAsyncQueue
plugin-sdk/media-runtimeGemeinsame MedienhelferHelfer zum Abrufen/Transformieren/Speichern von Medien, ffprobe-gestützte Ermittlung von Videodimensionen und Medien-Payload-Builder
plugin-sdk/media-generation-runtimeGemeinsame MediengenerierungshelferGemeinsame Failover-Helfer, Kandidatenauswahl und Meldungen für fehlende Modelle bei Bild-/Video-/Musikgenerierung
plugin-sdk/media-understandingMedienverständnis-HelferProvider-Typen für Medienverständnis plus Provider-seitige Bild-/Audio-Helfer-Exporte
plugin-sdk/text-runtimeVeralteter breiter Text-KompatibilitätsexportVerwenden Sie string-coerce-runtime, text-chunking, text-utility-runtime und logging-core
plugin-sdk/text-chunkingTextsegmentierungshelferHelfer für ausgehende Textsegmentierung
plugin-sdk/speechSpeech-HelferSpeech-Provider-Typen plus Provider-seitige Direktiven-, Registry-, Validierungshelfer und OpenAI-kompatibler TTS-Builder
plugin-sdk/speech-coreGemeinsamer Speech-KernSpeech-Provider-Typen, Registry, Direktiven, Normalisierung
plugin-sdk/realtime-transcriptionEchtzeit-TranskriptionshelferProvider-Typen, Registry-Helfer und gemeinsamer WebSocket-Sitzungshelfer
plugin-sdk/realtime-voiceEchtzeit-SprachhelferProvider-Typen, Registry-/Auflösungshelfer, Bridge-Sitzungshelfer, gemeinsame Agent-Rücksprech-Queues, Transkript-/Ereigniszustand, Echounterdrückung und schnelle Kontextabfrage-Helfer
plugin-sdk/image-generationBildgenerierungshelferBildgenerierungs-Provider-Typen plus Bild-Asset-/Daten-URL-Helfer und der OpenAI-kompatible Bild-Provider-Builder
plugin-sdk/image-generation-coreGemeinsamer BildgenerierungskernBildgenerierungstypen, Failover, Authentifizierung und Registry-Helfer
plugin-sdk/music-generationMusikgenerierungshelferMusikgenerierungs-Provider-/Request-/Result-Typen
plugin-sdk/music-generation-coreGemeinsamer MusikgenerierungskernMusikgenerierungstypen, Failover-Helfer, Provider-Suche und Modellreferenz-Parsing
plugin-sdk/video-generationVideogenerierungshelferVideogenerierungs-Provider-/Request-/Result-Typen
plugin-sdk/video-generation-coreGemeinsamer VideogenerierungskernVideogenerierungstypen, Failover-Helfer, Provider-Suche und Modellreferenz-Parsing
plugin-sdk/interactive-runtimeInteraktive AntworthelferNormalisierung/Reduktion interaktiver Antwort-Payloads
plugin-sdk/channel-config-primitivesChannel-KonfigurationsprimitiveSchmale Channel-Konfigurationsschema-Primitive
plugin-sdk/channel-config-writesHelfer für Channel-KonfigurationsschreibvorgängeAutorisierungshelfer für Channel-Konfigurationsschreibvorgänge
plugin-sdk/channel-plugin-commonGemeinsames Channel-PräludiumGemeinsame Channel-Plugin-Präludium-Exporte
plugin-sdk/channel-statusChannel-StatushelferGemeinsame Channel-Status-Snapshot-/Zusammenfassungshelfer
plugin-sdk/allowlist-config-editAllowlist-KonfigurationshelferHelfer zum Bearbeiten/Lesen der Allowlist-Konfiguration
plugin-sdk/group-accessGruppenzugriffshelferGemeinsame Entscheidungshelfer für Gruppenzugriff
plugin-sdk/direct-dmDirect-DM-HelferGemeinsame Direct-DM-Authentifizierungs-/Guard-Helfer
plugin-sdk/extension-sharedGemeinsame ErweiterungshelferPrimitive für Passive-Channel-/Status- und Umgebungsproxy-Helfer
plugin-sdk/webhook-targetsWebhook-ZielhelferWebhook-Ziel-Registry und Routeninstallationshelfer
plugin-sdk/webhook-pathVeralteter Webhook-PfadaliasVerwenden Sie plugin-sdk/webhook-ingress
plugin-sdk/web-mediaGemeinsame Webmedien-HelferHelfer zum Laden von Remote-/lokalen Medien
plugin-sdk/zodVeralteter Zod-Kompatibilitäts-Re-ExportImportieren Sie zod direkt aus zod
plugin-sdk/memory-coreGebündelte Memory-Core-HelferMemory-Manager-/Konfigurations-/Datei-/CLI-Helferoberfläche
plugin-sdk/memory-core-engine-runtimeMemory-Engine-Runtime-FassadeMemory-Index-/Such-Runtime-Fassade
plugin-sdk/memory-core-host-engine-foundationMemory-Host-Foundation-EngineMemory-Host-Foundation-Engine-Exporte
plugin-sdk/memory-core-host-engine-embeddingsMemory-Host-Embedding-EngineMemory-Embedding-Verträge, Registry-Zugriff, lokaler Provider und generische Batch-/Remote-Helfer; konkrete Remote-Provider befinden sich in ihren zuständigen Plugins
plugin-sdk/memory-core-host-engine-qmdMemory-Host-QMD-EngineMemory-Host-QMD-Engine-Exporte
plugin-sdk/memory-core-host-engine-storageMemory-Host-Storage-EngineMemory-Host-Storage-Engine-Exporte
plugin-sdk/memory-core-host-multimodalMemory-Host-Multimodal-HelferMemory-Host-Multimodal-Helfer
plugin-sdk/memory-core-host-queryMemory-Host-Query-HelferMemory-Host-Query-Helfer
plugin-sdk/memory-core-host-secretMemory-Host-Secret-HelferMemory-Host-Secret-Helfer
plugin-sdk/memory-core-host-eventsVeralteter Memory-EreignisaliasVerwenden Sie plugin-sdk/memory-host-events
plugin-sdk/memory-core-host-statusMemory-Host-StatushelferMemory-Host-Statushelfer
plugin-sdk/memory-core-host-runtime-cliMemory-Host-CLI-RuntimeMemory-Host-CLI-Runtime-Helfer
plugin-sdk/memory-core-host-runtime-coreMemory-Host-Core-RuntimeMemory-Host-Core-Runtime-Helfer
plugin-sdk/memory-core-host-runtime-filesMemory-Host-Datei-/Runtime-HelferMemory-Host-Datei-/Runtime-Helfer
plugin-sdk/memory-host-coreMemory-Host-Core-Runtime-AliasHerstellerneutraler Alias für Memory-Host-Core-Runtime-Helfer
plugin-sdk/memory-host-eventsMemory-Host-Ereignisjournal-AliasHerstellerneutraler Alias für Memory-Host-Ereignisjournal-Helfer
plugin-sdk/memory-host-filesVeralteter Memory-Datei-/Runtime-AliasVerwenden Sie plugin-sdk/memory-core-host-runtime-files
plugin-sdk/memory-host-markdownVerwaltete Markdown-HelferGemeinsame Managed-Markdown-Helfer für Memory-nahe Plugins
plugin-sdk/memory-host-searchActive Memory-SuchfassadeLazy Active-Memory-Suchmanager-Runtime-Fassade
plugin-sdk/memory-host-statusVeralteter Memory-Host-StatusaliasVerwenden Sie plugin-sdk/memory-core-host-status
plugin-sdk/testingTestdienstprogrammeRepo-lokales veraltetes Kompatibilitäts-Barrel; verwenden Sie fokussierte repo-lokale Test-Unterpfade wie plugin-sdk/plugin-test-runtime, plugin-sdk/channel-test-helpers, plugin-sdk/channel-target-testing, plugin-sdk/test-env und plugin-sdk/test-fixtures
Diese Tabelle ist bewusst die gemeinsame Teilmenge für die Migration, nicht die vollständige SDK-Oberfläche. Das Inventar der Compiler-Einstiegspunkte liegt in scripts/lib/plugin-sdk-entrypoints.json; Package-Exports werden aus der öffentlichen Teilmenge generiert. Reservierte Hilfs-Seams für gebündelte Plugins wurden aus der öffentlichen SDK-Export-Map entfernt, außer ausdrücklich dokumentierten Kompatibilitäts-Fassaden wie dem veralteten plugin-sdk/discord-Shim, der für das veröffentlichte Package @openclaw/discord@2026.3.13 beibehalten wurde. Owner-spezifische Hilfsfunktionen leben im owning Plugin-Package; gemeinsames Host-Verhalten sollte über generische SDK-Verträge wie plugin-sdk/gateway-runtime, plugin-sdk/security-runtime und plugin-sdk/plugin-config-runtime laufen. Verwenden Sie den engsten Import, der zur Aufgabe passt. Wenn Sie keinen Export finden, prüfen Sie die Quelle unter src/plugin-sdk/ oder fragen Sie die Maintainer, welcher generische Vertrag dafür zuständig sein sollte.

Aktive Veraltungen

Engere Veraltungen, die für das Plugin SDK, den Provider-Vertrag, die Runtime-Oberfläche und das Manifest gelten. Jede funktioniert heute noch, wird aber in einem zukünftigen Major-Release entfernt. Der Eintrag unter jedem Punkt ordnet die alte API ihrem kanonischen Ersatz zu.
Alt (openclaw/plugin-sdk/command-auth): buildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage.Neu (openclaw/plugin-sdk/command-status): gleiche Signaturen, gleiche Exports - nur aus dem engeren Unterpfad importiert. command-auth re-exportiert sie als Kompatibilitäts-Stubs.
// Before
import { buildHelpMessage } from "openclaw/plugin-sdk/command-auth";

// After
import { buildHelpMessage } from "openclaw/plugin-sdk/command-status";
Alt: resolveInboundMentionRequirement({ facts, policy }) und shouldDropInboundForMention(...) aus openclaw/plugin-sdk/channel-inbound oder openclaw/plugin-sdk/channel-mention-gating.Neu: resolveInboundMentionDecision({ facts, policy }) - gibt ein einzelnes Entscheidungsobjekt statt zweier getrennter Aufrufe zurück.Nachgelagerte Channel-Plugins (Slack, Discord, Matrix, MS Teams) sind bereits umgestellt.
openclaw/plugin-sdk/channel-runtime ist ein Kompatibilitäts-Shim für ältere Channel-Plugins. Importieren Sie ihn nicht aus neuem Code; verwenden Sie openclaw/plugin-sdk/channel-runtime-context zum Registrieren von Runtime-Objekten.channelActions*-Hilfsfunktionen in openclaw/plugin-sdk/channel-actions sind zusammen mit rohen Channel-Exports für “actions” veraltet. Stellen Sie Fähigkeiten stattdessen über die semantische presentation-Oberfläche bereit - Channel-Plugins deklarieren, was sie rendern (Karten, Buttons, Auswahllisten), statt welche rohen Aktionsnamen sie akzeptieren.
Alt: tool()-Factory aus openclaw/plugin-sdk/provider-web-search.Neu: Implementieren Sie createTool(...) direkt auf dem Provider-Plugin. OpenClaw benötigt die SDK-Hilfsfunktion nicht mehr, um den Tool-Wrapper zu registrieren.
Alt: formatInboundEnvelope(...) (und ChannelMessageForAgent.channelEnvelope), um aus eingehenden Channel-Nachrichten ein flaches Klartext-Prompt-Envelope zu erstellen.Neu: BodyForAgent plus strukturierte Blöcke für Benutzerkontext. Channel-Plugins hängen Routing-Metadaten (Thread, Thema, Antwort-auf, Reaktionen) als typisierte Felder an, statt sie zu einem Prompt-String zusammenzufügen. Die Hilfsfunktion formatAgentEnvelope(...) wird für synthetisierte, assistentenorientierte Envelopes weiterhin unterstützt, aber eingehende Klartext-Envelopes werden auslaufen.Betroffene Bereiche: inbound_claim, message_received und jedes eigene Channel-Plugin, das channelEnvelope-Text nachverarbeitet hat.
Vier Discovery-Typaliase sind jetzt dünne Wrapper über den Typen aus der Katalog-Ära:
Alter AliasNeuer Typ
ProviderDiscoveryOrderProviderCatalogOrder
ProviderDiscoveryContextProviderCatalogContext
ProviderDiscoveryResultProviderCatalogResult
ProviderPluginDiscoveryProviderPluginCatalog
Außerdem das alte statische Bag ProviderCapabilities - Provider-Plugins sollten explizite Provider-Hooks wie buildReplayPolicy, normalizeToolSchemas und wrapStreamFn verwenden, statt eines statischen Objekts.
Alt (drei separate Hooks auf ProviderThinkingPolicy): isBinaryThinking(ctx), supportsXHighThinking(ctx) und resolveDefaultThinkingLevel(ctx).Neu: ein einzelnes resolveThinkingProfile(ctx), das ein ProviderThinkingProfile mit der kanonischen id, optionalem label und gerankter Level-Liste zurückgibt. OpenClaw stuft veraltete gespeicherte Werte automatisch nach Profilrang herunter.Implementieren Sie einen Hook statt drei. Die alten Hooks funktionieren während des Veraltungsfensters weiterhin, werden aber nicht mit dem Profilergebnis kombiniert.
Alt: resolveExternalOAuthProfiles(...) implementieren, ohne den Provider im Plugin-Manifest zu deklarieren.Neu: Deklarieren Sie contracts.externalAuthProviders im Plugin-Manifest und implementieren Sie resolveExternalAuthProfiles(...). Der alte “auth fallback”-Pfad gibt zur Laufzeit eine Warnung aus und wird entfernt.
{
  "contracts": {
    "externalAuthProviders": ["anthropic", "openai"]
  }
}
Altes Manifestfeld: providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }.Neu: Spiegeln Sie denselben Env-Var-Lookup in setup.providers[].envVars im Manifest. Dadurch werden Setup-/Status-Env-Metadaten an einer Stelle zusammengeführt, und das Booten der Plugin-Runtime nur zum Beantworten von Env-Var-Lookups wird vermieden.providerAuthEnvVars bleibt über einen Kompatibilitätsadapter unterstützt, bis das Veraltungsfenster geschlossen wird.
Alt: drei separate Aufrufe - api.registerMemoryPromptSection(...), api.registerMemoryFlushPlan(...), api.registerMemoryRuntime(...).Neu: ein Aufruf auf der Memory-State-API - registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime }).Gleiche Slots, ein einzelner Registrierungsaufruf. Additive Memory-Hilfsfunktionen (registerMemoryPromptSupplement, registerMemoryCorpusSupplement, registerMemoryEmbeddingProvider) sind nicht betroffen.
Zwei alte Typaliase, die weiterhin aus src/plugins/runtime/types.ts exportiert werden:
AltNeu
SubagentReadSessionParamsSubagentGetSessionMessagesParams
SubagentReadSessionResultSubagentGetSessionMessagesResult
Die Runtime-Methode readSession ist zugunsten von getSessionMessages veraltet. Gleiche Signatur; die alte Methode leitet an die neue weiter.
Alt: runtime.tasks.flow (Singular) gab einen Live-Task-Flow-Accessor zurück.Neu: runtime.tasks.managedFlows hält die verwaltete TaskFlow-Mutations-Runtime für Plugins bereit, die aus einem Flow heraus untergeordnete Tasks erstellen, aktualisieren, abbrechen oder ausführen. Verwenden Sie runtime.tasks.flows, wenn das Plugin nur DTO-basierte Lesezugriffe benötigt.
// Before
const flow = api.runtime.tasks.flow.fromToolContext(ctx);
// After
const flow = api.runtime.tasks.managedFlows.fromToolContext(ctx);
Oben unter “Migration durchführen → Pi-Tool-Ergebnis-Extensions zu Middleware migrieren” behandelt. Der Vollständigkeit halber hier enthalten: Der entfernte, nur für Pi vorgesehene Pfad api.registerEmbeddedExtensionFactory(...) wird durch api.registerAgentToolResultMiddleware(...) mit einer expliziten Runtime-Liste in contracts.agentToolResultMiddleware ersetzt.
OpenClawSchemaType, re-exportiert aus openclaw/plugin-sdk, ist jetzt ein einzeiliger Alias für OpenClawConfig. Bevorzugen Sie den kanonischen Namen.
// Before
import type { OpenClawSchemaType } from "openclaw/plugin-sdk";
// After
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-schema";
Veraltungen auf Extension-Ebene (innerhalb gebündelter Channel-/Provider-Plugins unter extensions/) werden in ihren eigenen Barrels api.ts und runtime-api.ts verfolgt. Sie betreffen keine Verträge von Drittanbieter-Plugins und sind hier nicht aufgeführt. Wenn Sie das lokale Barrel eines gebündelten Plugins direkt verwenden, lesen Sie vor dem Upgrade die Veraltungskommentare in diesem Barrel.

Zeitplan für die Entfernung

WannWas geschieht
JetztVeraltete Oberflächen geben Runtime-Warnungen aus
Nächstes Major-ReleaseVeraltete Oberflächen werden entfernt; Plugins, die sie weiterhin verwenden, schlagen fehl
Alle Core-Plugins wurden bereits migriert. Externe Plugins sollten vor dem nächsten Major-Release migrieren.

Warnungen vorübergehend unterdrücken

Setzen Sie diese Umgebungsvariablen, während Sie an der Migration arbeiten:
OPENCLAW_SUPPRESS_PLUGIN_SDK_COMPAT_WARNING=1 openclaw gateway run
OPENCLAW_SUPPRESS_EXTENSION_API_WARNING=1 openclaw gateway run
Dies ist ein temporärer Ausweg, keine dauerhafte Lösung.

Verwandte Themen