From 55cdf2e8f8af2dd3feebb4bb7d44c9cb7e23b384 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Mon, 11 May 2026 16:13:17 +0300 Subject: fix: stabilize integration agent state reports --- src/cli.rs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'src/cli.rs') diff --git a/src/cli.rs b/src/cli.rs index a5ba8b1a..ce50b9b5 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -319,6 +319,7 @@ fn run_integration_command(args: &[String]) -> std::io::Result { match subcommand { "install" => integration_install(&args[1..]), "uninstall" => integration_uninstall(&args[1..]), + "status" => integration_status(&args[1..]), "help" | "--help" | "-h" => { print_integration_help(); Ok(0) @@ -983,6 +984,42 @@ fn pane_run(args: &[String]) -> std::io::Result { })) } +fn integration_status(args: &[String]) -> std::io::Result { + let outdated_only = match args { + [] => false, + [flag] if flag == "--outdated-only" => true, + _ => { + eprintln!("usage: herdr integration status [--outdated-only]"); + return Ok(2); + } + }; + + if outdated_only { + crate::integration::print_outdated_update_notice(); + return Ok(0); + } + + for status in crate::integration::installed_integration_statuses() { + let target = crate::integration::integration_target_label(status.target); + let version = match status.installed_version { + Some(version) => format!("v{version}"), + None => "legacy".to_string(), + }; + let state = match status.state { + crate::integration::IntegrationStatusKind::NotInstalled => "not installed".to_string(), + crate::integration::IntegrationStatusKind::Current => { + format!("current ({version})") + } + crate::integration::IntegrationStatusKind::Outdated => { + format!("outdated ({version} < v{})", status.expected_version) + } + }; + println!("{target}: {state} ({})", status.path.display()); + } + + Ok(0) +} + fn integration_install(args: &[String]) -> std::io::Result { let Some(target) = parse_integration_target(args, "install")? else { return Ok(2); @@ -1488,6 +1525,7 @@ fn print_integration_help() { eprintln!(" herdr integration uninstall claude"); eprintln!(" herdr integration uninstall codex"); eprintln!(" herdr integration uninstall opencode"); + eprintln!(" herdr integration status [--outdated-only]"); } fn print_session_help() { -- cgit v1.2.3