Skip to content

[Windows] Sidebar, home dashboard, command palette, settings, and secondary views #141

@2witstudios

Description

@2witstudios

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

  • Sidebar shows full project/worktree/agent tree with status indicators
  • Home dashboard with project cards, heatmap, commits
  • Command palette spawns agents
  • Settings persist and apply live
  • Split-pane grid with keyboard shortcuts
  • Prompts/Swarms/Schedules/AgentConfig views functional
  • Session persistence and restore
  • Multi-project support

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