remove the get_host_journal MCP tool and its capability
swarm-logs covers every host-tier unit this tool could reach, so the second, capability-gated path into host journald earns nothing and is removed outright rather than disabled behind a flag. Removed end to end: the MCP tool definition + handler, the GetHostJournal/HostJournal wire variants, hive-c0re's dispatch_host_journal handler, the ReadHostJournal capability, and the harness-side capability->--allowedTools gate. get_host_journal was the only capability that mapped to an MCP tool, so allowed_capability_tools could only ever return an empty vec; it goes too rather than linger as a function that provably does nothing. capabilities::has_cap/caps_for stay: #4624 gave ManageRootAgent's bind-mount enforcement (hive-c0re/src/lifecycle/host_config.rs) a second caller of has_cap, so they're no longer callerless once this lands on top of it. hive-sh4re's journal module (JournalPriority) had no consumer outside this tool and is deleted. An existing capabilities.json still naming read_host_journal does not error: capabilities::prune_unknown drops unrecognised names with a warn!, and an agent left with no capabilities has its entry removed. No migration step is needed. Untouched: hive-c0re/src/dashboard/journal.rs's read_host_journal_response, which matches the name but is the private helper behind the operator-only GET /api/journal-host dashboard route and carries no capability check.
This commit is contained in:
parent
eec908bdb7
commit
11097ed336
18 changed files with 21 additions and 401 deletions
|
|
@ -2259,8 +2259,8 @@ fn validate_forge_admin_arg(arg: &str) -> Result<()> {
|
|||
/// ⚠️ This deliberately over-matches. A nix store hash is also a long
|
||||
/// opaque run and will redact its line. That is the correct direction to
|
||||
/// be wrong in: the cost of a false positive is one less log line, and
|
||||
/// the cost of a false negative is a live credential in a journal that
|
||||
/// any `read_host_journal` holder can read.
|
||||
/// the cost of a false negative is a live credential sitting in the host
|
||||
/// journal, readable by anything with access to it.
|
||||
fn redact_secret_line(line: &str) -> std::borrow::Cow<'_, str> {
|
||||
if line.to_ascii_lowercase().contains("password") {
|
||||
return std::borrow::Cow::Borrowed("[redacted: line mentions a password]");
|
||||
|
|
|
|||
Loading…
Reference in a new issue