()
| 53 | |
| 54 | |
| 55 | def discover_plugins() -> list[Path]: |
| 56 | return sorted( |
| 57 | p |
| 58 | for p in PLUGINS_DIR.iterdir() |
| 59 | if p.is_dir() and (p / ".claude-plugin" / "plugin.json").exists() |
| 60 | ) |
| 61 | |
| 62 | |
| 63 | def row_from_result(name: str, result: PluginEvalResult, duration_ms: int) -> PluginRow: |