feat(worker): broadcast child TaskUpdated events on planning CRUD

So the UI refreshes individual child rows alongside the parent during
create/update/delete/finalize from the planning MCP service.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
mika kuns
2026-04-24 14:54:46 +02:00
parent e62485db3b
commit 5a03dc8430
2 changed files with 95 additions and 15 deletions

View File

@@ -40,6 +40,7 @@ public sealed class PlanningMcpService
{
var ctx = _contextAccessor.Current;
var child = await _tasks.CreateChildAsync(ctx.ParentTaskId, title, description, tags, commitType, cancellationToken);
await BroadcastTaskUpdatedAsync(child.Id, cancellationToken);
await BroadcastTaskUpdatedAsync(ctx.ParentTaskId, cancellationToken);
return new CreatedChildDto(child.Id, "Draft");
}
@@ -83,6 +84,7 @@ public sealed class PlanningMcpService
var reload = (await _tasks.GetByIdAsync(taskId, cancellationToken))!;
var tagList = await _tasks.GetTagsAsync(reload.Id, cancellationToken);
await BroadcastTaskUpdatedAsync(reload.Id, cancellationToken);
await BroadcastTaskUpdatedAsync(ctx.ParentTaskId, cancellationToken);
return new ChildTaskDto(reload.Id, reload.Title, reload.Description, reload.Status.ToString(), tagList.Select(t => t.Name).ToList());
}
@@ -101,6 +103,7 @@ public sealed class PlanningMcpService
throw new InvalidOperationException("Cannot delete a finalized task.");
await _tasks.DeleteAsync(taskId, cancellationToken);
await BroadcastTaskUpdatedAsync(taskId, cancellationToken);
await BroadcastTaskUpdatedAsync(ctx.ParentTaskId, cancellationToken);
}
@@ -121,7 +124,11 @@ public sealed class PlanningMcpService
CancellationToken cancellationToken)
{
var ctx = _contextAccessor.Current;
var childIds = (await _tasks.GetChildrenAsync(ctx.ParentTaskId, cancellationToken))
.Select(c => c.Id).ToList();
var count = await _tasks.FinalizePlanningAsync(ctx.ParentTaskId, queueAgentTasks, cancellationToken);
foreach (var id in childIds)
await BroadcastTaskUpdatedAsync(id, cancellationToken);
await BroadcastTaskUpdatedAsync(ctx.ParentTaskId, cancellationToken);
return count;
}