3.2 KiB
3.2 KiB
TUI キーバインド
crates/tui の対話画面で効くキー一覧。main.rs:handle_key を単一情報源とし、このドキュメントは人間向けの目次。
入力編集
| キー | 動作 |
|---|---|
| 文字キー | カーソル位置に挿入 |
Backspace |
カーソル直前を削除 |
Delete |
カーソル直後を削除 |
Left / Right |
カーソル移動 |
Home / End |
行頭 / 行末へ |
送信(Enter)
| 状態 | 入力あり | 入力空 |
|---|---|---|
| Idle | Method::Run で新ターン開始 |
no-op |
| Paused | Method::Run(前ターンは割り込み終了として扱い、新ターンとして開始) |
Method::Resume(前ターンの続きを再開) |
| Running | 入力は TUI 側でバッファのみ、送信はしない | 同左 |
Paused からの挙動
Paused 中に Enter すると、入力の有無で 2 通り:
- 空: 前ターンを中断した地点から Resume。LLM はそのまま続きを書く(partial text は破棄済み)、未実行の tool があれば実行して続行
- 入力あり: 前ターンは「割り込み終了」扱いとなり、新ターンとして Run。Pod 側では
- 未応答
tool_useがあれば synthetictool_result("[Interrupted by user]")で閉じる [The previous turn was interrupted by the user]system note を履歴に挿入- 入力を新しい user メッセージとして append
- ターン開始
- 未応答
Pod 制御
| キー | Running 中 | Idle / Paused |
|---|---|---|
Ctrl-X |
Method::Cancel(進行中ターンを破棄 → Idle) |
no-op(エラー表示のみ) |
Ctrl-C |
Method::Pause(進行中ターンを中断 → Paused) |
1 回目 warn、3 秒以内の 2 回目で TUI 終了(Pod は残る) |
Ctrl-D |
1 回目 warn、3 秒以内の 2 回目で Method::Shutdown |
Method::Shutdown(Pod を終了) |
Cancel と Pause の違い
- Cancel は「ターンを捨てる」: 進行中の LLM リクエスト・未完了 tool を打ち切り、状態は Idle。続きは Resume できない
- Pause は「止めるけど続けられるように」: 同じく打ち切るが状態は Paused、空 Enter で Resume 可能
Running 中に割り込みたい場合、ほとんどのケースで Ctrl-C(Pause)が自然。Ctrl-X(Cancel)は明示的に破棄したい時(LLM が暴走した時など)用。
Ctrl-C と Ctrl-D の 2 段階 UX
どちらも「破壊的に見える操作」は確認を挟む:
- Ctrl-C Running 中: 1 回目で即 Pause(破壊的ではない)
- Ctrl-C Idle / Paused: 1 回目で warn メッセージ、3 秒以内の 2 回目で TUI 終了(Pod は残る)
- Ctrl-D Running 中: 1 回目で warn、3 秒以内の 2 回目で Shutdown
- Ctrl-D Idle / Paused: 1 回目で即 Shutdown
Ctrl-C は Pod は落とさず TUI プロセスだけ抜ける。Ctrl-D は Pod 自体に Method::Shutdown を送って終了させる(Pod プロセスが消える)。
履歴メモ
- かつて存在した
Ctrl-R(Resume 専用)は、空 Enter での Resume に統合されたため廃止 - かつて存在した
Esc(TUI 終了)は、Ctrl-Cの 2 連打 UX に統合されたため廃止