ソースを参照

fix(chat): 修复流式期间思考过程和工具调用不显示

上一个 commit 只更新 streamingContents 不更新 message.content,导致 ChatMessage 的 agentStages(思考过程)和 agentToolCalls(工具调用)渲染异常。修复:onText 同时更新 streamingContents 和 message.content;ChatMessage 在流式期间也渲染(isLastAssistant 不再受 isStreaming 影响);StreamingMessage 只在没有活跃 agent 消息时作为 fallback。
Mochocyang 2 ヶ月 前
親
コミット
870eeb0d31
1 ファイル変更、7 行追加、3 行削除
  1. 7 3
      src/components/chat/chat-panel.tsx

+ 7 - 3
src/components/chat/chat-panel.tsx

@@ -1773,6 +1773,10 @@ export function ChatPanel() {
             onText: (chunk: string) => {
               if (!streamSessionGuardRef.current.isActive(capturedConvId, sessionId)) return
               appendStreamToken(chunk, capturedConvId)
+              updateAgentAssistantMessage(assistantMessage.id, (message) => ({
+                ...message,
+                content: message.content + chunk,
+              }))
             },
               onToolEvent: (event) => {
                 if (contextTrace) {
@@ -2191,8 +2195,8 @@ export function ChatPanel() {
                     <ChatMessage
                       key={msg.id}
                       message={msg}
-                      isLastAssistant={isLastAssistant && !isStreaming}
-                      onRegenerate={isLastAssistant ? handleRegenerate : undefined}
+                      isLastAssistant={isLastAssistant}
+                      onRegenerate={isLastAssistant && !isStreaming ? handleRegenerate : undefined}
                       novelMode={novelMode}
                       projectPath={project?.path ?? null}
                       onSaveAsChapter={handleSaveAsChapter}
@@ -2203,7 +2207,7 @@ export function ChatPanel() {
                     />
                   )
                 })}
-                {isStreaming && batchedStreamingContent && <StreamingMessage content={batchedStreamingContent} isStreaming={isStreaming} />}
+                {isStreaming && batchedStreamingContent && !activeMessages.some((msg) => msg.role === "assistant" && msg.isAgentRunning) && <StreamingMessage content={batchedStreamingContent} isStreaming={isStreaming} />}
                 <div ref={bottomRef} />
               </div>
             </div>