use super::sh_quote;
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 ReadFileArgs {
pub path: String,
}
pub async fn read_file(
sandbox: Arc<dyn Sandbox>,
args: ReadFileArgs,
) -> Result<ToolOutcome, String> {
let cmd = format!("cat -- {}", sh_quote(&args.path));
let out = sandbox
.execute(&cmd, None)
.await
.map_err(|e| e.to_string())?;
if !out.is_success() {
return Err(format!("读取文件失败: {}", out.stderr.trim()));
}
Ok(json!({ "content": out.stdout }).into())
}