From 0b2ce886c5cb2abed7a269a04e66b8ad6bb9ab9d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Peer=20Sch=C3=BCtt?=
<20603780+peerschuett@users.noreply.github.com>
Date: Wed, 15 Jul 2026 11:31:11 +0200
Subject: [PATCH] Key fixes include: Prevented OS credentials from reaching
public hosts or cross-origin redirects. Preserved Responses API reasoning
items across tool rounds. Fixed nullable tool-call handling and omitted
unsupported null request properties. Propagated cancellation correctly.
Removed tool argument values from logs and tool results from persisted
traces. Added settings validation, clearable optional enums,
managed-confidence validation, and safe fallback behavior. Added
tool-definition schema and duplicate validation. Fixed documentation JSON,
changelog regressions, typos, trailing whitespace, and unused Anthropic code.
---
.../Assistants/I18N/allTexts.lua | 6 +
.../Dialogs/Settings/ToolSettingsDialog.razor | 9 ++
.../Settings/ToolSettingsDialog.razor.cs | 16 ++-
app/MindWork AI Studio/Pages/Settings.razor | 2 +-
.../Provider/Anthropic/ChatRequest.cs | 3 -
.../Provider/Anthropic/ProviderAnthropic.cs | 4 -
.../Provider/BaseProvider.cs | 12 +-
.../OpenAI/ChatCompletionAPIRequest.cs | 2 +
.../OpenAI/ChatCompletionResponseMessage.cs | 2 +-
.../Provider/OpenAI/ProviderOpenAI.cs | 10 +-
.../Provider/OpenAI/ResponsesResponse.cs | 4 -
.../Provider/OpenAI/ToolResultMessage.cs | 2 -
.../Settings/SettingsManager.cs | 11 ++
app/MindWork AI Studio/Tools/HTMLParser.cs | 24 ++--
.../Tools/PluginSystem/PluginConfiguration.cs | 35 ++++++
.../ReadWebPageTool.cs | 25 +++-
.../ToolCallingSystem/ToolExecutionModels.cs | 2 +
.../Tools/ToolCallingSystem/ToolExecutor.cs | 10 +-
.../Tools/ToolCallingSystem/ToolRegistry.cs | 109 +++++++++++++++++-
.../ToolCallingSystem/ToolSettingsService.cs | 9 ++
.../tool_definitions/read_web_page.json | 2 +-
documentation/Tools.md | 6 +-
22 files changed, 254 insertions(+), 51 deletions(-)
diff --git a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
index 202f179a..1c8362f3 100644
--- a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
+++ b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
@@ -5788,6 +5788,12 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGWRITINGEMAILS::T3832
-- Save
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::TOOLSETTINGSDIALOG::T1294818664"] = "Save"
+-- Please configure the required settings: {0}
+UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::TOOLSETTINGSDIALOG::T2412603418"] = "Please configure the required settings: {0}"
+
+-- Not set
+UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::TOOLSETTINGSDIALOG::T3616903110"] = "Not set"
+
-- Tool Settings
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::TOOLSETTINGSDIALOG::T3730473128"] = "Tool Settings"
diff --git a/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor b/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor
index 8d74d470..1e9e3d24 100644
--- a/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor
+++ b/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor
@@ -19,6 +19,11 @@
@this.implementation?.GetDescription()
+ @if (!string.IsNullOrWhiteSpace(this.validationMessage))
+ {
+ @this.validationMessage
+ }
+
@foreach (var property in this.toolDefinition.SettingsSchema.Properties)
{
@@ -27,6 +32,10 @@
if (field.EnumValues.Count > 0)
{
+ @if (!this.toolDefinition.SettingsSchema.Required.Contains(fieldName))
+ {
+ @T("Not set")
+ }
@foreach (var option in field.EnumValues)
{
@option
diff --git a/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor.cs b/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor.cs
index 2cd90e5b..b7cfd7c4 100644
--- a/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor.cs
+++ b/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor.cs
@@ -19,6 +19,7 @@ public partial class ToolSettingsDialog : SettingsDialogBase
private ToolDefinition? toolDefinition;
private IToolImplementation? implementation;
private Dictionary values = new(StringComparer.Ordinal);
+ private string validationMessage = string.Empty;
protected override async Task OnInitializedAsync()
{
@@ -69,13 +70,26 @@ public partial class ToolSettingsDialog : SettingsDialogBase
private string GetFieldPlaceholder(string fieldName, ToolSettingsFieldDefinition fieldDefinition) =>
string.IsNullOrWhiteSpace(this.GetValue(fieldName)) ? this.GetFieldDefaultValue(fieldName, fieldDefinition) : string.Empty;
- private void UpdateValue(string fieldName, string? value) => this.values[fieldName] = value ?? string.Empty;
+ private void UpdateValue(string fieldName, string? value)
+ {
+ this.values[fieldName] = value ?? string.Empty;
+ this.validationMessage = string.Empty;
+ }
private async Task Save()
{
if (this.toolDefinition is null)
return;
+ var validationState = await this.ToolSettingsService.ValidateSettingsAsync(this.toolDefinition, this.values, this.implementation);
+ if (!validationState.IsConfigured)
+ {
+ this.validationMessage = !string.IsNullOrWhiteSpace(validationState.Message)
+ ? validationState.Message
+ : string.Format(T("Please configure the required settings: {0}"), string.Join(", ", validationState.MissingRequiredFields));
+ return;
+ }
+
await this.ToolSettingsService.SaveSettingsAsync(this.toolDefinition, this.values);
this.MudDialog.Close();
}
diff --git a/app/MindWork AI Studio/Pages/Settings.razor b/app/MindWork AI Studio/Pages/Settings.razor
index 11636bfe..47cff5f5 100644
--- a/app/MindWork AI Studio/Pages/Settings.razor
+++ b/app/MindWork AI Studio/Pages/Settings.razor
@@ -14,7 +14,7 @@
{
}
-
+
@if (PreviewFeatures.PRE_SPEECH_TO_TEXT_2026.IsEnabled(this.SettingsManager))
{
diff --git a/app/MindWork AI Studio/Provider/Anthropic/ChatRequest.cs b/app/MindWork AI Studio/Provider/Anthropic/ChatRequest.cs
index 5e45fcee..c4492224 100644
--- a/app/MindWork AI Studio/Provider/Anthropic/ChatRequest.cs
+++ b/app/MindWork AI Studio/Provider/Anthropic/ChatRequest.cs
@@ -18,9 +18,6 @@ public readonly record struct ChatRequest(
string System
)
{
- [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
- public IList