From a80a654b04cbbddfe242b1db9ab2844236652eef Mon Sep 17 00:00:00 2001 From: Charles Cunningham Date: Fri, 13 Mar 2026 11:16:24 -0700 Subject: [PATCH] tui: honor resume cwd prompt exits Co-authored-by: Codex --- codex-rs/tui/src/app.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/codex-rs/tui/src/app.rs b/codex-rs/tui/src/app.rs index 81d9881026..5df79eff17 100644 --- a/codex-rs/tui/src/app.rs +++ b/codex-rs/tui/src/app.rs @@ -840,7 +840,7 @@ impl App { &mut self, tui: &mut tui::Tui, target_session: SessionTarget, - ) -> Result<()> { + ) -> Result { let current_cwd = self.config.cwd.clone(); let resume_cwd = match crate::resolve_cwd_for_resume_or_fork( tui, @@ -855,7 +855,9 @@ impl App { { crate::ResolveCwdOutcome::Continue(Some(cwd)) => cwd, crate::ResolveCwdOutcome::Continue(None) => current_cwd.clone(), - crate::ResolveCwdOutcome::Exit => return Ok(()), + crate::ResolveCwdOutcome::Exit => { + return Ok(self.handle_exit_mode(ExitMode::ShutdownFirst)); + } }; let mut resume_config = match self .rebuild_config_for_resume_or_fallback(¤t_cwd, resume_cwd) @@ -866,7 +868,7 @@ impl App { self.chat_widget.add_error_message(format!( "Failed to rebuild configuration for resume: {err}" )); - return Ok(()); + return Ok(AppRunControl::Continue); } }; self.apply_runtime_policy_overrides(&mut resume_config); @@ -911,20 +913,20 @@ impl App { )); } } - Ok(()) + Ok(AppRunControl::Continue) } async fn resume_session_by_thread_id( &mut self, tui: &mut tui::Tui, thread_id: ThreadId, - ) -> Result<()> { + ) -> Result { let Some(path) = find_thread_path_by_id_str(&self.config.codex_home, &thread_id.to_string()).await? else { self.chat_widget .add_error_message(format!("No saved session found for thread {thread_id}.")); - return Ok(()); + return Ok(AppRunControl::Continue); }; self.resume_session_target(tui, SessionTarget { path, thread_id }) .await @@ -2537,10 +2539,10 @@ impl App { tui.frame_requester().schedule_frame(); } AppEvent::ResumeSession(thread_id) => { - self.resume_session_by_thread_id(tui, thread_id).await?; + return self.resume_session_by_thread_id(tui, thread_id).await; } AppEvent::ResumeSessionTarget(target_session) => { - self.resume_session_target(tui, target_session).await?; + return self.resume_session_target(tui, target_session).await; } AppEvent::ForkCurrentSession => { self.session_telemetry.counter(