fix:修复手动暂停导致历史记录重复的bug
- 统一对话历史保存入口,移除手动暂停时的重复写入逻辑。手动暂停仅保留一条历史记录,并附带中止标记。
This commit is contained in:
@ -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;
|
||||
|
||||
|
||||
@ -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<void> {
|
||||
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();
|
||||
|
||||
Reference in New Issue
Block a user