validatePluginContents function
Validate the content files inside a plugin directory.
Implementation
Future<List<ValidationResult>> validatePluginContents(String pluginDir) async {
final results = <ValidationResult>[];
final dirs = <PluginFileType, String>{
PluginFileType.skill: path.join(pluginDir, 'skills'),
PluginFileType.agent: path.join(pluginDir, 'agents'),
PluginFileType.command: path.join(pluginDir, 'commands'),
};
for (final entry in dirs.entries) {
final fileType = entry.key;
final dir = entry.value;
final files = await _collectMarkdown(dir, fileType == PluginFileType.skill);
for (final filePath in files) {
String content;
try {
content = await File(filePath).readAsString();
} on FileSystemException catch (e) {
if (e.osError?.errorCode == 2) continue; // ENOENT expected for skills
results.add(
ValidationResult(
success: false,
errors: [
ValidationError(
path: 'file',
message: 'Failed to read: ${e.message}',
),
],
warnings: const [],
filePath: filePath,
fileType: fileType,
),
);
continue;
}
final r = validateComponentFile(filePath, content, fileType);
if (r.errors.isNotEmpty || r.warnings.isNotEmpty) {
results.add(r);
}
}
}
final hooksResult = await validateHooksJson(
path.join(pluginDir, 'hooks', 'hooks.json'),
);
if (hooksResult.errors.isNotEmpty || hooksResult.warnings.isNotEmpty) {
results.add(hooksResult);
}
return results;
}