この章の答え
コマンドの文字列を、起動条件・実行中の状態・終了結果に分けて追う。
git status は短いコマンドですが、実行場所が違えば結果も変わります。exec を読むときは、コマンド本体だけでなく、作業ディレクトリ、入出力、実行時間をまとめて見る必要があります。
01|図でつかむ
短い処理は終了結果を返す。長い処理では、継続中のセッションを扱う必要がある。
02|3つのポイントで理解する
1. 引数には実行環境も含まれる
ExecCommandArgs から要求へ変換する部分を見ます。同じコマンドでも cwd や環境変数、タイムアウトなどが違えば挙動は変わるため、一緒に記録します。
2. 実行中のプロセスを管理する
UnifiedExecProcessManager 周辺を読むと、起動後の状態をどこで持つかを追えます。write_stdin のような後続操作が、どの実行セッションを対象にするかにも着目します。
3. 出力と終了は別々に確認する
標準出力が返ってきても、プロセスが終わったとは限りません。終了コード、実行中の識別子、打ち切りや出力省略の情報を組み合わせて判断します。
03|ソースで確かめる
以下の検索は Codex リポジトリのルートで実行します。最初に対象 commit を記録し、検索結果から定義と呼び出し元を一つずつ開いてください。
git rev-parse --short HEAD
rg -n "ExecCommandHandler|ExecCommandRequest" codex-rs
読む入口: codex-rs/core/src/tools/handlers/unified_exec/exec_command.rs 。リンク先は照合に使った固定 commit のファイルです。手元の版と異なる場合は、上の検索語から探し直します。
小さく試す
短い読み取りコマンドの要求と結果を観察し、cwd・出力・終了コードを並べて記録します。
04|30秒で復習
- コマンドと環境を一組で読む。
- 継続中のプロセスには状態管理が必要。
- 出力受信と実行完了を区別する。