use serde::Deserialize;
use std::path::PathBuf;
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize, Default)]
pub enum SkillSource {
#[default]
Project,
Parent,
UserGlobal,
Shared,
}
impl std::fmt::Display for SkillSource {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
SkillSource::Project => write!(f, "project"),
SkillSource::Parent => write!(f, "parent"),
SkillSource::UserGlobal => write!(f, "user"),
SkillSource::Shared => write!(f, "shared"),
}
}
}
#[derive(Debug, Clone, Deserialize)]
pub struct SkillFrontmatter {
pub name: String,
pub description: String,
#[serde(default)]
pub triggers: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct Skill {
pub name: String,
pub description: String,
pub triggers: Vec<String>,
pub body: String,
pub source_path: PathBuf,
pub source: SkillSource,
}
#[derive(Debug, Clone)]
pub struct SkillIndex {
pub name: String,
pub description: String,
pub triggers: Vec<String>,
pub estimated_tokens: usize,
pub source: SkillSource,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SkillDisclosure {
Level0,
Level1,
Level2,
}