interaction theme and persistent plan mode_ja - kkamegawa/vsextensionforcodex GitHub Wiki

対話カードのテーマ色と継続する Plan モード

English

概要

保留中の対話カードをテーマに合う読みやすい色へ修正し、入力欄に継続する Plan mode チェックを追加し、Codex と同様に提案計画を表示し、保留中の質問に1問ずつ回答できるようにする。2026-10-12 承認。

追跡

種別 Issue
親 Issue #192
テーマ色 Issue #193
継続する Plan モード Issue #194
提案計画と Plan の利用可否 Issue #195
1問ずつの質問 Issue #196

背景

保留中の質問カードで、Visual Studio の暗い背景に暗い文字が表示される。入れ子のテンプレートと選択肢コントロールはルートの前景色だけに依存できない。現在の Plan モードは送信成功後の1ターンで消費され、入力欄に解除操作がない。

設計

  • 保留中の対話カードの文字と背景を、Visual Studio の動的テーマリソースの組で指定する。質問、権限、コマンド承認、MCP フォームの文字と、RadioButton/CheckBox の内容・グリフ・各操作状態を対象にする。既存の選択面スタイル、キーボードフォーカス、アクセシビリティを維持する。
  • 既存の折り返し可能な入力欄設定列に双方向の Plan mode チェックを追加する。/plan と /plan <prompt> は同じ状態を有効にする。明示的にチェックを外すまで、送信成功・失敗・ターン完了・中断で解除しない。
  • turn/start.collaborationMode は app-server の実験的フィールドであり、接続時に experimentalApi を交渉していない場合サーバーは拒否する(codex 0.161.0 で確認)。このため Plan モードは、現在の接続が Experimental API を交渉済みの場合のみ利用できる。Worker はこの合意状態を接続先スナップショットで通知する。保存済み設定は次回接続時に適用されるため、利用可否と送信モードは設定ではなく接続に従う。利用できない場合はチェックを無効化して理由(再接続待ちの場合はその旨)をツールチップで示し、/plan は Experimental API を有効にして再接続するよう案内して失敗させ、ターンでは collaborationMode を送らない。Worker も同じ規則を強制し、実験的でない接続では default を省略し plan を拒否する。
  • ターン準備時にモードを取得する。Experimental API を交渉済みの接続では、解除後の次ターンは collaboration mode の default を明示送信する。フィールド省略でサーバー状態が解除されるとは扱わない。実行中のターンは変更しない。
  • collaboration mode には必須のモデルが含まれる。送信が必要でモデルが未選択の場合はターンを開始せず、入力欄の文字を保持したままモデル選択を促す状態メッセージを表示する。collaboration mode を送らない場合、未選択は従来どおり app-server の既定モデルに委ねる。
  • 同じ所有者の下書き・復旧経路を含め、会話と所有者に対応するモード状態を保持する。別の会話やアカウント/接続先へ状態を漏らさず、既存の所有者世代ガードを維持する。再接続の試行ごとに新しい所有者区画が割り当てられるため、一時的な復旧では接続断の時点で Plan の選択を退避し、検証済みの同じ接続先へ再接続できた場合にのみ復元する。それ以外の結果では破棄する。Plan モードは設定であり下書き内容ではないため、単独では隔離下書きを作らない。会話未選択時の引数なし /plan は会話未選択の選択を有効にし、その選択はそこから作成した会話へ移す。Plan 状態の変更は UI コンテキストで、現在の所有者に対してのみ行う。
  • plan 項目の提案計画(ストリーミングの item/plan/delta と完了時の確定テキスト)を、エージェント応答と同じ Markdown ブロックとして「Proposed plan」見出しの下に表示する。turn/plan/updated の構造化ステップは従来のステップ一覧を維持する。
  • 選択中の会話で、Plan モードで開始したターンが提案計画付きで完了したら、Codex と同様に「Implement this plan?」カードを表示する。「Yes, implement this plan」はその会話の Plan モードを解除し、プロンプト「Implement the plan.」で default モードのターンを開始する。「No, stay in Plan mode」はカードを閉じる。会話・所有者・ターンが変わるとカードは失効する。
  • 保留中の質問には1問ずつ回答する。複数質問の要求は「Question n of N」と Back/Next を表示し、Next は、回答が必須の要求では現在の質問への回答を必須とする。最後の質問の Submit で、プロトコルの要件どおり全回答を1回の応答で送信する。Cancel は全ステップで利用できる。保留カードはピクセル単位でスクロールし、表示領域より高いカードでも操作ボタンまで到達できる。
  • パッケージバージョン、承認ポリシー、秘密情報の除去、信頼されない入力の処理は維持する。英語文書と対応する日本語訳を更新する。

実装段階

  1. 最終設計を記録し、#193 でテーマの色の組と選択肢コントロールを実装する。
  2. #194 で継続する Plan モード、入力欄のバインディング、スラッシュコマンド/状態表示の整合性と復旧を実装する。
  3. 回帰テストを追加し、ビルドとパッケージ内の生 XAML を検査し、表示の証跡と実行できなかった検証を記録する。
  4. #195 で提案計画の表示、実装確認カード、Plan の利用可否を、#196 で1問ずつの質問カードを実装し、同じ回帰テストと描画の証跡を残す。

検証

連続する Plan ターン、明示的な解除、開始失敗、開始中の変更、会話/所有者切替と復旧、実験的でない接続、モデル未選択、提案計画の描画、実装確認カード、表示領域より高いカードを含む複数質問のステップ操作を検証する。実際の WPF 描画を確認し、Dark、Light/Blue、High Contrast、実行中のテーマ変更、キーボードフォーカス、狭い幅での折り返しを確認する。関連する UI/Core テストと警告なしのソリューションビルドを実行する。パッケージ内の生 XAML とソースの一致を確認する。Experimental Instance の証跡が不足する場合は未完了とし、合格とは記録しない。

⚠️ **GitHub.com Fallback** ⚠️