From 2f7dc60337940bc9d960692c24be2ac6d1b1483f Mon Sep 17 00:00:00 2001 From: euvre <93761161+euvre@users.noreply.github.com> Date: Wed, 22 Jul 2026 19:21:17 +0800 Subject: [PATCH] fix: restore download button when file type is selected in agent message (#17184) --- agent/canvas.py | 3 +++ .../components/next-message-item/index.tsx | 26 ------------------- web/src/hooks/use-send-message.ts | 9 +++++-- .../agent/chat/use-send-agent-message.ts | 13 ++++++++-- 4 files changed, 21 insertions(+), 30 deletions(-) diff --git a/agent/canvas.py b/agent/canvas.py index bbe91e089d..87de8a5394 100644 --- a/agent/canvas.py +++ b/agent/canvas.py @@ -981,6 +981,9 @@ class Canvas(Graph): message_end["status"] = cpn_obj.get_param("status") if isinstance(cpn_obj.output("attachment"), dict): message_end["attachment"] = cpn_obj.output("attachment") + downloads = cpn_obj.output("downloads") + if isinstance(downloads, list) and downloads: + message_end["downloads"] = downloads if self._has_reference(): message_end["reference"] = self.get_reference() # NOTE: aggregated run token usage is intentionally NOT attached here. diff --git a/web/src/components/next-message-item/index.tsx b/web/src/components/next-message-item/index.tsx index 9c5f3d5ce0..a294474043 100644 --- a/web/src/components/next-message-item/index.tsx +++ b/web/src/components/next-message-item/index.tsx @@ -315,32 +315,6 @@ function MessageItem({ ))} )} - {/* {isAssistant && item.attachment && item.attachment.doc_id && ( -
- -
- )} */} diff --git a/web/src/hooks/use-send-message.ts b/web/src/hooks/use-send-message.ts index e418ce79de..49d1e31b85 100644 --- a/web/src/hooks/use-send-message.ts +++ b/web/src/hooks/use-send-message.ts @@ -1,7 +1,10 @@ import message from '@/components/ui/message'; import { Authorization } from '@/constants/authorization'; import { ResponseType } from '@/interfaces/database/base'; -import { IReferenceObject } from '@/interfaces/database/chat'; +import { + IDocumentDownloadInfo, + IReferenceObject, +} from '@/interfaces/database/chat'; import { BeginQuery } from '@/pages/agent/interface'; import { getAuthorization } from '@/utils/authorization-util'; import { EventSourceParserStream } from 'eventsource-parser/stream'; @@ -59,7 +62,9 @@ export interface IMessageData { } export interface IMessageEndData { - reference: IReferenceObject; + reference?: IReferenceObject; + attachment?: IAttachment; + downloads?: IDocumentDownloadInfo[]; } export interface ILogData extends INodeData { diff --git a/web/src/pages/agent/chat/use-send-agent-message.ts b/web/src/pages/agent/chat/use-send-agent-message.ts index 855e819fe2..6af27139e0 100644 --- a/web/src/pages/agent/chat/use-send-agent-message.ts +++ b/web/src/pages/agent/chat/use-send-agent-message.ts @@ -83,12 +83,21 @@ export function findMessageFromList(eventList: IEventList) { const workflowFinished = eventList.find( (x) => x.event === MessageEventType.WorkflowFinished, ) as IMessageEvent; + const messageEndEvent = [...eventList] + .reverse() + .find((x) => x.event === MessageEventType.MessageEnd) as IMessageEndEvent; return { id: eventList[0]?.message_id, content: nextContent, audio_binary: audioBinary, - attachment: workflowFinished?.data?.outputs?.attachment || {}, - downloads: workflowFinished?.data?.outputs?.downloads || [], + attachment: + workflowFinished?.data?.outputs?.attachment || + messageEndEvent?.data?.attachment || + {}, + downloads: + workflowFinished?.data?.outputs?.downloads || + messageEndEvent?.data?.downloads || + [], }; }