mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-09-02 05:59:15 +00:00
64 lines
3.4 KiB
C#
64 lines
3.4 KiB
C#
using AIStudio.Settings.DataModel;
|
|
|
|
namespace AIStudio.Tools.PluginSystem.Assistants;
|
|
|
|
/// <summary>
|
|
/// Represents the resolved security state for an assistant plugin.
|
|
/// The state intentionally separates two axes:
|
|
/// 1. The audit risk classification, such as Safe, Concerning, or Dangerous.
|
|
/// 2. The availability state imposed by local settings, such as Blocked, Audit Required, or Changed.
|
|
/// This keeps the semantic audit outcome stable even when settings allow or deny usage independently.
|
|
/// </summary>
|
|
public sealed class PluginAssistantSecurityState
|
|
{
|
|
public PluginAssistants Plugin { get; init; } = null!;
|
|
public PluginAssistantAudit? Audit { get; init; }
|
|
public DataAssistantPluginEnterpriseApproval? EnterpriseApproval { get; init; }
|
|
public DataAssistantPluginAudit Settings { get; init; } = new();
|
|
public PluginAssistantSecurityStatusSource Source { get; init; } = PluginAssistantSecurityStatusSource.NONE;
|
|
public string CurrentHash { get; init; } = string.Empty;
|
|
public bool HasAudit => this.Audit is not null;
|
|
public bool IsEnterpriseApproved => this.Source is PluginAssistantSecurityStatusSource.ENTERPRISE_APPROVAL;
|
|
|
|
/// <summary>
|
|
/// Whether your organization requires this assistant plugin to stay enabled.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// This asks the plugin factory instead of reading the approval, because an approval alone does
|
|
/// not activate anything: it is matched by hash, so it also covers a copy of the plugin your
|
|
/// organization never rolled out. The factory is the one place which knows both.
|
|
/// </remarks>
|
|
public bool IsActivationEnforcedByOrganization => PluginFactory.IsAssistantActivationEnforced(this.Plugin.Id);
|
|
|
|
/// <summary>
|
|
/// Whether your organization enabled this assistant plugin for you, leaving you free to switch it
|
|
/// off again.
|
|
/// </summary>
|
|
public bool IsActivatedByOrganizationDefault => PluginFactory.IsAssistantActivationOrganizationDefault(this.Plugin.Id);
|
|
public bool HashMatches { get; init; }
|
|
public bool HasHashMismatch { get; init; }
|
|
public bool IsBelowMinimum { get; init; }
|
|
public bool MeetsMinimumLevel { get; init; }
|
|
public bool RequiresAudit { get; init; }
|
|
public bool IsBlocked { get; init; }
|
|
public bool CanOverride { get; init; }
|
|
public bool CanActivatePlugin { get; init; }
|
|
public bool CanStartAssistant { get; init; }
|
|
public string AuditLabel { get; init; } = string.Empty;
|
|
public Color AuditColor { get; init; } = Color.Info;
|
|
public string AuditIcon { get; init; } = MudBlazor.Icons.Material.Filled.HelpOutline;
|
|
public string AvailabilityLabel { get; init; } = string.Empty;
|
|
public Color AvailabilityColor { get; init; } = Color.Info;
|
|
public string AvailabilityIcon { get; init; } = MudBlazor.Icons.Material.Filled.Lock;
|
|
public string StatusLabel { get; init; } = string.Empty;
|
|
public string SourceLabel { get; init; } = string.Empty;
|
|
public Color SourceColor { get; init; } = Color.Info;
|
|
public string SourceIcon { get; init; } = MudBlazor.Icons.Material.Filled.Info;
|
|
public string Headline { get; init; } = string.Empty;
|
|
public string Description { get; init; } = string.Empty;
|
|
public Color StatusColor { get; init; } = Color.Info;
|
|
public string StatusIcon { get; init; } = MudBlazor.Icons.Material.Filled.Lock;
|
|
public string ActionLabel { get; init; } = string.Empty;
|
|
public string BadgeIcon { get; init; } = MudBlazor.Icons.Material.Outlined.Shield;
|
|
}
|