Plugins
Plugin-SDK-Migration
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 sehr offene Oberflächen bereit, über die Plugins alles, was sie benötigten, aus einem einzigen Einstiegspunkt importieren konnten:
openclaw/plugin-sdk/compat- ein einzelner Import, der Dutzende von Hilfsfunktionen erneut exportierte. Er wurde eingeführt, um ältere hook-basierte Plugins funktionsfähig zu halten, während die neue Plugin-Architektur entwickelt wurde.openclaw/plugin-sdk/infra-runtime- ein breites Barrel für Runtime-Hilfsfunktionen, das Systemereignisse, Heartbeat-Status, Zustellungswarteschlangen, Fetch-/Proxy-Hilfsfunktionen, Datei-Hilfsfunktionen, Genehmigungstypen und nicht zusammenhängende Dienstprogramme vermischte.openclaw/plugin-sdk/config-runtime- ein breites Config-Kompatibilitäts-Barrel, das während des Migrationsfensters weiterhin veraltete direkte Load-/Write-Hilfsfunktionen enthält.openclaw/extension-api- eine Brücke, die Plugins direkten Zugriff auf hostseitige Hilfsfunktionen wie den eingebetteten Agent Runner gab.api.registerEmbeddedExtensionFactory(...)- ein entfernter, nur für Pi vorgesehener Hook für gebündelte Erweiterungen, der eingebettete Runner-Ereignisse wietool_resultbeobachten 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 migrieren, bevor sie im nächsten Major Release entfernt werden. Die nur für Pi vorgesehene API zur Registrierung eingebetteter Erweiterungs-Factorys wurde entfernt; verwenden Sie stattdessen Tool-Ergebnis-Middleware.
OpenClaw entfernt oder interpretiert dokumentiertes Plugin-Verhalten nicht in derselben Änderung neu, die einen Ersatz einführt. Breaking Changes an Verträgen müssen zuerst über einen Kompatibilitätsadapter, Diagnosen, Dokumentation und ein Deprecation-Fenster laufen. Das gilt für SDK-Imports, Manifest-Felder, Setup-APIs, Hooks und Runtime-Registrierungsverhalten.
Warum sich das geändert hat
Der alte Ansatz verursachte Probleme:
- Langsamer Start - das Importieren einer Hilfsfunktion lud Dutzende nicht zusammenhängender Module
- Zirkuläre Abhängigkeiten - breite Re-Exports machten es leicht, Importzyklen zu erzeugen
- Unklare API-Oberfläche - es gab keine Möglichkeit zu erkennen, welche Exports stabil und welche intern waren
Das moderne Plugin-SDK behebt dies: Jeder Importpfad (openclaw/plugin-sdk/\<subpath\>) ist ein kleines, eigenständiges Modul mit einem klaren Zweck und einem dokumentierten Vertrag.
Veraltete Provider-Komfortseams für gebündelte Channels sind ebenfalls entfernt.
Channel-gebrandete Hilfsseams waren private Monorepo-Abkürzungen, keine stabilen Plugin-Verträge. Verwenden Sie stattdessen schmale generische SDK-Unterpfade. Innerhalb des gebündelten Plugin-Workspace sollten Provider-eigene Hilfsfunktionen in der jeweiligen api.ts oder runtime-api.ts dieses Plugins bleiben.
Aktuelle Beispiele gebündelter Provider:
- Anthropic behält Claude-spezifische Stream-Hilfsfunktionen in seiner eigenen
api.ts- /contract-api.ts-Seam - OpenAI behält Provider-Builder, Hilfsfunktionen für Standardmodelle und Realtime-Provider-Builder in seiner eigenen
api.ts - OpenRouter behält Provider-Builder und Onboarding-/Config-Hilfsfunktionen in seiner eigenen
api.ts
Migrationsplan für Talk und Realtime-Voice
Realtime-Voice-, Telefonie-, Meeting- und Browser-Talk-Code wird von oberflächenlokaler Turn-Buchhaltung zu einem gemeinsamen Talk-Sitzungscontroller verschoben, der von openclaw/plugin-sdk/realtime-voice exportiert wird. Der neue Controller besitzt den gemeinsamen Talk-Ereignisumschlag, den aktiven Turn-Status, den Capture-Status, den Ausgabee-Audio-Status, den aktuellen Ereignisverlauf und die Ablehnung veralteter Turns. Provider-Plugins sollten weiterhin anbieterspezifische Realtime-Sitzungen besitzen; Surface-Plugins sollten weiterhin Capture, Wiedergabe, Telefonie und Meeting-Eigenheiten besitzen.
Diese Talk-Migration ist absichtlich klar brechend:
- Behalten Sie die gemeinsamen Controller-/Runtime-Primitiven in
plugin-sdk/realtime-voice. - Verschieben Sie gebündelte Oberflächen auf den gemeinsamen Controller: Browser-Relay, Managed-Room-Handoff, Voice-Call-Realtime, Voice-Call-Streaming-STT, Google Meet-Realtime und natives Push-to-Talk.
- Ersetzen Sie alte Talk-RPC-Familien durch die endgültige
talk.session.*- undtalk.client.*-API. - Bewerben Sie einen Live-Talk-Ereigniskanal in Gateway
hello-ok.features.events:talk.event. - Löschen Sie den alten Realtime-HTTP-Endpunkt und jeden Pfad für anfragezeitliche Instruction-Overrides.
Neuer Code sollte createTalkEventSequencer(...) nicht direkt aufrufen, außer 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 Ausgabee-Audio-Lifecycle-Ereignisse über Telefonie, Meetings, Browser-Relay, Managed-Room-Handoff und native Talk-Clients hinweg konsistent bleiben.
Die angestrebte Form der öffentlichen API 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 });
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-Sitzungen verwenden talk.client.create, weil der Browser die Provider-Aushandlung und den Medientransport besitzt, während das Gateway Credentials, Instructions und Tool-Policy besitzt. talk.session.* ist die gemeinsame Gateway-verwaltete Oberfläche für Gateway-Relay-Realtime, Gateway-Relay-Transcription und Managed-Room-native STT-/TTS-Sitzungen.
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 neu.
Die unterstützten talk.session.create-Kombinationen sind absichtlich klein:
| Modus | Transport | Brain | Besitzer | Hinweise |
|---|---|---|---|---|
realtime |
gateway-relay |
agent-consult |
Gateway | Full-Duplex-Provider-Audio wird über das Gateway gebridged; Tool-Aufrufe werden über das agent-consult-Tool geroutet. |
transcription |
gateway-relay |
none |
Gateway | Nur Streaming-STT; Aufrufer senden Eingabeaudio und empfangen Transkriptereignisse. |
stt-tts |
managed-room |
agent-consult |
Native/client room | Push-to-Talk- und Walkie-Talkie-artige Räume, in denen der Client Capture/Wiedergabe besitzt und das Gateway den Turn-Status besitzt. |
stt-tts |
managed-room |
direct-tools |
Native/client room | Nur-Admin-Raummodus für vertrauenswürdige First-Party-Oberflächen, die Gateway-Tool-Aktionen direkt ausführen. |
Entfernte Methodenzuordnung:
| Alt | Neu |
|---|---|
talk.realtime.session |
talk.client.create |
talk.realtime.toolCall |
talk.client.toolCall |
talk.realtime.relayAudio |
talk.session.appendAudio |
talk.realtime.relayCancel |
talk.session.cancelOutput oder talk.session.cancelTurn |
talk.realtime.relayToolResult |
talk.session.submitToolResult |
talk.realtime.relayStop |
talk.session.close |
talk.transcription.session |
talk.session.create({ mode: "transcription" }) |
talk.transcription.relayAudio |
talk.session.appendAudio |
talk.transcription.relayCancel |
talk.session.cancelTurn |
talk.transcription.relayStop |
talk.session.close |
talk.handoff.create |
talk.session.create({ transport: "managed-room" }) |
talk.handoff.join |
talk.session.join |
talk.handoff.revoke |
talk.session.close |
Das vereinheitlichte Steuerungsvokabular ist ebenfalls bewusst schmal:
| Methode | Gilt für | Vertrag |
|---|---|---|
talk.session.appendAudio |
realtime/gateway-relay, transcription/gateway-relay |
Fügt der Provider-Sitzung, die derselben Gateway-Verbindung gehört, einen base64-PCM-Audiochunk hinzu. |
talk.session.startTurn |
stt-tts/managed-room |
Startet einen Managed-Room-Benutzerturn. |
talk.session.endTurn |
stt-tts/managed-room |
Beendet den aktiven Turn nach Validierung auf veraltete Turns. |
talk.session.cancelTurn |
alle Gateway-eigenen Sitzungen | Bricht aktive Capture-/Provider-/Agent-/TTS-Arbeit für einen Turn ab. |
talk.session.cancelOutput |
realtime/gateway-relay |
Stoppt die Audioausgabe des Assistenten, ohne den Benutzerturn zwingend zu beenden. |
talk.session.submitToolResult |
realtime/gateway-relay |
Schließt einen vom Relay ausgegebenen Provider-Tool-Aufruf ab. |
talk.session.close |
alle vereinheitlichten Sitzungen | Stoppt Relay-Sitzungen oder widerruft Managed-Room-Status und vergisst anschließend die vereinheitlichte Sitzungs-ID. |
Führen Sie keine Provider- oder Plattform-Sonderfälle in Core ein, damit dies funktioniert. Core besitzt Talk-Sitzungssemantik. Provider-Plugins besitzen das Setup von Vendor-Sitzungen. Voice-Call und Google Meet besitzen Telefonie-/Meeting-Adapter. Browser- und native Apps besitzen UX für Geräte-Capture/-Wiedergabe.
Kompatibilitätsrichtlinie
Für externe Plugins folgt Kompatibilitätsarbeit dieser Reihenfolge:
- neuen Vertrag hinzufügen
- altes Verhalten über einen Kompatibilitätsadapter verdrahtet lassen
- Diagnose oder Warnung ausgeben, die den alten Pfad und den Ersatz nennt
- beide Pfade in Tests abdecken
- Deprecation und Migrationspfad dokumentieren
- erst nach dem angekündigten Migrationsfenster entfernen, normalerweise 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äts-Owner und
pnpm plugins:boundary-report:ci, wenn ein CI-Gate bei fälligen
Kompatibilitätsdatensätzen, ownerübergreifenden reservierten SDK-Importen oder ungenutzten reservierten SDK-
Unterpfaden fehlschlagen soll. Der Bericht gruppiert veraltete
Kompatibilitätsdatensätze nach Entfernungsdatum, zählt lokale Code-/Doku-Referenzen,
zeigt ownerübergreifende reservierte SDK-Importe und fasst die private
Memory-Host-SDK-Bridge zusammen, damit Kompatibilitätsbereinigung explizit bleibt, anstatt
sich auf Ad-hoc-Suchen zu stützen. Reservierte SDK-Unterpfade müssen nachverfolgte Owner-Nutzung haben;
ungenutzte reservierte Helper-Exporte sollten aus dem öffentlichen SDK entfernt werden.
Wenn ein Manifestfeld weiterhin akzeptiert wird, können Plugin-Autoren es weiter verwenden, bis Dokumentation und Diagnose etwas anderes angeben. Neuer Code sollte die dokumentierte Alternative bevorzugen, aber bestehende Plugins sollten bei gewöhnlichen Minor- Releases nicht brechen.
Migration
Runtime-Config-Load-/Write-Helper migrieren
Gebündelte Plugins sollten
api.runtime.config.loadConfig() und
api.runtime.config.writeConfigFile(...) nicht mehr direkt aufrufen. Bevorzugen Sie Konfiguration, die
bereits an 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 innerhalb von
execute ctx.getRuntimeConfig() aus dem Tool-Kontext verwenden, damit ein Tool, das vor einem Config-Write erstellt wurde, weiterhin die aktualisierte
Runtime-Config sieht.
Config-Writes 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 dann, wenn der Aufrufer die
Nachbereitung besitzt und den Reload-Planer bewusst unterdrücken möchte.
Mutationsergebnisse enthalten eine typisierte followUp-Zusammenfassung für Tests und Logging;
das Gateway bleibt dafür verantwortlich, den Neustart anzuwenden oder zu planen.
loadConfig und writeConfigFile bleiben während des Migrationsfensters als veraltete Kompatibilitäts-
Helper für externe Plugins erhalten und warnen einmalig mit
dem Kompatibilitätscode runtime-config-load-write. Gebündelte Plugins und Repo-
Runtime-Code werden durch Scanner-Schutzmechanismen in
pnpm check:deprecated-internal-config-api und
pnpm check:no-runtime-action-load-config geschützt: neue produktive Plugin-Nutzung
schlägt direkt fehl, direkte Config-Writes schlagen fehl, Gateway-Servermethoden 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 ambiente 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-Unterpfad, der zur Aufgabe passt:
| Bedarf | Import |
|---|---|
Config-Typen wie OpenClawConfig |
openclaw/plugin-sdk/config-types |
| Bereits geladene Config-Assertions und Config-Lookup für Plugin-Einträge | openclaw/plugin-sdk/plugin-config-runtime |
| Lesezugriffe auf den aktuellen Runtime-Snapshot | openclaw/plugin-sdk/runtime-config-snapshot |
| Config-Writes | openclaw/plugin-sdk/config-mutation |
| Session-Store-Helper | openclaw/plugin-sdk/session-store-runtime |
| Markdown-Tabellen-Config | openclaw/plugin-sdk/markdown-table-runtime |
| Runtime-Helper für Gruppenrichtlinien | openclaw/plugin-sdk/runtime-group-policy |
| Auflösung geheimer Eingaben | openclaw/plugin-sdk/secret-input-runtime |
| Modell-/Session-Overrides | openclaw/plugin-sdk/model-session-runtime |
Gebündelte Plugins und ihre Tests werden per Scanner gegen das breite Barrel geschützt, damit Importe und Mocks lokal auf das benötigte Verhalten begrenzt bleiben. Das breite Barrel existiert weiterhin für externe Kompatibilität, aber neuer Code sollte nicht davon abhängen.
Pi-Tool-Result-Erweiterungen zu Middleware migrieren
Gebündelte Plugins müssen Pi-spezifische
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, da sie Tool-Ausgaben mit hohem Vertrauen umschreiben kann, bevor das Modell sie sieht.
Approval-native Handler zu Capability-Fakten 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(...)durchapprovalCapability.nativeRuntime - Verschieben Sie Approval-spezifische Authentifizierung/Zustellung von der alten
plugin.auth-/plugin.approvals-Verkabelung aufapprovalCapability ChannelPlugin.approvalswurde aus dem öffentlichen Channel-Plugin- Vertrag entfernt; verschieben Sie delivery/native/render-Felder aufapprovalCapabilityplugin.authbleibt nur für Channel-Login-/Logout-Flows erhalten; 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 Umleitungsmitteilungen aus nativen Approval-Handlern; Core besitzt jetzt „anderweitig zugestellt“-Mitteilungen aus tatsächlichen Zustellungsergebnissen
- Wenn Sie
channelRuntimeancreateChannelManager(...)übergeben, stellen Sie eine echtecreatePluginRuntime().channel-Oberfläche bereit. Partielle Stubs werden abgelehnt.
Siehe /plugins/sdk-channel-plugins für das aktuelle Layout der Approval-Capability.
Fallback-Verhalten des Windows-Wrappers 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 stattdessen den ausgelösten Fehler.
Veraltete Importe finden
Durchsuchen Sie Ihr Plugin nach Importen 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/
Durch fokussierte Importe ersetzen
Jeder Export aus der alten Oberfläche entspricht einem bestimmten modernen Importpfad:
// 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, anstatt direkt zu importieren:
// 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 Import | Moderne Entsprechung |
|---|---|
resolveAgentDir |
api.runtime.agent.resolveAgentDir |
resolveAgentWorkspaceDir |
api.runtime.agent.resolveAgentWorkspaceDir |
resolveAgentIdentity |
api.runtime.agent.resolveAgentIdentity |
resolveThinkingDefault |
api.runtime.agent.resolveThinkingDefault |
resolveAgentTimeoutMs |
api.runtime.agent.resolveAgentTimeoutMs |
ensureAgentWorkspace |
api.runtime.agent.ensureAgentWorkspace |
| Session-Store-Helper | api.runtime.agent.session.* |
Breite infra-runtime-Importe 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:
| Bedarf | Import |
|---|---|
| Helper für System-Event-Queue | openclaw/plugin-sdk/system-event-runtime |
| Heartbeat-Event- und Sichtbarkeits-Helper | openclaw/plugin-sdk/heartbeat-runtime |
| Drain der ausstehenden Zustellungswarteschlange | openclaw/plugin-sdk/delivery-queue-runtime |
| Channel-Aktivitäts-Telemetrie | openclaw/plugin-sdk/channel-activity-runtime |
| In-Memory-Dedupe-Caches | openclaw/plugin-sdk/dedupe-runtime |
| Sichere Helper für lokale Datei-/Medienpfade | openclaw/plugin-sdk/file-access-runtime |
| Dispatcher-fähiges Fetch | openclaw/plugin-sdk/runtime-fetch |
| Proxy- und geschützte Fetch-Helper | openclaw/plugin-sdk/fetch-runtime |
| Typen für SSRF-Dispatcher-Richtlinien | openclaw/plugin-sdk/ssrf-dispatcher |
| Typen für Approval-Anfrage/-Auflösung | openclaw/plugin-sdk/approval-runtime |
| Helper für Approval-Antwort-Payload und -Befehle | openclaw/plugin-sdk/approval-reply-runtime |
| Helper für Fehlerformatierung | openclaw/plugin-sdk/error-runtime |
| Wartelogik für Transportbereitschaft | openclaw/plugin-sdk/transport-ready-runtime |
| Helper für sichere Tokens | openclaw/plugin-sdk/secure-random-runtime |
| Begrenzte Nebenläufigkeit asynchroner Tasks | openclaw/plugin-sdk/concurrency-runtime |
| Numerische Erzwingung | openclaw/plugin-sdk/number-runtime |
| Prozesslokale asynchrone Sperre | openclaw/plugin-sdk/async-lock-runtime |
| Dateisperren | openclaw/plugin-sdk/file-lock |
Gebündelte Plugins werden per Scanner gegen infra-runtime geschützt, sodass Repo-Code
nicht zum breiten Barrel zurückfallen kann.
Channel-Route-Helper migrieren
Neuer Channel-Route-Code sollte openclaw/plugin-sdk/channel-route verwenden.
Die älteren Namen für Route-Key und vergleichbares Ziel bleiben während des Migrationsfensters als Kompatibilitäts-
Aliasse erhalten, aber neue Plugins sollten die Route-
Namen verwenden, die das Verhalten direkt beschreiben:
| Alter Helper | Moderner Helper |
|---|---|
channelRouteIdentityKey(...) |
channelRouteDedupeKey(...) |
channelRouteKey(...) |
channelRouteCompactKey(...) |
ComparableChannelTarget |
ChannelRouteParsedTarget |
resolveComparableTargetForChannel(...) |
resolveRouteTargetForChannel(...) |
resolveComparableTargetForLoadedChannel(...) |
resolveRouteTargetForLoadedChannel(...) |
comparableChannelTargetsMatch(...) |
channelRouteTargetsMatchExact(...) |
comparableChannelTargetsShareRoute(...) |
channelRouteTargetsShareConversation(...) |
Die modernen Route-Hilfsfunktionen normalisieren { channel, to, accountId, threadId }
konsistent über native Genehmigungen, Antwortunterdrückung, Deduplizierung
eingehender Nachrichten, Cron-Zustellung und Sitzungsrouting hinweg. Wenn Ihr
Plugin eine benutzerdefinierte Zielgrammatik besitzt, verwenden Sie
resolveChannelRouteTargetWithParser(...), um diesen Parser an denselben
Route-Zielvertrag anzupassen.
Erstellen und testen
pnpm build
pnpm test -- my-plugin/
Referenz der Importpfade
Tabelle gängiger Importpfade
| Importpfad | Zweck | Wichtige Exporte |
|---|---|---|
plugin-sdk/plugin-entry |
Kanonische Hilfsfunktion für Plugin-Einstiege | definePluginEntry |
plugin-sdk/core |
Legacy-Sammel-Reexport für Kanaleinstiegsdefinitionen/-Ersteller | defineChannelPluginEntry, createChatChannelPlugin |
plugin-sdk/config-schema |
Export des Wurzel-Konfigurationsschemas | OpenClawSchema |
plugin-sdk/provider-entry |
Einstiegshilfsfunktion für einzelne Provider | defineSingleProviderPluginEntry |
plugin-sdk/channel-core |
Fokussierte Kanaleinstiegsdefinitionen und -Ersteller | defineChannelPluginEntry, defineSetupPluginEntry, createChatChannelPlugin, createChannelPluginBase |
plugin-sdk/setup |
Gemeinsame Einrichtungsassistent-Hilfsfunktionen | Allowlist-Eingabeaufforderungen, Ersteller für Einrichtungsstatus |
plugin-sdk/setup-runtime |
Laufzeit-Hilfsfunktionen für die Einrichtung | Importsichere Einrichtungs-Patch-Adapter, Lookup-Notiz-Hilfsfunktionen, promptResolvedAllowFrom, splitSetupEntries, delegierte Einrichtungs-Proxys |
plugin-sdk/setup-adapter-runtime |
Hilfsfunktionen für Einrichtungsadapter | createEnvPatchedAccountSetupAdapter |
plugin-sdk/setup-tools |
Hilfsfunktionen für Einrichtungswerkzeuge | formatCliCommand, detectBinary, extractArchive, resolveBrewExecutable, formatDocsLink, CONFIG_DIR |
plugin-sdk/account-core |
Hilfsfunktionen für mehrere Konten | Hilfsfunktionen für Kontoliste/Konfiguration/Aktions-Gate |
plugin-sdk/account-id |
Hilfsfunktionen für Konto-IDs | DEFAULT_ACCOUNT_ID, Normalisierung von Konto-IDs |
plugin-sdk/account-resolution |
Hilfsfunktionen für Kontosuche | Hilfsfunktionen für Kontosuche + Standard-Fallback |
plugin-sdk/account-helpers |
Schmale Kontohilfsfunktionen | Hilfsfunktionen für Kontolisten/Kontoaktionen |
plugin-sdk/channel-setup |
Adapter für den Einrichtungsassistenten | createOptionalChannelSetupSurface, createOptionalChannelSetupAdapter, createOptionalChannelSetupWizard, plus DEFAULT_ACCOUNT_ID, createTopLevelChannelDmPolicy, setSetupChannelEnabled, splitSetupEntries |
plugin-sdk/channel-pairing |
DM-Kopplungsprimitive | createChannelPairingController |
plugin-sdk/channel-reply-pipeline |
Verdrahtung für Antwortpräfix, Tippanzeige und Quellzustellung | createChannelReplyPipeline, resolveChannelSourceReplyDeliveryMode |
plugin-sdk/channel-config-helpers |
Fabriken für Konfigurationsadapter und Hilfsfunktionen für DM-Zugriff | createHybridChannelConfigAdapter, resolveChannelDmAccess, resolveChannelDmAllowFrom, resolveChannelDmPolicy, normalizeChannelDmPolicy, normalizeLegacyDmAliases |
plugin-sdk/channel-config-schema |
Ersteller für Konfigurationsschemata | Gemeinsame Primitive für Kanalkonfigurationsschemas und nur der generische Ersteller |
plugin-sdk/bundled-channel-config-schema |
Gebündelte Konfigurationsschemas | Nur von OpenClaw gepflegte gebündelte Plugins; neue Plugins müssen Plugin-lokale Schemas definieren |
plugin-sdk/channel-config-schema-legacy |
Veraltete gebündelte Konfigurationsschemas | Nur Kompatibilitätsalias; verwenden Sie plugin-sdk/bundled-channel-config-schema für gepflegte gebündelte Plugins |
plugin-sdk/telegram-command-config |
Hilfsfunktionen für Telegram-Befehlskonfiguration | Normalisierung von Befehlsnamen, Kürzen von Beschreibungen, Validierung von Duplikaten/Konflikten |
plugin-sdk/channel-policy |
Auflösung von Gruppen-/DM-Richtlinien | resolveChannelGroupRequireMention |
plugin-sdk/channel-lifecycle |
Hilfsfunktionen für Kontostatus und Lebenszyklus von Entwurfsstreams | createAccountStatusSink, Hilfsfunktionen zur Finalisierung von Entwurfsvorschauen |
plugin-sdk/inbound-envelope |
Hilfsfunktionen für eingehende Umschläge | Gemeinsame Hilfsfunktionen für Routen- und Umschlagserstellung |
plugin-sdk/inbound-reply-dispatch |
Hilfsfunktionen für eingehende Antworten | Gemeinsame Hilfsfunktionen für Aufzeichnung und Weiterleitung |
plugin-sdk/messaging-targets |
Parsen von Nachrichtenzielen | Hilfsfunktionen für Zielparsing/-abgleich |
plugin-sdk/outbound-media |
Hilfsfunktionen für ausgehende Medien | Gemeinsames Laden ausgehender Medien |
plugin-sdk/outbound-send-deps |
Hilfsfunktionen für Abhängigkeiten ausgehender Sendungen | Leichtgewichtige resolveOutboundSendDep-Suche ohne Import der vollständigen ausgehenden Laufzeit |
plugin-sdk/outbound-runtime |
Hilfsfunktionen für ausgehende Laufzeit | Hilfsfunktionen für ausgehende Zustellung, Identitäts-/Sende-Delegierung, Sitzung, Formatierung und Nutzlastplanung |
plugin-sdk/thread-bindings-runtime |
Hilfsfunktionen für Thread-Bindungen | Hilfsfunktionen für Lebenszyklus und Adapter von Thread-Bindungen |
plugin-sdk/agent-media-payload |
Legacy-Hilfsfunktionen für Mediennutzlasten | Ersteller für Agent-Mediennutzlasten für Legacy-Feldlayouts |
plugin-sdk/channel-runtime |
Veralteter Kompatibilitäts-Shim | Nur Legacy-Kanallaufzeit-Dienstprogramme |
plugin-sdk/channel-send-result |
Typen für Sendeergebnisse | Typen für Antwortergebnisse |
plugin-sdk/runtime-store |
Persistenter Plugin-Speicher | createPluginRuntimeStore |
plugin-sdk/runtime |
Breite Laufzeit-Hilfsfunktionen | Hilfsfunktionen für Laufzeit/Protokollierung/Sicherung/Plugin-Installation |
plugin-sdk/runtime-env |
Schmale Laufzeitumgebungs-Hilfsfunktionen | Logger/Laufzeitumgebung, Zeitlimit, Wiederholung und Backoff-Hilfsfunktionen |
plugin-sdk/plugin-runtime |
Gemeinsame Plugin-Laufzeit-Hilfsfunktionen | Hilfsfunktionen für Plugin-Befehle/Hooks/HTTP/Interaktivität |
plugin-sdk/hook-runtime |
Hilfsfunktionen für Hook-Pipelines | Gemeinsame Hilfsfunktionen für Webhook/interne Hook-Pipelines |
plugin-sdk/lazy-runtime |
Lazy-Laufzeit-Hilfsfunktionen | createLazyRuntimeModule, createLazyRuntimeMethod, createLazyRuntimeMethodBinder, createLazyRuntimeNamedExport, createLazyRuntimeSurface |
plugin-sdk/process-runtime |
Prozess-Hilfsfunktionen | Gemeinsame Exec-Hilfsfunktionen |
plugin-sdk/cli-runtime |
CLI-Laufzeit-Hilfsfunktionen | Befehlsformatierung, Wartefunktionen, Versionshilfen |
plugin-sdk/gateway-runtime |
Gateway-Hilfsfunktionen | Gateway-Client, Start-Hilfsfunktion für bereite Ereignisschleife und Hilfsfunktionen für Kanalstatus-Patches |
plugin-sdk/config-runtime |
Veralteter Konfigurations-Kompatibilitäts-Shim | Bevorzugen Sie config-types, plugin-config-runtime, runtime-config-snapshot und config-mutation |
plugin-sdk/telegram-command-config |
Hilfsfunktionen für Telegram-Befehle | Fallback-stabile Hilfsfunktionen für Telegram-Befehlsvalidierung, wenn die gebündelte Telegram-Vertragsoberfläche nicht verfügbar ist |
plugin-sdk/approval-runtime |
Hilfsfunktionen für Genehmigungsaufforderungen | Exec-/Plugin-Genehmigungsnutzlast, Hilfsfunktionen für Genehmigungsfähigkeiten/-profile, natives Genehmigungsrouting/-laufzeit und Formatierung strukturierter Genehmigungsanzeigepfade |
plugin-sdk/approval-auth-runtime |
Hilfsfunktionen für Genehmigungsauthentifizierung | Auflösung von Genehmigenden, Aktionsauthentifizierung im selben Chat |
plugin-sdk/approval-client-runtime |
Hilfsfunktionen für Genehmigungsclient | Native Hilfsfunktionen für Exec-Genehmigungsprofile/-filter |
plugin-sdk/approval-delivery-runtime |
Hilfsfunktionen für Genehmigungszustellung | Native Adapter für Genehmigungsfähigkeit/-zustellung |
plugin-sdk/approval-gateway-runtime |
Hilfsfunktionen für Genehmigungs-Gateway | Gemeinsame Hilfsfunktion zur Auflösung des Genehmigungs-Gateway |
plugin-sdk/approval-handler-adapter-runtime |
Hilfsfunktionen für Genehmigungsadapter | Leichtgewichtige Hilfsfunktionen zum Laden nativer Genehmigungsadapter für heiße Kanaleinstiegspunkte |
plugin-sdk/approval-handler-runtime |
Hilfsfunktionen für Genehmigungshandler | Breitere Laufzeit-Hilfsfunktionen für Genehmigungshandler; bevorzugen Sie die schmaleren Adapter-/Gateway-Schnittstellen, wenn sie ausreichen |
plugin-sdk/approval-native-runtime |
Hilfsfunktionen für Genehmigungsziele | Native Hilfsfunktionen für Genehmigungsziel-/Kontobindung |
plugin-sdk/approval-reply-runtime |
Hilfsfunktionen für Genehmigungsantworten | Hilfsfunktionen für Exec-/Plugin-Genehmigungsantwortnutzlasten |
plugin-sdk/channel-runtime-context |
Hilfsfunktionen für Kanallaufzeitkontext | Generische Hilfsfunktionen zum Registrieren/Abrufen/Überwachen des Kanallaufzeitkontexts |
plugin-sdk/security-runtime |
Sicherheits-Hilfsfunktionen | Gemeinsame Hilfsfunktionen für Vertrauen, DM-Gating, wurzelbegrenzte Dateien/Pfade, externe Inhalte und Secret-Erfassung |
plugin-sdk/ssrf-policy |
Hilfsfunktionen für SSRF-Richtlinien | Hilfsfunktionen für Host-Allowlist und Richtlinien für private Netzwerke |
plugin-sdk/ssrf-runtime |
SSRF-Laufzeit-Hilfsfunktionen | Angehefteter Dispatcher, geschütztes Abrufen, Hilfsfunktionen für SSRF-Richtlinien |
plugin-sdk/system-event-runtime |
Hilfsfunktionen für Systemereignisse | enqueueSystemEvent, peekSystemEventEntries |
plugin-sdk/heartbeat-runtime |
Heartbeat-Hilfsfunktionen | Hilfsfunktionen für Heartbeat-Ereignisse und Sichtbarkeit |
plugin-sdk/delivery-queue-runtime |
Hilfsfunktionen für Zustellwarteschlangen | drainPendingDeliveries |
plugin-sdk/channel-activity-runtime |
Hilfsfunktionen für Kanalaktivität | recordChannelActivity |
plugin-sdk/dedupe-runtime |
Hilfsfunktionen für Deduplizierung | In-Memory-Deduplizierungs-Caches |
plugin-sdk/file-access-runtime |
Hilfsfunktionen für Dateizugriff | Sichere Hilfsfunktionen für lokale Datei-/Medienpfade |
plugin-sdk/transport-ready-runtime |
Hilfsfunktionen für Transportbereitschaft | waitForTransportReady |
plugin-sdk/collection-runtime |
Hilfsfunktionen für begrenzte Caches | pruneMapToMaxSize |
plugin-sdk/diagnostic-runtime |
Hilfsfunktionen für Diagnose-Gating | isDiagnosticFlagEnabled, isDiagnosticsEnabled |
plugin-sdk/error-runtime |
Hilfsfunktionen für Fehlerformatierung | formatUncaughtError, isApprovalNotFoundError, Hilfsfunktionen für Fehlergraphen |
plugin-sdk/fetch-runtime |
Umhüllte Fetch-/Proxy-Hilfsfunktionen | resolveFetch, Proxy-Hilfsfunktionen, Hilfsfunktionen für EnvHttpProxyAgent-Optionen |
plugin-sdk/host-runtime |
Hilfsfunktionen für Hostnormalisierung | normalizeHostname, normalizeScpRemoteHost |
plugin-sdk/retry-runtime |
Hilfsfunktionen für Wiederholungen | RetryConfig, retryAsync, Richtlinienausführungen |
plugin-sdk/allow-from |
Allowlist-Formatierung | formatAllowFromLowercase |
plugin-sdk/allowlist-resolution |
Zuordnung von Allowlist-Eingaben | mapAllowlistResolutionInputs |
plugin-sdk/command-auth |
Hilfsfunktionen für Befehls-Gating und Befehlsoberflächen | resolveControlCommandGate, Hilfsfunktionen für Absenderautorisierung, Befehlsregistrierungs-Hilfsfunktionen einschließlich Formatierung dynamischer Argumentmenüs |
plugin-sdk/command-status |
Renderer für Befehlsstatus/-hilfe | buildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage |
plugin-sdk/secret-input |
Parsen von Secret-Eingaben | Hilfsfunktionen für Secret-Eingaben |
plugin-sdk/webhook-ingress |
Hilfsfunktionen für Webhook-Anfragen | Webhook-Zieldienstprogramme |
plugin-sdk/webhook-request-guards |
Hilfsfunktionen für Webhook-Body-Guards | Hilfsfunktionen zum Lesen/Begrenzen von Anfragebodys |
plugin-sdk/reply-runtime |
Gemeinsame Antwortlaufzeit | Eingehende Weiterleitung, Heartbeat, Antwortplaner, Aufteilung in Stücke |
plugin-sdk/reply-dispatch-runtime |
Schmale Hilfsfunktionen für Antwortweiterleitung | Finalisierung, Provider-Weiterleitung und Hilfsfunktionen für Konversationslabels |
plugin-sdk/reply-history |
Hilfsfunktionen für Antwortverlauf | buildHistoryContext, buildPendingHistoryContextFromMap, recordPendingHistoryEntry, clearHistoryEntriesIfEnabled |
plugin-sdk/reply-reference |
Planung von Antwortreferenzen | createReplyReferencePlanner |
plugin-sdk/reply-chunking |
Hilfsfunktionen für Antwortstücke | Hilfsfunktionen zur Aufteilung von Text/Markdown |
plugin-sdk/session-store-runtime |
Hilfsfunktionen für Sitzungsspeicher | Hilfsfunktionen für Speicherpfad + Aktualisierungszeitpunkt |
plugin-sdk/state-paths |
Hilfsfunktionen für Zustandspfade | Hilfsfunktionen für Zustands- und OAuth-Verzeichnisse |
plugin-sdk/routing |
Hilfsfunktionen für Routing/Sitzungsschlüssel | resolveAgentRoute, buildAgentSessionKey, resolveDefaultAgentBoundAccountId, Hilfsfunktionen zur Normalisierung von Sitzungsschlüsseln |
plugin-sdk/status-helpers |
Hilfsfunktionen für Kanalstatus | Ersteller für Kanal-/Kontostatuszusammenfassungen, Laufzeitzustands-Standards, Hilfsfunktionen für Problemmetadaten |
plugin-sdk/target-resolver-runtime |
Hilfsfunktionen für Zielauflöser | Gemeinsame Hilfsfunktionen für Zielauflöser |
plugin-sdk/string-normalization-runtime |
Hilfsfunktionen für String-Normalisierung | Hilfsfunktionen für Slug-/String-Normalisierung |
plugin-sdk/request-url |
Hilfsfunktionen für Anfrage-URLs | String-URLs aus anfrageähnlichen Eingaben extrahieren |
plugin-sdk/run-command |
Hilfsfunktionen für zeitgesteuerte Befehle | Zeitgesteuerter Befehlsausführer mit normalisiertem stdout/stderr |
plugin-sdk/param-readers |
Parameterleser | Allgemeine Parameterleser für Werkzeuge/CLI |
plugin-sdk/tool-payload |
Tool-Payload-Extraktion | Extrahiert normalisierte Payloads aus Tool-Ergebnisobjekten |
plugin-sdk/tool-send |
Tool-Send-Extraktion | Extrahiert kanonische Send-Zielfelder aus Tool-Argumenten |
plugin-sdk/temp-path |
Hilfsfunktionen für temporäre Pfade | Gemeinsame Hilfsfunktionen für temporäre Download-Pfade |
plugin-sdk/logging-core |
Logging-Hilfsfunktionen | Subsystem-Logger und Redaction-Hilfsfunktionen |
plugin-sdk/markdown-table-runtime |
Hilfsfunktionen für Markdown-Tabellen | Hilfsfunktionen für Markdown-Tabellenmodi |
plugin-sdk/reply-payload |
Typen für Nachrichtenantworten | Typen für Antwort-Payloads |
plugin-sdk/provider-setup |
Kuratierte Hilfsfunktionen für lokale/self-hosted Provider-Einrichtung | Hilfsfunktionen für Erkennung/Konfiguration self-hosted Provider |
plugin-sdk/self-hosted-provider-setup |
Fokussierte Hilfsfunktionen für OpenAI-kompatible self-hosted Provider-Einrichtung | Dieselben Hilfsfunktionen für Erkennung/Konfiguration self-hosted Provider |
plugin-sdk/provider-auth-runtime |
Hilfsfunktionen für Provider-Runtime-Authentifizierung | Hilfsfunktionen zur Laufzeitauflösung von API-Schlüsseln |
plugin-sdk/provider-auth-api-key |
Hilfsfunktionen für Provider-API-Schlüsseleinrichtung | Hilfsfunktionen für API-Schlüssel-Onboarding und Profilschreiben |
plugin-sdk/provider-auth-result |
Hilfsfunktionen für Provider-Auth-Ergebnisse | Standard-Builder für OAuth-Auth-Ergebnisse |
plugin-sdk/provider-auth-login |
Hilfsfunktionen für interaktive Provider-Anmeldung | Gemeinsame Hilfsfunktionen für interaktive Anmeldung |
plugin-sdk/provider-selection-runtime |
Hilfsfunktionen für Provider-Auswahl | Konfigurierte-oder-automatische Provider-Auswahl und Zusammenführung roher Provider-Konfiguration |
plugin-sdk/provider-env-vars |
Hilfsfunktionen für Provider-Env-Variablen | Hilfsfunktionen für die Suche nach Provider-Auth-Env-Variablen |
plugin-sdk/provider-model-shared |
Gemeinsame Hilfsfunktionen für Provider-Modelle/Replay | ProviderReplayFamily, buildProviderReplayFamilyHooks, normalizeModelCompat, gemeinsame Replay-Policy-Builder, Provider-Endpoint-Hilfsfunktionen und Hilfsfunktionen zur Model-ID-Normalisierung |
plugin-sdk/provider-catalog-shared |
Gemeinsame Hilfsfunktionen für Provider-Kataloge | findCatalogTemplate, buildSingleProviderApiKeyCatalog, buildManifestModelProviderConfig, supportsNativeStreamingUsageCompat, applyProviderNativeStreamingUsageCompat |
plugin-sdk/provider-onboard |
Provider-Onboarding-Patches | Hilfsfunktionen für Onboarding-Konfiguration |
plugin-sdk/provider-http |
Provider-HTTP-Hilfsfunktionen | Generische Hilfsfunktionen für Provider-HTTP/Endpoint-Fähigkeiten, einschließlich Multipart-Formular-Hilfsfunktionen für Audio-Transkription |
plugin-sdk/provider-web-fetch |
Provider-Web-Fetch-Hilfsfunktionen | Hilfsfunktionen für Web-Fetch-Provider-Registrierung/Cache |
plugin-sdk/provider-web-search-config-contract |
Hilfsfunktionen für Provider-Web-Search-Konfiguration | Schmale Hilfsfunktionen für Web-Search-Konfiguration/Anmeldedaten für Provider, die keine Plugin-Aktivierungsverdrahtung benötigen |
plugin-sdk/provider-web-search-contract |
Hilfsfunktionen für Provider-Web-Search-Contract | Schmale Hilfsfunktionen für Web-Search-Konfigurations-/Anmeldedaten-Contracts wie createWebSearchProviderContractFields, enablePluginInConfig, resolveProviderWebSearchPluginConfig und bereichsgebundene Setter/Getter für Anmeldedaten |
plugin-sdk/provider-web-search |
Provider-Web-Search-Hilfsfunktionen | Hilfsfunktionen für Web-Search-Provider-Registrierung/Cache/Runtime |
plugin-sdk/provider-tools |
Hilfsfunktionen für Provider-Tool-/Schema-Kompatibilität | ProviderToolCompatFamily, buildProviderToolCompatFamilyHooks, Gemini-Schema-Bereinigung + Diagnose sowie xAI-Kompatibilitäts-Hilfsfunktionen wie resolveXaiModelCompatPatch / applyXaiModelCompat |
plugin-sdk/provider-usage |
Hilfsfunktionen für Provider-Nutzung | fetchClaudeUsage, fetchGeminiUsage, fetchGithubCopilotUsage und weitere Hilfsfunktionen für Provider-Nutzung |
plugin-sdk/provider-stream |
Hilfsfunktionen für Provider-Stream-Wrapper | ProviderStreamFamily, buildProviderStreamFamilyHooks, composeProviderStreamWrappers, Stream-Wrapper-Typen und gemeinsame Wrapper-Hilfsfunktionen für Anthropic/Bedrock/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot |
plugin-sdk/provider-transport-runtime |
Hilfsfunktionen für Provider-Transport | Native Provider-Transport-Hilfsfunktionen wie geschützter Fetch, Transport-Nachrichtentransformationen und beschreibbare Transport-Ereignisstreams |
plugin-sdk/keyed-async-queue |
Geordnete asynchrone Queue | KeyedAsyncQueue |
plugin-sdk/media-runtime |
Gemeinsame Medien-Hilfsfunktionen | Hilfsfunktionen für Medienabruf/-transformation/-speicherung, ffprobe-gestützte Ermittlung von Videodimensionen und Media-Payload-Builder |
plugin-sdk/media-generation-runtime |
Gemeinsame Hilfsfunktionen für Mediengenerierung | Gemeinsame Failover-Hilfsfunktionen, Kandidatenauswahl und Meldungen zu fehlenden Modellen für Bild-/Video-/Musikgenerierung |
plugin-sdk/media-understanding |
Hilfsfunktionen für Medienverständnis | Provider-Typen für Medienverständnis plus Provider-orientierte Exportfunktionen für Bild/Audio |
plugin-sdk/text-runtime |
Gemeinsame Text-Hilfsfunktionen | Entfernen von assistentensichtbarem Text, Hilfsfunktionen für Markdown-Rendering/Chunking/Tabellen, Redaction-Hilfsfunktionen, Hilfsfunktionen für Direktiven-Tags, Safe-Text-Utilities und zugehörige Text-/Logging-Hilfsfunktionen |
plugin-sdk/text-chunking |
Hilfsfunktionen für Text-Chunking | Hilfsfunktion für ausgehendes Text-Chunking |
plugin-sdk/speech |
Speech-Hilfsfunktionen | Speech-Provider-Typen plus Provider-orientierte Hilfsfunktionen für Direktiven, Registry und Validierung sowie OpenAI-kompatibler TTS-Builder |
plugin-sdk/speech-core |
Gemeinsamer Speech-Core | Speech-Provider-Typen, Registry, Direktiven, Normalisierung |
plugin-sdk/realtime-transcription |
Hilfsfunktionen für Echtzeittranskription | Provider-Typen, Registry-Hilfsfunktionen und gemeinsame WebSocket-Sitzungshilfsfunktion |
plugin-sdk/realtime-voice |
Hilfsfunktionen für Echtzeit-Sprache | Provider-Typen, Registry-/Auflösungshilfsfunktionen, Bridge-Sitzungshilfsfunktionen, gemeinsame Agent-Talk-Back-Queues, Transkript-/Ereignisgesundheit, Echo-Unterdrückung und schnelle Kontext-Consult-Hilfsfunktionen |
plugin-sdk/image-generation |
Hilfsfunktionen für Bildgenerierung | Provider-Typen für Bildgenerierung plus Hilfsfunktionen für Bild-Assets/Daten-URLs und OpenAI-kompatibler Bild-Provider-Builder |
plugin-sdk/image-generation-core |
Gemeinsamer Core für Bildgenerierung | Bildgenerierungstypen, Failover, Authentifizierung und Registry-Hilfsfunktionen |
plugin-sdk/music-generation |
Hilfsfunktionen für Musikgenerierung | Provider-/Request-/Result-Typen für Musikgenerierung |
plugin-sdk/music-generation-core |
Gemeinsamer Core für Musikgenerierung | Musikgenerierungstypen, Failover-Hilfsfunktionen, Provider-Suche und Model-Ref-Parsing |
plugin-sdk/video-generation |
Hilfsfunktionen für Videogenerierung | Provider-/Request-/Result-Typen für Videogenerierung |
plugin-sdk/video-generation-core |
Gemeinsamer Core für Videogenerierung | Videogenerierungstypen, Failover-Hilfsfunktionen, Provider-Suche und Model-Ref-Parsing |
plugin-sdk/interactive-runtime |
Hilfsfunktionen für interaktive Antworten | Normalisierung/Reduktion von Payloads für interaktive Antworten |
plugin-sdk/channel-config-primitives |
Channel-Konfigurationsprimitive | Schmale Primitive für Channel-Konfigurationsschemas |
plugin-sdk/channel-config-writes |
Hilfsfunktionen für Channel-Konfigurationsschreibvorgänge | Hilfsfunktionen für Autorisierung von Channel-Konfigurationsschreibvorgängen |
plugin-sdk/channel-plugin-common |
Gemeinsamer Channel-Prelude | Gemeinsame Channel-Plugin-Prelude-Exporte |
plugin-sdk/channel-status |
Hilfsfunktionen für Channel-Status | Gemeinsame Hilfsfunktionen für Channel-Status-Snapshot/-Zusammenfassung |
plugin-sdk/allowlist-config-edit |
Hilfsfunktionen für Allowlist-Konfiguration | Hilfsfunktionen zum Bearbeiten/Lesen der Allowlist-Konfiguration |
plugin-sdk/group-access |
Hilfsfunktionen für Gruppenzugriff | Gemeinsame Hilfsfunktionen für Gruppenzugriffsentscheidungen |
plugin-sdk/direct-dm |
Hilfsfunktionen für direkte DMs | Gemeinsame Hilfsfunktionen für Authentifizierung/Schutz direkter DMs |
plugin-sdk/extension-shared |
Gemeinsame Erweiterungs-Hilfsfunktionen | Primitive für passive Channels/Status und Ambient-Proxy-Hilfsfunktionen |
plugin-sdk/webhook-targets |
Webhook-Ziel-Hilfsfunktionen | Webhook-Ziel-Registry und Hilfsfunktionen für Routeninstallation |
plugin-sdk/webhook-path |
Webhook-Pfad-Hilfsfunktionen | Hilfsfunktionen für Webhook-Pfadnormalisierung |
plugin-sdk/web-media |
Gemeinsame Webmedien-Hilfsfunktionen | Hilfsfunktionen für Remote-/lokales Laden von Medien |
plugin-sdk/zod |
Zod-Re-Export | Re-exportiertes zod für Plugin-SDK-Nutzer |
plugin-sdk/memory-core |
Gebündelte Memory-Core-Hilfsfunktionen | Oberfläche für Memory-Manager-/Konfigurations-/Datei-/CLI-Hilfsfunktionen |
plugin-sdk/memory-core-engine-runtime |
Runtime-Fassade für Memory-Engine | Runtime-Fassade für Memory-Index/-Suche |
plugin-sdk/memory-core-host-engine-foundation |
Memory-Host-Foundation-Engine | Exporte der Memory-Host-Foundation-Engine |
plugin-sdk/memory-core-host-engine-embeddings |
Memory-Host-Embedding-Engine | Memory-Embedding-Contracts, Registry-Zugriff, lokaler Provider und generische Batch-/Remote-Hilfsfunktionen; konkrete Remote-Provider liegen in ihren besitzenden Plugins |
plugin-sdk/memory-core-host-engine-qmd |
Memory-Host-QMD-Engine | Exporte der Memory-Host-QMD-Engine |
plugin-sdk/memory-core-host-engine-storage |
Memory-Host-Storage-Engine | Exporte der Memory-Host-Storage-Engine |
plugin-sdk/memory-core-host-multimodal |
Hilfsfunktionen für multimodalen Memory-Host | Hilfsfunktionen für multimodalen Memory-Host |
plugin-sdk/memory-core-host-query |
Hilfsfunktionen für Memory-Host-Abfragen | Hilfsfunktionen für Memory-Host-Abfragen |
plugin-sdk/memory-core-host-secret |
Hilfsfunktionen für Memory-Host-Secrets | Hilfsfunktionen für Memory-Host-Secrets |
plugin-sdk/memory-core-host-events |
Hilfsfunktionen für Memory-Host-Ereignisjournal | Hilfsfunktionen für Memory-Host-Ereignisjournal |
plugin-sdk/memory-core-host-status |
Hilfsfunktionen für Memory-Host-Status | Hilfsfunktionen für Memory-Host-Status |
plugin-sdk/memory-core-host-runtime-cli |
Memory-Host-CLI-Runtime | Hilfsfunktionen für Memory-Host-CLI-Runtime |
plugin-sdk/memory-core-host-runtime-core |
Memory-Host-Core-Runtime | Hilfsfunktionen für Memory-Host-Core-Runtime |
plugin-sdk/memory-core-host-runtime-files |
Hilfsfunktionen für Memory-Host-Dateien/-Runtime | Hilfsfunktionen für Memory-Host-Dateien/-Runtime |
plugin-sdk/memory-host-core |
Alias für Memory-Host-Core-Runtime | Vendor-neutraler Alias für Hilfsfunktionen der Memory-Host-Core-Runtime |
plugin-sdk/memory-host-events |
Alias für Memory-Host-Ereignisjournal | Vendor-neutraler Alias für Hilfsfunktionen des Memory-Host-Ereignisjournals |
plugin-sdk/memory-host-files |
Alias für Memory-Host-Dateien/-Runtime | Vendor-neutraler Alias für Hilfsfunktionen für Memory-Host-Dateien/-Runtime |
plugin-sdk/memory-host-markdown |
Hilfsfunktionen für verwaltetes Markdown | Gemeinsame Hilfsfunktionen für verwaltetes Markdown für Memory-nahe Plugins |
plugin-sdk/memory-host-search |
Active-Memory-Suchfassade | Lazy-Runtime-Fassade für Active-Memory-Suchmanager |
plugin-sdk/memory-host-status |
Alias für Memory-Host-Status | Vendor-neutraler Alias für Hilfsfunktionen für Memory-Host-Status |
plugin-sdk/testing |
Test-Utilities | Legacy-Barrel für breite Kompatibilität; bevorzugen Sie fokussierte 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. Die vollständige Liste mit über 200 Einstiegspunkten befindet sich in scripts/lib/plugin-sdk-entrypoints.json.
Reservierte Hilfs-Seams für gebündelte Plugins wurden aus der Export-Map des öffentlichen SDK entfernt, mit Ausnahme ausdrücklich dokumentierter Kompatibilitäts-Fassaden wie dem veralteten plugin-sdk/discord-Shim, der für das veröffentlichte Paket @openclaw/[email protected] beibehalten wird. Owner-spezifische Hilfsfunktionen befinden sich im jeweils verantwortlichen Plugin-Paket; gemeinsam genutztes 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 über das Plugin-SDK, den Provider-Vertrag, die Laufzeitoberfläche und das Manifest hinweg gelten. Jede davon funktioniert heute noch, wird aber in einer zukünftigen Hauptversion entfernt. Der Eintrag unter jedem Punkt ordnet die alte API ihrem kanonischen Ersatz zu.
command-auth-Hilfsfunktionen für Hilfe → command-status
Alt (openclaw/plugin-sdk/command-auth): buildCommandsMessage,
buildCommandsMessagePaginated, buildHelpMessage.
Neu (openclaw/plugin-sdk/command-status): gleiche Signaturen, gleiche
Exporte – 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";
Mention-Gating-Hilfsfunktionen → resolveInboundMentionDecision
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 Kanal-Plugins (Slack, Discord, Matrix, MS Teams) wurden bereits umgestellt.
Channel-Runtime-Shim und Channel-Actions-Hilfsfunktionen
openclaw/plugin-sdk/channel-runtime ist ein Kompatibilitäts-Shim für ältere
Kanal-Plugins. Importieren Sie ihn nicht in neuem Code; verwenden Sie
openclaw/plugin-sdk/channel-runtime-context, um Laufzeitobjekte zu
registrieren.
channelActions*-Hilfsfunktionen in openclaw/plugin-sdk/channel-actions
sind zusammen mit rohen „actions“-Kanalexporten veraltet. Stellen Sie
Fähigkeiten stattdessen über die semantische presentation-Oberfläche
bereit – Kanal-Plugins deklarieren, was sie rendern (Karten, Buttons,
Auswahlfelder), statt welche rohen Action-Namen sie akzeptieren.
Web-Search-Provider-Hilfsfunktion tool() → createTool() im Plugin
Alt: tool()-Factory aus openclaw/plugin-sdk/provider-web-search.
Neu: Implementieren Sie createTool(...) direkt im Provider-Plugin.
OpenClaw benötigt die SDK-Hilfsfunktion nicht mehr, um den Tool-Wrapper zu
registrieren.
Plaintext-Kanalumschläge → BodyForAgent
Alt: formatInboundEnvelope(...) (und
ChannelMessageForAgent.channelEnvelope), um aus eingehenden
Kanalnachrichten einen flachen Plaintext-Prompt-Umschlag zu erstellen.
Neu: BodyForAgent plus strukturierte Benutzerkontext-Blöcke.
Kanal-Plugins hängen Routing-Metadaten (Thread, Thema, Antwortbezug,
Reaktionen) als typisierte Felder an, statt sie zu einem Prompt-String zu
verketten. Die Hilfsfunktion formatAgentEnvelope(...) wird für synthetisierte
assistentenbezogene Umschläge weiterhin unterstützt, aber eingehende
Plaintext-Umschläge werden auslaufen.
Betroffene Bereiche: inbound_claim, message_received und jedes
benutzerdefinierte Kanal-Plugin, das channelEnvelope-Text nachverarbeitet
hat.
Provider-Discovery-Typen → Provider-Katalogtypen
Vier Discovery-Typaliase sind jetzt dünne Wrapper über den Typen der Katalog-Ära:
| Alter Alias | Neuer Typ |
|---|---|
ProviderDiscoveryOrder |
ProviderCatalogOrder |
ProviderDiscoveryContext |
ProviderCatalogContext |
ProviderDiscoveryResult |
ProviderCatalogResult |
ProviderPluginDiscovery |
ProviderPluginCatalog |
Außerdem der alte statische ProviderCapabilities-Container – Provider-Plugins
sollten explizite Provider-Hooks wie buildReplayPolicy,
normalizeToolSchemas und wrapStreamFn verwenden statt eines statischen
Objekts.
Thinking-Policy-Hooks → resolveThinkingProfile
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
sortierter Level-Liste zurückgibt. OpenClaw stuft veraltete gespeicherte
Werte automatisch anhand des Profilrangs herunter.
Implementieren Sie einen Hook statt drei. Die Legacy-Hooks funktionieren während des Veraltungsfensters weiter, werden aber nicht mit dem Profilergebnis kombiniert.
Fallback für externe OAuth-Provider → contracts.externalAuthProviders
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"]
}
}
Provider-Env-Var-Suche → setup.providers[].envVars
Altes Manifestfeld: providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }.
Neu: Spiegeln Sie dieselbe Env-Var-Suche in setup.providers[].envVars
im Manifest. Dadurch werden Setup-/Status-Env-Metadaten an einer Stelle
konsolidiert und es wird vermieden, die Plugin-Laufzeit nur zur Beantwortung
von Env-Var-Suchen zu starten.
providerAuthEnvVars bleibt über einen Kompatibilitätsadapter unterstützt,
bis das Veraltungsfenster geschlossen wird.
Registrierung von Memory-Plugins → registerMemoryCapability
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.
Subagent-Sitzungsnachrichtentypen umbenannt
Zwei Legacy-Typaliase werden weiterhin aus src/plugins/runtime/types.ts
exportiert:
| Alt | Neu |
|---|---|
SubagentReadSessionParams |
SubagentGetSessionMessagesParams |
SubagentReadSessionResult |
SubagentGetSessionMessagesResult |
Die Laufzeitmethode readSession ist zugunsten von getSessionMessages
veraltet. Gleiche Signatur; die alte Methode ruft die neue durch.
runtime.tasks.flow → runtime.tasks.managedFlows
Alt: runtime.tasks.flow (Singular) gab einen Live-Task-Flow-Accessor zurück.
Neu: runtime.tasks.managedFlows behält die verwaltete TaskFlow-Mutationslaufzeit
für Plugins bei, die Child-Tasks aus einem Flow 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);
Eingebettete Extension-Factorys → Middleware für Agent-Tool-Ergebnisse
Oben unter „Migration → Pi-Tool-Ergebnis-Erweiterungen zu Middleware
migrieren“ behandelt. Der Vollständigkeit halber hier aufgenommen: Der
entfernte Pi-spezifische Pfad api.registerEmbeddedExtensionFactory(...)
wird durch api.registerAgentToolResultMiddleware(...) mit einer expliziten
Laufzeitliste in contracts.agentToolResultMiddleware ersetzt.
OpenClawSchemaType-Alias → OpenClawConfig
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";
Zeitplan für die Entfernung
| Wann | Was passiert |
|---|---|
| Jetzt | Veraltete Oberflächen geben Laufzeitwarnungen aus |
| Nächste Hauptversion | Veraltete Oberflächen werden entfernt; Plugins, die sie noch verwenden, schlagen fehl |
Alle Core-Plugins wurden bereits migriert. Externe Plugins sollten vor der nächsten Hauptversion 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
- Erste Schritte – Ihr erstes Plugin erstellen
- SDK-Überblick – vollständige Referenz für Unterpfad-Importe
- Kanal-Plugins – Kanal-Plugins erstellen
- Provider-Plugins – Provider-Plugins erstellen
- Plugin-Interna – detaillierter Architekturüberblick
- Plugin-Manifest – Referenz zum Manifest-Schema