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>
This commit is contained in:
32
src/Recordingtest.SutProber/PluginScanner.cs
Normal file
32
src/Recordingtest.SutProber/PluginScanner.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user