summaryrefslogtreecommitdiff
path: root/src/Agent.App/Program.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Agent.App/Program.cs')
-rw-r--r--src/Agent.App/Program.cs30
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.");