From 6cb8012d820622a30f5471c5034146fcdded5ded Mon Sep 17 00:00:00 2001 From: Mika Kuns Date: Tue, 14 Apr 2026 14:04:17 +0200 Subject: [PATCH] feat(worker): add ContinueTask, GetAgents, RefreshAgents hub methods and RunCreated broadcast --- src/ClaudeDo.Worker/Hub/HubBroadcaster.cs | 3 +++ src/ClaudeDo.Worker/Hub/WorkerHub.cs | 28 ++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/ClaudeDo.Worker/Hub/HubBroadcaster.cs b/src/ClaudeDo.Worker/Hub/HubBroadcaster.cs index d46d4bb..93aa7ef 100644 --- a/src/ClaudeDo.Worker/Hub/HubBroadcaster.cs +++ b/src/ClaudeDo.Worker/Hub/HubBroadcaster.cs @@ -22,4 +22,7 @@ public sealed class HubBroadcaster public Task TaskUpdated(string taskId) => _hub.Clients.All.SendAsync("TaskUpdated", taskId); + + public Task RunCreated(string taskId, int runNumber, bool isRetry) => + _hub.Clients.All.SendAsync("RunCreated", taskId, runNumber, isRetry); } diff --git a/src/ClaudeDo.Worker/Hub/WorkerHub.cs b/src/ClaudeDo.Worker/Hub/WorkerHub.cs index 6acbea3..ed1ce23 100644 --- a/src/ClaudeDo.Worker/Hub/WorkerHub.cs +++ b/src/ClaudeDo.Worker/Hub/WorkerHub.cs @@ -1,4 +1,5 @@ using System.Reflection; +using ClaudeDo.Data.Models; using ClaudeDo.Worker.Services; using Microsoft.AspNetCore.SignalR; @@ -10,8 +11,13 @@ public sealed class WorkerHub : Microsoft.AspNetCore.SignalR.Hub Assembly.GetExecutingAssembly().GetName().Version?.ToString(3) ?? "0.0.0"; private readonly QueueService _queue; + private readonly AgentFileService _agentService; - public WorkerHub(QueueService queue) => _queue = queue; + public WorkerHub(QueueService queue, AgentFileService agentService) + { + _queue = queue; + _agentService = agentService; + } public string Ping() => $"pong v{Version}"; @@ -38,7 +44,27 @@ public sealed class WorkerHub : Microsoft.AspNetCore.SignalR.Hub } } + public async Task ContinueTask(string taskId, string followUpPrompt) + { + try + { + return await _queue.ContinueTask(taskId, followUpPrompt); + } + catch (InvalidOperationException ex) + { + throw new HubException(ex.Message); + } + catch (KeyNotFoundException) + { + throw new HubException("task not found"); + } + } + public bool CancelTask(string taskId) => _queue.CancelTask(taskId); public void WakeQueue() => _queue.WakeQueue(); + + public async Task> GetAgents() => await _agentService.ScanAsync(); + + public async Task RefreshAgents() => await _agentService.ScanAsync(); }