diff --git a/app/MindWork AI Studio/Components/AssistantBlock.razor b/app/MindWork AI Studio/Components/AssistantBlock.razor index 8af43e72..973af871 100644 --- a/app/MindWork AI Studio/Components/AssistantBlock.razor +++ b/app/MindWork AI Studio/Components/AssistantBlock.razor @@ -22,15 +22,23 @@ - - - @this.ButtonText - - @if (this.HasSettingsPanel) + + + + @this.ButtonText + + @if (this.HasSettingsPanel) + { + + } + + @if (this.SecurityBadge is not null) { - + + @this.SecurityBadge + } - + } diff --git a/app/MindWork AI Studio/Components/AssistantBlock.razor.cs b/app/MindWork AI Studio/Components/AssistantBlock.razor.cs index 09f0d73d..dde37267 100644 --- a/app/MindWork AI Studio/Components/AssistantBlock.razor.cs +++ b/app/MindWork AI Studio/Components/AssistantBlock.razor.cs @@ -1,8 +1,6 @@ -using AIStudio.Settings.DataModel; using AIStudio.Dialogs.Settings; - +using AIStudio.Settings.DataModel; using Microsoft.AspNetCore.Components; - using DialogOptions = AIStudio.Dialogs.DialogOptions; namespace AIStudio.Components; @@ -24,6 +22,12 @@ public partial class AssistantBlock : MSGComponentBase where TSetting [Parameter] public string Link { get; set; } = string.Empty; + [Parameter] + public bool Disabled { get; set; } + + [Parameter] + public RenderFragment? SecurityBadge { get; set; } + [Parameter] public Tools.Components Component { get; set; } = Tools.Components.NONE; diff --git a/app/MindWork AI Studio/Pages/Assistants.razor b/app/MindWork AI Studio/Pages/Assistants.razor index e44f4694..512be94a 100644 --- a/app/MindWork AI Studio/Pages/Assistants.razor +++ b/app/MindWork AI Studio/Pages/Assistants.razor @@ -1,9 +1,7 @@ +@attribute [Route(Routes.ASSISTANTS)] @using AIStudio.Dialogs.Settings @using AIStudio.Settings.DataModel -@using AIStudio.Tools.PluginSystem @using AIStudio.Tools.PluginSystem.Assistants -@using ReverseMarkdown.Converters -@attribute [Route(Routes.ASSISTANTS)] @inherits MSGComponentBase
@@ -41,11 +39,17 @@ @foreach (var assistantPlugin in this.AssistantPlugins) { + var securityState = PluginAssistantSecurityResolver.Resolve(this.SettingsManager, assistantPlugin); + Disabled="@(!securityState.CanStartAssistant)" + Link="@($"{Routes.ASSISTANT_DYNAMIC}?assistantId={assistantPlugin.Id}")"> + + + + } } diff --git a/app/MindWork AI Studio/Pages/Assistants.razor.cs b/app/MindWork AI Studio/Pages/Assistants.razor.cs index 6bf93226..b2f7ddd4 100644 --- a/app/MindWork AI Studio/Pages/Assistants.razor.cs +++ b/app/MindWork AI Studio/Pages/Assistants.razor.cs @@ -1,15 +1,28 @@ using AIStudio.Components; using AIStudio.Tools.PluginSystem; using AIStudio.Tools.PluginSystem.Assistants; -using System.Collections.Generic; -using System.Linq; +using Microsoft.AspNetCore.Components; namespace AIStudio.Pages; public partial class Assistants : MSGComponentBase { + protected override async Task OnInitializedAsync() + { + this.ApplyFilters([], [ Event.CONFIGURATION_CHANGED, Event.PLUGINS_RELOADED ]); + await base.OnInitializedAsync(); + } + private IReadOnlyCollection AssistantPlugins => PluginFactory.RunningPlugins.OfType() .Where(plugin => this.SettingsManager.IsPluginEnabled(plugin)) .ToList(); + + protected override Task ProcessIncomingMessage(ComponentBase? sendingComponent, Event triggeredEvent, T? data) where T : default + { + if (triggeredEvent is Event.CONFIGURATION_CHANGED or Event.PLUGINS_RELOADED) + return this.InvokeAsync(this.StateHasChanged); + + return Task.CompletedTask; + } }