From 88fea7126d81e656f1205b26b5cf14c5cec48a71 Mon Sep 17 00:00:00 2001 From: Aditya Mathur <57684218+MathurAditya724@users.noreply.github.com> Date: Fri, 8 May 2026 18:44:00 +0000 Subject: [PATCH 1/2] fix(init): simplify LoggingUI output for non-TTY consumers Skip the ASCII banner entirely in LoggingUI (non-TTY/CI) and drop the `... ` prefix from spinner status lines. This reduces noise for programmatic consumers (agents, scripts, piped output) without affecting the interactive InkUI path. Fixes #940 --- src/lib/init/ui/logging-ui.ts | 12 ++++++------ test/lib/init/ui/logging-ui.test.ts | 14 +++----------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/lib/init/ui/logging-ui.ts b/src/lib/init/ui/logging-ui.ts index 75f14e883..a977d6e6f 100644 --- a/src/lib/init/ui/logging-ui.ts +++ b/src/lib/init/ui/logging-ui.ts @@ -83,10 +83,10 @@ export class LoggingUI implements WizardUI { // ── Lifecycle ───────────────────────────────────────────────────── - banner(art: string): void { - // Plain stderr write, no markdown rendering — the banner already - // contains its own ANSI styling and shouldn't be re-processed. - this.stderr.write(`\n${art}\n\n`); + banner(_art: string): void { + // No-op — LoggingUI is used in non-TTY / CI contexts where the + // large ASCII banner wastes vertical space and adds noise for + // programmatic consumers (agents, scripts, piped output). } intro(title: string): void { @@ -157,12 +157,12 @@ export class LoggingUI implements WizardUI { start: (message?: string) => { active = true; if (message) { - this.writeLine(this.stdout, `... ${this.renderInline(message)}`); + this.writeLine(this.stdout, this.renderInline(message)); } }, message: (message?: string) => { if (active && message) { - this.writeLine(this.stdout, `... ${this.renderInline(message)}`); + this.writeLine(this.stdout, this.renderInline(message)); } }, stop: (message?: string, code: SpinnerExitCode = 0) => { diff --git a/test/lib/init/ui/logging-ui.test.ts b/test/lib/init/ui/logging-ui.test.ts index f121dead9..5ba50e963 100644 --- a/test/lib/init/ui/logging-ui.test.ts +++ b/test/lib/init/ui/logging-ui.test.ts @@ -135,7 +135,7 @@ describe("LoggingUI spinner", () => { spinner.message("Still working"); spinner.stop("Done", 0); const lines = stdout().split("\n").filter(Boolean); - expect(lines).toEqual(["... Working", "... Still working", "ok: Done"]); + expect(lines).toEqual(["Working", "Still working", "ok: Done"]); }); test("error stop routes to stderr with error prefix", () => { @@ -143,7 +143,7 @@ describe("LoggingUI spinner", () => { const spinner = ui.spinner(); spinner.start("Working"); spinner.stop("Boom", 1); - expect(stdout()).toBe("... Working\n"); + expect(stdout()).toBe("Working\n"); expect(stderr()).toBe("error: Boom\n"); }); @@ -170,7 +170,7 @@ describe("LoggingUI spinner", () => { spinner.stop("Done"); spinner.message("ignored"); const lines = stdout().split("\n").filter(Boolean); - expect(lines).toEqual(["... Working", "ok: Done"]); + expect(lines).toEqual(["Working", "ok: Done"]); }); }); @@ -247,14 +247,6 @@ describe("LoggingUI disposal", () => { }); }); -describe("LoggingUI banner", () => { - test("writes art to stderr wrapped in newlines", () => { - const { ui, stdout, stderr } = createUI(); - ui.banner(" ███ SENTRY ███"); - expect(stdout()).toBe(""); - expect(stderr()).toBe("\n ███ SENTRY ███\n\n"); - }); -}); describe("LoggingUI summary", () => { test("empty summary (no fields, no changedFiles) is a no-op", () => { From 9b99cbd65958556ae34628a07262f514a96055d2 Mon Sep 17 00:00:00 2001 From: Aditya Mathur <57684218+MathurAditya724@users.noreply.github.com> Date: Sat, 9 May 2026 15:27:50 +0000 Subject: [PATCH 2/2] fix: remove extra blank line in logging-ui test to pass formatter --- test/lib/init/ui/logging-ui.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/test/lib/init/ui/logging-ui.test.ts b/test/lib/init/ui/logging-ui.test.ts index 5ba50e963..881b9d2bd 100644 --- a/test/lib/init/ui/logging-ui.test.ts +++ b/test/lib/init/ui/logging-ui.test.ts @@ -247,7 +247,6 @@ describe("LoggingUI disposal", () => { }); }); - describe("LoggingUI summary", () => { test("empty summary (no fields, no changedFiles) is a no-op", () => { const { ui, stdout, stderr } = createUI();