ctrl+x → b fails to background/interrupt a blocking read_bash call (no escape hatch when polling an async command)
- 主要言語
- Shell
- スター
- 11.2k
- フォーク
- 1.9k
- 平均マージ
- 14時間 16分
- マージ済み PR(30日)
- 6
説明
### Describe the bug
ctrl+x → b ("move current task to background") does not work when the agent is blocked inside a read_bash call with a nonzero delay , even though the underlying shell command was already started with mode: "async" .
Repro: agent runs bash { command, mode: "async" } to start a long command, then calls read_bash { shellId, delay: 150 } to wait on it. Pressing ctrl+x → b during that 150s wait returns "No running sync task to move to background." There is no way to interrupt or background this — the session appears frozen with no escape hatch, which is worse than a plain mode: "sync" call (which presumably is backgroundable via the same keybind).
Expected: ctrl+x → b should also detect and background/interrupt a blocking read_bash (or any tool call) that's been running past some threshold, not just a live bash mode=sync invocation.
### Affected version
GitHub Copilot CLI 1.0.70.
### Steps to reproduce the behavior
1. Start a Copilot CLI session.
2. Have the agent run a shell command in background mode, e.g. equivalent of:
bash { command: "sleep 150", mode: "async" }
``` This returns a `shellId` immediately (command is now running detached in the background). ```
3. Immediately have the agent call:
read_bash { shellId: , delay: 150 }
``` This blocks the agent's tool call — and the interactive session — for the full 150 seconds while it waits to read output. ```
4. While that read_bash call is still pending/blocking (i.e., before the 150s elapses and before the agent's turn produces any further output), press ctrl+x → b to try to move the current task to background.
### Expected behavior
The current task (the agent's blocked turn) is moved to background, session control returns to the user, and the job can be checked later via /tasks .
### Additional context
Actual result: The keybind reports "No running sync task to move to background" — even though the session is visibly blocked/unresponsive for the full 150-second duration. There is no live, backgroundable "task" for the CLI to detect, because the underlying shell command ( sleep 150 ) was already async — only the agent's read_bash wait is blocking, and that isn't recognized as a task the keybind can act on.
Additional note: This was verified in contrast to a (not yet independently confirmed, but documented-as-working) genuine bash mode="sync" call — the bug is specific to the read_bash -poll blocking pattern, which is the more dangerous case since it currently has no user-facing escape hatch at all.
コントリビューションガイド
調査の方向性
ctrl+x → b のキー割り当て処理から始めて、実行中のタスクをどのように識別しているかを追跡します。その後、bash mode="async" が shellId を返した後に delay が 0 ではない場合の read_bash パスを追います。sleep 150 と delay 150 で再現します。ブロックされたターンをバックグラウンドに移動でき、制御が戻り、現在のエラーなしで /tasks の下に表示されれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- shell
- 領域
- cli
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 静か
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 48/100