Files
ClawdDotNet/Models/InstanceSettingsViewModel.cs
T

125 lines
3.8 KiB
C#

using System.ComponentModel;
using ClawdDotNet.Core.Config;
namespace ClawdDotNet.Models;
/// <summary>
/// PropertyGrid-freundlicher Wrapper um InstanceConfig.
/// Änderungen werden direkt im zugrunde liegenden InstanceConfig-Objekt gespeichert.
/// </summary>
[TypeConverter(typeof(ExpandableObjectConverter))]
public sealed class InstanceSettingsViewModel
{
private readonly InstanceConfig _config;
public InstanceSettingsViewModel(InstanceConfig config)
{
_config = config;
}
[Category("Instanz")]
[DisplayName("Instanz-ID")]
[Description("Eindeutige ID dieser laufenden Instanz.")]
public string InstanceId
{
get => _config.InstanceId;
set => _config.InstanceId = value;
}
[Category("Instanz")]
[DisplayName("Instanzname")]
[Description("Anzeigename dieser Instanz (z.B. 'Aktien-Team').")]
public string InstanceName
{
get => _config.InstanceName;
set => _config.InstanceName = value;
}
[Category("API")]
[DisplayName("OpenRouter API-Key")]
[Description("API-Schlüssel für OpenRouter. Wird für alle Agenten dieser Instanz verwendet.")]
[PasswordPropertyText(true)]
public string OpenRouterApiKey
{
get => _config.OpenRouterApiKey;
set => _config.OpenRouterApiKey = value;
}
[Category("Verzeichnisse")]
[DisplayName("Arbeitsverzeichnis")]
[Description("Basis-Arbeitsverzeichnis für diese Instanz.")]
public string WorkingDirectory
{
get => _config.WorkingDirectory;
set => _config.WorkingDirectory = value;
}
[Category("Verzeichnisse")]
[DisplayName("Log-Verzeichnis")]
[Description("Verzeichnis für Log-Dateien dieser Instanz.")]
public string LogDirectory
{
get => _config.LogDirectory;
set => _config.LogDirectory = value;
}
[Category("Netzwerk")]
[DisplayName("Webserver-Port")]
[Description("Port für den integrierten Webserver (0 = deaktiviert).")]
public int WebServerPort
{
get => _config.WebServerPort;
set => _config.WebServerPort = value;
}
[Category("Agenten")]
[DisplayName("Anzahl Agenten")]
[Description("Anzahl der konfigurierten Agenten in dieser Instanz.")]
[ReadOnly(true)]
public int AgentCount => _config.Agents.Count;
// ─── WatchDog (Instanz-Heartbeat) ───
// Server-URL und Master-Token stehen app-weit in den Anwendungseinstellungen. Die
// Instanz registriert sich damit selbst; hier stehen nur Source/Gruppe/Intervall.
// Ein/Aus läuft über den Service „Instanz-Watchdog" im Worker-Tab. Änderungen greifen
// beim nächsten Start der Instanz.
[Category("WatchDog")]
[DisplayName("Source")]
[Description("Dienst-Kennung im WatchDog. Alle Instanzen teilen sich dieselbe Source.")]
public string WatchdogSource
{
get => _config.Watchdog.Source;
set => _config.Watchdog.Source = value;
}
[Category("WatchDog")]
[DisplayName("Gruppe")]
[Description("Gruppierung im WatchDog-Dashboard.")]
public string WatchdogGroup
{
get => _config.Watchdog.Group;
set => _config.Watchdog.Group = value;
}
[Category("WatchDog")]
[DisplayName("Intervall (Sek)")]
[Description("Sende-Takt der Heartbeats in Sekunden (mindestens 5).")]
public int WatchdogIntervalSeconds
{
get => _config.Watchdog.IntervalSeconds;
set => _config.Watchdog.IntervalSeconds = value;
}
[Category("WatchDog")]
[DisplayName("Token registriert")]
[Description("Ob diese Instanz bereits einen eigenen Agent-Token vom WatchDog erhalten hat.")]
[ReadOnly(true)]
public bool WatchdogTokenRegistered => _config.Watchdog.HasToken;
[Browsable(false)]
public InstanceConfig UnderlyingConfig => _config;
public override string ToString() => _config.InstanceName;
}