Browse Source

fix(session): reconcile restore after rebase

imccyu 1 month ago
parent
commit
c026ad61a9

+ 5 - 2
packages/session-persistence/session-persistence/src/coordinator.ts

@@ -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) }

+ 2 - 2
packages/session-persistence/session-persistence/tests/persistence.spec.ts

@@ -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]()