goal stop_ja - kkamegawa/vsextensionforcodex GitHub Wiki
日付: 2026-10-11 追跡: Issue #174 状態: 計画承認済み(2026-10-11)。
Goal が Active の間は、ターン間や自動継続中も composer の Stop 操作を利用可能にする。Stop は選択中 thread の Goal を一時停止し、現在のターンを中断する。状態は現在の owner と接続世代に限定する。
-
ExecuteGoalAsyncの応答、Goal 更新・削除通知、thread/goal/getを thread 単位の同じ状態経路へ集約する。明示的な選択または Join 後に状態を取得し、owner・thread・接続世代をまたぐ古い応答や通知は破棄する。再接続時に Stop や他の作業を再送しない。 - ターン実行がなくても Active Goal 中は composer の主操作を Stop にする。要求中は重複操作を禁止し、停止中と表示する。一時停止後も対象ターンの完了までは停止中を維持する。Paused、Complete、Blocked、使用量/予算制限、削除時は通常表示に戻し、Resume で Active になれば Stop を表示する。
- 既存の owner-scoped envelope と対象 thread を使う
StopThreadGoalAsyncを Extension–Worker 間に追加する。Worker 契約を v21 から次の未使用番号へ更新する。各 RPC の前後で owner、接続世代、参加済み thread を検証する。 - Stop 時にその thread の未実行キューを取り消す。既に取り出された command も送信前に再検証し、キュー済み Resume を含め停止開始後の送信を防ぐ。未送信の composer 入力と添付は保持し、切断や timeout 後に作業を再送しない。
- Worker は Goal 状態を読み、Active の場合だけ
status: "paused"のみを含むthread/goal/setを試し、その後同じ thread の最新実行中 turn を特定して中断する。明示的な Stop 指示が中断を許可するため、追加確認はしない。pause 失敗または結果不明でも interrupt を試し、自動継続 turn も対象とする。turn がなければ interrupt せず pause の結果を返す。Goal の目的・予算・使用量を維持する。 - pause と interrupt の結果を別々に報告する。interrupt 失敗後も pause 成功は維持する。pause 失敗後に interrupt が成功した場合は部分結果として報告し、Goal を Paused と表示しない。受付応答と
turn/completedを区別する。結果不明時は読み取りで状態を確認し、再試行はユーザーの明示操作に限る。通常の turn 中断に対するローカル開始制約は維持する。認証状態の変化だけを理由に専用 Stop 経路を遮断しない。 - Remote UI 状態に
DataMemberと変更通知を付ける。Stop 操作は一つだけとし、アイコン・ツールチップ・UI Automation の名前/説明を一致させる。キーボード送信にも表示ボタンと同じ停止中・無効条件を適用する。 - 統合レビューで確定した事項(2026-10-11): Ctrl+Enter は送信専用とし、主操作が Goal 操作の間は無効にする。Goal が Active の間も
/goal pauseなどの slash command は利用でき、停止が未確定の間だけ拒否する。Worker は Goal の読み取りに失敗しても status のみの pause を試み、クリック後に Goal が終了・削除されていても同じ thread の最新 turn を中断する。重なった Stop は直列化する。要求の timeout は結果不明とする。Goal の読み取り専用の再取得は再接続後だけ行う。Goal 未対応の server では composer を通常の Send と Interrupt に戻す。
| Phase | 作業 | 受け入れ条件 |
|---|---|---|
| P0 | Stop の順序・対象範囲・失敗時動作を既存の設計・計画記録へ反映 | 英語正本と日本語訳が一致 |
| P1 | Worker 契約、owner/thread/世代検査、キュー取消、pause/interrupt 順序、Fake App Server シナリオ | 呼び出し順、thread 分離、自動再送なしを確認 |
| P2 | Goal 状態同期と composer の Stop/停止中表示 | Active/Paused/終了状態が仕様どおりに動作・表示 |
| P3 | Worker 競合と WPF のレビュー、自動・Experimental Instance 検証 | 必須検証と画面証跡を記録 |
- Goal 開始、自動継続、ターン間、承認/入力待ち、Resume、一時停止、完了、削除、完了/削除との競合を確認する。
- pause 試行が interrupt より先であること、pause 失敗/結果不明でも interrupt を続けること、turn 不在時は pause 結果を返すこと、目的/予算/使用量が維持されること、追加確認なしで pause 試行後の同じ thread の最新 turn を選ぶこと、別 thread に切り替えないこと、受付応答を完了扱いしないことを確認する。
- 二重クリック、キュー済み Resume、取り出し済み command、遅延した取得応答/通知、owner/thread/世代変更、切断/再接続、自動再送ゼロを検証する。
- pause/interrupt 個別失敗、部分結果、結果不明、未対応 API、認証状態変化を確認し、通常の Send/Steer/中断と別 thread への操作禁止を回帰確認する。
- Core/UI 全テスト、警告ゼロの Debug/Release ビルド、固定 0.159.1 契約と 0.155.1 回帰、VSIX DTO/XAML 整合性を確認する。
- Experimental Instance で Light/Dark/High Contrast、狭幅、keyboard/focus、UI Automation を確認し、実行中・停止中・停止後・再接続後の画面を記録する。未確認の条件は未完了として残す。
Issue #173、CLI/SDK/NuGet 更新、後方互換対応、データ移行は含めない。通常 turn の既存 Send/Steer 条件は現行ルールに従う。完了には上記の実装と検証証跡が必要である。
- Codex App Server — Manage a thread goal、2026-10-11 確認。Goal の取得/更新通知と、目的を置き換えず status を変更した場合の usage 保持を定義している。