diff options
Diffstat (limited to 'src/Agent.App/Program.cs')
| -rw-r--r-- | src/Agent.App/Program.cs | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/src/Agent.App/Program.cs b/src/Agent.App/Program.cs index 3fae93f..d9ee17a 100644 --- a/src/Agent.App/Program.cs +++ b/src/Agent.App/Program.cs @@ -35,7 +35,7 @@ internal static class Program string logDirectory = ConfigurationLoader.Resolve(baseDirectory, configuration.Logging.Directory); UserOnlyDirectory.Ensure(logDirectory); - using var log = new RollingFileLog(logDirectory, configuration.Logging.MaxFileBytes, configuration.Logging.RetainedFiles); + using var log = new RollingFileLog(logDirectory, configuration.Logging.MaxFileBytes, configuration.Logging.RetainedFiles, configuration.Logging.Level); if (commandLine.Command == AppCommand.Check) { WindowsPlatformCheckResult platform = WindowsPlatformCheck.Run(); @@ -57,8 +57,30 @@ internal static class Program } log.Information(locale.Get("app.starting")); + WindowsPlatformCheckResult servePlatform = WindowsPlatformCheck.Run(); + if (!servePlatform.Success) + { + string failure = locale.Format("app.preflight_failed", new Dictionary<string, object?> + { + ["operation"] = servePlatform.ErrorOperation ?? "privilege/BFE/WFP probe", + ["error_code"] = servePlatform.ErrorCode, + ["administrator"] = servePlatform.IsAdministrator.ToString().ToLowerInvariant(), + ["bfe"] = servePlatform.BfeEngineOpen.ToString().ToLowerInvariant(), + ["transaction"] = servePlatform.WfpWriteTransaction.ToString().ToLowerInvariant(), + ["filters"] = servePlatform.WfpFilterAddDelete.ToString().ToLowerInvariant() + }); + log.Fatal(failure); + return 2; + } + InternalToolDispatcher toolDispatcher = CreateToolDispatcher(configuration, baseDirectory, logDirectory); var runtimeObserver = new JsonLinesRuntimeObserver(logDirectory); + string taskStateDirectory = Path.Combine(baseDirectory, "state", "mcp-tasks"); + UserOnlyDirectory.Ensure(taskStateDirectory); + var taskStoreSettings = new McpTaskStoreSettings(taskStateDirectory, + TimeSpan.FromHours(configuration.Mcp.Tasks.TimeToLiveHours), configuration.Mcp.Tasks.PollIntervalMs); + using var hostObserver = new McpHostLogObserver(log, locale, logDirectory, configuration.Logging.HttpRequests, + configuration.Logging.MaxFileBytes, configuration.Logging.RetainedFiles); if (configuration.Mcp.Transport == "stdio") { string userPrompt = File.ReadAllText(ConfigurationLoader.Resolve(baseDirectory, configuration.Agent.UserSystemPrompt)); @@ -66,7 +88,8 @@ internal static class Program string[] skills = Directory.EnumerateFiles(skillDirectory, "*.md", SearchOption.TopDirectoryOnly).Select(File.ReadAllText).ToArray(); var runtimeSettings = new AgentRuntimeSettings(userPrompt, language, skills, "Windows AppContainer, ACL, Job Object, child-process restriction, and WFP sandbox capabilities.", configuration.Agent.MaxIterations, configuration.Agent.SameFailureLimit, locale.Get("ollama.vision_unsupported")); var visionLimits = new VisionLimits(configuration.Mcp.Images.MaxCount, configuration.Mcp.Images.MaxBytesEach, configuration.Mcp.Images.MaxTotalBytes); - await McpHost.RunStdioAsync(locale, OllamaSettingsFactory.Create(configuration.Ollama), runtimeSettings, visionLimits, CancellationToken.None, toolDispatcher, runtimeObserver).ConfigureAwait(false); + await McpHost.RunStdioAsync(locale, OllamaSettingsFactory.Create(configuration.Ollama), runtimeSettings, visionLimits, CancellationToken.None, + toolDispatcher, runtimeObserver, taskStoreSettings, hostObserver).ConfigureAwait(false); return 0; } if (configuration.Mcp.Transport == "http") @@ -77,7 +100,8 @@ internal static class Program var runtimeSettings = new AgentRuntimeSettings(userPrompt, language, skills, "Windows AppContainer, ACL, Job Object, child-process restriction, and WFP sandbox capabilities.", configuration.Agent.MaxIterations, configuration.Agent.SameFailureLimit, locale.Get("ollama.vision_unsupported")); var visionLimits = new VisionLimits(configuration.Mcp.Images.MaxCount, configuration.Mcp.Images.MaxBytesEach, configuration.Mcp.Images.MaxTotalBytes); await McpHost.RunHttpAsync(locale, OllamaSettingsFactory.Create(configuration.Ollama), runtimeSettings, visionLimits, - configuration.Mcp.Http.Host, configuration.Mcp.Http.Port, CancellationToken.None, toolDispatcher, runtimeObserver).ConfigureAwait(false); + configuration.Mcp.Http.Host, configuration.Mcp.Http.Port, CancellationToken.None, toolDispatcher, runtimeObserver, + taskStoreSettings, hostObserver).ConfigureAwait(false); return 0; } throw new ConfigurationException("Unsupported MCP transport."); |
