35 lines
1.7 KiB
Rust
35 lines
1.7 KiB
Rust
//! Operations that are exposed through more than one surface (the host admin
|
|
//! socket *and* the dashboard's POST endpoints). Each function takes a
|
|
//! `&Coordinator` and the request parameters; callers stitch the response
|
|
//! shape they want (HTTP redirect vs JSON).
|
|
|
|
use std::sync::Arc;
|
|
|
|
use crate::coordinator::Coordinator;
|
|
|
|
/// Tear down a sub-agent container. By default this is non-destructive to
|
|
/// persistent state: the state dir and the Claude
|
|
/// credentials dir under `/var/lib/hyperhive/agents/<name>/` are
|
|
/// kept, so recreating an agent of the same name reuses prior notes + creds
|
|
/// (no re-login). The ephemeral runtime dir under `/run/hyperhive/agents/`
|
|
/// is cleared because its contents (the mcp socket) don't survive restarts
|
|
/// anyway. With `purge=true` the persistent trees are also wiped — claude
|
|
/// creds, notes — there is no undo.
|
|
/// The bootstrap/root container is destroyable like any other. Nothing
|
|
/// recreates it afterwards: ruth stays gone until she is created again from
|
|
/// the swarm dashboard.
|
|
///
|
|
/// Submits the teardown DAG and returns — it does not wait for the container to
|
|
/// go away. Same contract as every other lifecycle op (`rebuild`, `kill`,
|
|
/// `restart`, `start`): the queue owns the work, the caller gets an
|
|
/// acknowledgement. Progress is visible as real nodes on the dashboard.
|
|
pub fn destroy(coord: &Arc<Coordinator>, name: &str, purge: bool) {
|
|
tracing::info!(%name, purge, "destroy");
|
|
if let Err(e) = coord.job_queue.insert_job(|b| {
|
|
crate::job_queue::templates::destroy(b, name, purge);
|
|
Vec::new()
|
|
}) {
|
|
tracing::error!(agent = %name, error = ?e, "destroy: insert failed");
|
|
}
|
|
coord.emit_rebuild_queue_snapshot();
|
|
}
|