github / github/copilot-cli

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

オープン
#2,902 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
area:terminal-rendering area:tools
主要言語
Shell
スター
11.2k
フォーク
1.9k
平均マージ
14時間 16分
マージ済み PR(30日)
6

説明

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

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

TERM=xterm-256color を設定した macOS で再現し、copilot バイナリによって起動される bash --norc --noprofile サブプロセスに渡される環境を調査する。TERM が xterm-256color から xterm-color に変わる箇所を追跡し、その後、子プロセスが端末の値を保持することと、diff previews で追加行と削除行の色付き表示が復元されることを確認する。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
bash, macos, shell
領域
cli, operating-systems
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
静か
明瞭さ
おおむね明確
初心者へのやさしさ
58/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。