fix: call matrix::sync_agent on rebuild, mirrors startup sweep

This commit is contained in:
damocles 2026-06-01 13:43:02 +02:00 committed by mara
commit 044ff5523c
2 changed files with 35 additions and 0 deletions

View file

@ -119,6 +119,12 @@ pub async fn rebuild_agent(
// (e.g. first-spawn seeding failed transiently) without
// requiring a full hive-c0re restart.
crate::forge::sync_agent(name, crate::forge::core_token().as_deref()).await;
// Mirror the matrix side of the startup sweep: if hive-matrix
// is present, ensure this agent has a registered user + token.
// Idempotent (skips if token file already exists). Keeps the
// rebuild path equivalent to the startup sweep for newly-spawned
// agents that missed ensure_all().
crate::matrix::sync_agent_standalone(name).await;
// Wake the agent on its next turn so claude sees a
// "you were rebuilt — check /state/ for notes, --continue
// session intact" hint. Covers dashboard rebuild, admin

View file

@ -280,6 +280,35 @@ pub async fn sync_agent(client: &reqwest::Client, name: &str, register_token: &s
}
}
/// Standalone per-agent sync that handles its own setup: checks if
/// hive-matrix is present, reads the registration token, and builds
/// an HTTP client before delegating to [`sync_agent`]. Mirrors the
/// setup in [`ensure_all`] so the rebuild path and the startup sweep
/// stay equivalent. No-op when the matrix container is absent.
pub async fn sync_agent_standalone(name: &str) {
if !is_present().await {
return;
}
let register_token = match ensure_register_token() {
Ok(t) => t,
Err(e) => {
tracing::warn!(%name, error = ?e, "matrix: ensure_register_token failed");
return;
}
};
let client = match reqwest::Client::builder()
.timeout(std::time::Duration::from_secs(HTTP_TIMEOUT_SECS))
.build()
{
Ok(c) => c,
Err(e) => {
tracing::warn!(%name, error = ?e, "matrix: build HTTP client failed");
return;
}
};
sync_agent(&client, name, &register_token).await;
}
/// Sweep every existing container (manager + sub-agents) and ensure
/// each has a matrix user + token on the local homeserver. Called once
/// at hive-c0re startup, alongside `forge::ensure_all`. No-op when the