using Microsoft.Extensions.Configuration; namespace MAF1.Plugins; /// Plugins:Directory 相对网页 exe,不是源码树里的 plugins/ 文件夹。 public sealed class PluginOptions { public string Directory { get; set; } = "plugins"; public int DefaultTimeoutSeconds { get; set; } = 180; public string ResolveRoot() { if (Path.IsPathRooted(Directory)) { return Directory; } return Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, Directory)); } public static PluginOptions Load(IConfiguration config) => config.GetSection("Plugins").Get() ?? new PluginOptions(); } /// 扫描成功后的一个插件:目录 + 已解析的 plugin.json。 public sealed class LoadedPlugin { public required string FolderName { get; init; } public required string FolderPath { get; init; } public required PluginContract.PluginManifest Manifest { get; init; } } /// 扫描问题,前端左侧「扫描说明」会显示。error 的插件不会进画布。 public sealed class CatalogIssue { public string Level { get; init; } = "error"; public string Source { get; init; } = ""; public string Message { get; init; } = ""; }