using Microsoft.Extensions.Options; using TermRemoteCtl.Agent.Api; using TermRemoteCtl.Agent.Configuration; using TermRemoteCtl.Agent.History; using TermRemoteCtl.Agent.Projects; using TermRemoteCtl.Agent.Realtime; using TermRemoteCtl.Agent.Security; using TermRemoteCtl.Agent.Sessions; using TermRemoteCtl.Agent.Terminal; var builder = WebApplication.CreateBuilder(args); var agentOptions = builder.Services.AddAgentOptions(builder.Configuration); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(serviceProvider => { var options = serviceProvider.GetRequiredService>().Value; return new ProjectStore(options.DataRoot); }); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(serviceProvider => { var options = serviceProvider.GetRequiredService>().Value; return new SessionHistoryStore(options.DataRoot); }); // Task 2 uses ASP.NET Core's local development certificate so HttpsPort is a truthful HTTPS listener. builder.WebHost.ConfigureKestrel(kestrel => { AgentEndpointConfiguration.ConfigureHttpsEndpoint(kestrel, agentOptions); }); var app = builder.Build(); agentOptions = app.Services.GetRequiredService>().Value; Directory.CreateDirectory(agentOptions.DataRoot); app.MapGet("/health", () => Results.Json(new { status = "ok" })); app.MapPairingEndpoints(); app.MapProjectEndpoints(); app.MapSessionEndpoints(); app.MapTerminalSocket(); app.Run(); public partial class Program;