oxios_kernel/kernel_handle/
extension_api.rs1use crate::skill::{RequirementsCheck, Skill, SkillEntry, SkillManager, SkillMeta};
7use std::sync::Arc;
8
9pub struct ExtensionApi {
11 pub(crate) skill_manager: Arc<SkillManager>,
13}
14
15impl ExtensionApi {
16 pub fn new(skill_manager: Arc<SkillManager>) -> Self {
18 Self { skill_manager }
19 }
20
21 pub async fn list_skills_entries(&self) -> Vec<SkillEntry> {
25 self.skill_manager.list_skills().await
26 }
27
28 pub async fn get_skill_entry(&self, name: &str) -> Option<SkillEntry> {
30 self.skill_manager.get_skill(name).await
31 }
32
33 pub async fn enable_skill(&self, name: &str) -> anyhow::Result<()> {
35 self.skill_manager.set_enabled(name, true).await
36 }
37
38 pub async fn disable_skill(&self, name: &str) -> anyhow::Result<()> {
40 self.skill_manager.set_enabled(name, false).await
41 }
42
43 pub async fn check_skill_requirements(&self, name: &str) -> Option<RequirementsCheck> {
45 self.skill_manager
46 .get_skill(name)
47 .await
48 .map(|e| e.eligibility)
49 }
50
51 pub async fn list_skills(&self) -> anyhow::Result<Vec<SkillMeta>> {
53 Ok(self.skill_manager.list_skills_meta().await)
54 }
55
56 pub async fn load_skill(&self, name: &str) -> anyhow::Result<Option<Skill>> {
58 self.skill_manager.load_skill(name).await
59 }
60
61 pub async fn create_skill(
63 &self,
64 name: &str,
65 description: &str,
66 content: &str,
67 ) -> anyhow::Result<()> {
68 self.skill_manager
69 .create_skill(name, description, content)
70 .await
71 }
72
73 pub async fn delete_skill(&self, name: &str) -> anyhow::Result<()> {
75 self.skill_manager.delete_skill(name).await
76 }
77
78 pub fn skill_manager(&self) -> &Arc<SkillManager> {
80 &self.skill_manager
81 }
82}