# 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` 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` — 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