/** * Cross-platform terminal clearing with scrollback support. * Detects modern terminals that support ESC[3J for clearing scrollback. */ import { CURSOR_HOME, csi, ERASE_SCREEN, ERASE_SCROLLBACK, } from './termio/csi.js' // HVP (Horizontal Vertical Position) - legacy Windows cursor home const CURSOR_HOME_WINDOWS = csi(0, 'f') function isWindowsTerminal(): boolean { return process.platform === 'win32' && !!process.env.WT_SESSION } function isMintty(): boolean { // mintty 3.1.5+ sets TERM_PROGRAM to 'mintty' if (process.env.TERM_PROGRAM === 'mintty') { return true } // GitBash/MSYS2/MINGW use mintty and set MSYSTEM if (process.platform === 'win32' && process.env.MSYSTEM) { return true } return false } function isModernWindowsTerminal(): boolean { // Windows Terminal sets WT_SESSION environment variable if (isWindowsTerminal()) { return true } // VS Code integrated terminal on Windows with ConPTY support if ( process.platform === 'win32' && process.env.TERM_PROGRAM === 'vscode' && process.env.TERM_PROGRAM_VERSION ) { return true } // mintty (GitBash/MSYS2/Cygwin) supports modern escape sequences if (isMintty()) { return true } return false } /** * Returns the ANSI escape sequence to clear the terminal including scrollback. * Automatically detects terminal capabilities. */ export function getClearTerminalSequence(): string { if (process.platform === 'win32') { if (isModernWindowsTerminal()) { return ERASE_SCREEN + ERASE_SCROLLBACK + CURSOR_HOME } else { // Legacy Windows console - can't clear scrollback return ERASE_SCREEN + CURSOR_HOME_WINDOWS } } return ERASE_SCREEN + ERASE_SCROLLBACK + CURSOR_HOME } /** * Clears the terminal screen. On supported terminals, also clears scrollback. */ export const clearTerminal = getClearTerminalSequence()