2.8 KiB
2.8 KiB
ClaudeDo.Ui
Avalonia UI layer: views, viewmodels, converters, and the SignalR client.
Pattern
MVVM with CommunityToolkit.Mvvm source generators:
[ObservableProperty]for bindable properties[RelayCommand]for commands (supports async and CanExecute)- All ViewModels inherit
ViewModelBase(extendsObservableObject)
Views
- MainWindow — 3-column DockPanel layout (lists | tasks | detail) with GridSplitter, status bar at bottom
- TaskListView — ListBox of tasks with add/edit/delete toolbar
- TaskDetailView — Task info, live log output, worktree section (merge/keep/discard)
- TaskEditorView — Modal dialog for task create/edit
- ListEditorView — Modal dialog for list create/edit
- StatusBarView — Connection status indicator, active task display
- ListSettingsModalView — edits list name, working dir, default commit type, and per-list Model/SystemPrompt/AgentPath. Opened via context menu or gear button on a list row.
- DetailsIslandView — contains an "Agent settings (overrides)" expander with per-task Model/SystemPrompt/AgentPath, showing inherited effective values. Disabled while task is running.
All views use compiled bindings (x:DataType).
ViewModels
- MainWindowViewModel — root coordinator; manages list collection, selected list, dialog creation via
Func<T>factories - TaskListViewModel — manages task collection for selected list; handles CRUD, "Run Now"
- TaskDetailViewModel — displays task details, streams live log, controls worktree operations
- TaskItemViewModel / ListItemViewModel — lightweight display VMs
- TaskEditorViewModel / ListEditorViewModel — dialog VMs with validation
- StatusBarViewModel — connection state and active tasks
Services
- WorkerClient — SignalR client connecting to
http://127.0.0.1:47821/hub. Auto-reconnect with exponential backoff. Methods: StartAsync, RunNowAsync, CancelTaskAsync, WakeQueueAsync, ContinueTaskAsync, ResetTaskAsync, GetAgentsAsync, UpdateAppSettingsAsync, UpdateListAsync, UpdateListConfigAsync, GetListConfigAsync, UpdateTaskAgentSettingsAsync. Events: TaskStarted, TaskFinished, TaskMessage, TaskUpdated, WorktreeUpdated, ListUpdated
Converters
- StatusColorConverter — task status string -> color (Queued=Blue, Running=Orange, Done=Green, Failed=Red, Manual=Gray)
- ConnectionColorConverter — connection state -> color (Online=Green, Offline=Red)
Dialog Pattern
Editor dialogs use TaskCompletionSource<bool> — the dialog sets the result on save/cancel, and the caller awaits the TCS.
Notes
- Context menus are on both list items and task items
- Right-click selects the item before showing the context menu
- "Run Now" CanExecute re-evaluates when worker connection state changes