Skip to main content

agent_procs/
paths.rs

1use std::env;
2use std::path::PathBuf;
3
4/// Base directory for sockets and PID files: /tmp/agent-procs-<uid>/
5/// Short fixed path to avoid macOS 103-byte socket path limit.
6pub fn socket_base_dir() -> PathBuf {
7    let uid = nix::unistd::getuid();
8    PathBuf::from(format!("/tmp/agent-procs-{}", uid))
9}
10
11pub fn socket_path(session: &str) -> PathBuf {
12    socket_base_dir().join(format!("{}.sock", session))
13}
14
15pub fn pid_path(session: &str) -> PathBuf {
16    socket_base_dir().join(format!("{}.pid", session))
17}
18
19/// State directory for persistent data (logs, state.json).
20/// Uses $XDG_STATE_HOME, defaults to ~/.local/state/.
21pub fn state_dir(session: &str) -> PathBuf {
22    let base = match env::var("XDG_STATE_HOME") {
23        Ok(dir) => PathBuf::from(dir),
24        Err(_) => {
25            let home = env::var("HOME").expect("HOME not set");
26            PathBuf::from(home).join(".local/state")
27        }
28    };
29    base.join("agent-procs/sessions").join(session)
30}
31
32pub fn log_dir(session: &str) -> PathBuf {
33    state_dir(session).join("logs")
34}
35pub fn state_file(session: &str) -> PathBuf {
36    state_dir(session).join("state.json")
37}