oxios_kernel/kernel_handle/
extension_api.rs1use crate::host_tools::HostToolStatus;
4use crate::host_tools::HostToolValidator;
5use crate::program::{HostRequirementsCheck, InstallSource, Program, ProgramManager, ProgramMeta};
6use crate::skill::{Skill, SkillMeta, SkillStore};
7use std::sync::Arc;
8
9pub struct ExtensionApi {
11 pub(crate) program_manager: Arc<ProgramManager>,
12 pub(crate) skill_store: Arc<SkillStore>,
13 pub(crate) host_tool_validator: Arc<HostToolValidator>,
14}
15
16impl ExtensionApi {
17 pub fn new(
19 program_manager: Arc<ProgramManager>,
20 skill_store: Arc<SkillStore>,
21 host_tool_validator: Arc<HostToolValidator>,
22 ) -> Self {
23 Self {
24 program_manager,
25 skill_store,
26 host_tool_validator,
27 }
28 }
29 pub async fn list_programs(&self) -> Vec<Program> {
31 self.program_manager.list_programs().await
32 }
33
34 pub async fn get_program(&self, name: &str) -> Option<Program> {
36 self.program_manager.get_program(name).await
37 }
38
39 pub async fn install_program(&self, source: InstallSource) -> anyhow::Result<Program> {
41 self.program_manager.install_from(source).await
42 }
43
44 pub async fn uninstall_program(&self, name: &str) -> anyhow::Result<()> {
46 self.program_manager.uninstall(name).await
47 }
48
49 pub async fn enable_program(&self, name: &str) -> anyhow::Result<()> {
51 self.program_manager.set_enabled(name, true).await
52 }
53
54 pub async fn disable_program(&self, name: &str) -> anyhow::Result<()> {
56 self.program_manager.set_enabled(name, false).await
57 }
58
59 pub async fn check_host_requirements(
61 &self,
62 name: &str,
63 ) -> anyhow::Result<HostRequirementsCheck> {
64 self.program_manager.check_host_requirements(name).await
65 }
66
67 pub async fn list_skills(&self) -> anyhow::Result<Vec<SkillMeta>> {
69 self.skill_store.list_skills().await
70 }
71
72 pub async fn load_skill(&self, name: &str) -> anyhow::Result<Option<Skill>> {
74 self.skill_store.load_skill(name).await
75 }
76
77 pub async fn create_skill(
79 &self,
80 name: &str,
81 description: &str,
82 content: &str,
83 ) -> anyhow::Result<()> {
84 self.skill_store
85 .create_skill(name, description, content)
86 .await
87 }
88
89 pub async fn delete_skill(&self, name: &str) -> anyhow::Result<()> {
91 self.skill_store.delete_skill(name).await
92 }
93
94 pub fn program_manager(&self) -> &Arc<ProgramManager> {
96 &self.program_manager
97 }
98
99 pub fn check_host_tools(&self) -> HostToolStatus {
101 self.host_tool_validator.full_check()
102 }
103}