From 0fd0a897304ea07d39e335636f2566ba28b3a3e1 Mon Sep 17 00:00:00 2001 From: Hare Date: Sun, 24 May 2026 07:59:51 +0900 Subject: [PATCH] docs: split tui command and navigation tickets --- TODO.md | 4 +- tickets/tui-command-mode.md | 63 +++++++++++++++++++++++++++ tickets/tui-navigation-mode-design.md | 62 ++++++++++++++++++++++++++ tickets/tui-system-command-compact.md | 26 ++++++----- 4 files changed, 143 insertions(+), 12 deletions(-) create mode 100644 tickets/tui-command-mode.md create mode 100644 tickets/tui-navigation-mode-design.md diff --git a/TODO.md b/TODO.md index b3762e99..03201b31 100644 --- a/TODO.md +++ b/TODO.md @@ -12,7 +12,9 @@ - ネイティブ GUI クライアント MVP → [tickets/native-gui-mvp.md](tickets/native-gui-mvp.md) - E2E テストハーネス(`tests/e2e/`、opt-in) → [tickets/e2e-harness.md](tickets/e2e-harness.md) - TUI 拡充 - - TUI から任意タイミングで Compact を発火する system command → [tickets/tui-system-command-compact.md](tickets/tui-system-command-compact.md) + - TUI command mode / registry / completion → [tickets/tui-command-mode.md](tickets/tui-command-mode.md) + - command modeから任意タイミングで Compact を発火 → [tickets/tui-system-command-compact.md](tickets/tui-system-command-compact.md) + - navigation mode / block focus の設計 → [tickets/tui-navigation-mode-design.md](tickets/tui-navigation-mode-design.md) - user manifest env override 時の spawn scope overlay 前提ズレ → [tickets/tui-user-manifest-env-overlay.md](tickets/tui-user-manifest-env-overlay.md) - ユーザーマニフェストのモデル設定 wizard → [tickets/tui-user-model-setup.md](tickets/tui-user-model-setup.md) - メモリ機構 diff --git a/tickets/tui-command-mode.md b/tickets/tui-command-mode.md new file mode 100644 index 00000000..20666a0e --- /dev/null +++ b/tickets/tui-command-mode.md @@ -0,0 +1,63 @@ +# TUI: command mode / command registry / completion + +## 背景 + +TUI には通常の user message 入力に加えて、Compact、rollback、queue 操作、Pod attach/restore など、LLM に送らない制御操作が増えつつある。既存の入力欄には `@` FileRef、`#` KnowledgeRef、`/` WorkflowRef があり、system command を `/compact` 等に寄せると既存の参照・補完体系と衝突する。 + +また、制御操作を Ctrl/Alt shortcut だけで増やしていくと発見性が低く、keybinding が破綻しやすい。通常入力を守りつつ、system 操作の正規導線として `:` command mode を用意する。 + +本チケットは command mode の土台のみを実装する。Compact 実行など具体的な system command は後続 ticket で扱う。 + +## 方針 + +- `:` で command mode に入る。 +- command mode 中は input area を command input として扱い、通常 user message と明確に分離する。 +- `Esc` で command mode を抜け、通常 composer に戻る。 +- `Enter` で command registry に dispatch する。 +- 未知 command / 引数不正は Pod に送らず TUI 側で診断する。 +- command mode の command は LLM への user message として history に混入しない。 +- 既存の `@` / `#` / `/` 補完や typed segment は通常 composer 側の機能として維持する。 + +## 要件 + +- TUI に mode state を追加する。 + - 少なくとも `Composer` と `Command` を区別する。 + - status / actionbar 等で現在 command mode であることが分かる。 +- `:` key で command mode に入る。 + - 通常 composer に `:` を入力したい場合の escape / literal 入力方針は実装時に決める。 + - 最小実装では、空 composer または通常 mode で `:` を押した時に command mode へ入る等、誤爆しにくい条件にしてよい。 +- command mode の入力編集を実装する。 + - text insert / backspace / cursor movement / clear / Esc / Enter。 + - 通常 composer の buffer を破壊しない。 +- command registry を追加する。 + - command name、aliases、usage、description、argument parser、実行可否判定、executor を登録できる構造にする。 + - 最初は built-in の no-op / help / unknown 診断だけでもよい。 + - 後続 `tui-system-command-compact` が `compact` command を追加できる形にする。 +- completion / suggestion を実装する。 + - prefix に応じた command 候補を actionbar / popup / input 下部などに表示する。 + - Tab で候補補完するか、候補表示だけにするかは実装時に決める。既存 completion との衝突を避ける。 +- tests を追加する。 + - `:` で command mode に入り、Esc で戻る。 + - command 入力が通常 composer を壊さない。 + - unknown command が user message として送信されない。 + - registry から候補が出る。 + - command mode 中の Enter が `Method::Run` を送らない。 + +## 完了条件 + +- TUI に command mode があり、通常 composer と視覚的・状態的に区別できる。 +- command registry があり、後続 ticket で `compact` などを追加できる。 +- command completion / suggestion が最低限機能する。 +- command mode の入力は LLM user message として送信されない。 +- 既存の composer 入力、`@` / `#` / `/` 補完、Run 中 queue、rollback restore を壊さない。 +- `cargo fmt --check` +- `cargo check --workspace` +- `cargo test -p tui` + +## 範囲外 + +- `compact` command の実行。 +- manual rollback command の実行。 +- Pod attach/restore command の実行。 +- navigation mode / block focus。 +- Vim 互換の本格 command line。 diff --git a/tickets/tui-navigation-mode-design.md b/tickets/tui-navigation-mode-design.md new file mode 100644 index 00000000..a0d17b7d --- /dev/null +++ b/tickets/tui-navigation-mode-design.md @@ -0,0 +1,62 @@ +# TUI: navigation mode / block focus の設計 + +## 背景 + +TUI の操作は現在 composer を中心にしており、履歴 block / task 表示 / queued input / system 操作の間を移動する統一的な navigation model はまだない。今後 command mode、manual compact、rollback、Pod picker、queue 編集などが増えると、Ctrl/Alt shortcut だけでは操作体系が散らばる。 + +一方で、通常入力は最優先で守る必要がある。特に streaming 中の入力取りこぼしや rollback restore、Run 中 input queue を入れたことで、composer の文字入力を暗黙操作で壊さないことが重要になっている。 + +本チケットは navigation mode のアイデアを保持する設計 ticket であり、すぐ実装する前提ではない。 + +## アイデア + +- 通常は composer mode。 + - 文字入力、Enter submit/queue、`@` / `#` / `/` 補完を優先する。 +- `Esc` など明示操作で navigation mode に入る。 + - 履歴 block / task pane / queued input / picker 的 UI に focus を移す。 + - focus があることを視覚的に分かるようにする。 +- navigation mode では `j/k` または `↑/↓` で block focus / scroll を行う。 + - `i` / `Enter` / `Esc` で composer に戻る案。 +- composer のカーソルが最上行にある時の `↑` で履歴へ抜ける自然操作も候補。 + - ただし multi-line input / IME / completion / typed segment と衝突しやすいため、初期実装では慎重に扱う。 + - 暗黙 focus 移動より、明示 navigation mode を優先する案が安全。 +- command mode (`:`) とは分ける。 + - command mode は system command 入力。 + - navigation mode は画面上の対象選択 / scroll / block action。 + +## 検討事項 + +- mode 名と status/actionbar 表示。 +- composer mode から navigation mode へ入る key。 +- navigation mode から composer mode へ戻る key。 +- `↑/↓` を composer cursor movement と block focus movement のどちらに使うか。 +- block focus の単位。 + - Turn header + - User message + - Assistant block + - Tool call/result + - System message + - Task row + - Queued input row +- focused block に対する action。 + - copy + - expand/collapse + - retry/fork/rollback など将来操作 +- scrollback と block focus の関係。 +- search (`/` ではなく別 key が必要。`/` は WorkflowRef と衝突する可能性)。 +- mouse support を入れるか。 + +## 完了条件(未確定) + +- navigation mode の keymap と UI 表示方針が決まる。 +- composer 入力を壊さない focus 移動ルールが決まる。 +- block focus の最小単位が決まる。 +- command mode / queue / rollback / Pod picker と衝突しない。 +- 実装 ticket に分割できる。 + +## 範囲外 + +- 今すぐの実装。 +- command mode の実装(`tickets/tui-command-mode.md`)。 +- compact command の実装。 +- Vim 完全互換。 diff --git a/tickets/tui-system-command-compact.md b/tickets/tui-system-command-compact.md index 1d58cd5e..8db48545 100644 --- a/tickets/tui-system-command-compact.md +++ b/tickets/tui-system-command-compact.md @@ -1,4 +1,4 @@ -# TUI から任意タイミングで Compact を実行する system command +# TUI command mode から任意タイミングで Compact を実行する ## 背景 @@ -14,21 +14,24 @@ Compact は現在、manifest の compaction 設定と token 閾値に基づい ## ゴール -TUI から、会話本文を送らずに任意タイミングで Compact を発火できるようにする。あわせて、Compact だけの特例ではなく、将来の TUI / Pod 制御操作にも使える system command の入口を用意する。 +TUI から、会話本文を送らずに任意タイミングで Compact を発火できるようにする。system command の入口は `tickets/tui-command-mode.md` で実装済みの `:` command mode を使い、本チケットでは `compact` command と Pod 側実行経路に集中する。 + +## 前提 + +`tickets/tui-command-mode.md` で TUI の `:` command mode / command registry / completion が実装済みであること。本チケットはその registry に `compact` command を追加し、Pod 側の manual compact 実行経路へ接続する。 ## 要件 -### System command の入力体系 +### Compact command -TUI に、通常の user message / `@` / `#` / `/` とは衝突しない system command の入力体系を追加する。 +Command registry に `compact` command を追加する。 -- `/` と `#` は使わない -- `@` FileRef とも衝突しない -- 入力された system command は LLM への user message として送られない -- command の発火は UI 上で見分けられる -- 未知 command や引数不正は、Pod に送らず TUI 側でユーザーに診断を出す - -記法にするか、専用モードにするか、keybinding から command palette 的に起動するかは本チケット内で確定してよい。ただし既存の submit / completion / paste / chip 化の入力体験を壊さないこと。 +- `:` command mode から `compact` を実行できる。 +- `/` と `#` は使わない。 +- `@` FileRef とも衝突しない。 +- 入力された system command は LLM への user message として送られない。 +- command の発火は UI 上で見分けられる。 +- 未知 command や引数不正は、Pod に送らず TUI 側でユーザーに診断を出す。 ### Manual Compact @@ -60,6 +63,7 @@ System command から Compact を明示実行できるようにする。 ## 範囲外 +- command mode / registry / completion の実装(`tickets/tui-command-mode.md`) - Compact の要約品質や prompt の変更 - compaction 閾値・retained token など manifest 設定の再設計 - slash command と WorkflowRef の意味論変更