using Agent.App.Cli; using Agent.App.Configuration; namespace Agent.Core.Tests; public sealed class ConfigurationTests { [Fact] public void ValidYamlLoadsTypedConfiguration() { using var directory = new TestDirectory(); string config = CreateValidConfiguration(directory); AgentConfiguration result = ConfigurationLoader.Load(config); Assert.Equal(1, result.SchemaVersion); Assert.Equal("model", result.Ollama.Model); Assert.Equal("deny", result.Sandbox.Network.Mode); } [Fact] public void UnknownYamlPropertyIsFatal() { using var directory = new TestDirectory(); string config = CreateValidConfiguration(directory); System.IO.File.AppendAllText(config, "unknown_root: true\n"); Assert.Throws(() => ConfigurationLoader.Load(config)); } [Fact] public void InvalidSchemaIsFatal() { using var directory = new TestDirectory(); string config = CreateValidConfiguration(directory); System.IO.File.WriteAllText(config, System.IO.File.ReadAllText(config).Replace("schema_version: 1", "schema_version: 2", StringComparison.Ordinal)); Assert.Throws(() => ConfigurationLoader.Load(config)); } [Fact] public void CommandLineLanguageOverrideIsCaptured() { CommandLine result = CommandLine.Parse(["serve", "--lang", "ja", "--transport", "http"]); Assert.Equal("ja", result.Language); Assert.Equal("http", result.Transport); } [Fact] public void SkillLoader_supports_legacy_markdown_and_standard_skill_directories() { using var directory = new TestDirectory(); directory.File("skills/legacy.md", "legacy skill"); directory.File("skills/python-via-uv/SKILL.md", "standard skill"); directory.File("skills/python-via-uv/reference.md", "must not be loaded as a skill"); string[] skills = SkillLoader.Load(Path.Combine(directory.Path, "skills")); Assert.Equal(["legacy skill", "standard skill"], skills); } private static string CreateValidConfiguration(TestDirectory directory) { directory.File("prompts/user-system.md", string.Empty); Directory.CreateDirectory(System.IO.Path.Combine(directory.Path, "config/locales")); Directory.CreateDirectory(System.IO.Path.Combine(directory.Path, "skills")); return directory.File("agent.yaml", """ schema_version: 1 application: language: en agent: user_system_prompt: prompts/user-system.md ollama: endpoint: http://127.0.0.1:11434 model: model localization: directory: config/locales fallback: en skills: directory: skills """); } }