github / github/copilot-cli

Python appears in macOS Dock when Copilot CLI starts LSP servers

Ouverte
#4,108 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
area:tools
Langage dominant
Shell
Étoiles
11.2k
Forks
1.9k
Merge moyen
14 h 16 min
PR mergées (30 j)
6

Description

## 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.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par reproduire le problème sur macOS, puis retracez la manière dont Copilot CLI lance le sous-processus lsp-python et vérifiez si les serveurs LSP ayant échoué sont relancés au démarrage de la session. Comparez l’environnement de lancement avec les options suggérées d’exécution uniquement en arrière-plan. Le travail est terminé lorsque les serveurs LSP s’exécutent sans entrées dans le Dock ni dans le sélecteur d’applications, et que les serveurs ayant échoué ne laissent aucun artefact persistant dans l’UI.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
macos, python
Domaine
cli, devtools, operating-systems
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
48/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.