use crate::core::plugins::PluginRegistry;
use anyhow::Result;
use std::path::Path;
pub fn execute(project_root: &Path) -> Result<()> {
let mut registry = PluginRegistry::new();
let reports = registry.discover(project_root);
if reports.is_empty() {
println!("No plugins discovered.");
println!("Searched in:");
println!(" - ./plugins");
println!(" - ./.morph-cli/plugins");
println!(" - ~/.morph-cli/plugins");
return Ok(());
}
println!("Discovered Plugins:\n");
for report in &reports {
let status = match report.status {
crate::core::plugins::DiscoveryStatus::Valid => "✓",
crate::core::plugins::DiscoveryStatus::Invalid => "✗",
crate::core::plugins::DiscoveryStatus::NotFound => "?",
};
println!(" {} {} (v{})", status, report.name, report.version);
println!(" Path: {}", report.path.display());
if !report.recipes.is_empty() {
println!(" Recipes: {}", report.recipes.join(", "));
}
if let Some(err) = &report.error {
println!(" Error: {}", err);
}
println!();
}
let summary = registry.summary();
print!("{}", summary);
Ok(())
}