トランスクリプト衛生
このドキュメントでは、実行前(モデルコンテキスト構築時)にトランスクリプトに適用されるプロバイダー固有の修正について説明します。これらは厳格なプロバイダー要件を満たすために使用されるメモリ内の調整です。これらの衛生ステップは、保存されたJSONLトランスクリプトをディスク上に書き換えません。ただし、別のセッションファイル修復パスが、セッションがロードされる前に無効な行を削除することで、不正な形式のJSONLファイルを書き換える場合があります。修復が発生すると、元のファイルはセッションファイルと共にバックアップされます。範囲は以下を含みます:
- ツール呼び出しIDのサニタイズ
- ツール呼び出し入力の検証
- ツール結果のペアリング修復
- ターンの検証 / 順序付け
- 思考シグネチャのクリーンアップ
- 画像ペイロードのサニタイズ
- ユーザー入力の出所タグ付け(セッション間ルーティングされたプロンプト用)
トランスクリプトストレージの詳細が必要な場合は、以下を参照してください:
実行箇所
すべてのトランスクリプト衛生処理は、組み込みランナーに一元化されています:
- ポリシー選択:
src/agents/transcript-policy.ts - サニタイズ/修復の適用:
src/agents/pi-embedded-runner/google.ts内のsanitizeSessionHistory
ポリシーは、適用する内容を決定するために provider、modelApi、modelId を使用します。トランスクリプト衛生とは別に、セッションファイルはロード前に(必要に応じて)修復されます:
src/agents/session-file-repair.ts内のrepairSessionFileIfNeededrun/attempt.tsおよびcompact.ts(組み込みランナー)から呼び出されます
グローバルルール: 画像サニタイズ
画像ペイロードは常にサニタイズされ、サイズ制限(過大なbase64画像のダウンスケール/再圧縮)によるプロバイダー側の拒否を防ぎます。これはまた、視覚対応モデルの画像駆動トークン圧力を制御するのにも役立ちます。一般的に、最大寸法を低くするとトークン使用量が減少し、寸法を高くすると詳細が保持されます。実装:
src/agents/pi-embedded-helpers/images.ts内のsanitizeSessionMessagesImagessrc/agents/tool-images.ts内のsanitizeContentBlocksImages- 最大画像辺は
agents.defaults.imageMaxDimensionPx(デフォルト:1200)で設定可能です。
グローバルルール: 不正な形式のツール呼び出し
input と arguments の両方が欠落しているアシスタントのツール呼び出しブロックは、モデルコンテキストが構築される前に削除されます。これにより、(例えば、レート制限失敗後の)部分的に永続化されたツール呼び出しによるプロバイダー拒否を防ぎます。実装:
src/agents/session-transcript-repair.ts内のsanitizeToolCallInputssrc/agents/pi-embedded-runner/google.ts内のsanitizeSessionHistoryで適用されます
グローバルルール: セッション間入力の出所
エージェントが sessions_send を介してプロンプトを別のセッションに送信する場合(エージェント間の返信/アナウンスステップを含む)、OpenClawは作成されたユーザーターンを以下のように永続化します:
message.provenance.kind = "inter_session"
このメタデータはトランスクリプト追加時に書き込まれ、ロールは変更されません(プロバイダー互換性のために role: "user" は維持されます)。トランスクリプトリーダーはこれを使用して、ルーティングされた内部プロンプトをエンドユーザー作成の指示として扱うことを避けることができます。コンテキスト再構築中、OpenClawはまた、モデルが外部エンドユーザー指示と区別できるように、それらのユーザーターンに短い [Inter-session message] マーカーをメモリ内で先頭に追加します。
プロバイダーマトリックス(現在の動作)
OpenAI / OpenAI Codex
- 画像サニタイズのみ。
- OpenAI Responses/Codexトランスクリプトについて、孤立した推論シグネチャ(後続のコンテンツブロックのない単独の推論項目)を削除。
- ツール呼び出しIDのサニタイズなし。
- ツール結果のペアリング修復なし。
- ターンの検証や順序変更なし。
- 合成ツール結果なし。
- 思考シグネチャの除去なし。
Google (Generative AI / Gemini CLI / Antigravity)
- ツール呼び出しIDのサニタイズ: 厳密な英数字。
- ツール結果のペアリング修復と合成ツール結果。
- ターンの検証(Geminiスタイルのターン交互性)。
- Googleターン順序修正(履歴がアシスタントで始まる場合、小さなユーザーブートストラップを先頭に追加)。
- Antigravity Claude: 思考シグネチャの正規化; 署名のない思考ブロックを削除。
Anthropic / Minimax (Anthropic互換)
- ツール結果のペアリング修復と合成ツール結果。
- ターンの検証(厳密な交互性を満たすために連続するユーザーターンをマージ)。
Mistral (モデルIDベースの検出を含む)
- ツール呼び出しIDのサニタイズ: strict9(英数字長さ9)。
OpenRouter Gemini
- 思考シグネチャのクリーンアップ: base64以外の
thought_signature値を除去(base64は保持)。
その他すべて
- 画像サニタイズのみ。
過去の動作(2026.1.22以前)
2026.1.22リリース以前、OpenClawは複数のレイヤーのトランスクリプト衛生処理を適用していました:
- transcript-sanitize拡張機能 がすべてのコンテキスト構築で実行され、以下が可能でした:
- ツール使用/結果のペアリング修復。
- ツール呼び出しIDのサニタイズ(
_/-を保持する非厳格モードを含む)。
- ランナーもプロバイダー固有のサニタイズを実行し、作業が重複していました。
- プロバイダーポリシーの外部で追加の変更が発生していました:
- 永続化前にアシスタントテキストから
<final>タグを除去。 - 空のアシスタントエラーターンを削除。
- ツール呼び出し後のアシスタントコンテンツをトリミング。
- 永続化前にアシスタントテキストから
この複雑さにより、クロスプロバイダーのリグレッション(特に openai-responses の call_id|fc_id ペアリング)が発生しました。2026.1.22のクリーンアップにより、拡張機能が削除され、ロジックがランナーに一元化され、OpenAIは画像サニタイズを超えてノータッチとなりました。