diff --git a/docs/agent-hierarchy.md b/docs/agent-hierarchy.md index 18ad370f..a9ff2b9d 100644 --- a/docs/agent-hierarchy.md +++ b/docs/agent-hierarchy.md @@ -216,7 +216,7 @@ nspawn agent. Open questions, not yet wired: One harness serve binary (`hive-agent`, with its `hive-agent-mcp` / `hive-agent-wake` siblings), one shared `nix/agent-modules/` tree, one -service unit (`systemd.services.hive-ag3nt`) for all agents. There +service unit (`systemd.services.hive-agent`) for all agents. There is no longer a separate manager service name or role distinction in the harness — privilege differences live server-side in the broker socket (which tool groups and manager-surface calls each agent diff --git a/docs/web-ui/dashboard.md b/docs/web-ui/dashboard.md index 0ccdd62c..85c9b405 100644 --- a/docs/web-ui/dashboard.md +++ b/docs/web-ui/dashboard.md @@ -734,7 +734,9 @@ routing is hash-based (`#agent`, `#system`, `#audit`); default is **AGENT sub-tab** — per-container journald viewer. Two selects: agent name (populated from `GET /api/state`) and unit filter -(`hive-ag3nt.service` / `(full machine journal)`). Fetches +(`hive-agent.service` / `hive-mcp-http.service` / +`hive-bash-daemon.service` / `hive-matrix-daemon.service` / +`(full machine journal)`). Fetches `GET /api/journal/{name}?unit=&lines=500` on selection change or `↻ refresh`. Output rendered as a `
` block. A `?agent=`
 and/or `?unit=` URL param pre-selects the agent + unit on page
@@ -743,9 +745,9 @@ deep-link directly to a specific agent's journal. A "fetched N ago"
 chip appears after the `↻ refresh` button following each successful
 fetch and ticks every 30 s.
 
-**SYSTEM sub-tab** — host-side service logs. Unit selector (currently
-only `hive-c0re.service`). Fetches
-`GET /api/journal-host?unit=hive-c0re.service&lines=500` on activation
+**SYSTEM sub-tab** — host-side service logs. Unit selector
+(`hive-c0re.service` / `hive-priv.service`). Fetches
+`GET /api/journal-host?unit=&lines=500` on activation
 and on `↻ refresh`. Rendered as a `
` block. A "fetched N ago"
 chip ticks every 30 s. Available to the operator unconditionally (not
 capability-gated — the endpoint lives on the hive-c0re dashboard,
diff --git a/frontend/packages/dashboard/src/logs.html b/frontend/packages/dashboard/src/logs.html
index 2ec9875c..a682c241 100644
--- a/frontend/packages/dashboard/src/logs.html
+++ b/frontend/packages/dashboard/src/logs.html
@@ -45,7 +45,10 @@
       
@@ -61,6 +64,7 @@
diff --git a/hive-c0re/src/dashboard/journal.rs b/hive-c0re/src/dashboard/journal.rs index 6c1568bd..f579b19c 100644 --- a/hive-c0re/src/dashboard/journal.rs +++ b/hive-c0re/src/dashboard/journal.rs @@ -57,8 +57,14 @@ pub(super) async fn get_journal( let lines = q.lines.unwrap_or(500).min(5000); let unit = match q.unit.as_deref().filter(|s| !s.is_empty()) { Some(u) => { - // accept hive-agent[.service] — anything else refused. - let allowed = ["hive-agent.service"]; + // accept any of the per-container hive daemons [.service] — + // anything else refused. + let allowed = [ + "hive-agent.service", + "hive-mcp-http.service", + "hive-bash-daemon.service", + "hive-matrix-daemon.service", + ]; let unit = if u.ends_with(".service") { u.to_owned() } else { @@ -115,7 +121,7 @@ pub(super) async fn get_journal_host( axum::extract::Query(q): axum::extract::Query, ) -> Result { let lines = q.lines.unwrap_or(500).min(5000); - let allowed = ["hive-c0re.service"]; + let allowed = ["hive-c0re.service", "hive-priv.service"]; let mut cmd = tokio::process::Command::new("journalctl"); cmd.args(["--no-pager", "--output=short-iso", "--lines"]) .arg(lines.to_string());