skillnet 0.4.0

Reconcile and manage local AI skill mirrors; calibration data for the multi-phase-plan skill.
Documentation
use camino::Utf8PathBuf;

#[derive(Debug, Clone)]
pub(crate) struct SkillEntry {
    pub(crate) name: String,
    pub(crate) qualified_name: String,
    pub(crate) scope: String,
    pub(crate) project: Option<String>,
    pub(crate) category: Option<String>,
    pub(crate) status: String,
    pub(crate) tags: Vec<String>,
    pub(crate) related_skills: Vec<String>,
    pub(crate) collision_note: Option<String>,
    pub(crate) description: String,
    pub(crate) path: Utf8PathBuf,
    pub(crate) line_count: usize,
}

#[derive(Debug, Default)]
pub(crate) struct Frontmatter {
    pub(crate) name: Option<String>,
    pub(crate) description: Option<String>,
}

impl SkillEntry {
    pub(super) fn matches(&self, query: &str) -> bool {
        let fields = [
            self.name.as_str(),
            self.qualified_name.as_str(),
            self.project.as_deref().unwrap_or_default(),
            self.category.as_deref().unwrap_or_default(),
            self.status.as_str(),
            self.description.as_str(),
        ];
        fields
            .iter()
            .any(|field| field.to_lowercase().contains(query))
            || self
                .tags
                .iter()
                .any(|tag| tag.to_lowercase().contains(query))
    }
}