diff --git a/src/ClaudeDo.Ui/AssemblyInfo.cs b/src/ClaudeDo.Ui/AssemblyInfo.cs new file mode 100644 index 0000000..73cdf1c --- /dev/null +++ b/src/ClaudeDo.Ui/AssemblyInfo.cs @@ -0,0 +1,2 @@ +using System.Runtime.CompilerServices; +[assembly: InternalsVisibleTo("ClaudeDo.Ui.Tests")] diff --git a/src/ClaudeDo.Ui/Services/IWorkerClient.cs b/src/ClaudeDo.Ui/Services/IWorkerClient.cs index 279ee31..a419f36 100644 --- a/src/ClaudeDo.Ui/Services/IWorkerClient.cs +++ b/src/ClaudeDo.Ui/Services/IWorkerClient.cs @@ -1,7 +1,14 @@ +using System.ComponentModel; +using ClaudeDo.Data.Models; + namespace ClaudeDo.Ui.Services; -public interface IWorkerClient +public interface IWorkerClient : INotifyPropertyChanged { + bool IsConnected { get; } + + event Action? TaskStartedEvent; + event Action? TaskFinishedEvent; event Action? TaskUpdatedEvent; event Action? WorktreeUpdatedEvent; event Action? TaskMessageEvent; @@ -13,6 +20,13 @@ public interface IWorkerClient event Action? PlanningCompletedEvent; Task WakeQueueAsync(); + Task RunNowAsync(string taskId); + Task ContinueTaskAsync(string taskId, string followUpPrompt); + Task ResetTaskAsync(string taskId); + Task CancelTaskAsync(string taskId); + Task> GetAgentsAsync(); + Task GetListConfigAsync(string listId); + Task UpdateTaskAgentSettingsAsync(UpdateTaskAgentSettingsDto dto); Task StartPlanningSessionAsync(string taskId, CancellationToken ct = default); Task ResumePlanningSessionAsync(string taskId, CancellationToken ct = default); Task DiscardPlanningSessionAsync(string taskId, CancellationToken ct = default); diff --git a/src/ClaudeDo.Ui/ViewModels/Islands/DetailsIslandViewModel.cs b/src/ClaudeDo.Ui/ViewModels/Islands/DetailsIslandViewModel.cs index 66c0e52..404472b 100644 --- a/src/ClaudeDo.Ui/ViewModels/Islands/DetailsIslandViewModel.cs +++ b/src/ClaudeDo.Ui/ViewModels/Islands/DetailsIslandViewModel.cs @@ -16,7 +16,7 @@ namespace ClaudeDo.Ui.ViewModels.Islands; public sealed partial class DetailsIslandViewModel : ViewModelBase { private readonly IDbContextFactory _dbFactory; - private readonly WorkerClient _worker; + private readonly IWorkerClient _worker; private readonly IServiceProvider _services; // Current task row (set by IslandsShellViewModel via Bind) @@ -151,7 +151,7 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase // Set by the view so DeleteTaskCommand can show an error message public Func? ShowErrorAsync { get; set; } - public DetailsIslandViewModel(IDbContextFactory dbFactory, WorkerClient worker, IServiceProvider services) + public DetailsIslandViewModel(IDbContextFactory dbFactory, IWorkerClient worker, IServiceProvider services) { _dbFactory = dbFactory; _worker = worker; @@ -545,7 +545,7 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase catch { /* best-effort */ } } - private void RecomputeCanMergeAll() + internal void RecomputeCanMergeAll() { var notDone = Subtasks.Count(c => c.Status != ClaudeDo.Data.Models.TaskStatus.Done); if (notDone > 0) diff --git a/src/ClaudeDo.Ui/Views/Islands/DetailsIslandView.axaml b/src/ClaudeDo.Ui/Views/Islands/DetailsIslandView.axaml index cc61a55..608d81d 100644 --- a/src/ClaudeDo.Ui/Views/Islands/DetailsIslandView.axaml +++ b/src/ClaudeDo.Ui/Views/Islands/DetailsIslandView.axaml @@ -157,6 +157,7 @@