fix(cli): handle tmux false positive background detection (#27572)

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
This commit is contained in:
amelidev
2026-06-16 18:34:53 +00:00
committed by GitHub
parent fbce3e51b6
commit 5624a3b01d
4 changed files with 179 additions and 4 deletions
@@ -117,6 +117,51 @@ describe('TerminalCapabilityManager', () => {
expect(manager.getTerminalBackgroundColor()).toBe('#00ff00');
});
it('should ignore #ffffff in tmux as it is a common false positive', async () => {
const manager = TerminalCapabilityManager.getInstance();
vi.spyOn(manager, 'isTmux').mockReturnValue(true);
const promise = manager.detectCapabilities();
// Simulate OSC 11 response for white
stdin.emit('data', Buffer.from('\x1b]11;rgb:ffff/ffff/ffff\x1b\\'));
// Complete detection with DA1
stdin.emit('data', Buffer.from('\x1b[?62c'));
await promise;
expect(manager.getTerminalBackgroundColor()).toBeUndefined();
});
it('should not ignore #ffffff when NOT in tmux', async () => {
const manager = TerminalCapabilityManager.getInstance();
vi.spyOn(manager, 'isTmux').mockReturnValue(false);
const promise = manager.detectCapabilities();
// Simulate OSC 11 response for white
stdin.emit('data', Buffer.from('\x1b]11;rgb:ffff/ffff/ffff\x1b\\'));
// Complete detection with DA1
stdin.emit('data', Buffer.from('\x1b[?62c'));
await promise;
expect(manager.getTerminalBackgroundColor()).toBe('#ffffff');
});
it('should NOT ignore other colors in tmux', async () => {
const manager = TerminalCapabilityManager.getInstance();
vi.stubEnv('TMUX', '1');
const promise = manager.detectCapabilities();
// Simulate OSC 11 response for grey
stdin.emit('data', Buffer.from('\x1b]11;rgb:8888/8888/8888\x1b\\'));
// Complete detection with DA1
stdin.emit('data', Buffer.from('\x1b[?62c'));
await promise;
expect(manager.getTerminalBackgroundColor()).toBe('#888888');
});
it('should detect Terminal Name', async () => {
const manager = TerminalCapabilityManager.getInstance();
const promise = manager.detectCapabilities();
@@ -161,9 +161,21 @@ export class TerminalCapabilityManager {
match[2],
match[3],
);
debugLogger.log(
`Detected terminal background color: ${this.terminalBackgroundColor}`,
);
// Heuristic: tmux 3.5+ may report #ffffff when it doesn't know the
// actual host terminal color (e.g. over mosh). We ignore this specific
// fallback value to prevent blinding the user with a light theme in a
// likely dark terminal.
if (this.terminalBackgroundColor === '#ffffff' && this.isTmux()) {
debugLogger.log(
'Ignored #ffffff background in tmux (common false positive over mosh).',
);
this.terminalBackgroundColor = undefined;
} else {
debugLogger.log(
`Detected terminal background color: ${this.terminalBackgroundColor}`,
);
}
}
}