namespace Lilith.Agent.ScenarioSystem;public static class ScenarioChildRunner{ /// <summary> /// Runs a scenario XML file inside this process (child Lilith). /// Returns a single-line SCENARIO_REPORT for the main Lilith to consume. /// </summary> public static string RunScenarioFile(string scenarioName, Lilith lilith) { string xml = ScenarioFileService.LoadScenarioXml(scenarioName); var scenario = ScenarioXmlParser.Parse(xml); var branch = lilith.GetScenarioBranch(); var result = ScenarioExecutor.RunChatStepsWithChecksAsync(branch, scenario).GetAwaiter().GetResult(); if (!result.Ok) { return $"SCENARIO_REPORT: FAIL ({result.ScenarioId}) {SanitizeOneLine(result.Summary)} TRACE={SanitizeOneLine(result.Trace)}"; } string summary = string.IsNullOrWhiteSpace(result.Summary) ? "Completed." : result.Summary; return $"SCENARIO_REPORT: PASS ({result.ScenarioId}) SUMMARY={SanitizeOneLine(summary)} TRACE={SanitizeOneLine(result.Trace)}"; } private static string SanitizeOneLine(string text) { string s = (text ?? "").Replace("\r", " ").Replace("\n", " ").Trim(); while (s.Contains(" ", StringComparison.Ordinal)) s = s.Replace(" ", " "); return s.Length > 500 ? s[..500] + "…" : s; }}
Documentation
Lilith (Version 3)
Version 3 Lilith agent library. Entry point: Lilith.cs with partials under Boot/, Chat/, Ollama/, and SystemPrompt/.
Build the solution or run python ../Build-v3.py from this tree.