*.bak-<pid>-<ts> przed atomowym zastąpieniem i usuwany po powodzeniu zastąpienia; kopia zapasowa jest zachowywana tylko wtedy, gdy samo czyszczenie się nie powiedzie (w takim przypadku ścieżka jest zwracana).
Zakres obejmuje:
- Kontekst promptu wyłącznie w czasie wykonywania pozostający poza widocznymi dla użytkownika turami transkrypcji
- Sanityzację identyfikatorów wywołań narzędzi
- Walidację wejścia wywołań narzędzi
- Naprawę parowania wyników narzędzi
- Walidację / porządkowanie tur
- Czyszczenie sygnatur myśli
- Czyszczenie sygnatur myślenia
- Sanityzację ładunków obrazów
- Czyszczenie pustych bloków tekstu przed odtwarzaniem u dostawcy
- Czyszczenie niekompletnych tur długości zawierających tylko rozumowanie przed odtwarzaniem u dostawcy
- Oznaczanie pochodzenia danych wejściowych użytkownika (dla promptów trasowanych między sesjami)
- Naprawę pustych tur błędu asystenta dla odtwarzania Bedrock Converse
Reguła globalna: kontekst czasu wykonywania nie jest transkrypcją użytkownika
Kontekst czasu wykonywania/systemowy może zostać dodany do promptu modelu dla tury, ale nie jest treścią utworzoną przez użytkownika końcowego. OpenClaw utrzymuje osobne, skierowane do transkrypcji ciało promptu dla odpowiedzi Gateway, kolejkowanych kontynuacji, ACP, CLI i osadzonych przebiegów OpenClaw. Zapisane widoczne tury użytkownika używają tego ciała transkrypcji zamiast promptu wzbogaconego o dane czasu wykonywania. Dla starszych sesji, które już utrwaliły opakowania czasu wykonywania, powierzchnie historii Gateway stosują projekcję wyświetlania przed zwróceniem wiadomości do klientów WebChat, TUI, REST lub SSE.Gdzie to działa
Cała higiena transkrypcji jest scentralizowana w osadzonym runnerze:- Wybór polityki:
src/agents/transcript-policy.ts - Zastosowanie sanityzacji/naprawy:
sanitizeSessionHistorywsrc/agents/embedded-agent-runner/replay-history.ts
provider, modelApi i modelId, aby zdecydować, co zastosować.
Niezależnie od higieny transkrypcji pliki sesji są naprawiane (w razie potrzeby) przed załadowaniem:
repairSessionFileIfNeededwsrc/agents/session-file-repair.ts- Wywoływane z
run/attempt.tsicompact.ts(osadzony runner)
Reguła globalna: sanityzacja obrazów
Ładunki obrazów są zawsze sanityzowane, aby zapobiec odrzuceniu po stronie dostawcy z powodu limitów rozmiaru (skalowanie w dół/rekompresja zbyt dużych obrazów base64). Pomaga to także kontrolować presję tokenów generowaną przez obrazy dla modeli obsługujących wizję. Niższe maksymalne wymiary zwykle zmniejszają użycie tokenów; wyższe wymiary zachowują szczegóły. Implementacja:sanitizeSessionMessagesImageswsrc/agents/embedded-agent-helpers/images.tssanitizeContentBlocksImageswsrc/agents/tool-images.ts- Maksymalny bok obrazu można skonfigurować przez
agents.defaults.imageMaxDimensionPx(domyślnie:1200). - Puste bloki tekstu są usuwane podczas tego przebiegu po zawartości odtwarzania. Tury asystenta, które stają się puste, są usuwane z kopii odtwarzania; tury użytkownika i wyniku narzędzia, które stają się puste, otrzymują niepusty placeholder pominiętej zawartości.
Reguła globalna: nieprawidłowo sformatowane wywołania narzędzi
Bloki wywołań narzędzi asystenta, którym brakuje zarównoinput, jak i arguments, są usuwane
przed zbudowaniem kontekstu modelu. Zapobiega to odrzuceniom przez dostawcę wynikającym z częściowo
utrwalonych wywołań narzędzi (na przykład po błędzie limitu szybkości).
Implementacja:
sanitizeToolCallInputswsrc/agents/session-transcript-repair.ts- Zastosowane w
sanitizeSessionHistorywsrc/agents/embedded-agent-runner/replay-history.ts
Reguła globalna: niekompletne tury zawierające tylko rozumowanie
Tury asystenta, które osiągnęły limit wyjścia dostawcy i zawierają tylko myślenie lub zredagowaną treść myślenia, są pomijane w kopii odtwarzania w pamięci. Takie tury zawierają niekompletny stan dostawcy i mogą przenosić częściową sygnaturę myślenia. Puste tury długości pozostają niezmienione, podobnie jak tury długości z widocznym tekstem, wywołaniami narzędzi lub nieznanymi blokami zawartości. Zapisane transkrypcje nie są przepisywane. Implementacja:normalizeAssistantReplayContentwsrc/agents/embedded-agent-runner/replay-history.ts
Reguła globalna: pochodzenie wejścia między sesjami
Gdy agent wysyła prompt do innej sesji przezsessions_send (w tym kroki
odpowiedzi/ogłoszenia agent-do-agenta), OpenClaw utrwala utworzoną turę użytkownika z:
message.provenance.kind = "inter_session"
[Inter-session message ... isUser=false]
przed tekstem trasowanego promptu, aby aktywne wywołanie modelu mogło odróżnić
wyjście obcej sesji od zewnętrznych instrukcji użytkownika końcowego. Ten znacznik zawiera
sesję źródłową, kanał i narzędzie, jeśli są dostępne. Transkrypcja nadal używa
role: "user" dla zgodności z dostawcą, ale widoczny tekst i metadane pochodzenia
oznaczają turę jako dane między sesjami.
Podczas odbudowy kontekstu OpenClaw stosuje ten sam znacznik do starszych utrwalonych
tur użytkownika między sesjami, które mają tylko metadane pochodzenia.
Macierz dostawców (obecne zachowanie)
OpenAI / OpenAI Codex- Tylko sanityzacja obrazów.
- Usuwanie osieroconych sygnatur rozumowania (samodzielnych elementów rozumowania bez następującego po nich bloku zawartości) dla transkrypcji OpenAI Responses/Codex oraz usuwanie odtwarzalnego rozumowania OpenAI po zmianie trasy modelu.
- Zachowywanie ładunków odtwarzalnych elementów rozumowania OpenAI Responses, w tym zaszyfrowanych elementów z pustym podsumowaniem, aby ręczne/WebSocket odtwarzanie utrzymywało wymagany stan
rs_*sparowany z elementami wyjścia asystenta. - Natywne ChatGPT Codex Responses podąża za zgodnością przewodową Codex, odtwarzając wcześniejsze ładunki rozumowania/wiadomości/funkcji Responses bez wcześniejszych identyfikatorów elementów, przy zachowaniu sesyjnego
prompt_cache_key. - Odtwarzanie rodziny OpenAI Responses zachowuje kanoniczne pary rozumowania tego samego modelu
call_*|fc_*, ale deterministycznie normalizuje nieprawidłowo sformatowane lub zbyt długie identyfikatorycall_id/ elementów wywołań funkcji przed konwersją ładunku pi-ai. - Naprawa parowania wyników narzędzi może przenosić rzeczywiste dopasowane wyjścia i syntetyzować wyjścia w stylu Codex
aborteddla brakujących wywołań narzędzi. - Brak walidacji lub zmiany kolejności tur.
- Brakujące wyjścia narzędzi rodziny OpenAI Responses są syntetyzowane jako
aborted, aby pasować do normalizacji odtwarzania Codex. - Brak usuwania sygnatur myśli.
- Historyczne bloki myślenia/rozumowania asystenta są usuwane przed odtwarzaniem, aby
lokalne i proxy-style serwery zgodne z OpenAI nie otrzymywały pól rozumowania z wcześniejszych tur,
takich jak
reasoninglubreasoning_content. - Bieżące kontynuacje wywołań narzędzi w tej samej turze zachowują blok rozumowania asystenta dołączony do wywołania narzędzia do czasu odtworzenia wyniku narzędzia.
- Niestandardowe/samodzielnie hostowane wpisy modeli z
reasoning: truezachowują odtworzone metadane rozumowania. - Wyjątki należące do dostawcy mogą zrezygnować, gdy ich protokół przewodowy wymaga odtworzonych metadanych rozumowania.
- Sanityzacja identyfikatorów wywołań narzędzi: ścisłe znaki alfanumeryczne.
- Naprawa parowania wyników narzędzi i syntetyczne wyniki narzędzi.
- Walidacja tur (naprzemienność tur w stylu Gemini).
- Naprawa kolejności tur Google (dodanie na początku drobnego bootstrapu użytkownika, jeśli historia zaczyna się od asystenta).
- Antigravity Claude: normalizowanie sygnatur myślenia; usuwanie niepodpisanych bloków myślenia.
- Naprawa parowania wyników narzędzi i syntetyczne wyniki narzędzi.
- Walidacja tur (scalanie kolejnych tur użytkownika, aby spełnić ścisłą naprzemienność).
- Końcowe tury wstępnego wypełnienia asystenta są usuwane z wychodzących ładunków Anthropic Messages, gdy myślenie jest włączone, w tym tras Cloudflare AI Gateway.
- Sygnatury myślenia asystenta sprzed Compaction są usuwane przed odtwarzaniem u dostawcy, gdy sesja została skompaktowana. Sygnatury myślenia są kryptograficznie powiązane z prefiksem konwersacji w czasie generowania; po Compaction prefiks się zmienia (podsumowana treść jest zastępowana podsumowaniem Compaction), więc odtworzenie oryginalnych sygnatur powoduje odrzucenie żądania przez Anthropic z komunikatem “Invalid signature in thinking block”. Tekst myślenia jest zachowywany jako niepodpisany blok, a następnie obsługiwany przez regułę poniżej.
- Bloki myślenia z brakującymi, pustymi lub blank replay signatures są usuwane przed konwersją dostawcy. Jeśli to opróżnia turę asystenta, OpenClaw zachowuje kształt tury z niepustym tekstem pominiętego rozumowania.
- Starsze tury asystenta zawierające tylko myślenie, które muszą zostać usunięte, są zastępowane niepustym tekstem pominiętego rozumowania, aby adaptery dostawcy nie usuwały odtwarzanej tury.
- Puste tury błędu strumienia asystenta są naprawiane do niepustego zastępczego bloku tekstu
przed odtwarzaniem. Bedrock Converse odrzuca wiadomości asystenta z
content: [], więc utrwalone tury asystenta zestopReason: "error"i pustą zawartością są także naprawiane na dysku przed załadowaniem. - Tury błędu strumienia asystenta, które zawierają tylko puste bloki tekstu, są usuwane z kopii odtwarzania w pamięci zamiast odtwarzać nieprawidłowy pusty blok.
- Sygnatury myślenia asystenta sprzed Compaction są usuwane przed odtwarzaniem Converse, gdy sesja została skompaktowana, z tego samego powodu co w Anthropic powyżej.
- Bloki myślenia Claude z brakującymi, pustymi lub blank replay signatures są usuwane przed odtwarzaniem Converse. Jeśli to opróżnia turę asystenta, OpenClaw zachowuje kształt tury z niepustym tekstem pominiętego rozumowania.
- Starsze tury asystenta zawierające tylko myślenie, które muszą zostać usunięte, są zastępowane niepustym tekstem pominiętego rozumowania, aby odtwarzanie Converse zachowało ścisły kształt tury.
- Odtwarzanie filtruje tury asystenta OpenClaw będące lustrzanymi kopiami dostarczenia i wstrzyknięte przez Gateway.
- Sanityzacja obrazów stosuje się przez regułę globalną.
- Sanityzacja identyfikatorów wywołań narzędzi: strict9 (długość alfanumeryczna 9).
- Czyszczenie sygnatur myśli: usuwanie wartości
thought_signatureniebędących base64 (zachowywanie base64).
- Końcowe tury wstępnego wypełnienia asystenta są usuwane ze zweryfikowanych ładunków modeli Anthropic zgodnych z OpenAI w OpenRouter, gdy rozumowanie jest włączone, zgodnie z bezpośrednim zachowaniem odtwarzania Anthropic i Cloudflare Anthropic.
- Tylko sanityzacja obrazów.
Zachowanie historyczne (przed 2026.1.22)
Przed wydaniem 2026.1.22 OpenClaw stosował wiele warstw higieny transkrypcji:- Rozszerzenie transcript-sanitize działało przy każdym budowaniu kontekstu i mogło:
- Naprawiać parowanie użycia narzędzia/wyniku.
- Sanityzować identyfikatory wywołań narzędzi (w tym tryb nieścisły, który zachowywał
_/-).
- Runner wykonywał także sanityzację specyficzną dla dostawcy, co dublowało pracę.
- Dodatkowe mutacje zachodziły poza polityką dostawcy, w tym:
- Usuwanie tagów
<final>z tekstu asystenta przed utrwaleniem. - Usuwanie pustych tur błędu asystenta.
- Przycinanie zawartości asystenta po wywołaniach narzędzi.
- Usuwanie tagów
call_id|fc_id
openai-responses). Czyszczenie w 2026.1.22 usunęło rozszerzenie, scentralizowało
logikę w runnerze i uczyniło OpenAI bez dotykania poza sanityzacją obrazów.