Files
ClawdDotNet/tests/ClawdDotNet.Core.Tests/Infrastructure/EngineFixture.cs
T
RichardandClaude Opus 5 0b6ea73ec1 Entscheidungen aus dem Testbetrieb umgesetzt (#572): #577 #579 #581 #589 #193 #205 #594 #595 #597 #598 #599 #588
- Engine: leere Antworten nachfassen, Aufgaben enden mit Ergebniszeile (EmptyResponse/Incomplete),
  gleiche Fehlschlaege erkennen (RepeatedFailure), Zeitzeile vor Chatnachrichten,
  Werkzeugergebnisse gerahmt, Vorpruefung vor dem Staging, Belegkosten wie RunUsage
- Staging: gescheiterte Freigaben als Failed; AgentEditor-Aenderungen freigabepflichtig,
  Selbstbearbeitung gesperrt (allowSelfEdit)
- Taskboard: Termine beim Anlegen pruefen, naechster/letzter Lauf, pausieren, Sofortlauf,
  Kostenprognose, Hinweis auf wachsenden Kontext; Jobs-Reiter und /api/jobs entfernt
- Release: Instanzmanager samt Weboberflaeche im Paket, setup.json fragt manager.json ab,
  Token nicht mehr ins systemd-Journal
Version 0.1.6.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 11:23:10 +02:00

72 lines
2.2 KiB
C#

using ClawdDotNet.Core.Audit;
using ClawdDotNet.Core.Config;
using ClawdDotNet.Core.Engine;
using ClawdDotNet.Core.Security;
using ClawdDotNet.Core.Staging;
using ClawdDotNet.Core.Tools;
namespace ClawdDotNet.Core.Tests.Infrastructure;
/// <summary>
/// Baut eine einsatzbereite AgentEngine mit Fake-Client, Fake-Tools und
/// In-Memory-State zusammen.
/// </summary>
internal sealed class EngineFixture
{
public FakeChatClient Client { get; } = new();
public ToolRegistry Registry { get; } = new();
public InMemoryStateStore StateStore { get; } = new();
public AgentEngine Engine { get; }
private readonly List<AgentConfig> _agents = new();
/// <summary>Die registrierten Agenten — für Tests, die einen Dispatcher selbst bauen.</summary>
public IReadOnlyList<AgentConfig> Agents => _agents;
public EngineFixture(IAuditRepository? audit = null, StagingGate? staging = null, TimeProvider? clock = null)
{
Engine = new AgentEngine(
Client,
Registry,
new PermissionGate(),
StateStore,
TestLogging.Factory,
auditRepository: audit,
stagingGate: staging,
clock: clock);
// Kein Agent-Verzeichnis → keine Persistenz auf die Platte während der Tests.
Engine.SetAgentConfigProvider(() => _agents, "test-instance", _ => null);
}
public EngineFixture WithTool(IAgentTool tool)
{
Registry.Register(tool);
return this;
}
public AgentConfig AddAgent(string agentId, params string[] toolNames)
{
var config = new AgentConfig
{
AgentId = agentId,
DisplayName = agentId,
Model = "test/model",
SystemPrompt = $"Du bist {agentId}.",
LoopGuard = new LoopGuardConfig
{
MaxSteps = 50,
MaxCumulativeTokens = 10_000_000,
TimeoutSeconds = 60,
MaxContextTokens = 10_000_000 // Compaction in Engine-Tests ausschalten
}
};
foreach (var name in toolNames)
config.Tools[name] = new Dictionary<string, object?>();
_agents.Add(config);
return config;
}
}