mirror of
https://github.com/openai/codex.git
synced 2026-04-24 14:45:27 +00:00
Restore codex-tui resume hint on exit (#17415)
Addresses #17303 Problem: The standalone codex-tui entrypoint only printed token usage on exit, so resumable sessions could omit the codex resume footer even when thread metadata was available. Solution: Format codex-tui exit output from AppExitInfo so it includes the same resume hint as the main CLI and reports fatal exits consistently.
This commit is contained in:
@@ -2,9 +2,37 @@ use clap::Parser;
|
||||
use codex_app_server_client::legacy_core;
|
||||
use codex_arg0::Arg0DispatchPaths;
|
||||
use codex_arg0::arg0_dispatch_or_else;
|
||||
use codex_tui::AppExitInfo;
|
||||
use codex_tui::Cli;
|
||||
use codex_tui::ExitReason;
|
||||
use codex_tui::run_main;
|
||||
use codex_utils_cli::CliConfigOverrides;
|
||||
use supports_color::Stream;
|
||||
|
||||
fn format_exit_messages(exit_info: AppExitInfo, color_enabled: bool) -> Vec<String> {
|
||||
let AppExitInfo {
|
||||
token_usage,
|
||||
thread_id,
|
||||
thread_name,
|
||||
..
|
||||
} = exit_info;
|
||||
|
||||
let mut lines = Vec::new();
|
||||
if !token_usage.is_zero() {
|
||||
lines.push(codex_protocol::protocol::FinalOutput::from(token_usage).to_string());
|
||||
}
|
||||
|
||||
if let Some(resume_cmd) = legacy_core::util::resume_command(thread_name.as_deref(), thread_id) {
|
||||
let command = if color_enabled {
|
||||
format!("\u{1b}[36m{resume_cmd}\u{1b}[39m")
|
||||
} else {
|
||||
resume_cmd
|
||||
};
|
||||
lines.push(format!("To continue this session, run {command}"));
|
||||
}
|
||||
|
||||
lines
|
||||
}
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
struct TopCli {
|
||||
@@ -31,12 +59,17 @@ fn main() -> anyhow::Result<()> {
|
||||
/*remote_auth_token*/ None,
|
||||
)
|
||||
.await?;
|
||||
let token_usage = exit_info.token_usage;
|
||||
if !token_usage.is_zero() {
|
||||
println!(
|
||||
"{}",
|
||||
codex_protocol::protocol::FinalOutput::from(token_usage),
|
||||
);
|
||||
match exit_info.exit_reason {
|
||||
ExitReason::Fatal(message) => {
|
||||
eprintln!("ERROR: {message}");
|
||||
std::process::exit(1);
|
||||
}
|
||||
ExitReason::UserRequested => {}
|
||||
}
|
||||
|
||||
let color_enabled = supports_color::on(Stream::Stdout).is_some();
|
||||
for line in format_exit_messages(exit_info, color_enabled) {
|
||||
println!("{line}");
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user