use std::path::Path;
pub(super) fn tmux_bin() -> String {
if let Ok(bin) = std::env::var("MOADIM_TMUX_BIN") {
return bin;
}
#[cfg(test)]
let fallback = "/nonexistent/moadim-test-tmux-guard".to_string();
#[cfg(not(test))]
let fallback = "tmux".to_string();
fallback
}
pub(super) fn tmux_session_alive(session: &str) -> bool {
std::process::Command::new(tmux_bin())
.arg("has-session")
.arg("-t")
.arg(format!("={session}"))
.stdout(std::process::Stdio::null())
.stderr(std::process::Stdio::null())
.status()
.is_ok_and(|status| status.success())
}
pub(super) fn tmux_kill_session(session: &str) {
let _ = std::process::Command::new(tmux_bin())
.arg("kill-session")
.arg("-t")
.arg(format!("={session}"))
.stdout(std::process::Stdio::null())
.stderr(std::process::Stdio::null())
.status();
}
pub(super) fn note_forced_kill(workbench: &Path) {
use std::io::Write;
let path = workbench.join("agent.log");
if let Ok(mut file) = std::fs::OpenOptions::new()
.append(true)
.create(true)
.open(path)
{
let _ = file.write_all(b"moadim: routine exceeded max runtime; killing session\n");
}
}