connecting allowed host settings to the ui

This commit is contained in:
Nils Kruthoff 2026-05-18 15:30:23 +02:00
parent 6da97c7c80
commit 8c8b557828
No known key found for this signature in database
GPG Key ID: A5C0151B4DDB172C
3 changed files with 32 additions and 2 deletions

View File

@ -26,7 +26,7 @@
var field = property.Value; var field = property.Value;
if (field.EnumValues.Count > 0) if (field.EnumValues.Count > 0)
{ {
<MudSelect T="string" Label="@this.GetFieldLabel(fieldName, field)" Value="@this.GetValue(fieldName)" ValueChanged="@(value => this.UpdateValue(fieldName, value))" Variant="Variant.Outlined" Margin="Margin.Dense" HelperText="@this.GetFieldDescription(fieldName, field)" Class="mb-3"> <MudSelect T="string" Label="@this.GetFieldLabel(fieldName, field)" Value="@this.GetValue(fieldName)" ValueChanged="@(value => this.UpdateValue(fieldName, value))" Variant="Variant.Outlined" Margin="Margin.Dense" HelperText="@this.GetFieldDescription(fieldName, field)" Class="mb-3" Disabled="@this.IsFieldDisabled(fieldName)">
@foreach (var option in field.EnumValues) @foreach (var option in field.EnumValues)
{ {
<MudSelectItem T="string" Value="@option">@option</MudSelectItem> <MudSelectItem T="string" Value="@option">@option</MudSelectItem>
@ -35,7 +35,7 @@
} }
else else
{ {
<MudTextField T="string" Label="@this.GetFieldLabel(fieldName, field)" Value="@this.GetValue(fieldName)" ValueChanged="@(value => this.UpdateValue(fieldName, value))" Variant="Variant.Outlined" Margin="Margin.Dense" Class="mb-3" HelperText="@this.GetFieldDescription(fieldName, field)" InputType="@(field.Secret ? InputType.Password : InputType.Text)" /> <MudTextField T="string" Label="@this.GetFieldLabel(fieldName, field)" Value="@this.GetValue(fieldName)" ValueChanged="@(value => this.UpdateValue(fieldName, value))" Variant="Variant.Outlined" Margin="Margin.Dense" Class="mb-3" HelperText="@this.GetFieldDescription(fieldName, field)" InputType="@(field.Secret ? InputType.Password : InputType.Text)" Disabled="@this.IsFieldDisabled(fieldName)" />
} }
} }
</MudPaper> </MudPaper>

View File

@ -1,3 +1,4 @@
using AIStudio.Settings;
using AIStudio.Tools.ToolCallingSystem; using AIStudio.Tools.ToolCallingSystem;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
@ -38,6 +39,12 @@ public partial class ToolSettingsDialog : SettingsDialogBase
private string GetFieldDescription(string fieldName, ToolSettingsFieldDefinition fieldDefinition) => private string GetFieldDescription(string fieldName, ToolSettingsFieldDefinition fieldDefinition) =>
this.implementation?.GetSettingsFieldDescription(fieldName, fieldDefinition) ?? fieldDefinition.Description; 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 void UpdateValue(string fieldName, string? value) => this.values[fieldName] = value ?? string.Empty;
private async Task Save() private async Task Save()

View File

@ -5,6 +5,8 @@ namespace AIStudio.Tools.ToolCallingSystem;
public sealed class ToolSettingsService(SettingsManager settingsManager, RustService rustService) public sealed class ToolSettingsService(SettingsManager settingsManager, RustService rustService)
{ {
private const string READ_WEB_PAGE_ALLOWED_PRIVATE_HOSTS_FIELD = "allowedPrivateHosts";
public async Task<Dictionary<string, string>> GetSettingsAsync(ToolDefinition definition) public async Task<Dictionary<string, string>> GetSettingsAsync(ToolDefinition definition)
{ {
var values = new Dictionary<string, string>(StringComparer.Ordinal); var values = new Dictionary<string, string>(StringComparer.Ordinal);
@ -13,6 +15,12 @@ public sealed class ToolSettingsService(SettingsManager settingsManager, RustSer
{ {
var fieldName = property.Key; var fieldName = property.Key;
var fieldDefinition = property.Value; var fieldDefinition = property.Value;
if (IsReadWebPageAllowedPrivateHostsField(definition, fieldName))
{
values[fieldName] = settingsManager.ConfigurationData.Tools.ReadWebPageAllowedPrivateHosts;
continue;
}
if (fieldDefinition.Secret) if (fieldDefinition.Secret)
{ {
var response = await rustService.GetSecret(new ToolSettingsSecretId(definition.Id, fieldName), isTrying: true); 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); values.TryGetValue(fieldName, out var value);
value ??= string.Empty; value ??= string.Empty;
if (IsReadWebPageAllowedPrivateHostsField(definition, fieldName))
{
if (!IsReadWebPageAllowedPrivateHostsLocked())
settingsManager.ConfigurationData.Tools.ReadWebPageAllowedPrivateHosts = value;
continue;
}
if (fieldDefinition.Secret) if (fieldDefinition.Secret)
{ {
var secretId = new ToolSettingsSecretId(definition.Id, fieldName); var secretId = new ToolSettingsSecretId(definition.Id, fieldName);
@ -96,4 +112,11 @@ public sealed class ToolSettingsService(SettingsManager settingsManager, RustSer
await settingsManager.StoreSettings(); await settingsManager.StoreSettings();
await MessageBus.INSTANCE.SendMessage<object?>(null, Event.CONFIGURATION_CHANGED, null); await MessageBus.INSTANCE.SendMessage<object?>(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;
} }