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

4.3 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; also deletes the list (and its tasks) via a confirmed "Delete list" button. Opened via context menu or gear button on a list row.
  • RepoImportModalView — bulk-creates lists from git repos discovered under chosen parent folders. Opened via the folder button beside "New list" in the Lists island, or the "Add repos as lists…" Help-menu item. Repos already wired to a list show as disabled/"(already added)".
  • DetailsIslandView — contains an "Agent settings (overrides)" expander with per-task Model/SystemPrompt/AgentPath, showing inherited effective values. Disabled while task is running. When notes mode is active (IsNotesMode), it hosts NotesEditorView instead of the task detail.
  • WeeklyReportModalView — opened from Help menu ("Wochenbericht…"); date-range pickers default to "since last standup weekday → today"; Generate/Regenerate button; renders markdown via MarkdownView; reports are cached per range.
  • NotesEditorView — day navigator (prev/next/date-picker/Today), bullet add/edit/delete for daily notes.

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
  • WeeklyReportModalViewModel — drives the weekly report modal
  • NotesEditorViewModel — manages daily note bullet CRUD for the selected day
  • DetailsIslandViewModel gains IsNotesMode, ShowNotes(), and hosts NotesEditorViewModel
  • TasksIslandViewModel gains a pinned "Notes" pseudo-row (ShowNotesRow, OpenNotesCommand, NotesRequested event) that switches the Details island to notes mode

Services

  • WorkerClient / IWorkerClient — 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, GetWeekReportAsync, GenerateWeekReportAsync, GetDailyNotesAsync, AddDailyNoteAsync, UpdateDailyNoteAsync, DeleteDailyNoteAsync. Events: TaskStarted, TaskFinished, TaskMessage, TaskUpdated, WorktreeUpdated, ListUpdated
  • INotesApi / WorkerNotesApi — thin wrapper over the daily-note WorkerClient methods (mirrors IPrimeScheduleApi). UI DTO: DailyNoteDto(Id, Date, Text, SortOrder).

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