[Bug] CLI downgrades TERM from xterm-256color to xterm-color — diff highlighting has no colors
- 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ả
### Describe the bug
The Copilot CLI binary overrides `TERM=xterm-256color` to `TERM=xterm-color` (8 colors) when spawning its bash subshells. This causes diff highlighting to show **no colors at all** — only `+`/`-` markers are visible with no red/green background highlighting, making it impossible to review changes.
### Screenshot
> The diff shows `+` and `-` markers but no red/green color highlighting. All text is the same color, making it very difficult to identify changes.
### Evidence
The parent copilot process inherits the correct TERM from the terminal:
```
Parent copilot process: TERM=xterm-256color, COLORTERM=truecolor
Child bash subprocess: TERM=xterm-color, COLORTERM=truecolor
```
Verified via `ps -p -E` — the parent has `xterm-256color`, but the spawned `bash --norc --noprofile` subprocess gets `xterm-color` (only 8 colors).
### Impact
- Diff output shows `+` and `-` markers but **zero color highlighting** (no red/green backgrounds)
- All CLI themes tested (`default`, `high-contrast`, `dim`, `colorblind`) show the same issue
- Development workflow is blocked — cannot visually review proposed changes
- This works correctly on Windows, where TERM is not overridden
### Environment
- **Copilot CLI version:** 1.0.34 (binary at `/opt/homebrew/Caskroom/copilot-cli/1.0.32/copilot`)
- **OS:** macOS (Darwin, Apple Silicon)
- **Terminals tested:** Ghostty 1.3.1, macOS Terminal.app — same result in both
- **Terminal multiplexer:** Zellij (but TERM is correct before CLI overrides it)
- **Shell:** zsh (CLI spawns `bash --norc --noprofile`)
### Steps to reproduce
1. On macOS, confirm terminal has `TERM=xterm-256color` (e.g. Ghostty, iTerm2, Terminal.app)
2. Launch `copilot`
3. Ask Copilot to edit any file
4. Observe the diff preview — no color highlighting on added/removed lines
5. Verify inside the CLI session: `echo $TERM` shows `xterm-color` instead of the terminal's `xterm-256color`
### Expected behavior
The CLI should preserve the terminal's TERM value (`xterm-256color`) or at minimum use `COLORTERM=truecolor` (which IS correctly inherited) for rendering decisions. Diff highlighting should show colored backgrounds for added/removed lines.
### Related issues
- #1813 — Diff highlights entire line (users there at least have colors)
- #1818 — Diff highlight colors broken (fixed, but those users had colors too)
- #1847 — Code diffs hard to see in dark mode (fixed)
- #2216 — Low contrast text selection
Hướng dẫn đóng góp
Hướng nghiên cứu
Tái hiện trên macOS với TERM=xterm-256color và kiểm tra môi trường được truyền cho subprocess bash --norc --noprofile do binary copilot khởi chạy. Theo dõi nơi TERM thay đổi từ xterm-256color thành xterm-color, sau đó xác minh rằng tiến trình con giữ nguyên giá trị terminal và rằng diff previews hiển thị lại các dòng được thêm và bị xóa bằng màu.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- bash, macos, shell
- Lĩnh vực
- cli, operating-systems
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 58/100