agent: cli.rs — subcommand CLI (run, service install/uninstall/start/stop/status/restart)
This commit is contained in:
parent
7a44809a41
commit
920ea0ee9e
153
agent/src/cli.rs
Normal file
153
agent/src/cli.rs
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
//! Command-line interface with subcommands for the Butterfly agent.
|
||||||
|
//!
|
||||||
|
//! ## Usage
|
||||||
|
//!
|
||||||
|
//! ```text
|
||||||
|
//! butterfly-agent run --server ws://192.168.1.100:8080 --encoder h264
|
||||||
|
//! butterfly-agent service install --server ws://192.168.1.100:8080 --encoder h264
|
||||||
|
//! butterfly-agent service uninstall
|
||||||
|
//! butterfly-agent service start
|
||||||
|
//! butterfly-agent service stop
|
||||||
|
//! butterfly-agent service status
|
||||||
|
//! ```
|
||||||
|
//!
|
||||||
|
//! The `run` subcommand starts the agent in foreground mode (logs to stderr).
|
||||||
|
//! The `service` subcommand manages the agent as a system service:
|
||||||
|
//! - **Linux**: systemd unit in `/etc/systemd/system/`
|
||||||
|
//! - **Windows**: Windows Service via Service Control Manager
|
||||||
|
|
||||||
|
use clap::{Parser, Subcommand};
|
||||||
|
use crate::config::RunOptions;
|
||||||
|
|
||||||
|
/// Butterfly Desktop Agent — captures display from this machine, encodes as
|
||||||
|
/// H.264 or JPEG, and streams it to a Butterfly server via WebSocket.
|
||||||
|
#[derive(Parser, Debug)]
|
||||||
|
#[command(
|
||||||
|
name = "butterfly-agent",
|
||||||
|
version,
|
||||||
|
about,
|
||||||
|
propagate_version = true,
|
||||||
|
args_conflicts_with_subcommands = true,
|
||||||
|
subcommand_required = true,
|
||||||
|
)]
|
||||||
|
pub struct Cli {
|
||||||
|
#[command(subcommand)]
|
||||||
|
pub command: Command,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Top-level subcommands.
|
||||||
|
#[derive(Subcommand, Debug)]
|
||||||
|
pub enum Command {
|
||||||
|
/// Run the agent in foreground mode.
|
||||||
|
///
|
||||||
|
/// Captures the display, encodes video frames, streams via WebSocket,
|
||||||
|
/// and receives remote control commands (mouse, keyboard). Press Ctrl+C
|
||||||
|
/// to shut down gracefully.
|
||||||
|
Run {
|
||||||
|
#[command(flatten)]
|
||||||
|
opts: RunOptions,
|
||||||
|
},
|
||||||
|
|
||||||
|
/// Manage the agent as a system service.
|
||||||
|
///
|
||||||
|
/// Install, uninstall, start, stop, or check the status of the agent
|
||||||
|
/// running as a background service.
|
||||||
|
///
|
||||||
|
/// **Linux (systemd):**
|
||||||
|
/// Creates a systemd unit file at `/etc/systemd/system/<name>.service`.
|
||||||
|
/// Requires root privileges (use `sudo`).
|
||||||
|
///
|
||||||
|
/// **Windows (Service Control Manager):**
|
||||||
|
/// Registers with the Windows SCM. Requires Administrator privileges.
|
||||||
|
#[command(subcommand)]
|
||||||
|
Service(ServiceAction),
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Service management subcommands.
|
||||||
|
#[derive(Subcommand, Debug)]
|
||||||
|
pub enum ServiceAction {
|
||||||
|
/// Install the agent as a system service.
|
||||||
|
///
|
||||||
|
/// Creates the service definition with the provided run options.
|
||||||
|
/// The service will automatically start on boot (unless `--no-start` is given).
|
||||||
|
///
|
||||||
|
/// On Linux: creates `/etc/systemd/system/<name>.service` and runs `systemctl enable --now`.
|
||||||
|
/// On Windows: registers with SCM and optionally starts the service.
|
||||||
|
///
|
||||||
|
/// **Note:** On Linux, the installer captures current display environment
|
||||||
|
/// variables (DISPLAY, WAYLAND_DISPLAY, XDG_RUNTIME_DIR) so the service
|
||||||
|
/// can access the desktop. You may need to edit the unit file manually if
|
||||||
|
/// the environment changes.
|
||||||
|
Install {
|
||||||
|
#[command(flatten)]
|
||||||
|
opts: RunOptions,
|
||||||
|
|
||||||
|
/// Service name (used for systemd unit file and Windows service name).
|
||||||
|
#[arg(long, default_value = "butterfly-agent")]
|
||||||
|
name: String,
|
||||||
|
|
||||||
|
/// Human-readable service display name.
|
||||||
|
#[arg(long, default_value = "Butterfly Desktop Agent")]
|
||||||
|
display_name: String,
|
||||||
|
|
||||||
|
/// Service description.
|
||||||
|
#[arg(long, default_value = "Captures display and streams to Butterfly server with low-latency H.264 encoding")]
|
||||||
|
description: String,
|
||||||
|
|
||||||
|
/// Automatically start the service after installation.
|
||||||
|
#[arg(long, default_value_t = true, name = "no-start")]
|
||||||
|
start: bool,
|
||||||
|
|
||||||
|
/// User to run the service as (Linux only). Default: root.
|
||||||
|
#[cfg(unix)]
|
||||||
|
#[arg(long)]
|
||||||
|
user: Option<String>,
|
||||||
|
|
||||||
|
/// Working directory for the service process.
|
||||||
|
#[arg(long)]
|
||||||
|
working_directory: Option<String>,
|
||||||
|
|
||||||
|
/// Log file path (appended to by the service). If not set, uses
|
||||||
|
/// the system default (journald on Linux, Windows Event Log).
|
||||||
|
#[arg(long)]
|
||||||
|
log_file: Option<String>,
|
||||||
|
},
|
||||||
|
|
||||||
|
/// Uninstall (remove) the system service.
|
||||||
|
///
|
||||||
|
/// Stops the service if it is running, then removes the service definition.
|
||||||
|
#[arg(long, default_value = "butterfly-agent")]
|
||||||
|
Uninstall {
|
||||||
|
/// Service name to uninstall.
|
||||||
|
#[arg(long, default_value = "butterfly-agent")]
|
||||||
|
name: String,
|
||||||
|
},
|
||||||
|
|
||||||
|
/// Start the installed service.
|
||||||
|
Start {
|
||||||
|
/// Service name to start.
|
||||||
|
#[arg(long, default_value = "butterfly-agent")]
|
||||||
|
name: String,
|
||||||
|
},
|
||||||
|
|
||||||
|
/// Stop the running service.
|
||||||
|
Stop {
|
||||||
|
/// Service name to stop.
|
||||||
|
#[arg(long, default_value = "butterfly-agent")]
|
||||||
|
name: String,
|
||||||
|
},
|
||||||
|
|
||||||
|
/// Check the current status of the service.
|
||||||
|
Status {
|
||||||
|
/// Service name to check.
|
||||||
|
#[arg(long, default_value = "butterfly-agent")]
|
||||||
|
name: String,
|
||||||
|
},
|
||||||
|
|
||||||
|
/// Restart the running service.
|
||||||
|
Restart {
|
||||||
|
/// Service name to restart.
|
||||||
|
#[arg(long, default_value = "butterfly-agent")]
|
||||||
|
name: String,
|
||||||
|
},
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user