Files
ClaudeDo/src/ClaudeDo.Ui/CLAUDE.md

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 (extends ObservableObject)

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