Pakete installieren
Diese Pakete werden mit den OpenClaw-Release-Zyklen ausgeliefert. Während der ersten Einführung kann npm
E404 zurückgeben, bis das erste OpenClaw-Release mit diesen Paketen veröffentlicht wurde;
installieren Sie sie erst, wenn die unten aufgeführten Registry-Seiten erreichbar sind.@openclaw/gateway-protocolstellt Schemas, Laufzeit-Validatoren, TypeScript-Typen, Registrys für Client-Identitäten und Fähigkeiten, strukturierte Fehlerleser und Protokollversionskonstanten bereit. Das npm-Tarball enthält außerdem den generierten maschinenlesbaren Vertragprotocol.schema.json.@openclaw/gateway-clientist die Referenzimplementierung für Verbindungen. Importieren Sie den Paketstamm für den Node-Client und@openclaw/gateway-client/browserfür die browsersicheren Protokoll-, Geräteauthentifizierungs- und Wiederverbindungshelfer.
Bereiche auswählen und Gerät koppeln
Ein vollständiger interaktiver Chat-Client, der auch Genehmigungsaufforderungen darstellt, sollterole: "operator" mit diesen Bereichen anfordern:
Fügen Sie
operator.questions nur hinzu, wenn der Client interaktive Fragen verarbeitet,
operator.pairing nur, wenn er gekoppelte Geräte oder Nodes verwaltet, und
operator.admin nur für administrative Vorgänge wie config.patch.
Die Referenz zu Operator-Bereichen
definiert die vollständigen Regeln für Methoden und Genehmigungszeitpunkte.
Erstellen Sie kein Bearer-Token pro Client, indem Sie openclaw.json manuell bearbeiten. Konfigurieren
Sie die gemeinsame Bootstrap-Authentifizierung des Gateways mit openclaw configure --section gateway oder den Optionen openclaw onboard --gateway-auth ... und lassen Sie dann durch die Gerätekopplung
das Client-Token ausstellen:
- Persistieren Sie eine Ed25519-Geräteidentität im Client.
- Warten Sie auf
connect.challenge, signieren Sie die an die Challenge gebundene Gerätenutzlast und senden Sieconnectmit der angeforderten Operator-Rolle, den Bereichen und dem gemeinsamen Gateway-Token oder Passwort für die Bootstrap-Authentifizierung. - Wenn das Gateway strukturierte
PAIRING_REQUIRED-Details zurückgibt, zeigen Sie die Anfrage- ID an und pausieren Sie oder versuchen Sie es gemäßerror.details.recommendedNextSteperneut. - Prüfen Sie die Anfrage auf dem Gateway-Host mit
openclaw devices listund genehmigen Sie anschließend genau diese aktuelle Anfrage mitopenclaw devices approve <requestId>. - Stellen Sie die Verbindung erneut her und persistieren Sie
hello-ok.auth.deviceTokenmit der ausgehandelten Rolle und den Bereichen. Verwenden Sie dieses Geräte-Token für spätere Verbindungen.
Client-Fähigkeiten bekannt geben
connect.params.caps beschreibt optionales Verhalten, das der Client nutzen kann. Es
gewährt keine Autorisierung. Importieren Sie Namen aus GATEWAY_CLIENT_CAPS, anstatt
String-Literale zu duplizieren:
approvals, exec-approvals, inline-widgets,
run-tool-bindings, session-scoped-events, plugin-approvals,
task-suggestions, terminal-offset-seq, tool-events und ui-commands.
Geben Sie nur Fähigkeiten bekannt, die der Client tatsächlich implementiert.
Durch Fähigkeiten gesteuerte Agent-Tools sind eine separate Verwendung derselben Deklaration. Wenn ein
Agent-Tool eine Client-Fähigkeit voraussetzt, lässt das Gateway dieses Tool weg, sofern der
ursprüngliche Client nicht jede erforderliche Fähigkeit bekannt gegeben hat.
Zustand nach erneuter Verbindung wiederherstellen
Behandeln Sie jede erfolgreiche erneute Verbindung als neue Projektion über den dauerhaften Verlauf und den aktuellen In-Memory-Laufzustand:- Stellen Sie
sessions.subscribeund dassessions.messages.subscribe-Abonnement der ausgewählten Sitzung erneut her. - Rufen Sie
chat.historyfür den ausgewähltensessionKeyauf und ersetzen Sie lokal persistierte Zeilen durch die zurückgegebenemessages-Projektion. - Wenn
inFlightRunvorhanden ist, übernehmen Sie dessenrunId, gepuffertestextund optionalesplan. Übernehmen Sie den Lauf auch dann, wenntextleer ist. - Lesen Sie
sessionInfo.hasActiveRunundsessionInfo.activeRunIds. Bevorzugen Sie die exakte Zugehörigkeit inactiveRunIds, wenn Sie entscheiden, ob ein beibehaltener Lauf weiterhin die Streaming-Benutzeroberfläche besitzt. Ein wahrer Wert fürhasActiveRunohne aufgeführte ID kann eine andere aktive Laufzeitprojektion darstellen. - Gleichen Sie nachfolgende
agent-Ereignisse anhand vonpayload.runIdundpayload.seqab. Verwalten Sie die höchste akzeptierte Sequenz für jeden Lauf unabhängig, ignorieren Sie eine bereits gesehene oder niedrigere Sequenz und behandeln Sie eine vorwärts gerichtete Lücke als Grund, den maßgeblichen Verlauf neu zu laden.
seq, das Ereignisse in der
aktuellen WebSocket-Verbindung ordnet. Bei einer neuen Verbindung wird es zurückgesetzt. Das seq innerhalb
der Nutzlast eines agent-Ereignisses wird pro Lauf zugewiesen und ordnet die Lebenszyklus-,
Assistenten-, Plan-, Tool- und sonstigen Stream-Ereignisse dieses Laufs.
Verlaufsmetadaten und stabile Anker verwenden
Vonchat.history zurückgegebene Zeilen können einen __openclaw-Metadatenumschlag enthalten:
idist die Identität des Transkripteintrags. Verwenden Sie sie für verankerte Verlaufsanfragen, jedoch nicht als eindeutigen Schlüssel für Anzeigezeilen.seqist die positive Sequenz des Transkriptdatensatzes. Ein gespeicherter Datensatz kann in mehr als eine Anzeigezeile projiziert werden; halten Sie daher zusammengehörige Zeilen mit demselbenidund derselben Sequenz zusammen.kindkennzeichnet synthetische Zeilen. Eine Compaction-Grenze verwendetkind: "compaction"und kanntokensBeforeundtokensAfterenthalten, wenn ein passender Checkpoint diese Metriken aufgezeichnet hat.
hasMore und nextOffset der Antwort rückwärts. Numerische
Offsets beschreiben die aktuelle Transkriptprojektion; persistieren Sie sie daher nicht als
langfristige Lesezeichen über Zurücksetzungen oder Compaction hinweg. Persistieren Sie stattdessen __openclaw.id.
Um den Bereich um eine bekannte Zeile wiederherzustellen, rufen Sie chat.history mit messageId und dem
sessionId auf, das diesen Wert zurückgegeben hat. Das Gateway kann diesen Anker aus dem Verlauf des
Zurücksetzungsarchivs auflösen; verankerte Antworten lassen numerische Metadaten zur Seitennavigation absichtlich weg.
Nutzung abonnieren statt abfragen
Laden Sie den anfänglichen Katalog mitsessions.list und rufen Sie anschließend sessions.subscribe einmal
pro Verbindung auf. Führen Sie sessions.changed-Ereignisse anhand von sessionKey zusammen. Nutzlasten zu Sitzungsänderungen
können Live-Werte für inputTokens, outputTokens, totalTokens,
totalTokensFresh, contextTokens, estimatedCostUsd, Einstellungen zur Antwortnutzung
und den Zustand aktiver Läufe enthalten.
Einige Änderungsbenachrichtigungen sind lediglich Invalidierungssignale. Wenn ein Ereignis die
Zeilenfelder auslässt, die Ihre Ansicht benötigt, aktualisieren Sie sessions.list. Fragen Sie usage.cost oder
sessions.usage nicht regelmäßig ab, um eine Live-Sitzungsliste aktuell zu halten; verwenden Sie diese Methoden nur für
bei Bedarf erstellte aggregierte oder detaillierte Berichte.
Ausführungsgenehmigungen nachladen
Ein Client mitoperator.approvals sollte seinen Ereignis-Listener installieren, sobald
hello-ok abgeschlossen ist, und anschließend exec.approval.list aufrufen, um Anfragen nachzuladen, die
vor der Verbindung eingegangen sind. Gleichen Sie die Liste und die Live-Ereignisse
exec.approval.requested / exec.approval.resolved anhand der Genehmigungs-ID ab, damit ein
Übergang, der zeitgleich mit der Listenanfrage erfolgt, weder verloren geht noch wiederhergestellt wird.
Protokollversionen verfolgen
Die aktuelle Wire-Version ist4. Allgemeine Operator- und WebChat-Clients müssen
die exakt aktuelle Version mit minProtocol: 4 und maxProtocol: 4 aushandeln.
Nur authentifizierte Node-Clients und leichtgewichtige Prüfroutinen verfügen über das N-1-Akzeptanzfenster,
derzeit von Protokoll 3 bis 4.
Protokolländerungen sind zunächst additiv. protocol.schema.json enthält since-
Metadaten zum Release-Stand und Metadaten zu erforderlichen Bereichen für Kernmethoden, aber eine Erhöhung der
Wire-Version ist weiterhin ein explizit inkompatibles Ereignis für Drittanbieter-Clients. Fixieren Sie die
getesteten Paketversionen, aktualisieren Sie Client und Gateway gemeinsam, wenn sich die Wire-
Version ändert, und prüfen Sie vor jedem Upgrade das
OpenClaw-Änderungsprotokoll.