OpenClaw applique des correctifs propres aux fournisseurs aux transcriptions avant une exécution (construction du contexte du modèle). La plupart sont des ajustements en mémoire utilisés pour satisfaire les exigences strictes des fournisseurs. Une passe distincte de réparation des fichiers de session peut aussi réécrire le JSONL stocké avant le chargement de la session, mais uniquement pour les lignes mal formées ou les tours persistés qui ne sont pas des enregistrements durables valides. Les réponses d’assistant livrées sont conservées sur disque ; la suppression du préremplissage d’assistant propre au fournisseur se produit uniquement pendant la construction des payloads sortants. Lorsqu’une réparation a lieu, le fichier d’origine est sauvegardé à côté du fichier de session. Le périmètre comprend :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.
- Le contexte d’invite uniquement à l’exécution qui reste en dehors des tours de transcription visibles par l’utilisateur
- La normalisation des identifiants d’appels d’outils
- La validation des entrées d’appels d’outils
- La réparation de l’appariement des résultats d’outils
- La validation / l’ordonnancement des tours
- Le nettoyage des signatures de pensée
- Le nettoyage des signatures de réflexion
- La normalisation des payloads d’image
- Le nettoyage des blocs de texte vides avant la relecture par le fournisseur
- Le marquage de provenance des entrées utilisateur (pour les invites routées entre sessions)
- La réparation des tours d’erreur d’assistant vides pour la relecture Bedrock Converse
Règle globale : le contexte d’exécution n’est pas la transcription utilisateur
Le contexte d’exécution/système peut être ajouté à l’invite du modèle pour un tour, mais ce n’est pas du contenu rédigé par l’utilisateur final. OpenClaw conserve un corps d’invite distinct destiné à la transcription pour les réponses Gateway, les suivis en file d’attente, ACP, CLI et les exécutions Pi intégrées. Les tours utilisateur visibles stockés utilisent ce corps de transcription au lieu de l’invite enrichie par le contexte d’exécution. Pour les sessions héritées qui ont déjà persisté des enveloppes d’exécution, les surfaces d’historique Gateway appliquent une projection d’affichage avant de renvoyer les messages aux clients WebChat, TUI, REST ou SSE.Où cela s’exécute
Toute l’hygiène des transcriptions est centralisée dans le runner intégré :- Sélection de la politique :
src/agents/transcript-policy.ts - Application de la normalisation/réparation :
sanitizeSessionHistorydanssrc/agents/pi-embedded-runner/replay-history.ts
provider, modelApi et modelId pour décider quoi appliquer.
Indépendamment de l’hygiène des transcriptions, les fichiers de session sont réparés (si nécessaire) avant le chargement :
repairSessionFileIfNeededdanssrc/agents/session-file-repair.ts- Appelé depuis
run/attempt.tsetcompact.ts(runner intégré)
Règle globale : normalisation des images
Les payloads d’image sont toujours normalisés afin d’éviter un rejet côté fournisseur dû aux limites de taille (réduction d’échelle/recompression des images base64 trop volumineuses). Cela aide aussi à contrôler la pression en tokens liée aux images pour les modèles compatibles vision. Des dimensions maximales plus faibles réduisent généralement l’utilisation de tokens ; des dimensions plus élevées préservent les détails. Implémentation :sanitizeSessionMessagesImagesdanssrc/agents/pi-embedded-helpers/images.tssanitizeContentBlocksImagesdanssrc/agents/tool-images.ts- Le côté maximal d’une image est configurable via
agents.defaults.imageMaxDimensionPx(par défaut :1200). - Les blocs de texte vides sont supprimés pendant que cette passe parcourt le contenu de relecture. Les tours d’assistant qui deviennent vides sont retirés de la copie de relecture ; les tours utilisateur et de résultat d’outil qui deviennent vides reçoivent un placeholder non vide de contenu omis.
Règle globale : appels d’outils mal formés
Les blocs d’appels d’outils d’assistant auxquels il manque à la foisinput et arguments sont supprimés
avant la construction du contexte du modèle. Cela évite les rejets des fournisseurs dus à des appels d’outils
partiellement persistés (par exemple, après un échec lié à une limite de débit).
Implémentation :
sanitizeToolCallInputsdanssrc/agents/session-transcript-repair.ts- Appliqué dans
sanitizeSessionHistorydanssrc/agents/pi-embedded-runner/replay-history.ts
Règle globale : provenance des entrées entre sessions
Lorsqu’un agent envoie une invite dans une autre session viasessions_send (y compris
les étapes de réponse/annonce agent-à-agent), OpenClaw persiste le tour utilisateur créé avec :
message.provenance.kind = "inter_session"
[Inter-session message ... isUser=false]
afin que l’appel du modèle actif puisse distinguer la sortie d’une session étrangère
des instructions externes de l’utilisateur final. Ce marqueur inclut la session source, le canal
et l’outil lorsqu’ils sont disponibles. La transcription utilise toujours role: "user" pour la compatibilité fournisseur,
mais le texte visible et les métadonnées de provenance marquent tous deux le tour comme des données entre sessions.
Pendant la reconstruction du contexte, OpenClaw applique le même marqueur aux anciens
tours utilisateur entre sessions persistés qui ne disposent que de métadonnées de provenance.
Matrice des fournisseurs (comportement actuel)
OpenAI / OpenAI Codex- Normalisation des images uniquement.
- Supprimer les signatures de raisonnement orphelines (éléments de raisonnement autonomes sans bloc de contenu suivant) pour les transcriptions OpenAI Responses/Codex, et supprimer le raisonnement OpenAI rejouable après un changement de route de modèle.
- Conserver les payloads d’éléments de raisonnement OpenAI Responses rejouables, y compris les éléments chiffrés à résumé vide, afin que la relecture manuelle/WebSocket conserve l’état
rs_*requis apparié aux éléments de sortie d’assistant. - Native ChatGPT Codex Responses suit la parité filaire Codex en rejouant les payloads Responses précédents de raisonnement/message/fonction sans identifiants d’éléments précédents, tout en préservant le
prompt_cache_keyde session. - Aucune normalisation des identifiants d’appels d’outils.
- La réparation de l’appariement des résultats d’outils peut déplacer de vraies sorties correspondantes et synthétiser des sorties
abortedde style Codex pour les appels d’outils manquants. - Aucune validation ni réorganisation des tours.
- Les sorties d’outils manquantes de la famille OpenAI Responses sont synthétisées sous forme de
abortedpour correspondre à la normalisation de relecture Codex. - Aucune suppression des signatures de pensée.
- Les blocs historiques de réflexion/raisonnement d’assistant sont supprimés avant la relecture afin que
les serveurs locaux et de style proxy compatibles OpenAI ne reçoivent pas les champs de raisonnement des tours précédents,
tels que
reasoningoureasoning_content. - Les continuations d’appels d’outils du même tour actuel conservent le bloc de raisonnement d’assistant attaché à l’appel d’outil jusqu’à ce que le résultat d’outil ait été rejoué.
- Les exceptions détenues par les fournisseurs peuvent se désinscrire lorsque leur protocole filaire exige des métadonnées de raisonnement rejouées.
- Normalisation des identifiants d’appels d’outils : alphanumérique strict.
- Réparation de l’appariement des résultats d’outils et résultats d’outils synthétiques.
- Validation des tours (alternance de tours de style Gemini).
- Correctif d’ordonnancement des tours Google (préfixer un minuscule bootstrap utilisateur si l’historique commence par l’assistant).
- Antigravity Claude : normaliser les signatures de réflexion ; supprimer les blocs de réflexion non signés.
- Réparation de l’appariement des résultats d’outils et résultats d’outils synthétiques.
- Validation des tours (fusionner les tours utilisateur consécutifs pour satisfaire l’alternance stricte).
- Les tours de préremplissage d’assistant finaux sont supprimés des payloads Anthropic Messages sortants lorsque la réflexion est activée, y compris les routes Cloudflare AI Gateway.
- Les blocs de réflexion avec des signatures de relecture manquantes, vides ou blanches sont supprimés avant la conversion fournisseur. Si cela vide un tour d’assistant, OpenClaw conserve la forme du tour avec un texte de raisonnement omis non vide.
- Les anciens tours d’assistant constitués uniquement de réflexion qui doivent être supprimés sont remplacés par un texte de raisonnement omis non vide afin que les adaptateurs fournisseur ne suppriment pas le tour de relecture.
- Les tours d’erreur de flux d’assistant vides sont réparés en un bloc de texte de secours non vide
avant la relecture. Bedrock Converse rejette les messages d’assistant avec
content: [], donc les tours d’assistant persistés avecstopReason: "error"et un contenu vide sont aussi réparés sur disque avant le chargement. - Les tours d’erreur de flux d’assistant qui ne contiennent que des blocs de texte blancs sont supprimés de la copie de relecture en mémoire au lieu de rejouer un bloc blanc invalide.
- Les blocs de réflexion Claude avec des signatures de relecture manquantes, vides ou blanches sont supprimés avant la relecture Converse. Si cela vide un tour d’assistant, OpenClaw conserve la forme du tour avec un texte de raisonnement omis non vide.
- Les anciens tours d’assistant constitués uniquement de réflexion qui doivent être supprimés sont remplacés par un texte de raisonnement omis non vide afin que la relecture Converse conserve la forme stricte des tours.
- La relecture filtre les tours d’assistant miroir de livraison OpenClaw et injectés par le Gateway.
- La normalisation des images s’applique via la règle globale.
- Normalisation des identifiants d’appels d’outils : strict9 (alphanumérique de longueur 9).
- Nettoyage des signatures de pensée : supprimer les valeurs
thought_signaturenon base64 (conserver base64).
- Les tours de préremplissage d’assistant finaux sont supprimés des payloads de modèles Anthropic compatibles OpenAI vérifiés d’OpenRouter lorsque le raisonnement est activé, conformément au comportement de relecture Anthropic direct et Cloudflare Anthropic.
- Normalisation des images uniquement.
Comportement historique (avant 2026.1.22)
Avant la version 2026.1.22, OpenClaw appliquait plusieurs couches d’hygiène des transcriptions :- Une extension transcript-sanitize s’exécutait à chaque construction de contexte et pouvait :
- Réparer l’appariement utilisation/résultat d’outil.
- Normaliser les identifiants d’appels d’outils (y compris un mode non strict qui conservait
_/-).
- Le runner effectuait aussi une normalisation propre au fournisseur, ce qui dupliquait le travail.
- Des mutations supplémentaires se produisaient en dehors de la politique fournisseur, notamment :
- Supprimer les balises
<final>du texte d’assistant avant la persistance. - Supprimer les tours d’erreur d’assistant vides.
- Tronquer le contenu d’assistant après les appels d’outils.
- Supprimer les balises
call_id|fc_id de
openai-responses). Le nettoyage de 2026.1.22 a supprimé l’extension, centralisé
la logique dans le runner et rendu OpenAI intact au-delà de la normalisation des images.