hive-subagent-mcp: run an agent's subagents on its runtime
The subagent daemon now reads the parent agent's runtime at startup (`hive_runtime::RuntimeSpec`, from the harness's `HIVE_RUNTIME` / `HIVE_ACP_*`, which `mcp.nix` forwards onto its unit). On claude nothing changes. On ACP, each run drives an `AcpRuntime` whose session id is kept per name under the harness dir: `start` archives the old one, `continue` loads it (and fails when none is recorded), `interrupt` sends `session/cancel`, a role goes in front of the first prompt, and permission requests get the answers a claude subagent's tool list gives. The unit loads `backendEnvironmentFile` on ACP only, so the agent can authenticate. The end-of-turn handling moves out of the claude loop into `after_turn` unchanged, so both loops share it. Refs #4391
This commit is contained in:
parent
a483b23ccf
commit
84d4808d54
10 changed files with 689 additions and 71 deletions
|
|
@ -51,10 +51,11 @@ async fn main() -> Result<()> {
|
|||
// for that session alone, which is what makes a signal's identity a
|
||||
// property of the endpoint rather than of the payload.
|
||||
let signal_base = format!("http://{}{}", cli.http, hive_subagent_mcp::mcp::SIGNAL_PATH);
|
||||
let state = Arc::new(hive_subagent_mcp::session::State::new(
|
||||
todo_socket,
|
||||
signal_base,
|
||||
));
|
||||
// The parent agent's runtime, from the same variables the harness reads.
|
||||
let runtime = hive_runtime::RuntimeSpec::from_env()?;
|
||||
let state = Arc::new(
|
||||
hive_subagent_mcp::session::State::new(todo_socket, signal_base).on_runtime(runtime),
|
||||
);
|
||||
|
||||
// Serve the MCP tools over streamable-http forever. No background poll
|
||||
// loop to start — unlike the bash daemon's task-file queue, `start`/
|
||||
|
|
|
|||
Loading…
Reference in a new issue