yoi/tickets/tui-pod-event-render.md

1.5 KiB
Raw Blame History

TUI で auto-kick 由来のターンが表示されない

背景

Pod が Method::PodEvent::TurnEnded などを socket 経由で受信すると、controller は notification を notify buffer に積み、Idle なら pod.run_for_notification() で新しいターンを起動する(crates/pod/src/controller.rs:611-687)。このターンの assistant 出力 (Event::TurnStart / TextDelta / TurnEnd 等) は通常通り broadcast Event として全クライアントTUI 含む)に配信されるはず。

問題

socat で稼働中の codex-oauth pod の socket に Method::PodEvent::TurnEnded を 1 行流したところ、socat 側の subscribe には turn が完全に流れてきたthinking_delta / text_done / turn_end 取得済み)が、同じ pod を起動している TUI 画面には新ターンが描画されなかった。

Method::Run 経由の通常ターンは TUI に表示されるので、broadcast 配信そのものは生きている。auto-kick 由来のターンuser_message を伴わない turnに固有の表示パスで落ちている可能性が高い。

要件

  • auto-kick で起動したターンuser 入力を伴わないターンも、user 由来ターンと同様に TUI 履歴に表示される。
  • turn header 等の見た目で「通知由来である」ことを示す表記を入れるかは別議論。

完了条件

  • 親 pod が PodEvent を受信して auto-kick した際、TUI 上で thinking / assistant text / turn_end が user 由来ターンと同様に表示される。