From 394faa4328e4fe8e1902a9727c7ff50e03dba5b5 Mon Sep 17 00:00:00 2001 From: Roe-xin Date: Fri, 20 Mar 2026 18:54:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E6=89=8B=E5=8A=A8?= =?UTF-8?q?=E6=9A=82=E5=81=9C=E5=AF=BC=E8=87=B4=E5=8E=86=E5=8F=B2=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E9=87=8D=E5=A4=8D=E7=9A=84bug=20-=20=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E5=AF=B9=E8=AF=9D=E5=8E=86=E5=8F=B2=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E5=85=A5=E5=8F=A3=EF=BC=8C=E7=A7=BB=E9=99=A4=E6=89=8B=E5=8A=A8?= =?UTF-8?q?=E6=9A=82=E5=81=9C=E6=97=B6=E7=9A=84=E9=87=8D=E5=A4=8D=E5=86=99?= =?UTF-8?q?=E5=85=A5=E9=80=BB=E8=BE=91=E3=80=82=E6=89=8B=E5=8A=A8=E6=9A=82?= =?UTF-8?q?=E5=81=9C=E4=BB=85=E4=BF=9D=E7=95=99=E4=B8=80=E6=9D=A1=E5=8E=86?= =?UTF-8?q?=E5=8F=B2=E8=AE=B0=E5=BD=95=EF=BC=8C=E5=B9=B6=E9=99=84=E5=B8=A6?= =?UTF-8?q?=E4=B8=AD=E6=AD=A2=E6=A0=87=E8=AE=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/dialogService.ts | 6 ++++++ src/utils/messageHandler.ts | 12 +++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/services/dialogService.ts b/src/services/dialogService.ts index 0819d46..478d6dc 100644 --- a/src/services/dialogService.ts +++ b/src/services/dialogService.ts @@ -127,6 +127,7 @@ export class DialogSession { private toolContext: ToolExecutorContext; private accumulatedText = ""; private isActive = false; + private wasAbortedByUser = false; private hasCompleted = false; // 标记是否已收到 complete 事件 private segments: MessageSegment[] = []; private currentTextSegment: MessageSegment | null = null; @@ -218,6 +219,10 @@ export class DialogSession { return this.isActive; } + get abortedByUser(): boolean { + return this.wasAbortedByUser; + } + /** * 加载知识图谱数据 * 从 .iccoder/knowledge.json 读取 @@ -1078,6 +1083,7 @@ export class DialogSession { abort(): void { // 先标记完成,防止 onClose 重复触发 const wasActive = this.isActive; + this.wasAbortedByUser = true; this.hasCompleted = true; this.isActive = false; diff --git a/src/utils/messageHandler.ts b/src/utils/messageHandler.ts index fb0cff1..a5e7357 100644 --- a/src/utils/messageHandler.ts +++ b/src/utils/messageHandler.ts @@ -362,7 +362,11 @@ async function handleUserMessageWithBackend( .map((s) => s.content) .join("\n"); - await historyManager.addAiMessage(textContent, undefined, segments); + const finalText = currentSession?.abortedByUser + ? `${textContent}\n\n[对话已被用户中止]` + : textContent; + + await historyManager.addAiMessage(finalText, undefined, segments); console.log("[MessageHandler] AI响应已保存到历史记录"); } catch (error) { console.error("[MessageHandler] 保存AI响应历史失败:", error); @@ -506,9 +510,11 @@ export async function handleUserAnswer( * 中止当前对话 */ export async function abortCurrentDialog(): Promise { - if (currentSession) { + const session = currentSession; + if (false && session) { + // 历史保存统一走 onComplete,避免手动中止时重复写入 // 保存当前已有的对话内容 - const segments = currentSession.getSegments(); + const segments = session!.getSegments(); if (segments && segments.length > 0) { try { const historyManager = ChatHistoryManager.getInstance();