diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-07-30 19:15:00 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-07-30 19:15:00 +0300 |
| commit | ac47b9e67912c82dac17388e5541d969a7372c23 (patch) | |
| tree | 6ad378c105c039f245279cd0bf3912db5b15d475 /src/server | |
| parent | 9135ffe10bc07ff102e650a9f12588809cfbf900 (diff) | |
fix: resume agents after headless restore (#2088)
refs #2064
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/headless.rs | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/src/server/headless.rs b/src/server/headless.rs index 899dbf9b..343493cd 100644 --- a/src/server/headless.rs +++ b/src/server/headless.rs @@ -4136,7 +4136,7 @@ impl HeadlessServer { changed = true; } - if geometry_dirty || self.foreground_client_id.is_none() { + if geometry_dirty { self.app.pending_agent_resume_deadline = None; } else { self.app.sync_pending_agent_resume_deadline(now); @@ -6254,34 +6254,16 @@ next_tab = "" assert!(server.app.pending_agent_resume_deadline.is_none()); } + #[cfg(unix)] #[tokio::test] - async fn headless_scheduled_tasks_do_not_start_pending_agent_resume_without_foreground_client() - { + async fn headless_scheduled_tasks_start_pending_agent_resume_without_foreground_client() { let mut server = test_headless_server(); let workspace = crate::workspace::Workspace::test_new("restored"); let pane_id = workspace.tabs[0].root_pane; let terminal_id = workspace.terminal_id(pane_id).cloned().unwrap(); - server.app.state.view.pane_infos = workspace.tabs[0] - .layout - .panes(ratatui::layout::Rect::new(0, 0, 80, 24)); server.app.state.workspaces = vec![workspace]; server.app.state.active = Some(0); server.app.state.ensure_test_terminals(); - server.foreground_client_id = None; - server.effective_size = (80, 24); - server.app.state.host_terminal_theme = crate::terminal_theme::TerminalTheme { - foreground: Some(crate::terminal_theme::RgbColor { - r: 220, - g: 220, - b: 220, - }), - background: Some(crate::terminal_theme::RgbColor { - r: 20, - g: 20, - b: 20, - }), - ..Default::default() - }; server .app .state @@ -6293,10 +6275,20 @@ next_tab = "" argv: vec!["/bin/sh".into(), "-c".into(), "sleep 5".into()], dedupe_key: "herdr:codex\0codex\0Id\0codex-session".into(), }); - server.app.pending_agent_resume_deadline = Some(Instant::now() - Duration::from_millis(1)); - assert!(!server.handle_scheduled_tasks_headless(Instant::now(), false)); + server.render_and_stream(); + assert_ne!(server.app.state.view.terminal_area, Rect::default()); + + let now = Instant::now(); + assert!(!server.handle_scheduled_tasks_headless(now, false)); assert!(server.app.terminal_runtimes.get(&terminal_id).is_none()); + let deadline = server + .app + .pending_agent_resume_deadline + .expect("clientless resume should wait briefly for a host theme"); + + assert!(server.handle_scheduled_tasks_headless(deadline, false)); + assert!(server.app.terminal_runtimes.get(&terminal_id).is_some()); assert!(server .app .state @@ -6304,8 +6296,8 @@ next_tab = "" .get(&terminal_id) .expect("test terminal should still exist") .pending_agent_resume_plan - .is_some()); - assert!(server.app.pending_agent_resume_deadline.is_none()); + .is_none()); + shutdown_test_runtimes(&mut server); } #[tokio::test] |
