# Body Diff JSON（リクエストボディの差分比較）

## 背景

Claude Code の MainAgent はフルコンテキスト送信方式を採用しており、リクエストごとに完全な会話履歴、system prompt、ツール定義などを含みます。つまり会話が進むにつれてリクエストボディはどんどん大きくなり、生の Body を直接見ても「今回実際に何が追加されたのか」を素早く特定するのは困難です。

Body Diff JSON はまさにこの問題を解決するためのものです。前後2つの MainAgent リクエストの body を自動比較し、差分部分を抽出することで、今回のリクエストで実際に追加された内容を一目で把握できます。

## 動作原理

1. **連続する MainAgent リクエストの識別**：現在のリクエストが MainAgent タイプであり、かつ前の MainAgent リクエストが存在すること
2. **フィールドごとの比較**：リクエストボディのすべてのトップレベルフィールドを走査し、`_` プレフィックスの内部属性はスキップ
3. **スマートな差分抽出**：
   - 追加されたフィールド：そのまま表示
   - 削除されたフィールド：非表示（通常、理解に影響しない）
   - 変更されたフィールド：現在の値を表示
   - `messages` 配列は特別処理：追加されたメッセージのみ表示（通常の会話は追記モードで、プレフィックスメッセージは不変のため）
4. **リクエストボディの縮小検出**：現在のリクエストボディが前回より小さい場合、コンテキストの切り詰めやセッションリセットが発生したことを意味し、diff ではなく通知メッセージを表示

## 典型的なシナリオ

通常の会話ラウンドでは、Body Diff JSON には以下のみが含まれます：
- `messages`：追加された1〜2件のメッセージ（ユーザーの入力 + 前回のアシスタントの応答）

diff に `system`、`tools`、`model` などのフィールドの変更が表示された場合、今回のリクエストで設定変更が発生したことを意味し、これはキャッシュ再構築の原因でもあることが多いです。

## 使い方

- Body Diff JSON は MainAgent リクエストの詳細パネルに表示されます
- タイトルをクリックで展開/折りたたみ
- JSON と Text の2つの表示モードに対応し、ワンクリックコピーも可能
- 左上の **CC-Viewer → グローバル設定** で「Body Diff JSON をデフォルトで展開」を設定できます
