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}