From 8c8b557828a430f412bff02299b02ea24263be24 Mon Sep 17 00:00:00 2001 From: Nils Kruthoff Date: Mon, 18 May 2026 15:30:23 +0200 Subject: [PATCH] connecting allowed host settings to the ui --- .../Dialogs/Settings/ToolSettingsDialog.razor | 4 ++-- .../Settings/ToolSettingsDialog.razor.cs | 7 ++++++ .../ToolCallingSystem/ToolSettingsService.cs | 23 +++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor b/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor index b41ee616..72e47385 100644 --- a/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor +++ b/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor @@ -26,7 +26,7 @@ var field = property.Value; if (field.EnumValues.Count > 0) { - + @foreach (var option in field.EnumValues) { @option @@ -35,7 +35,7 @@ } else { - + } } diff --git a/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor.cs b/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor.cs index e4cf432c..30c88796 100644 --- a/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor.cs +++ b/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor.cs @@ -1,3 +1,4 @@ +using AIStudio.Settings; using AIStudio.Tools.ToolCallingSystem; using Microsoft.AspNetCore.Components; @@ -38,6 +39,12 @@ public partial class ToolSettingsDialog : SettingsDialogBase private string GetFieldDescription(string fieldName, ToolSettingsFieldDefinition fieldDefinition) => this.implementation?.GetSettingsFieldDescription(fieldName, fieldDefinition) ?? fieldDefinition.Description; + private bool IsFieldDisabled(string fieldName) => + this.toolDefinition?.Id.Equals(ToolSelectionRules.READ_WEB_PAGE_TOOL_ID, StringComparison.Ordinal) is true && + fieldName.Equals("allowedPrivateHosts", StringComparison.Ordinal) && + ManagedConfiguration.TryGet(x => x.Tools, x => x.ReadWebPageAllowedPrivateHosts, out var meta) && + meta.IsLocked; + private void UpdateValue(string fieldName, string? value) => this.values[fieldName] = value ?? string.Empty; private async Task Save() diff --git a/app/MindWork AI Studio/Tools/ToolCallingSystem/ToolSettingsService.cs b/app/MindWork AI Studio/Tools/ToolCallingSystem/ToolSettingsService.cs index fa1b592f..a1142913 100644 --- a/app/MindWork AI Studio/Tools/ToolCallingSystem/ToolSettingsService.cs +++ b/app/MindWork AI Studio/Tools/ToolCallingSystem/ToolSettingsService.cs @@ -5,6 +5,8 @@ namespace AIStudio.Tools.ToolCallingSystem; public sealed class ToolSettingsService(SettingsManager settingsManager, RustService rustService) { + private const string READ_WEB_PAGE_ALLOWED_PRIVATE_HOSTS_FIELD = "allowedPrivateHosts"; + public async Task> GetSettingsAsync(ToolDefinition definition) { var values = new Dictionary(StringComparer.Ordinal); @@ -13,6 +15,12 @@ public sealed class ToolSettingsService(SettingsManager settingsManager, RustSer { var fieldName = property.Key; var fieldDefinition = property.Value; + if (IsReadWebPageAllowedPrivateHostsField(definition, fieldName)) + { + values[fieldName] = settingsManager.ConfigurationData.Tools.ReadWebPageAllowedPrivateHosts; + continue; + } + if (fieldDefinition.Secret) { var response = await rustService.GetSecret(new ToolSettingsSecretId(definition.Id, fieldName), isTrying: true); @@ -79,6 +87,14 @@ public sealed class ToolSettingsService(SettingsManager settingsManager, RustSer values.TryGetValue(fieldName, out var value); value ??= string.Empty; + if (IsReadWebPageAllowedPrivateHostsField(definition, fieldName)) + { + if (!IsReadWebPageAllowedPrivateHostsLocked()) + settingsManager.ConfigurationData.Tools.ReadWebPageAllowedPrivateHosts = value; + + continue; + } + if (fieldDefinition.Secret) { var secretId = new ToolSettingsSecretId(definition.Id, fieldName); @@ -96,4 +112,11 @@ public sealed class ToolSettingsService(SettingsManager settingsManager, RustSer await settingsManager.StoreSettings(); await MessageBus.INSTANCE.SendMessage(null, Event.CONFIGURATION_CHANGED, null); } + + private static bool IsReadWebPageAllowedPrivateHostsField(ToolDefinition definition, string fieldName) => + definition.Id.Equals(ToolSelectionRules.READ_WEB_PAGE_TOOL_ID, StringComparison.Ordinal) && + fieldName.Equals(READ_WEB_PAGE_ALLOWED_PRIVATE_HOSTS_FIELD, StringComparison.Ordinal); + + private static bool IsReadWebPageAllowedPrivateHostsLocked() => + ManagedConfiguration.TryGet(x => x.Tools, x => x.ReadWebPageAllowedPrivateHosts, out var meta) && meta.IsLocked; }