@@ -363,7 +363,12 @@ export namespace SessionProcessor {
363363 message : retry ,
364364 next : Date . now ( ) + delay ,
365365 } )
366- await SessionRetry . sleep ( delay , input . abort ) . catch ( ( ) => { } )
366+ await SessionRetry . sleep ( delay , input . abort ) . catch ( ( err ) => {
367+ if ( err ?. name === "AbortError" ) {
368+ log . info ( "Sleep aborted, checking signal before retry" )
369+ }
370+ } )
371+ if ( input . abort . aborted ) break
367372 continue
368373 }
369374 input . assistantMessage . error = error
@@ -377,22 +382,21 @@ export namespace SessionProcessor {
377382 // and wrap in catch to prevent unhandled promise rejections
378383 const aborted = input . abort . aborted
379384 if ( snapshot && ! aborted ) {
380- await Snapshot . patch ( snapshot )
381- . then ( async ( patch ) => {
382- if ( patch . files . length ) {
383- await Session . updatePart ( {
384- id : Identifier . ascending ( "part" ) ,
385- messageID : input . assistantMessage . id ,
386- sessionID : input . sessionID ,
387- type : "patch" ,
388- hash : patch . hash ,
389- files : patch . files ,
390- } )
391- }
392- } )
393- . catch ( ( err ) => {
394- log . error ( "cleanup patch failed" , { error : err } )
395- } )
385+ try {
386+ const patch = await Snapshot . patch ( snapshot )
387+ if ( patch . files . length && ! input . abort . aborted ) {
388+ await Session . updatePart ( {
389+ id : Identifier . ascending ( "part" ) ,
390+ messageID : input . assistantMessage . id ,
391+ sessionID : input . sessionID ,
392+ type : "patch" ,
393+ hash : patch . hash ,
394+ files : patch . files ,
395+ } )
396+ }
397+ } catch ( err ) {
398+ log . error ( "cleanup patch failed" , { error : err } )
399+ }
396400 snapshot = undefined
397401 }
398402
@@ -401,6 +405,10 @@ export namespace SessionProcessor {
401405 await MessageV2 . parts ( input . assistantMessage . id )
402406 . then ( async ( parts ) => {
403407 for ( const part of parts ) {
408+ if ( input . abort . aborted ) {
409+ log . warn ( "Cleanup interrupted by abort - partial tool state" )
410+ break
411+ }
404412 if ( part . type === "tool" && part . state . status !== "completed" && part . state . status !== "error" ) {
405413 await Session . updatePart ( {
406414 ...part ,
@@ -424,10 +432,14 @@ export namespace SessionProcessor {
424432 } )
425433 }
426434
427- input . assistantMessage . time . completed = Date . now ( )
428- await Session . updateMessage ( input . assistantMessage ) . catch ( ( err ) => {
429- log . error ( "cleanup message update failed" , { error : err } )
430- } )
435+ if ( ! input . abort . aborted ) {
436+ try {
437+ input . assistantMessage . time . completed = Date . now ( )
438+ await Session . updateMessage ( input . assistantMessage )
439+ } catch ( err ) {
440+ log . error ( "cleanup message update failed" , { error : err } )
441+ }
442+ }
431443 if ( needsCompaction ) return "compact"
432444 if ( blocked ) return "stop"
433445 if ( input . assistantMessage . error ) return "stop"
0 commit comments