cove_cli/commands/
kill.rs1use crate::colors::*;
2use crate::events;
3use crate::tmux;
4
5fn write_end_event(window_name: &str) {
8 let pane_id = match tmux::get_claude_pane_id(window_name) {
9 Ok(id) => id,
10 Err(_) => return,
11 };
12 let session_id = match events::find_session_id(&pane_id) {
13 Some(id) => id,
14 None => return,
15 };
16 let cwd = tmux::list_windows()
17 .ok()
18 .and_then(|wins| {
19 wins.into_iter()
20 .find(|w| w.name == window_name)
21 .map(|w| w.pane_path)
22 })
23 .unwrap_or_default();
24 let _ = events::write_event(&session_id, &cwd, &pane_id, "end");
25}
26
27pub fn run(name: &str) -> Result<(), String> {
28 if !tmux::has_session() {
29 println!("{ANSI_OVERLAY}No active cove session.{ANSI_RESET}");
30 return Err(String::new());
31 }
32
33 write_end_event(name);
34 tmux::kill_window(name)?;
35 println!("Killed: {ANSI_PEACH}{name}{ANSI_RESET}");
36 Ok(())
37}
38
39pub fn run_all() -> Result<(), String> {
40 if !tmux::has_session() {
41 println!("{ANSI_OVERLAY}No active cove session.{ANSI_RESET}");
42 return Err(String::new());
43 }
44
45 if let Ok(windows) = tmux::list_windows() {
46 for win in &windows {
47 write_end_event(&win.name);
48 }
49 }
50 tmux::kill_session()?;
51 println!("Killed all sessions.");
52 Ok(())
53}