#643: Entscheidungen wecken den Agenten nur noch bei Ablehnung oder gescheiterter Ausfuehrung, gesammelt in einer Aufgabe je Agent (5 min Ruhefenster), frisch per @new:agent statt im fortgefuehrten Chatverlauf. Eine einmalige Aufgabe, deren Lauf wegen Budget oder Herunterfahren gar nicht stattfand, bleibt faellig (Wiedervorlage nach 30 min) statt mit gesetztem Marker liegenzubleiben. #641: Rechte stehen in der Werkzeugkonfiguration des Agenten (erlaubt/verboten). Erlaubtes laeuft, Nicht-Erlaubtes wird einzeln vorgelegt statt verweigert, Verbotenes gar nicht erst. "Gleichartiges kuenftig erlauben" erteilt eine widerrufbare Dauerfreigabe je Agent/Werkzeug/Operation; nach drei gleichartigen Freigaben schlaegt die Oberflaeche sie vor. Aenderungen an Agenten bleiben ausnahmslos freigabepflichtig. Database: Operation ist das SQL-Schluesselwort; die eigene Zugriffspruefung greift nur noch ohne Freigabestelle (AgentToolContext.FreigabeGeprueft). WebUI: Rechte-Tabelle je Werkzeug, Dauerfreigaben mit Widerruf. Version 0.1.11. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -167,6 +167,45 @@ public sealed class AgentAdministrationTests
|
||||
host.Host.AgentAdmin.Find("scout")!.Tools["FileRW"].ShouldBeEmpty();
|
||||
}
|
||||
|
||||
// ─── #641: Rechte in der Werkzeugkonfiguration ───
|
||||
|
||||
[Fact]
|
||||
public void Rechte_werden_normalisiert_gespeichert_und_ueberleben_den_Neustart()
|
||||
{
|
||||
using var host = new TestHost();
|
||||
host.Host.AgentAdmin.Add(new NewAgent("scout", "Scout", "modell"));
|
||||
host.Host.AgentAdmin.SetToolEnabled("scout", "Database", enabled: true);
|
||||
|
||||
host.Host.AgentAdmin.SetToolRights("scout", "Database", ["SELECT", "Insert", "drop"], ["drop"]).Ok.ShouldBeTrue();
|
||||
|
||||
var rechte = ClawdDotNet.Core.Staging.Werkzeugrechte.Aus(
|
||||
host.Host.Directories.LoadInstanceConfig(host.Host.InstancePath).Agents
|
||||
.Single(a => a.AgentId == "scout").Tools["Database"].AsReadOnly());
|
||||
rechte.Erlaubt.ShouldNotBeNull().OrderBy(x => x).ToArray().ShouldBe(["insert", "select"], "verboten schlaegt erlaubt");
|
||||
rechte.IstVerboten("DROP").ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Einstellungen_speichern_loescht_die_Rechte_nicht()
|
||||
{
|
||||
// Die Einstellungsmasken schreiben ein frisches Woerterbuch ohne "erlaubt".
|
||||
using var host = new TestHost(TestHost.Agent("scout"));
|
||||
host.Host.AgentAdmin.SetToolEnabled("scout", "Database", enabled: true);
|
||||
host.Host.AgentAdmin.SetToolRights("scout", "Database", ["select"], []);
|
||||
|
||||
host.Host.AgentAdmin.SetToolSettings("scout", "Database", new Dictionary<string, object?> { ["type"] = "mysql" });
|
||||
|
||||
host.Host.AgentAdmin.Find("scout")!.Tools["Database"].ShouldContainKey("erlaubt");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Rechte_nur_fuer_zugewiesene_Werkzeuge()
|
||||
{
|
||||
using var host = new TestHost(TestHost.Agent("scout"));
|
||||
|
||||
host.Host.AgentAdmin.SetToolRights("scout", "Database", ["select"], []).Ok.ShouldBeFalse();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Ein_Werkzeug_wegnehmen_entfernt_auch_seine_Einstellungen()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user