feat(20-02): wire SSE subscription hooks into dashboard, detail, and inbox pages

Add useSubscription hooks to all three UI pages that invalidate React
Query caches on domain events:
- Dashboard: onTaskUpdate invalidates listInitiatives + listPhases
- Detail: onTaskUpdate invalidates phases/tasks/plans, onAgentUpdate
  invalidates listAgents
- Inbox: onAgentUpdate invalidates listWaitingAgents + listMessages

Subscription failures are silent (onError: () => {}) so pages degrade
gracefully to manual refresh when the backend is not running.
This commit is contained in:
Lukas May
2026-02-04 22:21:44 +01:00
parent eaf3f10722
commit 170ac55afd
3 changed files with 38 additions and 2 deletions

View File

@@ -209,6 +209,23 @@ function InitiativeDetailPage() {
const { id } = Route.useParams();
const navigate = useNavigate();
// Live updates: invalidate detail queries on task/phase and agent events
const utils = trpc.useUtils();
trpc.onTaskUpdate.useSubscription(undefined, {
onData: () => {
void utils.listPhases.invalidate();
void utils.listTasks.invalidate();
void utils.listPlans.invalidate();
},
onError: () => {},
});
trpc.onAgentUpdate.useSubscription(undefined, {
onData: () => {
void utils.listAgents.invalidate();
},
onError: () => {},
});
// State
const [selectedTaskId, setSelectedTaskId] = useState<string | null>(null);
const [taskCountsByPhase, setTaskCountsByPhase] = useState<