fix(session): reconcile restore after rebase

This commit is contained in:
imccyu
2026-08-06 04:11:57 +08:00
parent e089ef92d8
commit c026ad61a9
2 changed files with 7 additions and 4 deletions
@@ -474,7 +474,10 @@ function adoptStoredEvents(events: SessionEvent[], id: SessionId): SessionEvent[
assertSupportedEvents(events, id)
const messageIds = new Map<number, PersistedMessageId>()
for (const [index, event] of events.entries()) {
const adopted = adoptSessionEvent(migrateLegacyMessageEvent(event, id, messageIds))
const migratedStart = migrateLegacyTurnStartEvent(event, id)
const migratedTurn = migrateLegacyTurnEndEvent(migratedStart, id)
const migratedSteering = migrateLegacySteeringEvent(migratedTurn, id)
const adopted = adoptSessionEvent(migrateLegacyMessageEvent(migratedSteering, id, messageIds))
events[index] = adopted
const messageId = eventMessageId(adopted)
if (messageId !== undefined) messageIds.set(adopted.seq, messageId)
@@ -731,7 +734,7 @@ export class PersistenceCoordinator<TornMarker = unknown> {
this.assertStoredId(id, suffix.meta)
this.assertVersion(suffix.meta)
if (suffix.events.some(needsLegacyPrefix)) {
const whole = await this.inspectCore(id, signal)
const whole = await this.readStoredPrefix(id, signal)
return { meta: whole.meta, events: whole.events.filter(event => event.seq >= fromSeq) }
}
return { meta: structuredClone(suffix.meta), events: snapshotStoredEvents(suffix.events, id) }
@@ -414,7 +414,7 @@ describe('PersistenceCoordinator session preparations', () => {
type: 'turn/start',
seq: 0,
time: 1,
data: { turn: 1, trigger: { kind: 'message', source: { kind: 'user' } } },
data: { turn: 1 },
}],
})
let coordinator!: PersistenceCoordinator<never>
@@ -524,7 +524,7 @@ describe('PersistenceCoordinator session preparations', () => {
type: 'turn/start',
seq: oneTurnLog().length,
time: 7,
data: { turn: 2, trigger: { kind: 'message', source: { kind: 'user' } } },
data: { turn: 2 },
}])).rejects.toThrow(/persisted preparation is reserved/)
} finally {
preparation?.[Symbol.dispose]()