loadSkillsFromDir function

Future<List<SkillDefinition>> loadSkillsFromDir(
  1. String dirPath, {
  2. SkillSource source = SkillSource.user,
})

Load skills from a directory. Recursively finds SKILL.md files and parses their frontmatter.

Implementation

Future<List<SkillDefinition>> loadSkillsFromDir(
  String dirPath, {
  SkillSource source = SkillSource.user,
}) async {
  final dir = Directory(dirPath);
  if (!await dir.exists()) return const [];

  final skills = <SkillDefinition>[];

  await for (final entity in dir.list(recursive: true)) {
    if (entity is! File) continue;
    final filename = entity.path.split('/').last;
    if (filename != 'SKILL.md') continue;

    try {
      final content = await entity.readAsString();
      final skill = _parseSkillFile(content, entity.path, source);
      if (skill != null) skills.add(skill);
    } catch (_) {
      // Skip unreadable files
    }
  }

  return skills;
}