Skip to main content

mai_cli/cli/
init_cmd.rs

1use crate::core::config::{ProjectInfo, ProjectManifest};
2use crate::error::Result;
3use std::path::Path;
4
5#[derive(Debug, clap::Args)]
6pub struct InitCommand;
7
8impl InitCommand {
9    pub fn run(&self) -> Result<()> {
10        let mai_toml = Path::new("mai.toml");
11        if mai_toml.exists() {
12            println!("mai.toml already exists");
13            return Ok(());
14        }
15
16        let manifest = ProjectManifest {
17            project: ProjectInfo {
18                name: "my-project".to_string(),
19                description: Some("My MAI project".to_string()),
20                version: Some("0.1.0".to_string()),
21            },
22            dependencies: Vec::new(),
23        };
24
25        manifest.save(mai_toml)?;
26        println!("✓ Created mai.toml");
27        println!("\nExample dependency format:");
28        println!(
29            r#"
30[project]
31name = "my-project"
32
33[[dependencies]]
34tool = "qwen"
35name = "aif"
36type = "skill"
37version = "^1.0.0"
38
39[[dependencies]]
40tool = "qwen"
41name = "pdf"
42type = "command"
43version = "latest"
44"#
45        );
46        Ok(())
47    }
48}