agent_procs/cli/
session_cmd.rs1use crate::paths;
2use crate::session;
3
4pub async fn list() -> i32 {
5 let base = paths::socket_base_dir();
6
7 let entries = match std::fs::read_dir(&base) {
8 Ok(e) => e,
9 Err(_) => {
10 println!("no active sessions");
11 return 0;
12 }
13 };
14
15 println!("{:<20} STATUS", "SESSION");
16 for entry in entries.flatten() {
17 let name = entry.file_name().to_string_lossy().to_string();
18 if !name.ends_with(".pid") { continue; }
19 let session_name = name.trim_end_matches(".pid");
20 let status = if session::is_daemon_alive(&entry.path()) {
21 "running"
22 } else {
23 "stale"
24 };
25 println!("{:<20} {}", session_name, status);
26 }
27 0
28}
29
30pub async fn clean() -> i32 {
31 let base = paths::socket_base_dir();
32
33 let entries = match std::fs::read_dir(&base) {
34 Ok(e) => e,
35 Err(_) => return 0,
36 };
37
38 for entry in entries.flatten() {
39 let name = entry.file_name().to_string_lossy().to_string();
40 if !name.ends_with(".pid") { continue; }
41 let session_name = name.trim_end_matches(".pid");
42
43 if !session::is_daemon_alive(&entry.path()) {
44 let _ = std::fs::remove_file(paths::socket_path(session_name));
46 let _ = std::fs::remove_file(paths::pid_path(session_name));
47 let _ = std::fs::remove_dir_all(paths::state_dir(session_name));
49 println!("cleaned stale session: {}", session_name);
50 }
51 }
52 0
53}