fix: reset cursor when history changes

This commit is contained in:
Aleksey Bragin 2026-01-14 19:58:56 -05:00
parent 9995b680f7
commit acb16bcb27
2 changed files with 16 additions and 2 deletions

View File

@ -50,4 +50,17 @@ describe("getNewMessages", () => {
// #then // #then
expect(next).toEqual(shorter) expect(next).toEqual(shorter)
}) })
it("returns all messages when last key is missing", () => {
// #given
const messages = [buildMessage("m1", 1), buildMessage("m2", 2)]
getNewMessages(sessionID, messages)
const replaced = [buildMessage("n1", 1), buildMessage("n2", 2)]
// #when
const next = getNewMessages(sessionID, replaced)
// #then
expect(next).toEqual(replaced)
})
}) })

View File

@ -57,8 +57,9 @@ export function getNewMessages<T extends CursorMessage>(
const lastIndex = keys.lastIndexOf(cursor.lastKey) const lastIndex = keys.lastIndexOf(cursor.lastKey)
if (lastIndex >= 0) { if (lastIndex >= 0) {
startIndex = lastIndex + 1 startIndex = lastIndex + 1
} else if (cursor.lastCount <= messages.length) { } else {
startIndex = cursor.lastCount // History changed without a shrink; reset to avoid skipping messages.
startIndex = 0
} }
} }
} }