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.
This commit is contained in:
iris 2026-06-05 09:56:36 +02:00 committed by mara
commit 68108fe5f8
2 changed files with 17 additions and 4 deletions

View file

@ -116,7 +116,11 @@ pub async fn approve(coord: Arc<Coordinator>, 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
}
}
}

View file

@ -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:#}"),
},