container row: pending-reminder count chip (⏰ N)
ContainerView gains pending_reminders: u64; computed during build_all via Broker::count_pending_reminders_for, mapping manager → MANAGER_AGENT recipient + sub-agents → logical name. Updates on every rescan (mutation sites + crash_watch's 10s poll); accept 10s staleness on background remind / scheduler delivery — live updates on operator cancel via /api/state path. client renders a small cyan chip on the row when the count > 0; tooltip points the operator at the reminders section to view or cancel.
This commit is contained in:
parent
aed43ce4df
commit
087a5366fb
3 changed files with 34 additions and 0 deletions
|
|
@ -29,6 +29,13 @@ pub struct ContainerView {
|
|||
/// for this agent's input.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub deployed_sha: Option<String>,
|
||||
/// Count of this agent's pending reminders. Computed during
|
||||
/// `build_all` via `Broker::count_pending_reminders_for`; the
|
||||
/// dashboard renders a small chip when > 0. Updates with the
|
||||
/// 10s `crash_watch` rescan + every container mutation site;
|
||||
/// not real-time on remind/cancel-reminder but close enough.
|
||||
#[serde(default)]
|
||||
pub pending_reminders: u64,
|
||||
}
|
||||
|
||||
/// Build the full container list. Wraps `lifecycle::list()` and
|
||||
|
|
@ -53,6 +60,20 @@ pub async fn build_all(coord: &Coordinator) -> Vec<ContainerView> {
|
|||
let deployed_sha = locked
|
||||
.get(&format!("agent-{logical}"))
|
||||
.map(|s| s[..s.len().min(12)].to_owned());
|
||||
// Recipient name the broker uses for this agent — sub-agents
|
||||
// are addressed by logical name, the manager by the
|
||||
// MANAGER_AGENT constant. Mirrors the rest of the broker
|
||||
// surface so the count matches what `mcp__hyperhive__remind`
|
||||
// queued.
|
||||
let reminder_recipient = if is_manager {
|
||||
hive_sh4re::MANAGER_AGENT
|
||||
} else {
|
||||
logical.as_str()
|
||||
};
|
||||
let pending_reminders = coord
|
||||
.broker
|
||||
.count_pending_reminders_for(reminder_recipient)
|
||||
.unwrap_or(0);
|
||||
out.push(ContainerView {
|
||||
port: lifecycle::agent_web_port(&logical),
|
||||
running: lifecycle::is_running(&logical).await,
|
||||
|
|
@ -62,6 +83,7 @@ pub async fn build_all(coord: &Coordinator) -> Vec<ContainerView> {
|
|||
needs_update,
|
||||
needs_login,
|
||||
deployed_sha,
|
||||
pending_reminders,
|
||||
});
|
||||
}
|
||||
out
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue