mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-08-24 20:52:11 +00:00
moving plugin action buttons into a button group and wired generation logic to an action button
This commit is contained in:
parent
e30bb3d00f
commit
62b878284d
@ -1,5 +1,6 @@
|
|||||||
@using AIStudio.Tools.PluginSystem
|
@using AIStudio.Tools.PluginSystem
|
||||||
@using AIStudio.Tools.PluginSystem.Assistants
|
@using AIStudio.Tools.PluginSystem.Assistants
|
||||||
|
@using AIStudio.Tools.Services
|
||||||
@inherits MSGComponentBase
|
@inherits MSGComponentBase
|
||||||
@attribute [Route(Routes.PLUGINS)]
|
@attribute [Route(Routes.PLUGINS)]
|
||||||
|
|
||||||
@ -64,11 +65,11 @@
|
|||||||
</MudStack>
|
</MudStack>
|
||||||
</MudTd>
|
</MudTd>
|
||||||
<MudTd>
|
<MudTd>
|
||||||
<MudStack Row="true" Spacing="0" AlignItems="AlignItems.Center">
|
<MudStack Row="true" Spacing="0" AlignItems="AlignItems.Center">
|
||||||
@if (context.Type is PluginType.ASSISTANT)
|
@if (context.Type is PluginType.ASSISTANT)
|
||||||
{
|
{
|
||||||
var assistantPlugin = PluginFactory.RunningPlugins.OfType<PluginAssistants>().FirstOrDefault(x => x.Id == context.Id);
|
var assistantPlugin = PluginFactory.RunningPlugins.OfType<PluginAssistants>().FirstOrDefault(x => x.Id == context.Id);
|
||||||
<AssistantPluginSecurityCard Plugin="@assistantPlugin" Compact="@true" />
|
<AssistantPluginSecurityCard Plugin="@assistantPlugin" Compact="@true"/>
|
||||||
}
|
}
|
||||||
@if (context is { IsInternal: false, Type: not PluginType.CONFIGURATION })
|
@if (context is { IsInternal: false, Type: not PluginType.CONFIGURATION })
|
||||||
{
|
{
|
||||||
@ -79,37 +80,48 @@
|
|||||||
</MudTooltip>
|
</MudTooltip>
|
||||||
}
|
}
|
||||||
|
|
||||||
@if (context is { IsInternal: false } && !string.IsNullOrWhiteSpace(context.SourceURL))
|
<MudButtonGroup Class="ms-3">
|
||||||
{
|
@if (context is { IsInternal: false } && !string.IsNullOrWhiteSpace(context.SourceURL))
|
||||||
var sourceUrl = context.SourceURL;
|
|
||||||
var isSendingMail = IsSendingMail(sourceUrl);
|
|
||||||
if (isSendingMail)
|
|
||||||
{
|
{
|
||||||
<MudTooltip Text="@T("Send a mail")">
|
var sourceUrl = context.SourceURL;
|
||||||
<MudIconButton Icon="@Icons.Material.Filled.Email" Href="@sourceUrl" Target="_blank" Size="Size.Medium"/>
|
var isSendingMail = IsSendingMail(sourceUrl);
|
||||||
|
if (isSendingMail)
|
||||||
|
{
|
||||||
|
var isDefaultSupportContact = string.Equals(sourceUrl, AssistantPluginGenerationService.DEFAULT_SUPPORT_CONTACT, StringComparison.Ordinal);
|
||||||
|
<MudTooltip Text="@(isDefaultSupportContact ? string.Empty : T("Send a mail"))">
|
||||||
|
<MudIconButton Icon="@Icons.Material.Filled.Email" Href="@sourceUrl" Target="_blank" Size="Size.Medium" Disabled="@isDefaultSupportContact"/>
|
||||||
|
</MudTooltip>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var isDefaultSourceUrl = string.Equals(sourceUrl, AssistantPluginGenerationService.DEFAULT_SOURCE_URL, StringComparison.Ordinal);
|
||||||
|
<MudTooltip Text="@(isDefaultSourceUrl ? T("No source url available") : T("Open website"))">
|
||||||
|
<MudIconButton Icon="@Icons.Material.Filled.OpenInBrowser" Href="@sourceUrl" Target="_blank" Size="Size.Medium" Disabled="@isDefaultSourceUrl"/>
|
||||||
|
</MudTooltip>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@if (context is IAvailablePlugin editablePlugin && CanEditAssistantPlugin(editablePlugin))
|
||||||
|
{
|
||||||
|
<MudTooltip Text="@T("Edit assistant plugin")">
|
||||||
|
<MudIconButton Icon="@Icons.Material.Filled.Code" Size="Size.Medium" OnClick="@(() => this.OpenAssistantPluginEditorDialogAsync(editablePlugin))"/>
|
||||||
</MudTooltip>
|
</MudTooltip>
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
<MudTooltip Text="@T("Open website")">
|
|
||||||
<MudIconButton Icon="@Icons.Material.Filled.OpenInBrowser" Href="@sourceUrl" Target="_blank" Size="Size.Medium"/>
|
|
||||||
</MudTooltip>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@if (context is IAvailablePlugin editablePlugin && CanEditAssistantPlugin(editablePlugin))
|
|
||||||
{
|
|
||||||
<MudTooltip Text="@T("Edit assistant plugin")">
|
|
||||||
<MudIconButton Icon="@Icons.Material.Filled.EditNote" Size="Size.Medium" OnClick="@(() => this.OpenAssistantPluginEditorDialogAsync(editablePlugin))"/>
|
|
||||||
</MudTooltip>
|
|
||||||
}
|
|
||||||
|
|
||||||
@if (context is IAvailablePlugin availablePlugin && CanDeleteAssistantPlugin(availablePlugin))
|
@if (context is IAvailablePlugin revisionPlugin && CanReviseAssistantPlugin(revisionPlugin))
|
||||||
{
|
{
|
||||||
<MudTooltip Text="@T("Delete assistant plugin")">
|
<MudTooltip Text="@T("Revise assistant plugin with AI")">
|
||||||
<MudIconButton Icon="@Icons.Material.Filled.DeleteOutline" Size="Size.Medium" OnClick="@(() => this.DeleteAssistantPluginAsync(availablePlugin))"/>
|
<MudIconButton Icon="@Icons.Material.Filled.AutoMode" Size="Size.Medium" OnClick="@(() => this.OpenAssistantPluginRevisionDialogAsync(revisionPlugin))"/>
|
||||||
</MudTooltip>
|
</MudTooltip>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@if (context is IAvailablePlugin availablePlugin && CanDeleteAssistantPlugin(availablePlugin))
|
||||||
|
{
|
||||||
|
<MudTooltip Text="@T("Delete assistant plugin")">
|
||||||
|
<MudIconButton Icon="@Icons.Material.Filled.DeleteOutline" Size="Size.Medium" OnClick="@(() => this.DeleteAssistantPluginAsync(availablePlugin))"/>
|
||||||
|
</MudTooltip>
|
||||||
|
}
|
||||||
|
</MudButtonGroup>
|
||||||
</MudStack>
|
</MudStack>
|
||||||
</MudTd>
|
</MudTd>
|
||||||
</RowTemplate>
|
</RowTemplate>
|
||||||
|
|||||||
@ -94,7 +94,7 @@ public partial class Plugins : MSGComponentBase
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (securityState.IsBelowMinimum && securityState.IsBlocked)
|
if (securityState is { IsBelowMinimum: true, IsBlocked: true })
|
||||||
{
|
{
|
||||||
var blockedAudit = securityState.Audit;
|
var blockedAudit = securityState.Audit;
|
||||||
if (blockedAudit is not null)
|
if (blockedAudit is not null)
|
||||||
@ -102,7 +102,7 @@ public partial class Plugins : MSGComponentBase
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (securityState.IsBelowMinimum && securityState.CanOverride &&
|
if (securityState is { IsBelowMinimum: true, CanOverride: true } &&
|
||||||
!await this.ConfirmActivationBelowMinimumAsync(pluginMeta.Name, securityState.Audit!.Level))
|
!await this.ConfirmActivationBelowMinimumAsync(pluginMeta.Name, securityState.Audit!.Level))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -164,7 +164,7 @@ public partial class Plugins : MSGComponentBase
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
var securityState = PluginAssistantSecurityResolver.Resolve(this.SettingsManager, assistantPlugin);
|
var securityState = PluginAssistantSecurityResolver.Resolve(this.SettingsManager, assistantPlugin);
|
||||||
return securityState.IsBlocked && !securityState.RequiresAudit;
|
return securityState is { IsBlocked: true, RequiresAudit: false };
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetActivationTooltip(IPluginMetadata pluginMeta, bool isEnabled)
|
private string GetActivationTooltip(IPluginMetadata pluginMeta, bool isEnabled)
|
||||||
@ -192,6 +192,14 @@ public partial class Plugins : MSGComponentBase
|
|||||||
|
|
||||||
private static bool CanDeleteAssistantPlugin(IAvailablePlugin plugin) => plugin is { IsInternal: false, Type: PluginType.ASSISTANT } && !string.IsNullOrWhiteSpace(plugin.LocalPath);
|
private static bool CanDeleteAssistantPlugin(IAvailablePlugin plugin) => plugin is { IsInternal: false, Type: PluginType.ASSISTANT } && !string.IsNullOrWhiteSpace(plugin.LocalPath);
|
||||||
|
|
||||||
|
private static bool CanReviseAssistantPlugin(IAvailablePlugin plugin)
|
||||||
|
{
|
||||||
|
var assistantPlugin = PluginFactory.RunningPlugins.OfType<PluginAssistants>().FirstOrDefault(x => x.Id == plugin.Id);
|
||||||
|
return plugin is { IsInternal: false, Type: PluginType.ASSISTANT } &&
|
||||||
|
!string.IsNullOrWhiteSpace(plugin.LocalPath) &&
|
||||||
|
assistantPlugin?.IsAssistantBuilderGenerated is true;
|
||||||
|
}
|
||||||
|
|
||||||
private async Task OpenAssistantPluginEditorDialogAsync(IAvailablePlugin plugin)
|
private async Task OpenAssistantPluginEditorDialogAsync(IAvailablePlugin plugin)
|
||||||
{
|
{
|
||||||
var parameters = new DialogParameters<AssistantPluginEditorDialog>
|
var parameters = new DialogParameters<AssistantPluginEditorDialog>
|
||||||
@ -211,6 +219,26 @@ public partial class Plugins : MSGComponentBase
|
|||||||
await this.InvokeAsync(this.StateHasChanged);
|
await this.InvokeAsync(this.StateHasChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task OpenAssistantPluginRevisionDialogAsync(IAvailablePlugin plugin)
|
||||||
|
{
|
||||||
|
var parameters = new DialogParameters<AssistantPluginRevisionDialog>
|
||||||
|
{
|
||||||
|
{ x => x.PluginId, plugin.Id },
|
||||||
|
{ x => x.PluginLocalPath, plugin.LocalPath },
|
||||||
|
};
|
||||||
|
|
||||||
|
var dialogReference = await this.DialogService.ShowAsync<AssistantPluginRevisionDialog>(this.T("Revise Assistant Plugin"), parameters, DialogOptions.BLOCKING_FULLSCREEN);
|
||||||
|
var dialogResult = await dialogReference.Result;
|
||||||
|
if (dialogResult is null || dialogResult.Canceled || dialogResult.Data is not AssistantPluginRevisionDialogResult result)
|
||||||
|
return;
|
||||||
|
|
||||||
|
await this.MessageBus.SendSuccess(new(Icons.Material.Filled.AutoFixHigh, string.Format(this.T("The assistant plugin '{0}' has been successfully revised."), result.PluginName)));
|
||||||
|
LOG.LogInformation($"The assistant plugin '{result.PluginName}' ({result.PluginId}) has been successfully revised.");
|
||||||
|
await this.MessageBus.SendMessage<bool>(this, Event.PLUGINS_RELOADED);
|
||||||
|
await this.MessageBus.SendMessage<bool>(this, Event.CONFIGURATION_CHANGED);
|
||||||
|
await this.InvokeAsync(this.StateHasChanged);
|
||||||
|
}
|
||||||
|
|
||||||
private async Task DeleteAssistantPluginAsync(IAvailablePlugin plugin)
|
private async Task DeleteAssistantPluginAsync(IAvailablePlugin plugin)
|
||||||
{
|
{
|
||||||
var dialogParameters = new DialogParameters<ConfirmDialog>
|
var dialogParameters = new DialogParameters<ConfirmDialog>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user