[Windows] Every shell command spawns a visible PowerShell console window (new console, not hidden) that stays open for the command's lifetime
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Shell
- Star
- 11.2k
- Fork
- 1.9k
- Merge trung bình
- 14 giờ 16 phút
- Pull request đã merge (30 ngày)
- 6
Mô tả
Summary
On Windows, Copilot CLI briefly flashes an empty PowerShell / conhost console
window every time the agent executes a shell command. During normal agent
activity (many commands per task) this produces near-constant window flashing
that momentarily steals focus and is very distracting.
This appears to be the same class of bug as the already-fixed git / hook /
path-resolution flashes (PRs #10235 and #11037) and the open MCP-startup flash
(#3171), but on the general agent shell-command execution path, which is
still affected.
Environment
- Copilot CLI: 1.0.80 (latest at time of report)
- OS: Windows 11 24H2, build 26100.9106
(registryProductNamecosmetically reads "Windows 10 Enterprise" on this build) - Shell: PowerShell (default on Windows)
- Terminal: Windows Terminal
Steps to reproduce
- Launch
copilotin Windows Terminal on Windows 11. - Ask the agent to run essentially any shell command (e.g. a simple
Get-ChildItem, or anynode -e "..."invocation). - Watch the screen while the command executes.
Expected
Shell commands run without any visible console window appearing — as already
happens for git commands and for hook / path-resolution after #10235 / #11037.
Actual
A blank PowerShell / conhost window flashes on screen for each spawned
command, briefly stealing focus.
Real-world example that triggers it
This is an actual command a session spawned (a mermaid-diagram validation step).
Every command shaped like this flashes a window:
$node = "C:\ProgramData\global-npm\node_modules\node\bin\node.exe"
$script = @'
const fs = require("fs");
const files = process.argv.slice(2);
let idx = 0;
for (const f of files) {
const txt = fs.readFileSync(f, "utf8").split(/\r?\n/);
let inBlock = false, buf = [], start = 0;
for (let i = 0; i < txt.length; i++) {
const line = txt[i];
if (!inBlock && /^\s*```mermaid\s*$/.test(line)) { inBlock = true; buf = []; start = i + 1; continue; }
if (inBlock && /^\s*```\s*$/.test(line)) {
inBlock = false; idx++;
const base = f.replace(/^.*[\\/]/, "");
const out = `${process.env.TEMP}\\mmvalidate\\block_${idx}_${base}_L${start+1}.mmd`;
fs.writeFileSync(out, buf.join("\n"));
continue;
}
if (inBlock) buf.push(line);
}
}
'@
Set-Content -Path "$env:TEMP\mmvalidate\extract.js" -Value $script -Encoding utf8
& $node "$env:TEMP\mmvalidate\extract.js" "$env:TEMP\brga.md" "$env:TEMP\rad.md" "$env:TEMP\rrd.md"
Note: the window that flashes is the outer powershell.exe host the CLI
spawns to run the command — not node.exe. node is a console app and
inherits the parent console, so it does not create a window on its own. The
content of the command is irrelevant; any shell command triggers the flash.
Likely root cause
The CLI runs shell commands on Windows via node-pty / ConPTY (conpty.node).
The pseudo-console host (conhost.exe) for the spawned command is not being
suppressed on this path, so its window briefly appears. The earlier fixes added
window suppression (windowsHide / CREATE_NO_WINDOW) only to specific paths:
- #10235 — "Git commands no longer flash a console window on Windows"
- #11037 — "Prevent brief console windows from flashing on Windows when the
agent runs hook commands or resolves command paths"
The main agent command-execution path appears not to have the equivalent
suppression.
Related
- #3171 — [Windows] CMD windows flash on screen when MCP servers start
(same class of bug, different trigger)
Suggested fix
Apply the same window-suppression used in #10235 / #11037 to the agent's
shell-command execution path — i.e. ensure the ConPTY / child-process spawn
passes windowsHide: true (or creates the console host without a visible
window / uses a headless OpenConsole host consistently) for every command the
agent runs, not just git, hooks, and path resolution.
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Theo dõi đường dẫn thực thi lệnh shell tổng quát của agent và kiểm tra cách nó khởi chạy các lệnh thông qua node-pty/ConPTY. So sánh các tùy chọn tiến trình của nó với những thay đổi nhằm suppress cửa sổ từ các PR #10235 và #11037, sau đó tái hiện trên Windows; hoàn tất khi các lệnh shell được thực thi lặp lại không còn làm nháy cửa sổ PowerShell hoặc conhost, cũng như không chiếm tiêu điểm.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- node.js, powershell
- Lĩnh vực
- cli, operating-systems
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Sôi nổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 55/100