csharpfritz / csharpfritz/SquadUI
VS 2026: Team roster tool window
- Dominant language
- TypeScript
- Stars
- 18
- Forks
- 3
- PR merge metrics
- No merged PRs in 30d
Description
## Description
Create a WPF/XAML tool window displaying the Squad team roster. This is the first UI surface for the VS 2026 extension and equivalent to the VS Code "Team" tree view. Members are displayed in a hierarchical TreeView with details (role, status, GitHub integration).
This issue depends on Issue #44 (core services) being complete.
## Acceptance Criteria
- [ ] Tool window created and registered in extension
- [ ] TreeView shows team members with proper hierarchy
- [ ] Member details displayed: Name, Role, Status indicator (emoji or icon)
- [ ] Expandable member nodes show GitHub issues assigned to that member
- [ ] Visual Studio theme integration (dark, light, blue themes all work)
- [ ] MVVM pattern used: ViewModel drives TreeView binding
- [ ] Commands integrated:
- Right-click member → View GitHub issues
- Right-click member → View activity log (if available)
- [ ] Auto-refresh when `.ai-team/team.md` changes (via FileWatcherService)
- [ ] Tool window properly docked and styled (margins, fonts, colors)
- [ ] Unit tests for ViewModel logic
## Implementation Details
### Project Structure
Add to VS 2026 project:
```
Tools/
TeamRosterToolWindow.xaml (UI)
TeamRosterToolWindow.xaml.cs (code-behind)
ViewModels/
TeamRosterViewModel.cs (MVVM ViewModel)
TeamMemberViewModel.cs (member list item)
Models/ (shared across extension)
TeamMember.cs (data model from Issue #44)
```
### XAML Tool Window
- **Root:** WPF Window with standard VS 2026 chrome
- **Layout:** TreeView with HierarchicalDataTemplate
- **Member nodes:**
```
⚡ Danny (Lead/Architect) [Active]
📝 #42 Fix login validation
📝 #45 Refactor auth service
💤 Rusty (Extension Dev) [Idle]
(no issues assigned)
```
- **Visual indicators:**
- Status: ⚡ (active/working), 💤 (idle), 🟢 (available)
- Role badge: (Lead), (Dev), (QA), etc.
- Issue count: shown in node or separate column
### MVVM ViewModel
Create `TeamRosterViewModel`:
- `Teams: ObservableCollection` — bindable list
- `SelectedMember: TeamMemberViewModel` — selection tracking
- `RefreshCommand: ICommand` — manual refresh
- `OnTeamMdChanged()` method — triggered by FileWatcherService
- Properties: IsLoading, ErrorMessage, LastRefreshTime
Create `TeamMemberViewModel`:
- `Name`, `Role`, `Status` — display properties
- `IssueCount` — calculated from GitHub integration (if available)
- `Issues: ObservableCollection` — expandable child nodes
- `IsExpanded` binding for expand/collapse state
### Theme Integration
- Use VS 2026 color resources:
- `VsColors.WindowTextBrushKey` for text
- `VsColors.WindowBackgroundBrushKey` for backgrounds
- `VsColors.ToolWindowButtonDownBorderBrushKey` for separators
- Test on all three theme variants (Dark, Light, Blue)
### Service Integration
- Inject `ITeamMdService` to fetch team data
- Inject `IFileWatcherService` to subscribe to `.ai-team/` changes
- On file change: call service's `GetTeamMembers()` and refresh ViewModel
### Commands
- Right-click context menu on member:
- "View GitHub Issues" → Opens browser to member's GitHub issues filter
- "Copy GitHub Username" → Clipboard
## Size Estimate
**M** (Medium) — 4-6 hours
## Priority
**P1** (Critical Path)
## Dependencies
- **Depends on:** Issue #44 (VS 2026: Core services — .ai-team file parsing in C#)
## Related
- **VS Code equivalent:** `src/views/SquadTreeProvider.ts` — tree view logic
- **VS Code equivalent:** `src/views/SquadStatusBar.ts` — status indicators
## Notes
- Keep ViewModel testable — separate UI binding from business logic
- Use `ObservableCollection` for automatic UI updates
- Don't call async service methods on UI thread; use Task.Run with Dispatcher.InvokeAsync for callbacks
- WPF performance: if team grows to 100+ members, consider virtualizing TreeView
- Turk (VS 2026 Extension UI) leads this work with WPF/XAML expertise
- Assigned to: **squad:turk** (VS 2026 Extension UI)
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.