fix: preserve replies after session recovery

This commit is contained in:
john
2026-07-27 19:59:09 +08:00
parent 17c59fde71
commit d1be5d9e2a
3 changed files with 87 additions and 0 deletions
+10
View File
@@ -4,6 +4,7 @@
*/
import { extractConversationMessageText } from './conversation-memory.mjs';
import { mergeConversationSnapshot } from './chat-finish-sync.mjs';
export function parseStoredConversationRow(row) {
if (!row) return null;
@@ -215,6 +216,15 @@ export function repairConversationFromDbRows(gooseMessages, dbRows) {
return Array.isArray(gooseMessages) ? gooseMessages : [];
}
if (dbBuilt.length === 0) return Array.isArray(gooseMessages) ? gooseMessages : [];
const goose = Array.isArray(gooseMessages) ? gooseMessages : [];
const dbIds = new Set(dbBuilt.map((message) => message?.id).filter(Boolean));
const hasSharedAnchor = goose.some((message) => message?.id && dbIds.has(message.id));
if (hasSharedAnchor) {
// A recovered Goose session can contain only the last DB-backed user turn
// plus replies created after rotation. Prefer DB content for shared history,
// while retaining every Goose-only reply and follow-up around that anchor.
return mergeConversationSnapshot(goose, dbBuilt);
}
return dbBuilt;
}