agents: persistent /agents/<n>/work dir outside state/
Agents keep git worktrees and cargo target dirs under /home/<agent>, which lives in the container rootfs and is deleted on destroy. They can't move them under state/, because a claude started there walks up into state/CLAUDE.md and takes on the agent's identity. Add a per-agent work/ dir next to state/ on the host (/var/lib/hyperhive/agents/<n>/work), bind-mounted RW at /agents/<n>/work. hive-c0re creates it in ensure_state_dir and in set_nspawn_flags (the rebuild path reaches only the latter), the agent's activation chowns it to the agent user like state/ and harness/, and measure_agent_disk counts it. destroy never touches the agent root, so work/ survives it; purge removes the whole root, so work/ goes with it. Closes #4977
This commit is contained in:
parent
962c1548eb
commit
89a5d65119
8 changed files with 123 additions and 36 deletions
|
|
@ -1130,6 +1130,14 @@ impl Coordinator {
|
|||
crate::paths::agent_state_dir(name).join("state")
|
||||
}
|
||||
|
||||
/// Per-agent working dir for worktrees and build dirs. Bind-mounted RW
|
||||
/// into the agent container at `/agents/{name}/work`. Survives
|
||||
/// destroy/recreate. A sibling of `state/` rather than inside it, so a
|
||||
/// claude started under `work/` never walks up into `state/CLAUDE.md`.
|
||||
pub fn agent_work_dir(name: &hive_types::Ident) -> PathBuf {
|
||||
crate::paths::agent_state_dir(name).join("work")
|
||||
}
|
||||
|
||||
/// Per-agent harness-internal state dir. Bind-mounted RW into the
|
||||
/// agent container at `/agents/{name}/harness`. Holds sqlite dbs
|
||||
/// and config files owned by the harness (`hyperhive-events.sqlite`,
|
||||
|
|
|
|||
Loading…
Reference in a new issue