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") {
19 continue;
20 }
21 let session_name = name.trim_end_matches(".pid");
22 let status = if session::is_daemon_alive(&entry.path()) {
23 "running"
24 } else {
25 "stale"
26 };
27 println!("{:<20} {}", session_name, status);
28 }
29 0
30}
31
32pub async fn clean() -> i32 {
33 let base = paths::socket_base_dir();
34
35 let entries = match std::fs::read_dir(&base) {
36 Ok(e) => e,
37 Err(_) => return 0,
38 };
39
40 for entry in entries.flatten() {
41 let name = entry.file_name().to_string_lossy().to_string();
42 if !name.ends_with(".pid") {
43 continue;
44 }
45 let session_name = name.trim_end_matches(".pid");
46
47 if !session::is_daemon_alive(&entry.path()) {
48 let _ = std::fs::remove_file(paths::socket_path(session_name));
50 let _ = std::fs::remove_file(paths::pid_path(session_name));
51 let _ = std::fs::remove_dir_all(paths::state_dir(session_name));
53 println!("cleaned stale session: {}", session_name);
54 }
55 }
56 0
57}