@@ -47,6 +47,50 @@ const updateToolCallRenderContent = (tool: Record<string, unknown>, renderConten
4747 }
4848}
4949
50+ const normalizeFinishedAgentMessages = ( messages : any [ ] ) => {
51+ messages . forEach ( ( message ) => {
52+ if ( message . role !== 'assistant' || message . loading || ! Array . isArray ( message . renderContent ) ) {
53+ return
54+ }
55+
56+ message . renderContent = message . renderContent . filter ( ( item : any ) => item . type !== 'agent-loading' )
57+ const agentContents = message . renderContent . filter ( ( item : any ) => item . type === 'agent-content' )
58+ const finalStatus = agentContents . findLast ( ( item : any ) =>
59+ [ 'success' , 'failed' , 'fix' ] . includes ( item . status )
60+ ) ?. status
61+
62+ message . renderContent . forEach ( ( item : any ) => {
63+ if ( item . type === 'agent-content' && ( ! item . status || item . status === 'loading' ) ) {
64+ item . status = finalStatus || message . metadata ?. agentStatus || 'failed'
65+ }
66+ } )
67+ } )
68+ }
69+
70+ const markLastAgentContentFailed = ( messages : any [ ] , content : unknown ) => {
71+ const lastMessage = messages . at ( - 1 )
72+ if ( ! lastMessage ) {
73+ return
74+ }
75+
76+ lastMessage . loading = undefined
77+ lastMessage . metadata = {
78+ ...( lastMessage . metadata || { } ) ,
79+ chatMode : ChatMode . Agent ,
80+ agentStatus : 'failed'
81+ }
82+ lastMessage . renderContent ||= [ ]
83+ lastMessage . renderContent = lastMessage . renderContent . filter ( ( item : any ) => item . type !== 'agent-loading' )
84+
85+ const lastAgentContent = lastMessage . renderContent . findLast ( ( item : any ) => item . type === 'agent-content' )
86+ const errorInfo = { content : content || '页面生成失败' , status : 'failed' }
87+ if ( lastAgentContent ) {
88+ Object . assign ( lastAgentContent , errorInfo )
89+ } else {
90+ lastMessage . renderContent . push ( { type : 'agent-content' , ...errorInfo } )
91+ }
92+ }
93+
5094/**
5195 * Agent 模式实现
5296 * 特点:
@@ -76,6 +120,8 @@ export default function useAgentMode(): ModeHooks {
76120 apis . updateMetadata ( conversationState . currentId , { chatMode : ChatMode . Agent } )
77121 }
78122
123+ normalizeFinishedAgentMessages ( messages )
124+
79125 // Agent 模式特殊处理:标记失败的 loading
80126 messages . at ( - 1 ) ?. renderContent ?. forEach ( ( item : any ) => {
81127 if ( item . type . includes ( 'loading' ) || item . status !== 'success' ) {
@@ -148,12 +194,7 @@ export default function useAgentMode(): ModeHooks {
148194 ) => {
149195 if ( finishReason === 'aborted' || finishReason === 'error' ) {
150196 removeLoading ( messages )
151- const errorInfo = { content : extraData ?. error || '请求失败' , status : 'failed' }
152- if ( messages . at ( - 1 ) . renderContent . at ( - 1 ) ) {
153- Object . assign ( messages . at ( - 1 ) . renderContent . at ( - 1 ) , errorInfo )
154- } else {
155- messages . at ( - 1 ) . renderContent = [ { type : getContentType ( ) , ...errorInfo } ]
156- }
197+ markLastAgentContentFailed ( messages , extraData ?. error || content || '请求失败' )
157198 }
158199 }
159200
@@ -193,9 +234,7 @@ export default function useAgentMode(): ModeHooks {
193234 lastMessage . renderContent . at ( - 1 )
194235
195236 if ( finishReason === 'aborted' || finishReason === 'error' ) {
196- if ( lastRenderContent ) {
197- lastRenderContent . status = 'failed'
198- }
237+ markLastAgentContentFailed ( messages , content || '页面生成失败' )
199238 return
200239 }
201240
@@ -235,6 +274,11 @@ export default function useAgentMode(): ModeHooks {
235274 if ( lastRenderContent ) {
236275 lastRenderContent . status = 'failed'
237276 }
277+ lastMessage . metadata = {
278+ ...( lastMessage . metadata || { } ) ,
279+ chatMode : ChatMode . Agent ,
280+ agentStatus : 'failed'
281+ }
238282 if ( error instanceof Error && error . message . includes ( 'canceled' ) ) {
239283 messageState . status = STATUS . ABORTED
240284 } else {
@@ -255,8 +299,18 @@ export default function useAgentMode(): ModeHooks {
255299 lastRenderContent . status = 'success'
256300 lastRenderContent . schema = renderedSchema
257301 }
302+ lastMessage . metadata = {
303+ ...( lastMessage . metadata || { } ) ,
304+ chatMode : ChatMode . Agent ,
305+ agentStatus : 'success'
306+ }
258307 } else if ( lastRenderContent ) {
259308 lastRenderContent . status = 'failed'
309+ lastMessage . metadata = {
310+ ...( lastMessage . metadata || { } ) ,
311+ chatMode : ChatMode . Agent ,
312+ agentStatus : 'failed'
313+ }
260314 }
261315
262316 pageSchema = null
0 commit comments