loadDirectorySkillsFromRoot function

Future<DirectorySkillLoadResult> loadDirectorySkillsFromRoot(
  1. String rootDirectoryPath, {
  2. int maxDepth = 6,
})

Implementation

Future<DirectorySkillLoadResult> loadDirectorySkillsFromRoot(
  String rootDirectoryPath, {
  int maxDepth = 6,
}) async {
  if (!fsDirectoryExistsSync(rootDirectoryPath)) {
    return DirectorySkillLoadResult(
      skills: [],
      errors: [
        DirectorySkillLoadError(
          path: rootDirectoryPath,
          message: 'skill directory does not exist',
        ),
      ],
    );
  }

  final skills = <DirectorySkillMetadata>[];
  final errors = <DirectorySkillLoadError>[];
  final seenPaths = <String>{};

  final files = await fsFindFiles(
    rootDirectoryPath,
    'SKILL.md',
    maxDepth: maxDepth,
  );
  for (final filePath in files) {
    final normalized = _normalizePath(filePath);
    if (!seenPaths.add(normalized)) continue;

    try {
      final metadata = await _parseDirectorySkillFile(filePath);
      skills.add(metadata);
    } catch (e) {
      errors.add(
        DirectorySkillLoadError(path: filePath, message: e.toString()),
      );
    }
  }

  skills.sort((a, b) => a.name.compareTo(b.name));
  return DirectorySkillLoadResult(skills: skills, errors: errors);
}