Overview
Implement all WPF views to reach full feature parity with the macOS app.
Sidebar (Views/SidebarView.xaml)
WPF TreeView with HierarchicalDataTemplate:
- Project → Worktrees → Agents/AgentGroups/Terminals
- Status dots (colored
Ellipse bound to status converter)
- Navigation tabs: Dashboard, Swarms, Prompts, Schedules, Agent Config
- Context menus (right-click): Kill, Restart, Rename, Delete
- "+" button triggers SpawnDialog
Home Dashboard (Views/HomeDashboardView.xaml)
ItemsControl with project cards
- Each card: project name, branch, worktree count, agent status dots
- Commit heatmap: WPF
Canvas with Rectangle elements (13×7, 5 color levels)
- Recent commits list:
ListView with hash, message, author, relative time
- Git data via
Process.Start("git", "log ...") on background thread
Command Palette (Views/SpawnDialog.xaml)
- Modal overlay (borderless
Window or Popup)
- Phase 1:
TextBox search + ListBox of agent variants (filtered)
- Phase 2: Multi-line
TextBox for prompt
- Keyboard-driven: arrows navigate, Enter selects/submits, Escape dismisses
- Triggers spawn via REST API
Settings (Views/SettingsView.xaml)
TabControl with tabs: Connection, Terminal, Appearance, Shortcuts
- Connection: URL, token (PasswordBox), test connection button
- Terminal: font picker (monospace ComboBox), size (Slider 8-24), shell, history limit
- Appearance: System/Light/Dark radio buttons
- Shortcuts:
DataGrid of bindable actions with key recorder
- Persist to
%APPDATA%/PPG Desktop/settings.json
Split-Pane Grid
Same binary tree model as Linux issue #135:
PaneSplitNode recursive enum (Leaf/Split)
- WPF
Grid with GridSplitter for resize handles
- Max 6 panes, keyboard split (Ctrl+D / Ctrl+Shift+D), close (Ctrl+W)
- Focus tracking, hover overlay with split/close buttons
- Grid layout persisted in dashboard-sessions.json
Prompts View
Grid split: ListBox (left) + TextBox editor (right)
- Lists
.ppg/prompts/*.md and .ppg/templates/*.md
- Segmented filter
- Markdown-aware syntax highlighting (can use basic regex-based coloring via
RichTextBox or custom TextBox adorner)
Swarms View
- Split: swarm list + form
- YAML parsing via
YamlDotNet NuGet or manual parsing
- Create/edit/delete swarm definitions
Schedules View
- Calendar with Day/Week/Month modes
- Cron parser (port the macOS
CronParser.swift to C#)
- Scheduled runs shown as colored blocks
Agent Config View
- 3 tabs: CLAUDE.md editor, Skills, config.yaml
- Full text editors with syntax highlighting
Session Persistence
- Match macOS
DashboardSession.swift
- Persist entries + grid layouts to
.ppg/dashboard-sessions.json
- Debounced writes, synchronous flush on exit
- Restore sessions on relaunch
Multi-Project Support
- List of
ProjectContext persisted to app settings
- Sidebar shows all projects
- Ctrl+1-9 switches projects
- Each project has own manifest watcher + session
References
- macOS sidebar:
PPG CLI/PPG CLI/SidebarViewController.swift
- macOS dashboard:
PPG CLI/PPG CLI/HomeDashboardView.swift
- macOS palette:
PPG CLI/PPG CLI/CommandPalettePanel.swift
- macOS settings:
PPG CLI/PPG CLI/SettingsViewController.swift
Acceptance Criteria
Overview
Implement all WPF views to reach full feature parity with the macOS app.
Sidebar (Views/SidebarView.xaml)
WPF
TreeViewwithHierarchicalDataTemplate:Ellipsebound to status converter)Home Dashboard (Views/HomeDashboardView.xaml)
ItemsControlwith project cardsCanvaswithRectangleelements (13×7, 5 color levels)ListViewwith hash, message, author, relative timeProcess.Start("git", "log ...")on background threadCommand Palette (Views/SpawnDialog.xaml)
WindoworPopup)TextBoxsearch +ListBoxof agent variants (filtered)TextBoxfor promptSettings (Views/SettingsView.xaml)
TabControlwith tabs: Connection, Terminal, Appearance, ShortcutsDataGridof bindable actions with key recorder%APPDATA%/PPG Desktop/settings.jsonSplit-Pane Grid
Same binary tree model as Linux issue #135:
PaneSplitNoderecursive enum (Leaf/Split)GridwithGridSplitterfor resize handlesPrompts View
Gridsplit:ListBox(left) +TextBoxeditor (right).ppg/prompts/*.mdand.ppg/templates/*.mdRichTextBoxor customTextBoxadorner)Swarms View
YamlDotNetNuGet or manual parsingSchedules View
CronParser.swiftto C#)Agent Config View
Session Persistence
DashboardSession.swift.ppg/dashboard-sessions.jsonMulti-Project Support
ProjectContextpersisted to app settingsReferences
PPG CLI/PPG CLI/SidebarViewController.swiftPPG CLI/PPG CLI/HomeDashboardView.swiftPPG CLI/PPG CLI/CommandPalettePanel.swiftPPG CLI/PPG CLI/SettingsViewController.swiftAcceptance Criteria