この章の答え
長く持つ状態と、一回の処理で使う状態を分けて読む。
会話を続けても残る情報と、今回の実行だけで必要な情報があります。名前を丸暗記するより、「いつ作られ、誰が持ち、いつ終わるか」の三点で整理すると、Session と Turn の関係が見えてきます。
01|図でつかむ
寿命と役割の整理図。箱が必ず単純な所有関係にある、という意味ではない。
02|3つのポイントで理解する
1. Session は継続の土台
Session 周辺には履歴や進行中の処理など、会話を継続するための情報が集まります。次の入力でも使う状態が、どこに保持されるかを確認します。
2. Task は実行を担う抽象化
SessionTask や RegularTask を読むと、通常の会話処理などをどの共通の仕組みで動かすかが分かります。UI 上の「タスク」という呼び名と、Rust の Task 型は区別します。
3. TurnContext は今回の条件を運ぶ
今回の処理に必要な設定や識別情報が、どの呼び出しへ渡されるかを追います。正常終了だけでなくキャンセル時にも着目すると、次の Turn に残してはいけない状態を見つけやすくなります。
03|ソースで確かめる
以下の検索は Codex リポジトリのルートで実行します。最初に対象 commit を記録し、検索結果から定義と呼び出し元を一つずつ開いてください。
git rev-parse --short HEAD
rg -n "struct Session|RegularTask|TurnContext" codex-rs
読む入口: codex-rs/core/src/tasks/regular.rs 。リンク先は照合に使った固定 commit のファイルです。手元の版と異なる場合は、上の検索語から探し直します。
小さく試す
一つの状態フィールドを選び、生成、参照、更新、終了時の扱いを四行で書きます。
04|30秒で復習
- 状態は寿命で分類する。
- Task は実行の仕組み、Turn は会話処理の単位。
- 終了・中断後に何が残るかを見る。