use crate::{sandbox::Sandbox, tools::ToolOutcome};
use schemars::JsonSchema;
use serde::Deserialize;
use serde_json::json;
use std::sync::Arc;
#[derive(Deserialize, JsonSchema)]
pub struct BashArgs {
pub command: String,
}
pub async fn bash(sandbox: Arc<dyn Sandbox>, args: BashArgs) -> Result<ToolOutcome, String> {
let out = sandbox
.execute(&args.command)
.await
.map_err(|e| e.to_string())?;
Ok(json!({
"stdout": out.stdout,
"stderr": out.stderr,
"status": out.exit_code,
})
.into())
}