use std::{fs, io::Error, env};
include!(concat!(env!("OUT_DIR"), "/.generated_templates.rs"));
pub fn create_new_agent_project(agent_name: &str, agentcfg: Option<&str>) -> Result<(), Error> {
create_agent_workspace(agent_name)?;
load_agent_workspace(agent_name, agentcfg)?;
Ok(())
}
fn create_agent_workspace(agent_name: &str) -> Result<(), Error> {
let agent_workspace_directory = super::agent_workspace_path(agent_name);
if !agent_workspace_directory.exists() {
fs::create_dir_all(agent_workspace_directory)?;
}
Ok(())
}
fn load_agent_workspace(agent_name: &str, agentcfg: Option<&str>) -> Result<(), Error> {
let base_path = super::agent_workspace_path(agent_name);
for (file_name, file_contents) in TEMPLATES {
let file_path = base_path.join(file_name);
if let Some(parent) = file_path.parent() {
fs::create_dir_all(parent)?;
}
if file_name == ".agentcfg" {
if let Some(path) = agentcfg {
let contents = fs::read_to_string(path)?;
fs::write(file_path, contents)?;
continue;
}
}
let file_contents = file_contents
.replace("cargo-ai", agent_name)
.replace("cargo_ai", agent_name);
fs::write(file_path, file_contents)?;
}
Ok(())
}