github / github/copilot-cli

[Bug] CLI downgrades TERM from xterm-256color to xterm-color — diff highlighting has no colors

Đang mở
#2,902 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
area:terminal-rendering area:tools
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

Image

> 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

Mở 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

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.