From aa5f8c8b7d0d9d307553c0a513ffca92c36f5a55 Mon Sep 17 00:00:00 2001 From: Md Mushfiqur Rahim <20mahin2020@gmail.com> Date: Tue, 9 Jun 2026 14:17:14 +0000 Subject: [PATCH] fix: prevent spinner garbage output in non-TTY environments Fixes #27908 When running 'opencode plugin install' from non-interactive shells (PowerShell, CI), spinner animation frames were printed as individual lines instead of being rendered in-place. Now checks process.stdout.isTTY before using animated spinner. In non-TTY environments, falls back to simple static text output. --- packages/opencode/src/cli/cmd/plug.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/cli/cmd/plug.ts b/packages/opencode/src/cli/cmd/plug.ts index 1529e9b71df3..8cf5d23c9fc5 100644 --- a/packages/opencode/src/cli/cmd/plug.ts +++ b/packages/opencode/src/cli/cmd/plug.ts @@ -44,8 +44,23 @@ export type PlugCtx = { directory: string } +function createNonTTYSpinner(): Spin { + return { + start: (msg: string) => { + process.stderr.write(msg + "...") + }, + stop: (msg: string, code?: number) => { + if (code && code !== 0) { + process.stderr.write(" failed\n") + } else { + process.stderr.write(" " + msg + "\n") + } + }, + } +} + const defaultPlugDeps: PlugDeps = { - spinner: () => spinner(), + spinner: () => (process.stdout.isTTY ? spinner() : createNonTTYSpinner()), log: { error: (msg) => log.error(msg), info: (msg) => log.info(msg),