Skip to content

[Windows] Project scaffold — C# / WPF / .NET 8 #138

@2witstudios

Description

@2witstudios

Overview

Create the Windows desktop app project scaffold at windows/ using C#, WPF, and .NET 8 LTS.

Project Structure

windows/
├── PPGDesktop.sln
├── PPGDesktop/
│   ├── PPGDesktop.csproj
│   ├── App.xaml / App.xaml.cs        # Entry, DI container, global resources
│   ├── MainWindow.xaml / .cs         # Shell: Grid with sidebar + content area
│   ├── Models/
│   │   ├── Manifest.cs              # Manifest, WorktreeEntry, AgentEntry
│   │   ├── AgentVariant.cs          # Variant definitions
│   │   ├── ServerConnection.cs      # URL, token, name
│   │   ├── AppSettings.cs           # Settings model
│   │   └── DashboardSession.cs      # Session persistence model
│   ├── ViewModels/
│   │   ├── MainViewModel.cs         # Root, navigation state
│   │   ├── SidebarViewModel.cs      # Tree items, selection
│   │   ├── TerminalViewModel.cs     # Terminal bridge state
│   │   ├── HomeDashboardViewModel.cs
│   │   ├── SpawnDialogViewModel.cs
│   │   ├── SettingsViewModel.cs
│   │   ├── PromptsViewModel.cs
│   │   ├── SwarmsViewModel.cs
│   │   └── SchedulesViewModel.cs
│   ├── Views/
│   │   ├── SidebarView.xaml
│   │   ├── TerminalView.xaml
│   │   ├── HomeDashboardView.xaml
│   │   ├── WorktreeDetailView.xaml
│   │   ├── SpawnDialog.xaml
│   │   ├── SettingsView.xaml
│   │   ├── PromptsView.xaml
│   │   ├── SwarmsView.xaml
│   │   ├── SchedulesView.xaml
│   │   └── AgentConfigView.xaml
│   ├── Services/
│   │   ├── PpgApiClient.cs          # HttpClient REST wrapper
│   │   ├── WebSocketClient.cs       # Reconnecting WS
│   │   ├── ManifestStore.cs         # Observable manifest state
│   │   └── TokenStorage.cs          # DPAPI credential storage
│   ├── Terminal/
│   │   ├── TerminalControl.cs       # Native WPF terminal renderer
│   │   ├── VtParser.cs              # VT100/xterm escape sequence parser
│   │   ├── TerminalBuffer.cs        # Scrollback buffer + screen state
│   │   └── AnsiColorMap.cs          # ANSI color palette
│   ├── Converters/
│   │   ├── StatusToColorConverter.cs
│   │   └── BoolToVisibilityConverter.cs
│   └── Theme/
│       └── Theme.cs                 # Adaptive light/dark colors
├── PPGDesktop.Tests/
│   └── PPGDesktop.Tests.csproj

.csproj Dependencies

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net8.0-windows</TargetFramework>
    <UseWPF>true</UseWPF>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="CommunityToolkit.Mvvm" Version="8.*" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.*" />
  </ItemGroup>
</Project>

MVVM Architecture

  • CommunityToolkit.Mvvm for ObservableObject, RelayCommand, source generators
  • Microsoft.Extensions.DependencyInjection for service registration
  • ManifestStore as singleton observable service
  • ViewModels bind to ManifestStore properties

Acceptance Criteria

  • dotnet build compiles cleanly
  • App launches and shows empty MainWindow
  • DI container registers all services and view models
  • MainWindow has Grid layout with sidebar column + content column

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions