From 68108fe5f8144d341d01ace976b31d9fa94a694c Mon Sep 17 00:00:00 2001 From: iris Date: Fri, 5 Jun 2026 09:56:36 +0200 Subject: [PATCH] fix: emit SchedulesChanged from manager-server + approval paths Agent-triggered schedule mutations (cancel_schedule, fire_schedule_now, edit_schedule MCP tools) go through manager_server.rs, not the HTTP API handlers. Approval-resolved SchedulePrompt inserts go through actions.rs. Neither was emitting SchedulesChanged. - manager_server.rs: add emit_schedules_snapshot() on Ok in handle_cancel_schedule, handle_fire_schedule_now, handle_edit_schedule - actions.rs: emit_schedules_snapshot() after successful run_approval_schedule_prompt (covers request_schedule_prompt approval resolving) Coverage is now complete: every path that writes a scheduled_prompts row emits the SSE snapshot. --- hive-c0re/src/actions.rs | 6 +++++- hive-c0re/src/manager_server.rs | 15 ++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/hive-c0re/src/actions.rs b/hive-c0re/src/actions.rs index 9b573ec6..0364d8ed 100644 --- a/hive-c0re/src/actions.rs +++ b/hive-c0re/src/actions.rs @@ -116,7 +116,11 @@ pub async fn approve(coord: Arc, id: i64) -> Result<()> { // at the scheduled time). Run inline + fire // `ApprovalResolved` so the approval row leaves Pending // immediately. - run_approval_schedule_prompt(&coord, approval).await + let result = run_approval_schedule_prompt(&coord, approval).await; + if result.is_ok() { + coord.emit_schedules_snapshot(); + } + result } } } diff --git a/hive-c0re/src/manager_server.rs b/hive-c0re/src/manager_server.rs index ff26c197..27a31d4d 100644 --- a/hive-c0re/src/manager_server.rs +++ b/hive-c0re/src/manager_server.rs @@ -610,7 +610,10 @@ fn handle_cancel_schedule( .map_err(|e| format!("cancel all: {e:#}")), }; match result { - Ok(()) => ManagerResponse::Ok, + Ok(()) => { + coord.emit_schedules_snapshot(); + ManagerResponse::Ok + } Err(message) => ManagerResponse::Err { message }, } } @@ -647,7 +650,10 @@ async fn handle_fire_schedule_now( }; } match crate::scheduled_prompts_worker::fire_now(coord, schedule_id).await { - Ok(_report) => ManagerResponse::Ok, + Ok(_report) => { + coord.emit_schedules_snapshot(); + ManagerResponse::Ok + } Err(e) => ManagerResponse::Err { message: format!("fire schedule {schedule_id} now: {e:#}"), }, @@ -709,7 +715,10 @@ fn handle_edit_schedule( targets_remove, }; match coord.scheduled_prompts.update(schedule_id, patch) { - Ok(()) => ManagerResponse::Ok, + Ok(()) => { + coord.emit_schedules_snapshot(); + ManagerResponse::Ok + } Err(e) => ManagerResponse::Err { message: format!("edit schedule {schedule_id}: {e:#}"), },