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
+10 -4
View File
@@ -85,17 +85,23 @@ 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);
} }
} }
}
const addDescendants = (msgId: string) => { const addDescendants = (msgId: string) => {
const children = childrenMap.get(msgId) || []; const children = childrenMap.get(msgId) || [];