use clap::Args;
use std::path::PathBuf;
const SKILL_TEMPLATE: &str = r#"---
name: {{name}}
description: {{description}}
license: MIT
metadata:
triggers: "{{triggers}}"
tags: "{{tags}}"
---
# {{name}}
## Overview
{{description}}
## Usage
<!-- Add usage instructions here -->
## Examples
<!-- Add examples here -->
"#;
#[derive(Args)]
pub struct InitArgs {
name: String,
#[arg(short, long, default_value = "A new skill")]
description: String,
#[arg(short, long, default_value = "")]
triggers: String,
#[arg(long, default_value = "")]
tags: String,
#[arg(short, long, default_value = ".")]
output: PathBuf,
#[arg(short, long)]
force: bool,
}
pub async fn init(args: InitArgs) -> anyhow::Result<()> {
let skill_dir = args.output.join(&args.name);
if skill_dir.exists() && !args.force {
anyhow::bail!(
"Directory {:?} already exists. Use --force to overwrite.",
skill_dir
);
}
std::fs::create_dir_all(&skill_dir)?;
let content = SKILL_TEMPLATE
.replace("{{name}}", &args.name)
.replace("{{description}}", &args.description)
.replace("{{triggers}}", &args.triggers)
.replace("{{tags}}", &args.tags);
let skill_file = skill_dir.join("SKILL.md");
std::fs::write(&skill_file, content)?;
println!("✓ Created skill at {:?}", skill_file);
std::fs::create_dir_all(skill_dir.join("references"))?;
std::fs::create_dir_all(skill_dir.join("scripts"))?;
println!("✓ Created references/ and scripts/ directories");
println!("\nNext steps:");
println!(" 1. Edit {:?} to add instructions", skill_file);
println!(" 2. Run `skm validate {:?}` to check the skill", skill_dir);
Ok(())
}