fix: forking of a regeneration sometimes copied messages after the root

This commit is contained in:
Zoe
2026-10-15 10:58:20 -05:00
parent ff7797d3f8
commit e5b0e5bf98
+14 -8
View File
@@ -85,15 +85,21 @@ export default defineEventHandler(async (event) => {
current = current.parentMessageId ? messageMap.get(current.parentMessageId) : undefined; current = current.parentMessageId ? messageMap.get(current.parentMessageId) : undefined;
} }
const forkIndex = topicMessages.findIndex(m => m.id === messageId); // A regeneration can be created after later roots, so the fork
// point has to be located by its root rather than by its own createdAt.
let forkRoot = forkMessage;
while (forkRoot.parentMessageId && messageMap.has(forkRoot.parentMessageId)) {
forkRoot = messageMap.get(forkRoot.parentMessageId)!;
}
const rootMessages = topicMessages.filter(m => !m.parentMessageId);
const forkIndex = rootMessages.findIndex(m => m.id === forkRoot.id);
for (let i = 0; i <= forkIndex; i++) { for (let i = 0; i <= forkIndex; i++) {
const msg = topicMessages[i]!; const msg = rootMessages[i]!;
if (!msg.parentMessageId) { messageIdsToCopy.add(msg.id);
messageIdsToCopy.add(msg.id); const children = childrenMap.get(msg.id) || [];
const children = childrenMap.get(msg.id) || []; for (const child of children) {
for (const child of children) { messageIdsToCopy.add(child.id);
messageIdsToCopy.add(child.id);
}
} }
} }