@@ -452,6 +452,19 @@ def _extract_stats_from_trace(self) -> TraceStats:
452452 TraceStats with stats fields for /v1/traces/complete
453453 """
454454 try :
455+ # Check if file exists before reading
456+ if not self ._path .exists ():
457+ if self .logger :
458+ self .logger .warning (f"Trace file not found: { self ._path } " )
459+ return TraceStats (
460+ total_steps = 0 ,
461+ total_events = 0 ,
462+ duration_ms = None ,
463+ final_status = "unknown" ,
464+ started_at = None ,
465+ ended_at = None ,
466+ )
467+
455468 # Read trace file to extract stats
456469 events = TraceFileManager .read_events (self ._path )
457470 # Use TraceFileManager to extract stats (with custom status inference)
@@ -529,6 +542,12 @@ def _extract_screenshots_from_trace(self) -> dict[int, dict[str, Any]]:
529542 sequence = 0
530543
531544 try :
545+ # Check if file exists before reading
546+ if not self ._path .exists ():
547+ if self .logger :
548+ self .logger .warning (f"Trace file not found: { self ._path } " )
549+ return screenshots
550+
532551 events = TraceFileManager .read_events (self ._path )
533552 for event in events :
534553 # Check if this is a snapshot event with screenshot
@@ -557,6 +576,15 @@ def _create_cleaned_trace(self, output_path: Path) -> None:
557576 output_path: Path to write cleaned trace file
558577 """
559578 try :
579+ # Check if file exists before reading
580+ if not self ._path .exists ():
581+ if self .logger :
582+ self .logger .warning (f"Trace file not found: { self ._path } " )
583+ # Create empty cleaned trace file
584+ output_path .parent .mkdir (parents = True , exist_ok = True )
585+ output_path .touch ()
586+ return
587+
560588 events = TraceFileManager .read_events (self ._path )
561589 with open (output_path , "w" , encoding = "utf-8" ) as outfile :
562590 for event in events :
0 commit comments