claude_code_toolkit/cli/commands/
service.rs

1use crate::{ config::manager::ConfigurationManager, error::*, utils::systemd::SystemdManager };
2use console::{ Emoji, style };
3
4static ROCKET: Emoji<'_, '_> = Emoji("🚀 ", "");
5static SUCCESS: Emoji<'_, '_> = Emoji("✅ ", "");
6static STOP: Emoji<'_, '_> = Emoji("âšī¸ ", "");
7static RESTART: Emoji<'_, '_> = Emoji("🔄 ", "");
8static TRASH: Emoji<'_, '_> = Emoji("đŸ—‘ī¸ ", "");
9
10pub async fn handle_install() -> Result<()> {
11  println!("{}Installing Claude Code sync daemon...", ROCKET);
12
13  // Ensure config directory exists
14  let config_manager = ConfigurationManager::new()?;
15  config_manager.ensure_config_dir().await?;
16
17  // Install systemd service
18  let systemd_manager = SystemdManager::new()?;
19
20  // Check if service is already running
21  if systemd_manager.is_running().await.unwrap_or(false) {
22    println!("{}Service is already installed and running", style("âš ī¸").yellow());
23    return Ok(());
24  }
25
26  systemd_manager.install().await?;
27
28  println!("{}Service installed and started successfully", SUCCESS);
29  println!();
30  println!("{}", style("Next steps:").dim());
31  println!("{}", style("1. Add organizations: claude-code org add <org-name>").dim());
32  println!("{}", style("2. Add repositories: claude-code repo add <owner/repo>").dim());
33  println!("{}", style("3. Check status: claude-code status").dim());
34
35  Ok(())
36}
37
38pub async fn handle_uninstall(keep_config: bool) -> Result<()> {
39  println!("{}Uninstalling Claude Code sync daemon...", TRASH);
40
41  let systemd_manager = SystemdManager::new()?;
42  systemd_manager.uninstall().await?;
43
44  println!("{}Service uninstalled successfully", SUCCESS);
45
46  if !keep_config {
47    println!("{}Removing configuration and logs...", style("âš ī¸").yellow());
48    // TODO: Remove config directory
49    println!("{}Configuration removed", SUCCESS);
50  } else {
51    let config_manager = ConfigurationManager::new()?;
52    println!(
53      "{}",
54      style(format!("Configuration kept at {}", config_manager.config_dir().display())).dim()
55    );
56  }
57
58  Ok(())
59}
60
61pub async fn handle_start() -> Result<()> {
62  println!("{}Starting Claude Code sync daemon...", ROCKET);
63
64  let systemd_manager = SystemdManager::new()?;
65  systemd_manager.start().await?;
66
67  println!("{}Service started successfully", SUCCESS);
68
69  Ok(())
70}
71
72pub async fn handle_stop() -> Result<()> {
73  println!("{}Stopping Claude Code sync daemon...", STOP);
74
75  let systemd_manager = SystemdManager::new()?;
76  systemd_manager.stop().await?;
77
78  println!("{}Service stopped successfully", SUCCESS);
79
80  Ok(())
81}
82
83pub async fn handle_restart() -> Result<()> {
84  println!("{}Restarting Claude Code sync daemon...", RESTART);
85
86  let systemd_manager = SystemdManager::new()?;
87  systemd_manager.restart().await?;
88
89  println!("{}Service restarted successfully", SUCCESS);
90
91  Ok(())
92}
93
94pub async fn handle_enable() -> Result<()> {
95  println!("{}Enabling Claude Code sync daemon auto-start...", SUCCESS);
96
97  let systemd_manager = SystemdManager::new()?;
98  systemd_manager.enable().await?;
99
100  println!("{}Service enabled for auto-start", SUCCESS);
101
102  Ok(())
103}
104
105pub async fn handle_disable() -> Result<()> {
106  println!("{}Disabling Claude Code sync daemon auto-start...", style("❌").red());
107
108  let systemd_manager = SystemdManager::new()?;
109  systemd_manager.disable().await?;
110
111  println!("{}Service disabled from auto-start", SUCCESS);
112
113  Ok(())
114}