OpenClaw wendet vor einem Lauf (beim Aufbau des Modellkontexts) Provider-spezifische Korrekturen auf Transkripte an. Die meisten davon sind In-Memory-Anpassungen, die strenge Provider-Anforderungen erfüllen. Ein separater Reparaturdurchlauf für Sitzungsdateien kann gespeichertes JSONL ebenfalls neu schreiben, bevor die Sitzung geladen wird, jedoch nur bei fehlerhaften Zeilen oder persistierten Turns, die keine gültigen dauerhaften Datensätze sind. Ausgelieferte Assistant-Antworten bleiben auf der Festplatte erhalten; Provider-spezifisches Entfernen von Assistant-Prefill geschieht nur beim Erstellen ausgehender Payloads. Wenn eine Reparatur erfolgt, wird die Originaldatei neben der Sitzungsdatei gesichert. Der Umfang umfasst: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.
- Runtime-only-Prompt-Kontext, der nicht in benutzersichtbaren Transkript-Turns landet
- Bereinigung von Tool-Call-IDs
- Validierung von Tool-Call-Eingaben
- Reparatur der Tool-Result-Zuordnung
- Turn-Validierung/-Reihenfolge
- Bereinigung von Gedankensignaturen
- Bereinigung von Thinking-Signaturen
- Bereinigung von Bild-Payloads
- Bereinigung leerer Textblöcke vor Provider-Replay
- Herkunftsmarkierung von Benutzereingaben (für sitzungsübergreifend geroutete Prompts)
- Reparatur leerer Assistant-Fehler-Turns für Bedrock-Converse-Replay
Globale Regel: Runtime-Kontext ist kein Benutzertranskript
Runtime-/Systemkontext kann dem Modell-Prompt für einen Turn hinzugefügt werden, ist aber kein vom Endbenutzer verfasster Inhalt. OpenClaw hält einen separaten transkriptbezogenen Prompt-Body für Gateway-Antworten, eingereihte Follow-ups, ACP, CLI und eingebettete Pi- Läufe. Gespeicherte sichtbare Benutzer-Turns verwenden diesen Transkript-Body statt des um Runtime-Daten angereicherten Prompts. Für Legacy-Sitzungen, in denen Runtime-Wrapper bereits persistiert wurden, wenden Gateway-Verlaufs- Oberflächen eine Anzeigeprojektion an, bevor sie Nachrichten an WebChat-, TUI-, REST- oder SSE-Clients zurückgeben.Wo dies ausgeführt wird
Die gesamte Transkripthygiene ist im eingebetteten Runner zentralisiert:- Richtlinienauswahl:
src/agents/transcript-policy.ts - Anwendung von Bereinigung/Reparatur:
sanitizeSessionHistoryinsrc/agents/pi-embedded-runner/replay-history.ts
provider, modelApi und modelId, um zu entscheiden, was angewendet wird.
Getrennt von der Transkripthygiene werden Sitzungsdateien (falls nötig) vor dem Laden repariert:
repairSessionFileIfNeededinsrc/agents/session-file-repair.ts- Aufgerufen aus
run/attempt.tsundcompact.ts(eingebetteter Runner)
Globale Regel: Bildbereinigung
Bild-Payloads werden immer bereinigt, um Provider-seitige Ablehnungen aufgrund von Größen- limits zu verhindern (Herunterskalieren/erneutes Komprimieren übergroßer base64-Bilder). Dies hilft außerdem, den bildbedingten Tokendruck für vision-fähige Modelle zu kontrollieren. Niedrigere Maximalabmessungen reduzieren im Allgemeinen die Token-Nutzung; höhere Abmessungen erhalten Details. Implementierung:sanitizeSessionMessagesImagesinsrc/agents/pi-embedded-helpers/images.tssanitizeContentBlocksImagesinsrc/agents/tool-images.ts- Die maximale Bildseite ist über
agents.defaults.imageMaxDimensionPxkonfigurierbar (Standard:1200). - Leere Textblöcke werden entfernt, während dieser Durchlauf Replay-Inhalte durchläuft. Assistant- Turns, die dadurch leer werden, werden aus der Replay-Kopie entfernt; Benutzer- und Tool-Result- Turns, die leer werden, erhalten einen nicht leeren Platzhalter für ausgelassene Inhalte.
Globale Regel: fehlerhafte Tool-Calls
Assistant-Tool-Call-Blöcke, denen sowohlinput als auch arguments fehlen, werden entfernt,
bevor der Modellkontext aufgebaut wird. Dies verhindert Provider-Ablehnungen durch teilweise
persistierte Tool-Calls (zum Beispiel nach einem Rate-Limit-Fehler).
Implementierung:
sanitizeToolCallInputsinsrc/agents/session-transcript-repair.ts- Angewendet in
sanitizeSessionHistoryinsrc/agents/pi-embedded-runner/replay-history.ts
Globale Regel: Herkunft sitzungsübergreifender Eingaben
Wenn ein Agent übersessions_send einen Prompt in eine andere Sitzung sendet (einschließlich
Agent-zu-Agent-Antwort-/Ankündigungsschritten), persistiert OpenClaw den erstellten Benutzer-Turn mit:
message.provenance.kind = "inter_session"
[Inter-session message ... isUser=false] voran, damit der aktive Modellaufruf
fremde Sitzungsausgabe von externen Endbenutzeranweisungen unterscheiden kann. Dieser Marker enthält,
wenn verfügbar, die Quellsitzung, den Kanal und das Tool. Das Transkript verwendet aus
Provider-Kompatibilitätsgründen weiterhin role: "user", aber sichtbarer Text und Herkunfts-
Metadaten markieren den Turn beide als sitzungsübergreifende Daten.
Beim Neuaufbau des Kontexts wendet OpenClaw denselben Marker auf ältere persistierte
sitzungsübergreifende Benutzer-Turns an, die nur Herkunftsmetadaten besitzen.
Provider-Matrix (aktuelles Verhalten)
OpenAI / OpenAI Codex- Nur Bildbereinigung.
- Verwaiste Reasoning-Signaturen (eigenständige Reasoning-Items ohne folgenden Inhaltsblock) für OpenAI-Responses-/Codex-Transkripte entfernen und replay-fähiges OpenAI-Reasoning nach einem Modellroutenwechsel entfernen.
- Replay-fähige Reasoning-Item-Payloads von OpenAI Responses beibehalten, einschließlich verschlüsselter Items mit leerer Zusammenfassung, damit manuelles/WebSocket-Replay den erforderlichen
rs_*-Zustand mit Assistant-Ausgabe-Items gekoppelt hält. - Native ChatGPT Codex Responses folgt der Codex-Wire-Parität, indem frühere Responses-Reasoning-/Message-/Function-Payloads ohne frühere Item-IDs replayed werden, während der Sitzungs-
prompt_cache_keyerhalten bleibt. - Keine Bereinigung von Tool-Call-IDs.
- Die Reparatur der Tool-Result-Zuordnung kann echte passende Outputs verschieben und Codex-artige
aborted-Outputs für fehlende Tool-Calls synthetisieren. - Keine Turn-Validierung oder Neuordnung.
- Fehlende Tool-Outputs aus der OpenAI-Responses-Familie werden als
abortedsynthetisiert, um der Codex-Replay-Normalisierung zu entsprechen. - Kein Entfernen von Gedankensignaturen.
- Historische Assistant-Thinking-/Reasoning-Blöcke werden vor dem Replay entfernt, damit
lokale und proxyartige OpenAI-kompatible Server keine Reasoning-Felder früherer Turns
wie
reasoningoderreasoning_contenterhalten. - Aktuelle Tool-Call-Fortsetzungen im selben Turn behalten den Assistant-Reasoning-Block am Tool-Call, bis das Tool-Result replayed wurde.
- Provider-eigene Ausnahmen können sich abmelden, wenn ihr Wire-Protokoll replayed Reasoning-Metadaten erfordert.
- Bereinigung von Tool-Call-IDs: strikt alphanumerisch.
- Reparatur der Tool-Result-Zuordnung und synthetische Tool-Results.
- Turn-Validierung (Turn-Abwechslung im Gemini-Stil).
- Google-Korrektur der Turn-Reihenfolge (stellt einen kleinen Benutzer-Bootstrap voran, wenn der Verlauf mit Assistant beginnt).
- Antigravity Claude: Thinking-Signaturen normalisieren; unsignierte Thinking-Blöcke entfernen.
- Reparatur der Tool-Result-Zuordnung und synthetische Tool-Results.
- Turn-Validierung (zusammenführen aufeinanderfolgender Benutzer-Turns, um strikte Abwechslung zu erfüllen).
- Nachgestellte Assistant-Prefill-Turns werden aus ausgehenden Anthropic-Messages- Payloads entfernt, wenn Thinking aktiviert ist, einschließlich Cloudflare-AI-Gateway-Routen.
- Thinking-Blöcke mit fehlenden, leeren oder nur aus Leerraum bestehenden Replay-Signaturen werden vor der Provider-Konvertierung entfernt. Wenn dadurch ein Assistant-Turn leer wird, behält OpenClaw die Turn-Form mit nicht leerem Text für ausgelassenes Reasoning bei.
- Ältere reine Thinking-Assistant-Turns, die entfernt werden müssen, werden durch nicht leeren Text für ausgelassenes Reasoning ersetzt, damit Provider-Adapter den Replay- Turn nicht verwerfen.
- Leere Assistant-Stream-Error-Turns werden vor dem Replay zu einem nicht leeren Fallback-Textblock
repariert. Bedrock Converse lehnt Assistant-Nachrichten mit
content: []ab, daher werden persistierte Assistant-Turns mitstopReason: "error"und leerem Inhalt auch auf der Festplatte vor dem Laden repariert. - Assistant-Stream-Error-Turns, die nur leere Textblöcke enthalten, werden aus der In-Memory-Replay-Kopie entfernt, statt einen ungültigen leeren Block zu replayen.
- Claude-Thinking-Blöcke mit fehlenden, leeren oder nur aus Leerraum bestehenden Replay-Signaturen werden vor dem Converse-Replay entfernt. Wenn dadurch ein Assistant-Turn leer wird, behält OpenClaw die Turn-Form mit nicht leerem Text für ausgelassenes Reasoning bei.
- Ältere reine Thinking-Assistant-Turns, die entfernt werden müssen, werden durch nicht leeren Text für ausgelassenes Reasoning ersetzt, damit das Converse-Replay die strikte Turn-Form behält.
- Replay filtert OpenClaw-Delivery-Mirror- und vom Gateway injizierte Assistant-Turns.
- Die Bildbereinigung gilt über die globale Regel.
- Bereinigung von Tool-Call-IDs: strict9 (alphanumerisch, Länge 9).
- Bereinigung von Gedankensignaturen: Nicht-base64-
thought_signature-Werte entfernen (base64 beibehalten).
- Nachgestellte Assistant-Prefill-Turns werden aus verifizierten OpenRouter- OpenAI-kompatiblen Anthropic-Modell-Payloads entfernt, wenn Reasoning aktiviert ist, entsprechend dem direkten Anthropic- und Cloudflare-Anthropic-Replay-Verhalten.
- Nur Bildbereinigung.
Historisches Verhalten (vor 2026.1.22)
Vor dem Release 2026.1.22 wendete OpenClaw mehrere Ebenen der Transkripthygiene an:- Eine transcript-sanitize-Erweiterung lief bei jedem Kontextaufbau und konnte:
- Tool-Use-/Result-Zuordnung reparieren.
- Tool-Call-IDs bereinigen (einschließlich eines nicht strikten Modus, der
_/-beibehielt).
- Der Runner führte außerdem Provider-spezifische Bereinigung aus, wodurch Arbeit dupliziert wurde.
- Zusätzliche Mutationen erfolgten außerhalb der Provider-Richtlinie, darunter:
- Entfernen von
<final>-Tags aus Assistant-Text vor der Persistierung. - Entfernen leerer Assistant-Fehler-Turns.
- Kürzen von Assistant-Inhalten nach Tool-Calls.
- Entfernen von
openai-responses-call_id|fc_id-Zuordnung). Die Bereinigung in 2026.1.22 entfernte die Erweiterung, zentralisierte
die Logik im Runner und machte OpenAI über die Bildbereinigung hinaus no-touch.