diff --git a/src/ClaudeDo.Ui/Services/WorkerClient.cs b/src/ClaudeDo.Ui/Services/WorkerClient.cs index 6332b23..fd7d599 100644 --- a/src/ClaudeDo.Ui/Services/WorkerClient.cs +++ b/src/ClaudeDo.Ui/Services/WorkerClient.cs @@ -395,11 +395,11 @@ public partial class WorkerClient : ObservableObject, IAsyncDisposable, IWorkerC await _hub.InvokeAsync("SetTaskStatus", taskId, status.ToString()); } - public async Task CleanupFinishedWorktreesAsync() + public async Task CleanupFinishedWorktreesAsync(string? listId = null) { try { - return await _hub.InvokeAsync("CleanupFinishedWorktrees"); + return await _hub.InvokeAsync("CleanupFinishedWorktrees", listId); } catch { @@ -419,6 +419,43 @@ public partial class WorkerClient : ObservableObject, IAsyncDisposable, IWorkerC } } + public async Task> GetWorktreesOverviewAsync(string? listId) + { + try + { + var rows = await _hub.InvokeAsync>("GetWorktreesOverview", listId); + return rows ?? new List(); + } + catch + { + return new List(); + } + } + + public async Task SetWorktreeStateAsync(string taskId, WorktreeState newState) + { + try + { + return await _hub.InvokeAsync("SetWorktreeState", taskId, newState); + } + catch + { + return false; + } + } + + public async Task ForceRemoveWorktreeAsync(string taskId) + { + try + { + return await _hub.InvokeAsync("ForceRemoveWorktree", taskId); + } + catch + { + return null; + } + } + public async Task StartPlanningSessionAsync(string taskId, CancellationToken ct = default) => await _hub.InvokeAsync("StartPlanningSessionAsync", taskId, ct); @@ -523,3 +560,18 @@ public sealed record UpdateListConfigDto(string ListId, string? Model, string? S public sealed record UpdateTaskAgentSettingsDto(string TaskId, string? Model, string? SystemPrompt, string? AgentPath); public sealed record ListConfigDto(string? Model, string? SystemPrompt, string? AgentPath); public sealed record SeedResultDto(int Copied, int Skipped); + +public sealed record WorktreeOverviewDto( + string TaskId, + string TaskTitle, + ClaudeDo.Data.Models.TaskStatus TaskStatus, + string ListId, + string ListName, + string Path, + string BranchName, + WorktreeState State, + string? DiffStat, + DateTime CreatedAt, + bool PathExistsOnDisk); + +public sealed record ForceRemoveResultDto(bool Removed, string? Reason);