Python appears in macOS Dock when Copilot CLI starts LSP servers
- 主要語言
- Shell
- 星號
- 11.2k
- 分支
- 1.9k
- 平均合併
- 14 小時 16 分鐘
- 30 天內合併 PR
- 6
描述
## Summary
When the Copilot CLI app starts a session, it launches Python LSP language servers that register as GUI applications in the macOS Dock. The Python icon appears in the Dock and persists even after the server process exits (with failure). This is disruptive — users do not expect a terminal/CLI tool to spawn visible GUI processes.
*Filed by GitHub Copilot on behalf of @hubwriter.*
## Environment
- **OS**: macOS (Darwin, Apple Silicon)
- **Copilot CLI version**: 1.0.70
- **Python**: `/usr/bin/python3` (system Python)
- **Affected LSP servers**: `lsp-python` (and possibly others — all 6 LSP servers fail on startup in this environment)
## Steps to Reproduce
1. Open the Copilot CLI app
2. Start or resume any session in a repository
3. Observe the macOS Dock
## Expected Behavior
- LSP servers should run as background-only processes
- No icons should appear in the macOS Dock or app switcher
- Failed LSP servers should not leave visible artifacts in the UI
## Actual Behavior
- Python icon appears in the macOS Dock when `lsp-python` is launched
- The icon persists even after the process exits with code 1
- This happens on every session start/refresh, repeatedly
- All 6 LSP servers (typescript, omnisharp, ruby, rust, python, go) fail to initialize but Python is the only one that shows a Dock icon
## LSP Server Status (all failing)
```
lsp-typescript — exited with code 1
lsp-omnisharp — exited with code 131
lsp-ruby — exited with code 127
lsp-rust — exited with code 1
lsp-python — exited with code 1
lsp-go — exited with code 1
```
## Suggested Fix
1. **Set `LSBackgroundOnly` or `LSUIElement`** in the Python subprocess environment or use `LSBackgroundOnly` in the process launch to prevent Dock registration
2. **Use `NSApplication.setActivationPolicy(.prohibited)`** or equivalent when spawning LSP subprocesses
3. **Do not launch LSP servers that will fail** — if the server binary is not available or crashes on startup, skip it rather than retrying each session
4. **Launch Python with `-S` or as a module** in a way that does not trigger the macOS window server registration (e.g., avoid importing Tk/tkinter)
## Workaround
Users can manually add `LSBackgroundOnly` to the Python.app Info.plist:
```bash
sudo /usr/libexec/PlistBuddy -c "Add :LSBackgroundOnly bool true" \
/Library/Frameworks/Python.framework/Versions/3.X/Resources/Python.app/Contents/Info.plist
```
But this affects all Python GUI applications system-wide, which is not ideal.
貢獻指南
研究方向
先在 macOS 上重現問題,接著追蹤 Copilot CLI 如何啟動 lsp-python 子程序,以及失敗的 LSP 伺服器是否會在工作階段開始時重試。將啟動環境與建議的僅在背景執行選項進行比較。當 LSP 伺服器執行時不會在 Dock 或應用程式切換器中留下項目,且失敗的伺服器不會留下持久的 UI 殘留時,即表示完成。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- macos, python
- 領域
- cli, devtools, operating-systems
- Issue 類型
- 缺陷
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 活躍度
- 冷清
- 描述清晰度
- 基本清楚
- 新手友好度
- 48/100