Load a single skill from directory. Args: skill_dir: Path to skill directory Returns: SkillSchema object if successful, None otherwise
(self, skill_dir: Path)
| 103 | return skill_md.exists() and skill_md.is_file() |
| 104 | |
| 105 | def _load_single_skill(self, skill_dir: Path) -> Optional[SkillSchema]: |
| 106 | """ |
| 107 | Load a single skill from directory. |
| 108 | |
| 109 | Args: |
| 110 | skill_dir: Path to skill directory |
| 111 | |
| 112 | Returns: |
| 113 | SkillSchema object if successful, None otherwise |
| 114 | """ |
| 115 | try: |
| 116 | skill_schema = self.parser.parse_skill_directory(skill_dir) |
| 117 | |
| 118 | if not skill_schema: |
| 119 | logger.error(f'Failed to parse skill: {skill_dir}') |
| 120 | return None |
| 121 | |
| 122 | validation_errors = self.parser.validate_skill_schema(skill_schema) |
| 123 | if validation_errors: |
| 124 | logger.warning(f'Skill validation warnings ({skill_dir}):') |
| 125 | for error in validation_errors: |
| 126 | logger.warning(f' - {error}') |
| 127 | |
| 128 | return skill_schema |
| 129 | |
| 130 | except Exception as e: |
| 131 | logger.error(f'Error loading skill ({skill_dir}): {str(e)}') |
| 132 | return None |
| 133 | |
| 134 | def _scan_and_load_skills(self, base_path: Path) -> Dict[str, SkillSchema]: |
| 135 | """ |
no test coverage detected