diff --git a/packages/cli/src/ui/progress.ts b/packages/cli/src/ui/progress.ts index f4aa4c3e4..02ef9bff7 100644 --- a/packages/cli/src/ui/progress.ts +++ b/packages/cli/src/ui/progress.ts @@ -2,7 +2,19 @@ import { c } from "./colors.js"; const { stdout } = process; +let lastPrintedThreshold = -1; + export function renderProgress(percent: number, stage: string, row?: number): void { + // Non-TTY: write clean lines at 10% intervals, skip bar computation entirely + if (!stdout.isTTY) { + const rounded = Math.round(percent); + if ((rounded % 10 === 0 || rounded === 100) && rounded !== lastPrintedThreshold) { + lastPrintedThreshold = rounded; + stdout.write(` ${rounded}% ${stage}\n`); + } + return; + } + const width = 25; const filled = Math.floor(percent / (100 / width)); const empty = width - filled; @@ -10,7 +22,7 @@ export function renderProgress(percent: number, stage: string, row?: number): vo const line = ` ${bar} ${c.bold(String(Math.round(percent)) + "%")} ${c.dim(stage)}`; - if (row !== undefined && stdout.isTTY) { + if (row !== undefined) { stdout.write(`\x1b[${row};1H\x1b[2K${line}`); } else { stdout.write(`\r\x1b[2K${line}`);