extracted responsibilities from Program.cs (208→46 lines) and ReplLoop.cs (274→174 lines) into focused service classes: HeaderRenderer, SessionManager, ApplicationStartup, ResponseStreamer, SpinnerService, UsageDisplayer, and ContextCompactionService. Each class now has a single, well-defined responsibility, improving testability and maintainability.
46 lines
1.3 KiB
C#
46 lines
1.3 KiB
C#
using AnchorCli;
|
|
using AnchorCli.Commands;
|
|
using Spectre.Console;
|
|
|
|
Console.InputEncoding = System.Text.Encoding.UTF8;
|
|
Console.OutputEncoding = System.Text.Encoding.UTF8;
|
|
|
|
// ── Application entry point ───────────────────────────────────────────────
|
|
var startup = new ApplicationStartup(args);
|
|
|
|
// Handle setup subcommand
|
|
if (startup.HandleSetupSubcommand())
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Initialize application (load config, create clients, fetch pricing)
|
|
await startup.InitializeAsync();
|
|
|
|
// Render header
|
|
var headerRenderer = startup.CreateHeaderRenderer();
|
|
headerRenderer.Render();
|
|
|
|
// Configure tool logging
|
|
startup.ConfigureToolLogging();
|
|
|
|
// Create core components
|
|
var session = startup.CreateSession();
|
|
startup.TokenTracker.Session = session;
|
|
|
|
var commandRegistry = startup.CreateCommandRegistry(session);
|
|
var commandDispatcher = new CommandDispatcher(commandRegistry);
|
|
|
|
// Create session manager
|
|
var sessionManager = new SessionManager(session);
|
|
|
|
// Auto-load session if it exists
|
|
await sessionManager.TryLoadAsync();
|
|
|
|
// Run REPL loop
|
|
var repl = new ReplLoop(session, startup.TokenTracker, commandDispatcher, sessionManager);
|
|
await repl.RunAsync();
|
|
|
|
// Auto-save session on clean exit
|
|
await sessionManager.TrySaveAsync();
|