diff --git a/src/ClaudeDo.Worker/Hub/WorkerHub.cs b/src/ClaudeDo.Worker/Hub/WorkerHub.cs index 9205445..895c965 100644 --- a/src/ClaudeDo.Worker/Hub/WorkerHub.cs +++ b/src/ClaudeDo.Worker/Hub/WorkerHub.cs @@ -33,19 +33,22 @@ public sealed class WorkerHub : Microsoft.AspNetCore.SignalR.Hub private readonly HubBroadcaster _broadcaster; private readonly IDbContextFactory _dbFactory; private readonly WorktreeMaintenanceService _wtMaintenance; + private readonly TaskResetService _resetService; public WorkerHub( QueueService queue, AgentFileService agentService, HubBroadcaster broadcaster, IDbContextFactory dbFactory, - WorktreeMaintenanceService wtMaintenance) + WorktreeMaintenanceService wtMaintenance, + TaskResetService resetService) { _queue = queue; _agentService = agentService; _broadcaster = broadcaster; _dbFactory = dbFactory; _wtMaintenance = wtMaintenance; + _resetService = resetService; } public string Ping() => $"pong v{Version}"; @@ -89,6 +92,22 @@ public sealed class WorkerHub : Microsoft.AspNetCore.SignalR.Hub } } + public async Task ResetTask(string taskId) + { + try + { + await _resetService.ResetAsync(taskId, CancellationToken.None); + } + 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(); diff --git a/src/ClaudeDo.Worker/Program.cs b/src/ClaudeDo.Worker/Program.cs index bdc61b0..002acb0 100644 --- a/src/ClaudeDo.Worker/Program.cs +++ b/src/ClaudeDo.Worker/Program.cs @@ -30,6 +30,7 @@ builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); +builder.Services.AddSingleton(); // Agent file management. var agentsDir = Path.Combine(ClaudeDo.Data.Paths.AppDataRoot(), "agents");