diff --git a/app/MindWork AI Studio/Dialogs/AssistantPluginAuditDialog.razor.cs b/app/MindWork AI Studio/Dialogs/AssistantPluginAuditDialog.razor.cs
index 882a527c..c8390a96 100644
--- a/app/MindWork AI Studio/Dialogs/AssistantPluginAuditDialog.razor.cs
+++ b/app/MindWork AI Studio/Dialogs/AssistantPluginAuditDialog.razor.cs
@@ -21,7 +21,7 @@ public partial class AssistantPluginAuditDialog : MSGComponentBase
private IMudDialogInstance MudDialog { get; set; } = null!;
[Inject]
- private AssistantAuditAgent AuditAgent { get; init; } = null!;
+ private AssistantPluginAuditService AssistantPluginAuditService { get; init; } = null!;
[Inject]
private IDialogService DialogService { get; init; } = null!;
@@ -96,22 +96,7 @@ public partial class AssistantPluginAuditDialog : MSGComponentBase
try
{
- var result = await this.AuditAgent.AuditAsync(this.plugin);
- this.audit = new PluginAssistantAudit
- {
- PluginId = this.plugin.Id,
- PluginHash = this.plugin.ComputeAuditHash(),
- AuditedAtUtc = DateTimeOffset.UtcNow,
- AuditProviderId = this.CurrentProvider.Id,
- AuditProviderName = this.CurrentProvider == AIStudio.Settings.Provider.NONE
- ? string.Empty
- : this.CurrentProvider.InstanceName,
- Level = AssistantAuditLevelExtensions.Parse(result.Level),
- Summary = result.Summary,
- Confidence = result.Confidence,
- PromptPreview = this.promptPreview,
- Findings = result.Findings,
- };
+ this.audit = await this.AssistantPluginAuditService.RunAuditAsync(this.plugin);
}
finally
{
diff --git a/app/MindWork AI Studio/Plugins/assistants/README.md b/app/MindWork AI Studio/Plugins/assistants/README.md
index 82c1c2a7..38d15fe7 100644
--- a/app/MindWork AI Studio/Plugins/assistants/README.md
+++ b/app/MindWork AI Studio/Plugins/assistants/README.md
@@ -1030,10 +1030,6 @@ Use `LAYOUT_ACCORDION` as the outer wrapper and put the actual content into one
- [Bitwise Operations Library](https://www.lua.org/manual/5.2/manual.html#6.7)
---
-> **Warning:** some common lua functions might not be available in this lua environment. Examples are:
-> 1. `tostring()`
-> 2. `pairs()`\\`ipairs()`
-
### Logging helpers
The assistant runtime exposes basic logging helpers to Lua. Use them to debug custom prompt building.
diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/AssistantPluginAuditService.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/AssistantPluginAuditService.cs
new file mode 100644
index 00000000..ec60abc2
--- /dev/null
+++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/AssistantPluginAuditService.cs
@@ -0,0 +1,32 @@
+using AIStudio.Agents.AssistantAudit;
+
+namespace AIStudio.Tools.PluginSystem.Assistants;
+
+///
+/// Runs an assistant security audit and maps the agent result to the persisted audit model.
+///
+public sealed class AssistantPluginAuditService(AssistantAuditAgent auditAgent)
+{
+ public async Task RunAuditAsync(PluginAssistants plugin, CancellationToken token = default)
+ {
+ var result = await auditAgent.AuditAsync(plugin, token);
+ var provider = auditAgent.ProviderSettings;
+ var promptPreview = await plugin.BuildAuditPromptPreviewAsync(token);
+
+ return new PluginAssistantAudit
+ {
+ PluginId = plugin.Id,
+ PluginHash = plugin.ComputeAuditHash(),
+ AuditedAtUtc = DateTimeOffset.UtcNow,
+ AuditProviderId = provider.Id,
+ AuditProviderName = provider == AIStudio.Settings.Provider.NONE
+ ? string.Empty
+ : provider.InstanceName,
+ Level = AssistantAuditLevelExtensions.Parse(result.Level),
+ Summary = result.Summary,
+ Confidence = result.Confidence,
+ PromptPreview = promptPreview,
+ Findings = result.Findings,
+ };
+ }
+}
diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/PluginAssistantSecurityResolver.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/PluginAssistantSecurityResolver.cs
index 390e4af2..ac7e7e79 100644
--- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/PluginAssistantSecurityResolver.cs
+++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/PluginAssistantSecurityResolver.cs
@@ -73,7 +73,7 @@ public static class PluginAssistantSecurityResolver
var auditSettings = settingsManager.ConfigurationData.AssistantPluginAudit;
var currentHash = plugin.ComputeAuditHash();
var audit = settingsManager.ConfigurationData.AssistantPluginAudits.FirstOrDefault(x => x.PluginId == plugin.Id);
- var hasAudit = audit is not null;
+ var hasAudit = audit is not null && audit.Level is not AssistantAuditLevel.UNKNOWN;
var hashMatches = hasAudit && string.Equals(audit!.PluginHash, currentHash, StringComparison.Ordinal);
var hasHashMismatch = hasAudit && !hashMatches;
var isBelowMinimum = hashMatches && audit is not null && audit.Level < auditSettings.MinimumLevel;