@@ -468,6 +468,34 @@ pub(super) struct CompactedHistoryLazyState {
468468 pub pending_request_visible : Option < usize > ,
469469}
470470
471+ #[ derive( Debug , Clone , PartialEq , Eq ) ]
472+ pub ( super ) struct OvernightAutoPokeFingerprint {
473+ pub run_id : String ,
474+ pub status : String ,
475+ pub last_activity_at : String ,
476+ pub events_len : usize ,
477+ pub task_total : usize ,
478+ pub task_completed : usize ,
479+ pub task_active : usize ,
480+ pub task_blocked : usize ,
481+ pub task_validated : usize ,
482+ pub session_message_count : usize ,
483+ pub review_notes_mtime : Option < u64 > ,
484+ pub validation_files : usize ,
485+ }
486+
487+ #[ derive( Debug , Clone ) ]
488+ pub ( super ) struct OvernightAutoPokeState {
489+ pub run_id : String ,
490+ pub last_fingerprint : OvernightAutoPokeFingerprint ,
491+ pub stalled_turns : u8 ,
492+ pub error_turns : u8 ,
493+ pub total_pokes_sent : u16 ,
494+ pub diagnostic_sent : bool ,
495+ pub morning_report_poked : bool ,
496+ pub final_wrap_poked : bool ,
497+ }
498+
471499/// State for an in-progress OAuth/API-key login flow triggered by `/login`.
472500/// TUI Application state
473501pub struct App {
@@ -586,6 +614,8 @@ pub struct App {
586614 pending_turn : bool ,
587615 // When armed by /poke, automatically continue prompting until todos are complete.
588616 auto_poke_incomplete_todos : bool ,
617+ // When armed by /overnight, automatically continue guarded follow-up turns until wake/wrap.
618+ overnight_auto_poke : Option < OvernightAutoPokeState > ,
589619 // Pending cross-provider resend after a failover warning/countdown.
590620 pending_provider_failover : Option < PendingProviderFailover > ,
591621 // Local session file write to flush once the first "sending" frame is visible.
0 commit comments