skill.rs

 1use anyhow::{bail, Result};
 2use std::path::PathBuf;
 3
 4const SKILL_CONTENT: &str = include_str!("../../SKILL.md");
 5const SKILL_DIR: &str = "managing-tasks-with-td";
 6const SKILL_FILE: &str = "SKILL.md";
 7
 8fn default_skills_dir() -> Result<PathBuf> {
 9    if let Ok(xdg) = std::env::var("XDG_CONFIG_HOME") {
10        Ok(PathBuf::from(xdg).join("agents/skills"))
11    } else if let Ok(home) = std::env::var("HOME") {
12        Ok(PathBuf::from(home).join(".config/agents/skills"))
13    } else {
14        bail!("neither $XDG_CONFIG_HOME nor $HOME is set");
15    }
16}
17
18pub fn run(dir: Option<&str>) -> Result<()> {
19    let skills_dir = match dir {
20        Some(d) => PathBuf::from(d),
21        None => default_skills_dir()?,
22    };
23
24    let dest_dir = skills_dir.join(SKILL_DIR);
25    std::fs::create_dir_all(&dest_dir)?;
26
27    let dest = dest_dir.join(SKILL_FILE);
28    std::fs::write(&dest, SKILL_CONTENT)?;
29
30    let c = crate::color::stderr_theme();
31    eprintln!("{}info:{} wrote {}", c.blue, c.reset, dest.display());
32
33    Ok(())
34}