claude_code_toolkit/cli/commands/
service.rs1use 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 let config_manager = ConfigurationManager::new()?;
15 config_manager.ensure_config_dir().await?;
16
17 let systemd_manager = SystemdManager::new()?;
19
20 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 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}