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);
}
}