enableFileCheckpointing を使用すると、CLI がツールによるファイル変更の前後でスナップショットを取得します。その後、ホストは q.rewindFiles(userMessageId, ...) でファイルを特定のユーザーメッセージの処理開始時の状態へ Rewind できます。この2つは連携して使用する必要があります:checkpoint が有効でなければ、Rewind は使用できません。
ファイル checkpoint の有効化
応用:settingsで他の CLI 設定も同時に変更する場合query()の options にはsettingsフィールドもあり、Settingsオブジェクトまたは settings ファイルの絶対パス文字列を渡せます。enableFileCheckpointingとの関係は以下の通りです:
settingsオブジェクトを渡す場合、SDK はgeneral.fileCheckpointing.enabled = trueを自動的にマージします(手動で書く必要はありません)。settingsファイルパス文字列を渡す場合、SDK はファイル内容を書き換えないため、そのファイル内で自分で設定する必要があります:rewind のみを使用するシナリオでは、enableFileCheckpointing: trueを設定するだけで十分です。settingsを渡す必要はありません。
明示的な user message id の使用
Rewind はユーザーメッセージ ID をアンカーポイントとして使用します。正確な Rewind が必要な場合は、構造化入力を使用して自分でuuid を生成することを推奨します。これにより UI が安定的に「そのメッセージの前に戻る」を特定できます。
Dry run プレビュー
先に dry run を行うことで、Rewind 可能かどうか、影響を受けるファイル、挿入/削除の統計を確認できます。Dry run はファイルを変更しません。 返されるRewindFilesResult には以下のフィールドが含まれます:
| フィールド | 型 | 説明 |
|---|---|---|
canRewind | boolean | ロールバックを実行できるかどうか。dry run の失敗時はエラーをスローせず、このフィールドで示します |
error | string? | canRewind=false 時の診断メッセージ。ユーザーに直接表示できます |
filesChanged | string[]? | 影響を受けるファイルの絶対パスのリスト。UI でロールバックされる各ファイルを一覧表示するのに使用できます |
insertions | number? | ロールバックで「元に戻す」挿入行の合計数(集計値) |
deletions | number? | ロールバックで「元に戻す」削除行の合計数(集計値) |
SDK は現在、RewindFilesResultで影響を受けるファイルのリストと行レベルの集計統計のみを返します。ファイルごとの diff は返しません。ファイルごとの差分を表示する必要がある場合は、dry run 後にfilesChangedをもとにディスクの内容を読み取ってチェックポイントと比較するか、rewind 実行後に git/ワークスペースの差分ツールを使用してください。
Rewind の実行
失敗のセマンティクス
| 呼び出し形式 | Rewind 不可時の動作 |
|---|---|
rewindFiles(id, { dryRun: true }) | { canRewind: false, error } で resolve し、UI に診断情報を表示可能 |
rewindFiles(id)(実行モード) | Promise が reject されるため、呼び出し元は try/catch で失敗理由を表示することを推奨 |
Options クイックリファレンス
| フィールド | 型 | 説明 |
|---|---|---|
enableFileCheckpointing | boolean | ファイル checkpoint を有効化し、rewindFiles() で使用 |
settings | string | Settings | CLI に渡す settings;オブジェクトの場合 SDK が general.fileCheckpointing.enabled をマージ |
戻り値リファレンス
ベストプラクティス
- user message id を保存する:Rewind 機能が必要なホストアプリケーションはメッセージ送信時に
uuidを保存し、UI テキストの特定に依存しないでください。 - Rewind 前に dry run を行う:まず影響範囲を表示し、その後ユーザーに Rewind の実行を確認させてください。
- Rewind 後に UI をリフレッシュ:Rewind はファイルのみを変更し、会話履歴は変更しません。UI は
filesChangedに基づいて関連ビューを再読み込みする必要があります。 - 失敗時にユーザーに
errorを表示:canRewind=false時のerrorテキストは通常、エンドユーザーに直接表示して診断に使用できます。