Skip to Content
デザインシミュレートされた sed -i ファイル履歴トラッキング

シミュレートされた sed -i ファイル履歴トラッキング

概要

限定的なクラスの sed -i 's/pattern/replacement/flags' file シェルコマンドを、不透明なシェル実行ではなくファイル編集として扱うことで、issue #4204 の残りの項目 B1 をサポートします。

このシミュレーションパスは、通常の編集確認 UI で正確なテキスト変更をプレビューし、FileHistoryService.trackEdit() で対象ファイルを記録し、FileSystemService.writeTextFile() を介して書き込みを行い、シェルの生成を回避します。これにより、/rewind がエージェントワークフローで一般的なシェル駆動のインプレース編集をキャプチャできるようになります。

対象範囲

シミュレートされるのは、単純なインプレース置換のみです。

  • sed -i 's/foo/bar/' file
  • sed -i '' -E 's/foo|bar/baz/g' file
  • sed -i -e 's/foo/bar/' file

複合シェル演算子、グロブ、複数のファイル、コマンド置換、sed 式内のシェル変数参照、変数展開されたファイルパス、-i.bak などのバックアップ接尾辞、サポートされていない sed フラグ、サポートされていない sed 式、またはバックグラウンド実行を含むコマンドはシミュレートされません。これらのケースでは、既存のシェル実行動作が維持されます。

サポートされる置換フラグは、意図的に g と数値の出現回数のみに制限されています。pIM など、標準出力に影響を与えたり、プラットフォーム固有の sed 動作を持つフラグは、シェルパスにフォールバックします。環境プレフィックス付きのシェルラッパーもフォールバックするため、ロケールや環境の変更がシミュレータによってサイレントに無視されることはありません。

動作

確認(Confirmation)は対象ファイルを読み取り、メモリ内で解析された置換を適用し、通常のファイル差分を含む ToolEditConfirmationDetails を返します。

実行(Execution)は書き込み前にファイルを再読み取りします。ファイルの内容が確認時に使用された内容と異なる場合、実行はユーザーが承認しなかった変更を書き込む代わりに、FILE_CHANGED_SINCE_READ で拒否します。

ファイルのプレビューに失敗した場合、コマンドはシミュレートされる代わりに、既存のシェルパスを介して確認および実行されます。

ShellTool は一般的な編集可能なファイル編集ツールではないため、確認では外部エディタの修正アクションが非表示になります。IDE またはホストが差分の承認時にインラインの newContent ペイロードを返す場合、シミュレートされた sed パスは、同一の stale-content ガードの後に、承認されたそのコンテンツを書き込みます。

書き込み前に、実行は FileHistoryService.trackEdit(filePath) を呼び出し、現在のターンのファイル履歴スナップショットが編集前のバックアップをキャプチャするようにします。ファイル履歴の呼び出しはベストエフォートであり、編集をブロックすることはありません。書き込み自体は、読み取りメタデータを使用して FileSystemService.writeTextFile() を利用するため、エンコーディング、BOM、および改行コードの動作が Edit および WriteFile ツールと整合したままになります。

互換性

永続化されたスキーマの変更は必要ありません。これは、既存のスナップショット内で追跡されるファイル編集の単なる別のソースに過ぎません。サポートされていないシェルコマンドは既存のシェルパスを介して継続されるため、一般的なシェルセマンティクスは変更されません。

対象外

一般的なシェル変更のトラッキングは引き続き延期されます。perl -pipython -cawkcat > filemv、任意のスクリプト、および複数ファイルの sed 呼び出しなどのコマンドはシミュレートされません。これらには、claude-code が現在サポートしておらず、B1 の範囲外である、より広範なシェル効果の分析が必要です。

Last updated on