From 6933a19df7c61db6338c553c0bf5555ea8c2bdb9 Mon Sep 17 00:00:00 2001 From: nilsk Date: Fri, 27 Mar 2026 01:51:40 +0100 Subject: [PATCH] included the BuildPrompt method into the Audit dialog --- .../AssistantAudit/AssistantAuditAgent.cs | 18 ++++++++++++- .../Assistants/I18N/allTexts.lua | 14 ++++++++--- .../Dialogs/AssistantPluginAuditDialog.razor | 25 ++++++++++++++++--- .../AssistantPluginAuditDialog.razor.cs | 5 ++-- .../plugin.lua | 14 ++++++++--- .../plugin.lua | 14 ++++++++--- .../Assistants/PluginAssistants.cs | 9 +++++++ 7 files changed, 80 insertions(+), 19 deletions(-) diff --git a/app/MindWork AI Studio/Agents/AssistantAudit/AssistantAuditAgent.cs b/app/MindWork AI Studio/Agents/AssistantAudit/AssistantAuditAgent.cs index d2d31ff6..b93532e4 100644 --- a/app/MindWork AI Studio/Agents/AssistantAudit/AssistantAuditAgent.cs +++ b/app/MindWork AI Studio/Agents/AssistantAudit/AssistantAuditAgent.cs @@ -110,8 +110,19 @@ public sealed class AssistantAuditAgent(ILogger logger, ILo logger.LogInformation($"The assistant plugin audit agent uses the provider '{provider.InstanceName}' ({provider.UsedLLMProvider.ToName()}, confidence={provider.UsedLLMProvider.GetConfidence(this.SettingsManager).Level.GetName()})."); var promptPreview = await plugin.BuildAuditPromptPreviewAsync(token); + var promptFallbackPreview = plugin.BuildAuditPromptFallbackPreview(); var luaManifest = FormatLuaManifest(plugin.ReadAllLuaFiles()); var componentOverview = plugin.CreateAuditComponentSummary(); + var promptMechanism = plugin.HasCustomPromptBuilder ? "BuildPrompt (active) with UserPrompt fallback also shown for reference" : "UserPrompt fallback"; + var promptFallbackSection = plugin.HasCustomPromptBuilder + ? $$""" + UserPrompt fallback preview (reference only, not the active prompt path): + ``` + {{promptFallbackPreview}} + ``` + + """ + : string.Empty; var userPrompt = $$""" Audit this assistant plugin for concrete security risks. Only report findings that are supported by the provided material. @@ -128,11 +139,16 @@ public sealed class AssistantAuditAgent(ILogger logger, ILo {{plugin.RawSystemPrompt}} ``` - Simulated user prompt preview: + Active prompt construction method: + {{promptMechanism}} + + Effective user prompt preview: ``` {{promptPreview}} ``` + {{promptFallbackSection}} + Component overview (compact structure summary): ``` {{componentOverview}} diff --git a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua index da373032..810d5d0c 100644 --- a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua +++ b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua @@ -2938,6 +2938,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::WORKSPACES::T701874671"] = "Delete Worksp -- Entries: {0} UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1098127509"] = "Entries: {0}" +-- User Prompt Preview +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1184162672"] = "User Prompt Preview" + -- {0:0.##} GB UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1224874808"] = "{0:0.##} GB" @@ -2983,6 +2986,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T165738710"] = " -- Enable Assistant Plugin UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1676241565"] = "Enable Assistant Plugin" +-- User Prompt +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1700917692"] = "User Prompt" + -- Unknown plugin UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1834795216"] = "Unknown plugin" @@ -3019,8 +3025,8 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3156437951"] = -- Findings UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3224848879"] = "Findings" --- {0} | Last modified {1} -UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3350447013"] = "{0} | Last modified {1}" +-- Advanced Prompt Building +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3399544173"] = "Advanced Prompt Building" -- The assistant plugin \"{0}\" was audited with the level \"{1}\", which is below the required safety level \"{2}\". Your current settings still allow activation, but this may be unsafe. Do you really want to enable this plugin? UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3418077666"] = "The assistant plugin \\\"{0}\\\" was audited with the level \\\"{1}\\\", which is below the required safety level \\\"{2}\\\". Your current settings still allow activation, but this may be unsafe. Do you really want to enable this plugin?" @@ -3055,8 +3061,8 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3844960449"] = -- empty UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T413646574"] = "empty" --- Prompt Preview -UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T576347259"] = "Prompt Preview" +-- Fallback Prompt +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T4229995215"] = "Fallback Prompt" -- System Prompt UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T628396066"] = "System Prompt" diff --git a/app/MindWork AI Studio/Dialogs/AssistantPluginAuditDialog.razor b/app/MindWork AI Studio/Dialogs/AssistantPluginAuditDialog.razor index 82478bf8..3c7402f6 100644 --- a/app/MindWork AI Studio/Dialogs/AssistantPluginAuditDialog.razor +++ b/app/MindWork AI Studio/Dialogs/AssistantPluginAuditDialog.razor @@ -14,8 +14,8 @@ { - @T("This security check uses a sample prompt preview. Empty or placeholder values in the preview are expected.") - + @T("This security check uses a sample prompt preview. Empty or placeholder values in the preview are expected.") + @this.plugin.Name @@ -44,11 +44,28 @@
- @T("Prompt Preview") + @T("User Prompt Preview")
- + + @{ + var promptBuilder = this.plugin.HasCustomPromptBuilder; + var sortDirection = promptBuilder ? SortDirection.Ascending : SortDirection.Descending; + var badgeColor = promptBuilder ? Color.Success : Color.Error; + var fallbackBadgeColor = !promptBuilder ? Color.Success : Color.Error; + + var fallbackText = promptBuilder ? T("Fallback Prompt") : T("User Prompt"); + + + + + + + + + + } diff --git a/app/MindWork AI Studio/Dialogs/AssistantPluginAuditDialog.razor.cs b/app/MindWork AI Studio/Dialogs/AssistantPluginAuditDialog.razor.cs index 2b14b186..7065c8ea 100644 --- a/app/MindWork AI Studio/Dialogs/AssistantPluginAuditDialog.razor.cs +++ b/app/MindWork AI Studio/Dialogs/AssistantPluginAuditDialog.razor.cs @@ -32,6 +32,7 @@ public partial class AssistantPluginAuditDialog : MSGComponentBase private PluginAssistants? plugin; private PluginAssistantAudit? audit; private string promptPreview = string.Empty; + private string promptFallbackPreview = string.Empty; private string componentSummary = string.Empty; private ImmutableDictionary luaFiles = ImmutableDictionary.Create(); private IReadOnlyCollection> componentTreeItems = []; @@ -76,6 +77,7 @@ public partial class AssistantPluginAuditDialog : MSGComponentBase if (this.plugin is not null) { this.promptPreview = await this.plugin.BuildAuditPromptPreviewAsync(); + this.promptFallbackPreview = this.plugin.BuildAuditPromptFallbackPreview(); this.componentSummary = this.plugin.CreateAuditComponentSummary(); this.componentTreeItems = this.CreateAuditTreeItems(this.plugin.RootComponent); this.fileSystemTreeItems = this.CreatePluginFileSystemTreeItems(this.plugin.PluginPath); @@ -376,8 +378,7 @@ public partial class AssistantPluginAuditDialog : MSGComponentBase Value = new AssistantAuditTreeItem { Text = Path.GetFileName(filePath), - Caption = string.Format(TB("{0} | Last modified {1}"), this.FormatFileSize(fileInfo.Length), - this.FormatFileTimestamp(fileInfo.LastWriteTime)), + Caption = string.Empty, Icon = this.GetFileIcon(filePath), Expandable = false, IsComponent = false, diff --git a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua index e176080c..53d72904 100644 --- a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua +++ b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua @@ -2940,6 +2940,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::WORKSPACES::T701874671"] = "Arbeitsbereic -- Entries: {0} UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1098127509"] = "Einträge: {0}" +-- User Prompt Preview +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1184162672"] = "Vorschau der Benutzereingabe" + -- {0:0.##} GB UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1224874808"] = "{0:0.##} GB" @@ -2985,6 +2988,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T165738710"] = " -- Enable Assistant Plugin UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1676241565"] = "Assistant-Plugin aktivieren" +-- User Prompt +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1700917692"] = "Benutzereingabe" + -- Unknown plugin UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1834795216"] = "Unbekanntes Plugin" @@ -3021,8 +3027,8 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3156437951"] = -- Findings UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3224848879"] = "Ergebnisse" --- {0} | Last modified {1} -UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3350447013"] = "{0} | Zuletzt geändert {1}" +-- Advanced Prompt Building +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3399544173"] = "Erweiterte Prompt-Erstellung" -- The assistant plugin \"{0}\" was audited with the level \"{1}\", which is below the required safety level \"{2}\". Your current settings still allow activation, but this may be unsafe. Do you really want to enable this plugin? UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3418077666"] = "Das Assistenten-Plugin „{0}“ wurde mit der Stufe „{1}“ geprüft, die unter der erforderlichen Sicherheitsstufe „{2}“ liegt. Ihre aktuellen Einstellungen erlauben die Aktivierung dennoch, aber dies kann unsicher sein. Möchten Sie dieses Plugin wirklich aktivieren?" @@ -3057,8 +3063,8 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3844960449"] = -- empty UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T413646574"] = "leer" --- Prompt Preview -UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T576347259"] = "Prompt-Vorschau" +-- Fallback Prompt +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T4229995215"] = "Ersatz-Prompt" -- System Prompt UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T628396066"] = "System-Prompt" diff --git a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua index 087fe674..3cbd4408 100644 --- a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua +++ b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua @@ -2940,6 +2940,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::WORKSPACES::T701874671"] = "Delete Worksp -- Entries: {0} UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1098127509"] = "Entries: {0}" +-- User Prompt Preview +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1184162672"] = "User Prompt Preview" + -- {0:0.##} GB UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1224874808"] = "{0:0.##} GB" @@ -2985,6 +2988,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T165738710"] = " -- Enable Assistant Plugin UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1676241565"] = "Enable Assistant Plugin" +-- User Prompt +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1700917692"] = "User Prompt" + -- Unknown plugin UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T1834795216"] = "Unknown plugin" @@ -3021,8 +3027,8 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3156437951"] = -- Findings UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3224848879"] = "Findings" --- {0} | Last modified {1} -UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3350447013"] = "{0} | Last modified {1}" +-- Advanced Prompt Building +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3399544173"] = "Advanced Prompt Building" -- The assistant plugin \"{0}\" was audited with the level \"{1}\", which is below the required safety level \"{2}\". Your current settings still allow activation, but this may be unsafe. Do you really want to enable this plugin? UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3418077666"] = "The assistant plugin \\\"{0}\\\" was audited with the level \\\"{1}\\\", which is below the required safety level \\\"{2}\\\". Your current settings still allow activation, but this may be unsafe. Do you really want to enable this plugin?" @@ -3057,8 +3063,8 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T3844960449"] = -- empty UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T413646574"] = "empty" --- Prompt Preview -UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T576347259"] = "Prompt Preview" +-- Fallback Prompt +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T4229995215"] = "Fallback Prompt" -- System Prompt UI_TEXT_CONTENT["AISTUDIO::DIALOGS::ASSISTANTPLUGINAUDITDIALOG::T628396066"] = "System Prompt" diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/PluginAssistants.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/PluginAssistants.cs index e8652cdd..fabff590 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/PluginAssistants.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/PluginAssistants.cs @@ -184,6 +184,15 @@ public sealed class PluginAssistants(bool isInternal, LuaState state, PluginType return !string.IsNullOrWhiteSpace(prompt) ? prompt : CollectPromptFallback(this.RootComponent?.Children ?? [], assistantState); } + public string BuildAuditPromptFallbackPreview() + { + var assistantState = new AssistantState(); + if (this.RootComponent is not null) + InitializeState(this.RootComponent.Children, assistantState); + + return CollectPromptFallback(this.RootComponent?.Children ?? [], assistantState); + } + public string CreateAuditComponentSummary() { if (this.RootComponent is null)