@@ -1129,45 +1129,50 @@ export function handleChatEvent(state: ChatState, payload?: ChatEventPayload) {
11291129 }
11301130 } else if ( payload . state === "final" ) {
11311131 const finalMessage = normalizeFinalAssistantMessage ( payload . message ) ;
1132- if ( finalMessage && ! shouldHideAssistantChatMessage ( finalMessage ) ) {
1133- state . chatMessages = [ ...state . chatMessages , finalMessage ] ;
1134- } else if (
1135- state . chatStream ?. trim ( ) &&
1136- ! isSilentReplyStream ( state . chatStream ) &&
1137- ! isHeartbeatAckStream ( state . chatStream )
1138- ) {
1139- state . chatMessages = [
1140- ...state . chatMessages ,
1141- {
1142- role : "assistant" ,
1143- content : [ { type : "text" , text : state . chatStream } ] ,
1144- timestamp : Date . now ( ) ,
1145- } ,
1146- ] ;
1147- }
1132+ const visibleFinalMessage =
1133+ finalMessage && ! shouldHideAssistantChatMessage ( finalMessage ) ? finalMessage : null ;
1134+ const streamedText = state . chatStream ?? "" ;
1135+ const fallbackMessage =
1136+ ! visibleFinalMessage &&
1137+ streamedText . trim ( ) &&
1138+ ! isSilentReplyStream ( streamedText ) &&
1139+ ! isHeartbeatAckStream ( streamedText )
1140+ ? {
1141+ role : "assistant" ,
1142+ content : [ { type : "text" , text : streamedText } ] ,
1143+ timestamp : Date . now ( ) ,
1144+ }
1145+ : null ;
11481146 reconcileTerminalRun ( "done" , "done" ) ;
1147+ if ( visibleFinalMessage ) {
1148+ state . chatMessages = [ ...state . chatMessages , visibleFinalMessage ] ;
1149+ } else if ( fallbackMessage ) {
1150+ state . chatMessages = [ ...state . chatMessages , fallbackMessage ] ;
1151+ }
11491152 } else if ( payload . state === "aborted" ) {
11501153 const normalizedMessage = normalizeAbortedAssistantMessage ( payload . message ) ;
1151- if ( normalizedMessage && ! shouldHideAssistantChatMessage ( normalizedMessage ) ) {
1152- state . chatMessages = [ ...state . chatMessages , normalizedMessage ] ;
1153- } else {
1154- const streamedText = state . chatStream ?? "" ;
1155- if (
1156- streamedText . trim ( ) &&
1157- ! isSilentReplyStream ( streamedText ) &&
1158- ! isHeartbeatAckStream ( streamedText )
1159- ) {
1160- state . chatMessages = [
1161- ...state . chatMessages ,
1162- {
1154+ const visibleAbortedMessage =
1155+ normalizedMessage && ! shouldHideAssistantChatMessage ( normalizedMessage )
1156+ ? normalizedMessage
1157+ : null ;
1158+ const streamedText = state . chatStream ?? "" ;
1159+ const fallbackMessage =
1160+ ! visibleAbortedMessage &&
1161+ streamedText . trim ( ) &&
1162+ ! isSilentReplyStream ( streamedText ) &&
1163+ ! isHeartbeatAckStream ( streamedText )
1164+ ? {
11631165 role : "assistant" ,
11641166 content : [ { type : "text" , text : streamedText } ] ,
11651167 timestamp : Date . now ( ) ,
1166- } ,
1167- ] ;
1168- }
1169- }
1168+ }
1169+ : null ;
11701170 reconcileTerminalRun ( "interrupted" , "killed" ) ;
1171+ if ( visibleAbortedMessage ) {
1172+ state . chatMessages = [ ...state . chatMessages , visibleAbortedMessage ] ;
1173+ } else if ( fallbackMessage ) {
1174+ state . chatMessages = [ ...state . chatMessages , fallbackMessage ] ;
1175+ }
11711176 } else if ( payload . state === "error" ) {
11721177 const errorMessage = hadActiveRunBeforeEvent ? buildErrorAssistantMessage ( payload ) : null ;
11731178 if ( errorMessage ) {
0 commit comments