# ClaudeDo.App Desktop entry point for the ClaudeDo application. Configures DI, initializes the database, and launches the Avalonia window. ## Responsibility - `Program.cs` — STA thread, DI container registration (repositories, services, viewmodels), schema init, Avalonia builder - `App.axaml` / `App.axaml.cs` — Avalonia application lifecycle, main window creation, static `ServiceProvider` accessor - `ViewLocator.cs` — reflection-based IDataTemplate that maps ViewModels to Views by naming convention ## Dependencies - Avalonia 12.0.0 (Desktop, Fluent theme, Inter fonts) - CommunityToolkit.Mvvm 8.4.1 - Microsoft.Extensions.DependencyInjection 8.0.1 - Microsoft.AspNetCore.SignalR.Client 8.0.11 - Microsoft.Data.Sqlite 8.0.11 - Project references: ClaudeDo.Data, ClaudeDo.Ui ## DI Registration Pattern - **Singletons**: `IDbContextFactory`, all Repositories, GitService, WorkerClient, `IReleaseClient`, `UpdateCheckService`, `IPrimeScheduleApi`/`WorkerPrimeScheduleApi`, `INotesApi`/`WorkerNotesApi`, `InstallerLocator` / `WorkerLocator`, the island VMs (`ListsIslandViewModel`, `TasksIslandViewModel`, `DetailsIslandViewModel`) and `IslandsShellViewModel` (the window's DataContext) - **Transients**: modal VMs (`SettingsModalViewModel`, `MergeModalViewModel`, `ListSettingsModalViewModel`, `RepoImportModalViewModel`, `WeeklyReportModalViewModel`, `WorktreeModalViewModel`, `WorktreesOverviewModalViewModel`, `PrimeClaudeTabViewModel`), several exposed as `Func` factories for on-demand dialog creation; `ConflictResolverViewModel` via a `Func` factory keyed by taskId (singleton factory, handed to `IslandsShellViewModel.ConflictResolverFactory`) ## Notes - This project owns the composition root — all wiring happens here - ViewLocator resolves `FooViewModel` -> `FooView` by replacing "ViewModel" with "View" in the type name - AvaloniaUI diagnostics are conditionally included (DEBUG only)