@@ -115,7 +115,7 @@ function run(db: DatabaseService, event: SessionEvent.Event) {
115115 const decodeRow = ( row : typeof SessionMessageTable . $inferSelect ) =>
116116 decodeMessage ( { ...row . data , id : row . id , type : row . type } )
117117 const updateMessage = ( message : SessionMessage . Message ) => {
118- if ( event . seq === undefined ) return Effect . die ( "Synchronized Session event is missing aggregate sequence" )
118+ if ( event . durable === undefined ) return Effect . die ( "Durable Session event is missing aggregate sequence" )
119119 const encoded = encodeMessage ( message )
120120 const { id, type, ...data } = encoded
121121 return db
@@ -192,7 +192,7 @@ function run(db: DatabaseService, event: SessionEvent.Event) {
192192}
193193
194194function insertMessage ( db : DatabaseService , event : SessionEvent . Event , message : SessionMessage . Message ) {
195- if ( event . seq === undefined ) return Effect . die ( "Synchronized Session event is missing aggregate sequence" )
195+ if ( event . durable === undefined ) return Effect . die ( "Durable Session event is missing aggregate sequence" )
196196 const encoded = encodeMessage ( message )
197197 const { id, type, ...data } = encoded
198198 return db
@@ -201,7 +201,7 @@ function insertMessage(db: DatabaseService, event: SessionEvent.Event, message:
201201 id : SessionMessage . ID . make ( id ) ,
202202 session_id : event . data . sessionID ,
203203 type,
204- seq : event . seq ,
204+ seq : event . durable . seq ,
205205 time_created : DateTime . toEpochMillis ( message . time . created ) ,
206206 data,
207207 } )
@@ -213,7 +213,6 @@ export const layer = Layer.effectDiscard(
213213 Effect . gen ( function * ( ) {
214214 const events = yield * EventV2 . Service
215215 const { db } = yield * Database . Service
216- yield * events . beforeCommit ( ( event ) => SessionInput . guardReservedID ( db , event ) )
217216 yield * events . project ( SessionV1 . Event . Created , ( event ) =>
218217 Effect . gen ( function * ( ) {
219218 const stored = yield * db
@@ -331,7 +330,7 @@ export const layer = Layer.effectDiscard(
331330 } ) ,
332331 )
333332 yield * events . project ( SessionEvent . AgentSwitched , ( event ) => {
334- if ( event . seq === undefined ) return Effect . die ( "Synchronized Session event is missing aggregate sequence" )
333+ if ( event . durable === undefined ) return Effect . die ( "Durable Session event is missing aggregate sequence" )
335334 return db
336335 . update ( SessionTable )
337336 . set ( { agent : event . data . agent , time_updated : DateTime . toEpochMillis ( event . data . timestamp ) } )
@@ -340,7 +339,7 @@ export const layer = Layer.effectDiscard(
340339 . pipe (
341340 Effect . orDie ,
342341 Effect . andThen ( run ( db , event ) ) ,
343- Effect . andThen ( SessionContextEpoch . requestReplacement ( db , event . data . sessionID , event . seq ) ) ,
342+ Effect . andThen ( SessionContextEpoch . requestReplacement ( db , event . data . sessionID , event . durable . seq ) ) ,
344343 )
345344 } )
346345 yield * events . project ( SessionEvent . ModelSwitched , ( event ) =>
@@ -352,9 +351,9 @@ export const layer = Layer.effectDiscard(
352351 . run ( )
353352 . pipe ( Effect . orDie )
354353 yield * run ( db , event )
355- if ( event . seq === undefined )
356- return yield * Effect . die ( "Synchronized Session event is missing aggregate sequence" )
357- yield * SessionContextEpoch . requestReplacement ( db , event . data . sessionID , event . seq )
354+ if ( event . durable === undefined )
355+ return yield * Effect . die ( "Durable Session event is missing aggregate sequence" )
356+ yield * SessionContextEpoch . requestReplacement ( db , event . data . sessionID , event . durable . seq )
358357 } ) ,
359358 )
360359 yield * events . project ( SessionEvent . Prompted , ( event ) =>
@@ -368,24 +367,24 @@ export const layer = Layer.effectDiscard(
368367 . pipe ( Effect . orDie )
369368 if ( existing ) return yield * Effect . die ( new PromptAlreadyProjected ( ) )
370369 yield * run ( db , event )
371- if ( event . seq === undefined )
372- return yield * Effect . die ( "Synchronized Session event is missing aggregate sequence" )
370+ if ( event . durable === undefined )
371+ return yield * Effect . die ( "Durable Session event is missing aggregate sequence" )
373372 yield * SessionInput . projectLegacyPrompted ( db , {
374373 id : messageID ,
375374 sessionID : event . data . sessionID ,
376375 prompt : event . data . prompt ,
377376 delivery : event . data . delivery ,
378377 timeCreated : event . data . timestamp ,
379- promotedSeq : event . seq ,
378+ promotedSeq : event . durable . seq ,
380379 } )
381380 } ) ,
382381 )
383382 yield * events . project ( SessionEvent . PromptLifecycle . Admitted , ( event ) =>
384383 Effect . gen ( function * ( ) {
385- if ( event . seq === undefined )
386- return yield * Effect . die ( "Synchronized Session event is missing aggregate sequence" )
384+ if ( event . durable === undefined )
385+ return yield * Effect . die ( "Durable Session event is missing aggregate sequence" )
387386 yield * SessionInput . projectAdmitted ( db , {
388- admittedSeq : event . seq ,
387+ admittedSeq : event . durable . seq ,
389388 id : event . data . messageID ,
390389 sessionID : event . data . sessionID ,
391390 prompt : event . data . prompt ,
@@ -396,8 +395,8 @@ export const layer = Layer.effectDiscard(
396395 )
397396 yield * events . project ( SessionEvent . PromptLifecycle . Promoted , ( event ) =>
398397 Effect . gen ( function * ( ) {
399- if ( event . seq === undefined )
400- return yield * Effect . die ( "Synchronized Session event is missing aggregate sequence" )
398+ if ( event . durable === undefined )
399+ return yield * Effect . die ( "Durable Session event is missing aggregate sequence" )
401400 yield * insertMessage (
402401 db ,
403402 event ,
@@ -406,18 +405,14 @@ export const layer = Layer.effectDiscard(
406405 sessionID : event . data . sessionID ,
407406 prompt : event . data . prompt ,
408407 timeCreated : event . data . timeCreated ,
409- promotedSeq : event . seq ,
408+ promotedSeq : event . durable . seq ,
410409 } ) ,
411410 )
412411 } ) ,
413412 )
414413 yield * events . project ( SessionEvent . InterruptRequested , ( ) => Effect . void )
415- yield * events . project ( SessionEvent . ContextUpdated , ( event ) => {
416- if ( ! event . replay || event . seq === undefined ) return run ( db , event )
417- return run ( db , event ) . pipe (
418- Effect . andThen ( SessionContextEpoch . requestReplacement ( db , event . data . sessionID , event . seq ) ) ,
419- )
420- } )
414+ // TODO: Reconstruct context epoch replacement state during replay without adding replay state to every EventV2 payload.
415+ yield * events . project ( SessionEvent . ContextUpdated , ( event ) => run ( db , event ) )
421416 yield * events . project ( SessionEvent . Synthetic , ( event ) => run ( db , event ) )
422417 yield * events . project ( SessionEvent . Shell . Started , ( event ) => run ( db , event ) )
423418 yield * events . project ( SessionEvent . Shell . Ended , ( event ) => run ( db , event ) )
@@ -436,9 +431,9 @@ export const layer = Layer.effectDiscard(
436431 yield * events . project ( SessionEvent . Reasoning . Ended , ( event ) => run ( db , event ) )
437432 // yield* events.project(SessionEvent.Retried, (event) => run(db, event))
438433 yield * events . project ( SessionEvent . Compaction . Ended , ( event ) => {
439- if ( event . version === 1 ) return Effect . void
440- const seq = event . seq
441- if ( seq === undefined ) return Effect . die ( "Synchronized Session event is missing aggregate sequence" )
434+ if ( event . durable === undefined ) return Effect . die ( "Durable Session event is missing aggregate sequence" )
435+ if ( event . durable . version === 1 ) return Effect . void
436+ const seq = event . durable . seq
442437 return Effect . gen ( function * ( ) {
443438 yield * run ( db , event )
444439 yield * SessionContextEpoch . requestReplacement ( db , event . data . sessionID , seq )
0 commit comments