@@ -85,39 +85,41 @@ def init_skill_check_list(
8585 return init_skill_check_list
8686
8787
88- def load_skill_from_directory (skill_directory : Path ) -> Skill :
88+ def load_skill_from_directory (skill_directory : Path ) -> Optional [ Skill ] :
8989 logger .info (f"Load skill from { skill_directory } " )
9090 skill_readme = skill_directory / "SKILL.md"
9191 if not skill_readme .exists ():
9292 logger .error (f"Skill '{ skill_directory } ' has no SKILL.md file." )
93- raise ValueError (f"Skill '{ skill_directory } ' has no SKILL.md file" )
93+ return None
94+
95+ try :
96+ skill = frontmatter .load (str (skill_readme ))
9497
95- skill = frontmatter .load (str (skill_readme ))
98+ skill_name = skill .get ("name" , "" )
99+ skill_description = skill .get ("description" , "" )
100+ checklist = skill .get ("checklist" , [])
96101
97- skill_name = skill .get ("name" , "" )
98- skill_description = skill .get ("description" , "" )
99- checklist = skill .get ("checklist" , [])
102+ if not skill_name or not skill_description :
103+ logger .error (
104+ f"Skill { skill_readme } is missing name or description. Please check the SKILL.md file."
105+ )
106+ return None
100107
101- if not skill_name or not skill_description :
102- logger .error (
103- f"Skill { skill_readme } is missing name or description. Please check the SKILL.md file."
108+ logger .info (
109+ f"Successfully loaded skill { skill_name } locally from { skill_readme } , name={ skill_name } , description={ skill_description } "
104110 )
105- raise ValueError (
106- f"Skill { skill_readme } is missing name or description. Please check the SKILL.md file."
111+ if checklist :
112+ logger .info (f"Skill { skill_name } checklist: { checklist } " )
113+
114+ return Skill (
115+ name = skill_name , # type: ignore
116+ description = skill_description , # type: ignore
117+ path = str (skill_directory ),
118+ checklist = checklist ,
107119 )
108-
109- logger .info (
110- f"Successfully loaded skill { skill_name } locally from { skill_readme } , name={ skill_name } , description={ skill_description } "
111- )
112- if checklist :
113- logger .info (f"Skill { skill_name } checklist: { checklist } " )
114-
115- return Skill (
116- name = skill_name , # type: ignore
117- description = skill_description , # type: ignore
118- path = str (skill_directory ),
119- checklist = checklist ,
120- )
120+ except Exception as e :
121+ logger .error (f"Failed to load skill from { skill_directory } : { e } " )
122+ return None
121123
122124
123125def load_skills_from_directory (skills_directory : Path ) -> list [Skill ]:
@@ -126,7 +128,8 @@ def load_skills_from_directory(skills_directory: Path) -> list[Skill]:
126128 for skill_directory in skills_directory .iterdir ():
127129 if skill_directory .is_dir ():
128130 skill = load_skill_from_directory (skill_directory )
129- skills .append (skill )
131+ if skill is not None :
132+ skills .append (skill )
130133 return skills
131134
132135
0 commit comments