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 async fn write_skill_raw(&self, name: &str, raw: &str) -> anyhow::Result<SkillEntry> {
self.skill_manager.write_skill_raw(name, raw).await
}
pub async fn import_skill_zip(
&self,
name_hint: &str,
bytes: &[u8],
) -> anyhow::Result<SkillEntry> {
self.skill_manager.import_skill_zip(name_hint, bytes).await
}
pub async fn import_skill_text(
&self,
content: &str,
name_hint: Option<&str>,
) -> anyhow::Result<SkillEntry> {
self.skill_manager
.import_skill_text(content, name_hint)
.await
}
pub fn skill_manager(&self) -> &Arc<SkillManager> {
&self.skill_manager
}
}