From 632e6cc97ba061334d96d04fc8c32e43c068c0be Mon Sep 17 00:00:00 2001 From: Shyamalan Kannan <78594762+Yabuku-xD@users.noreply.github.com> Date: Sun, 26 Apr 2026 05:10:20 -0700 Subject: [PATCH] fix: make todo list update dynamically when task status changes (#999) areRenderRelevantPartsEqual did not compare the tool part output field, so when the AI updated a todo list (e.g., marking items completed) the ToolPart memo comparator returned true and skipped re-render. The UI stuck showing stale task status. Fix: add output reference comparison for tool parts in areRenderRelevantPartsEqual so streaming tool output updates trigger re-renders correctly. Co-authored-by: Shyamalan Kannan --- packages/ui/src/components/chat/message/renderCompare.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/ui/src/components/chat/message/renderCompare.ts b/packages/ui/src/components/chat/message/renderCompare.ts index e06064a1..057f15c4 100644 --- a/packages/ui/src/components/chat/message/renderCompare.ts +++ b/packages/ui/src/components/chat/message/renderCompare.ts @@ -80,6 +80,13 @@ export const areRenderRelevantPartsEqual = (left: Part[], right: Part[]): boolea if (leftTool !== rightTool) { return false; } + // Compare tool output so streaming updates (e.g., todo list progress) + // trigger re-renders when the output payload changes. + const leftOutput = (leftPart as { output?: unknown }).output; + const rightOutput = (rightPart as { output?: unknown }).output; + if (leftOutput !== rightOutput) { + return false; + } continue; }