namespace AxCopilot.Services.Agent; /// /// AX Agent permission mode constants and normalization helpers. /// Uses AX-native permission vocabulary only. /// public static class PermissionModeCatalog { public const string Ask = "Ask"; public const string Plan = "Plan"; public const string Auto = "Auto"; public const string Deny = "Deny"; public static readonly IReadOnlyList UserSelectableModes = new[] { Ask, Plan, Auto, Deny, }; /// /// Normalize global permission mode. /// Supported values: ask/plan/auto/deny (case-insensitive). /// public static string NormalizeGlobalMode(string? value) { if (string.IsNullOrWhiteSpace(value)) return Ask; return value.Trim().ToLowerInvariant() switch { "ask" => Ask, "plan" => Plan, "auto" => Auto, "deny" => Deny, _ => Ask, }; } /// /// Normalize tool override permission. /// Tool override is constrained to ask/auto/deny. /// public static string NormalizeToolOverride(string? value) { var mode = NormalizeGlobalMode(value); return mode switch { Auto => "auto", Deny => "deny", _ => "ask", }; } public static bool IsAuto(string? mode) => string.Equals(NormalizeGlobalMode(mode), Auto, StringComparison.OrdinalIgnoreCase); public static bool IsDeny(string? mode) => string.Equals(NormalizeGlobalMode(mode), Deny, StringComparison.OrdinalIgnoreCase); public static bool RequiresUserApproval(string? mode) { var normalized = NormalizeGlobalMode(mode); return !string.Equals(normalized, Auto, StringComparison.OrdinalIgnoreCase) && !string.Equals(normalized, Deny, StringComparison.OrdinalIgnoreCase); } }