feat: live SSE updates for the SYST3M reminders section

Add RemindersChanged SSE event so the pending-reminders list in the
SYST3M tab updates live without polling.

Backend emission sites (every path that mutates the reminders table):
- agent_server: store_remind (remind MCP call)
- dashboard.rs: post_cancel_reminder, post_retry_reminder
- questions.rs: cancel_loose_end Reminder kind
- reminder_scheduler: after each delivery batch (any_delivered)

Coordinator gets emit_reminders_snapshot() mirroring the existing
emit_schedules_snapshot() pattern: lists PendingReminder rows from the
broker and emits DashboardEvent::RemindersChanged.

Frontend: applyRemindersChanged(ev) calls renderReminders(ev.reminders)
and is registered as reminders_changed in MUTATION_HANDLERS.

Docs: dashboard.md reminders_changed entry; CLAUDE.md file map updated.
This commit is contained in:
iris 2026-06-05 10:13:16 +02:00 committed by mara
commit a1e46e2b3d
9 changed files with 55 additions and 1 deletions

View file

@ -227,6 +227,9 @@ window.marked = marked;
schedulesState = (ev.schedules || []).slice();
renderSchedulesList();
}
function applyRemindersChanged(ev) {
renderReminders(ev.reminders || []);
}
// Map from agent name → highest-priority in-flight queue entry
// (`running` beats `queued`). Used by the container row renderer
// to surface "building..." / "meta-updating..." badges on the
@ -3604,6 +3607,7 @@ window.marked = marked;
meta_update_running: applyMetaUpdateRunning,
rebuild_queue_changed: applyRebuildQueueChanged,
schedules_changed: applySchedulesChanged,
reminders_changed: applyRemindersChanged,
};
(function bindDashboardStream() {
// Route through the SharedWorker so all open hyperhive tabs share