From ddaf06adaf0eda15e45b18e65608449505ce1e05 Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Fri, 23 Oct 2026 21:12:44 -0500 Subject: [PATCH] fix(tui): strip ANSI from tool errors and generic output (#58545) --- packages/tui/src/routes/session/dialog-execute.tsx | 2 +- packages/tui/src/routes/session/index.tsx | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/tui/src/routes/session/dialog-execute.tsx b/packages/tui/src/routes/session/dialog-execute.tsx index 86f9c8f1c52..ea324f75c1a 100644 --- a/packages/tui/src/routes/session/dialog-execute.tsx +++ b/packages/tui/src/routes/session/dialog-execute.tsx @@ -207,7 +207,7 @@ function executeCode(input: SessionMessageAssistantTool["state"]["input"]) { } function outputText(state: SessionMessageAssistantTool["state"]) { - if (state.status === "error") return state.error.message || undefined + if (state.status === "error") return stripAnsi(state.error.message) || undefined if (state.status !== "completed") return const text = stripAnsi( state.content diff --git a/packages/tui/src/routes/session/index.tsx b/packages/tui/src/routes/session/index.tsx index 274cdc5842c..a7b800d6ac6 100644 --- a/packages/tui/src/routes/session/index.tsx +++ b/packages/tui/src/routes/session/index.tsx @@ -2730,7 +2730,7 @@ type ToolProps = { } function GenericTool(props: ToolProps) { const theme = useTheme() - const output = createMemo(() => props.output?.trim() ?? "") + const output = createMemo(() => stripAnsi(props.output?.trim() ?? "")) const input = createMemo(() => Object.entries(props.input)) const [expanded, setExpanded] = createSignal(false) const expandable = createMemo(() => input().length > 0 || output().length > 0) @@ -2816,7 +2816,7 @@ function InlineTool(props: { const permission = useToolPermission(() => props.part) const error = createMemo(() => - !props.running && props.part.state.status === "error" ? props.part.state.error.message : undefined, + !props.running && props.part.state.status === "error" ? stripAnsi(props.part.state.error.message) : undefined, ) const denied = createMemo( @@ -2896,8 +2896,8 @@ function BlockTool(props: BlockToolProps) { const ctx = use() const renderer = useRenderer() const [hover, setHover] = createSignal(false) - const error = createMemo( - () => props.error ?? (props.part?.state.status === "error" ? props.part.state.error.message : undefined), + const error = createMemo(() => + stripAnsi(props.error ?? (props.part?.state.status === "error" ? props.part.state.error.message : "")), ) const permission = useToolPermission(() => props.part) return (