use crate::skill::{RequirementsCheck, Skill, SkillEntry, SkillManager, SkillMeta};
use std::sync::Arc;
pub struct ExtensionApi {
pub(crate) skill_manager: Arc<SkillManager>,
}
impl ExtensionApi {
pub fn new(skill_manager: Arc<SkillManager>) -> Self {
Self { skill_manager }
}
pub async fn list_skills_entries(&self) -> Vec<SkillEntry> {
self.skill_manager.list_skills().await
}
pub async fn get_skill_entry(&self, name: &str) -> Option<SkillEntry> {
self.skill_manager.get_skill(name).await
}
pub async fn enable_skill(&self, name: &str) -> anyhow::Result<()> {
self.skill_manager.set_enabled(name, true).await
}
pub async fn disable_skill(&self, name: &str) -> anyhow::Result<()> {
self.skill_manager.set_enabled(name, false).await
}
pub async fn check_skill_requirements(&self, name: &str) -> Option<RequirementsCheck> {
self.skill_manager
.get_skill(name)
.await
.map(|e| e.eligibility)
}
pub async fn list_skills(&self) -> anyhow::Result<Vec<SkillMeta>> {
Ok(self.skill_manager.list_skills_meta().await)
}
pub async fn load_skill(&self, name: &str) -> anyhow::Result<Option<Skill>> {
self.skill_manager.load_skill(name).await
}
pub async fn create_skill(
&self,
name: &str,
description: &str,
content: &str,
) -> anyhow::Result<()> {
self.skill_manager
.create_skill(name, description, content)
.await
}
pub async fn delete_skill(&self, name: &str) -> anyhow::Result<()> {
self.skill_manager.delete_skill(name).await
}
pub fn skill_manager(&self) -> &Arc<SkillManager> {
&self.skill_manager
}
}