[Windows] Every shell command spawns a visible PowerShell console window (new console, not hidden) that stays open for the command's lifetime
还没有人认领这个 Issue。
- 主要语言
- Shell
- 星标
- 11.2k
- 派生
- 1.9k
- 平均合并
- 14 小时 16 分钟
- 30 天内合并 PR
- 6
描述
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.
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
跟踪 agent 的通用 shell 命令执行路径,并检查它如何通过 node-pty/ConPTY 生成命令。将其进程选项与 PR #10235 和 #11037 中抑制窗口的更改进行比较,然后在 Windows 上复现;完成的标准是,重复执行 shell 命令时不再闪现 PowerShell 或 conhost 窗口,也不再抢夺焦点。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- node.js, powershell
- 领域
- cli, operating-systems
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 活跃
- 描述清晰度
- 基本清楚
- 新手友好度
- 55/100