use std::process::Command;
use crate::core::Result;
use crate::core::tmux::TmuxTarget;
pub struct ClaudeCodeRestarter;
impl ClaudeCodeRestarter {
pub fn find_claude_processes() -> Vec<u32> {
let output = match Command::new("pgrep").args(["-x", "claude"]).output() {
Ok(out) => out,
Err(e) => {
tracing::info!("pgrep unavailable: {e}; reporting no claude processes");
return Vec::new();
}
};
if !output.status.success() {
return Vec::new();
}
String::from_utf8_lossy(&output.stdout)
.lines()
.filter_map(|l| l.trim().parse::<u32>().ok())
.collect()
}
pub fn restart_in_session(tmux_session: &str) -> Result<()> {
let driver = crate::daemon::tmux::TmuxDriver::discover()?;
let target = TmuxTarget::session(tmux_session);
driver.send_interrupt(&target)?;
std::thread::sleep(std::time::Duration::from_millis(500));
driver.send_line(&target, "claude")?;
Ok(())
}
}