use std::process::{Command, Stdio};
use crate::error::{Autom8Error, Result};
#[derive(Debug)]
pub struct ImproveSessionResult {
pub success: bool,
pub exit_code: Option<i32>,
}
pub fn run_improve_session(prompt: &str) -> Result<ImproveSessionResult> {
let status = Command::new("claude")
.arg(prompt)
.stdin(Stdio::inherit())
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.status()
.map_err(|e| {
if e.kind() == std::io::ErrorKind::NotFound {
Autom8Error::ClaudeNotFound
} else {
Autom8Error::ClaudeSpawnError(e.to_string())
}
})?;
Ok(ImproveSessionResult {
success: status.success(),
exit_code: status.code(),
})
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_improve_session_result_debug() {
let result = ImproveSessionResult {
success: true,
exit_code: Some(0),
};
let debug = format!("{:?}", result);
assert!(debug.contains("ImproveSessionResult"));
assert!(debug.contains("success: true"));
}
#[test]
fn test_improve_session_result_success_false() {
let result = ImproveSessionResult {
success: false,
exit_code: Some(1),
};
assert!(!result.success);
assert_eq!(result.exit_code, Some(1));
}
#[test]
fn test_improve_session_result_no_exit_code() {
let result = ImproveSessionResult {
success: false,
exit_code: None,
};
assert!(!result.success);
assert!(result.exit_code.is_none());
}
}