use crate::host_tools::HostToolStatus;
use crate::host_tools::HostToolValidator;
use crate::program::{HostRequirementsCheck, InstallSource, Program, ProgramManager};
use crate::skill::{Skill, SkillMeta, SkillStore};
use std::sync::Arc;
pub struct ExtensionApi {
pub(crate) program_manager: Arc<ProgramManager>,
pub(crate) skill_store: Arc<SkillStore>,
pub(crate) host_tool_validator: Arc<HostToolValidator>,
}
impl ExtensionApi {
pub fn new(
program_manager: Arc<ProgramManager>,
skill_store: Arc<SkillStore>,
host_tool_validator: Arc<HostToolValidator>,
) -> Self {
Self {
program_manager,
skill_store,
host_tool_validator,
}
}
pub async fn list_programs(&self) -> Vec<Program> {
self.program_manager.list_programs().await
}
pub async fn get_program(&self, name: &str) -> Option<Program> {
self.program_manager.get_program(name).await
}
pub async fn install_program(&self, source: InstallSource) -> anyhow::Result<Program> {
self.program_manager.install_from(source).await
}
pub async fn uninstall_program(&self, name: &str) -> anyhow::Result<()> {
self.program_manager.uninstall(name).await
}
pub async fn enable_program(&self, name: &str) -> anyhow::Result<()> {
self.program_manager.set_enabled(name, true).await
}
pub async fn disable_program(&self, name: &str) -> anyhow::Result<()> {
self.program_manager.set_enabled(name, false).await
}
pub async fn check_host_requirements(
&self,
name: &str,
) -> anyhow::Result<HostRequirementsCheck> {
self.program_manager.check_host_requirements(name).await
}
pub async fn list_skills(&self) -> anyhow::Result<Vec<SkillMeta>> {
self.skill_store.list_skills().await
}
pub async fn load_skill(&self, name: &str) -> anyhow::Result<Option<Skill>> {
self.skill_store.load_skill(name).await
}
pub async fn create_skill(
&self,
name: &str,
description: &str,
content: &str,
) -> anyhow::Result<()> {
self.skill_store
.create_skill(name, description, content)
.await
}
pub async fn delete_skill(&self, name: &str) -> anyhow::Result<()> {
self.skill_store.delete_skill(name).await
}
pub fn program_manager(&self) -> &Arc<ProgramManager> {
&self.program_manager
}
pub fn check_host_tools(&self) -> HostToolStatus {
self.host_tool_validator.full_check()
}
}