From 57c33542113132e65cea5ff2d8912e43b48f34aa Mon Sep 17 00:00:00 2001 From: lesetong Date: Tue, 28 Jul 2026 17:03:46 +0800 Subject: [PATCH] fix: validate task tool result details --- src/ui.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/ui.ts b/src/ui.ts index 8575a6c..79c4189 100644 --- a/src/ui.ts +++ b/src/ui.ts @@ -153,6 +153,16 @@ function renderTaskDetails(tasks: Task[], theme: Theme, width: number): string[] return lines; } +function isValidTaskToolDetails(details: unknown): details is TaskToolDetails { + if (!details || typeof details !== "object") return false; + const d = details as Partial; + return ( + typeof d.action === "string" && + Array.isArray(d.snapshot?.tasks) && + Array.isArray(d.affected) + ); +} + export function renderToolResult( result: { content: Array<{ type: string; text?: string }>; details?: unknown; isError?: boolean }, expanded: boolean, @@ -161,7 +171,7 @@ export function renderToolResult( const raw = firstText(result.content); const details = result.details as TaskToolDetails | undefined; - if (result.isError || !details) { + if (result.isError || !isValidTaskToolDetails(details)) { const rawLines = raw.split("\n").filter(Boolean); return new TaskResultComponent((width) => { const lines = expanded ? rawLines : rawLines.slice(0, 1);