Files
recordingtest/src/Recordingtest.SutProber/PluginScanner.cs
minsung 7ffbb1f757 Set up AI dev environment for recordingtest (#2)
- CLAUDE.md with collaboration rules and Planner/Generator/Evaluator cycle
- .claude/ agents, commands, skills, hooks per Claude Code conventions
- Sprint Contracts for sut-prober, normalizer, recorder, player, diff-reporter
- SUT catalog (EG-BIM Modeler, 187 plugins) and .gitignore excluding SUT tree
- PROGRESS.md / PLAN.md as shared agent handoff state
- Solution scaffold targeting sut-prober PoC

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 13:57:20 +09:00

33 lines
1.2 KiB
C#

namespace Recordingtest.SutProber;
public sealed record PluginEntry(string Name, string Path, IReadOnlyList<string> Dlls, long SizeBytes);
public static class PluginScanner
{
public static List<PluginEntry> Scan(string sutRoot)
{
var pluginRoot = System.IO.Path.Combine(sutRoot, "Plugins");
if (!Directory.Exists(pluginRoot)) return new();
var entries = new List<PluginEntry>();
foreach (var dir in Directory.EnumerateDirectories(pluginRoot).OrderBy(d => d, StringComparer.Ordinal))
{
var dlls = Directory.EnumerateFiles(dir, "*.dll", SearchOption.TopDirectoryOnly)
.Select(System.IO.Path.GetFileName)
.Where(n => n is not null)
.Select(n => n!)
.OrderBy(n => n, StringComparer.Ordinal)
.ToList();
long size = 0;
foreach (var f in Directory.EnumerateFiles(dir, "*", SearchOption.AllDirectories))
size += new FileInfo(f).Length;
var name = System.IO.Path.GetFileName(dir);
var relPath = System.IO.Path.GetRelativePath(".", dir).Replace('\\', '/');
entries.Add(new PluginEntry(name, relPath, dlls, size));
}
return entries;
}
}