From 205bb60ab42ad7d66a1e6fa94c15b6fe45178c1f Mon Sep 17 00:00:00 2001 From: can1357 Date: Wed, 13 May 2026 05:59:35 +0200 Subject: [PATCH] fix(coding-agent/task): sanitized review preview and finding titles before rendering - Flattened newlines and tabs in summary explanations before generating the review preview text, and trimmed the extracted sentence before truncating. - Sanitized finding titles during render by normalizing tabs/newlines to spaces after stripping priority prefixes. --- packages/coding-agent/src/task/render.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/coding-agent/src/task/render.ts b/packages/coding-agent/src/task/render.ts index 9686a6e20..6c946af04 100644 --- a/packages/coding-agent/src/task/render.ts +++ b/packages/coding-agent/src/task/render.ts @@ -661,8 +661,10 @@ function renderReviewResult( lines.push(`${continuePrefix} ${theme.fg("dim", replaceTabs(line))}`); } } else { - // Preview: first sentence or ~100 chars - const preview = truncateToWidth(`${summary.explanation.split(/[.!?]/)[0]}.`, 100); + // Preview: first sentence or ~100 chars (flatten tabs/newlines first) + const flat = replaceTabs(summary.explanation).replace(/[\r\n]+/g, " "); + const firstSentence = flat.split(/[.!?]/)[0].trim(); + const preview = truncateToWidth(`${firstSentence}.`, 100); lines.push(`${continuePrefix}${theme.fg("dim", preview)}`); } } @@ -701,7 +703,8 @@ function renderFindings( const findingContinue = isLastFinding ? " " : `${theme.tree.vertical} `; const { color } = getPriorityInfo(finding.priority); - const titleText = finding.title?.replace(/^\[P\d\]\s*/, "") ?? "Untitled"; + const rawTitle = finding.title?.replace(/^\[P\d\]\s*/, "") ?? "Untitled"; + const titleText = replaceTabs(rawTitle).replace(/[\r\n]+/g, " "); const loc = `${path.basename(finding.file_path || "")}:${finding.line_start}`; lines.push(