loadDirectorySkillsFromRoot function
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);
}