agents get a kickoff inbox message on start/restart/rebuild
new Coordinator::kick_agent(name, reason) drops a system message into the agent's inbox so the next turn picks it up with a 'you were just (re)started, check /state/ for notes, --continue session is intact' hint. wakes the turn loop without any harness-side handling needed — it's just another inbox message with sender = 'system'. wired from: - dashboard /start /restart /rebuild handlers (via lifecycle_action's on-success tail) - manager mcp_hyperhive_start / restart dashboard: pending approvals + tombstones + questions now refresh on a 5s heartbeat when nothing else is happening. previously refresh only fired on async-form submit or on broker traffic addressed to operator — manager-queued approvals went through neither, so the operator had to reload to see them. 5s is the slow-path; 2s remains for in-flight transients.
This commit is contained in:
parent
8b10731aa4
commit
2413d664a1
4 changed files with 42 additions and 9 deletions
|
|
@ -225,7 +225,8 @@ async fn build_container_views(
|
|||
if needs_update {
|
||||
any_stale = true;
|
||||
}
|
||||
let needs_login = !is_manager && !claude_has_session(&Coordinator::agent_claude_dir(&logical));
|
||||
let needs_login =
|
||||
!is_manager && !claude_has_session(&Coordinator::agent_claude_dir(&logical));
|
||||
let pending = transient_snapshot
|
||||
.get(&logical)
|
||||
.map(|st| transient_label(st.kind));
|
||||
|
|
@ -497,7 +498,7 @@ async fn post_rebuild(State(state): State<AppState>, AxumPath(name): AxumPath<St
|
|||
let rev = current_rev.clone();
|
||||
async move { crate::auto_update::rebuild_agent(&coord, &n, &rev).await }
|
||||
},
|
||||
|_, _| {},
|
||||
|s, n| s.coord.kick_agent(n, "container rebuilt"),
|
||||
)
|
||||
.await
|
||||
}
|
||||
|
|
@ -562,7 +563,7 @@ async fn post_restart(State(state): State<AppState>, AxumPath(name): AxumPath<St
|
|||
crate::coordinator::TransientKind::Restarting,
|
||||
"restart",
|
||||
|n| async move { lifecycle::restart(&n).await },
|
||||
|_, _| {},
|
||||
|s, n| s.coord.kick_agent(n, "container restarted"),
|
||||
)
|
||||
.await
|
||||
}
|
||||
|
|
@ -574,7 +575,7 @@ async fn post_start(State(state): State<AppState>, AxumPath(name): AxumPath<Stri
|
|||
crate::coordinator::TransientKind::Starting,
|
||||
"start",
|
||||
|n| async move { lifecycle::start(&n).await },
|
||||
|_, _| {},
|
||||
|s, n| s.coord.kick_agent(n, "container started"),
|
||||
)
|
||||
.await
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue