use clap::{Parser, Subcommand};
#[derive(Parser, Debug)]
#[command(
name = "babysit",
version,
about = "Wrap a shell command in a PTY and expose it to external agents via subcommands",
long_about = None,
arg_required_else_help = true,
)]
pub struct Cli {
#[command(subcommand)]
pub command: Command,
}
#[derive(clap::Args, Debug, Clone)]
pub struct SessionSel {
#[arg(short = 's', long, value_name = "ID_OR_NAME")]
pub session: Option<String>,
}
#[derive(Subcommand, Debug)]
pub enum Command {
Run {
#[arg(long, value_name = "NAME")]
name: Option<String>,
#[arg(trailing_var_arg = true, allow_hyphen_values = true, num_args = 1..)]
cmd: Vec<String>,
},
#[command(alias = "ls")]
List {
#[arg(long)]
json: bool,
},
#[command(aliases = ["st", "info"])]
Status {
#[command(flatten)]
sel: SessionSel,
#[arg(long)]
json: bool,
},
#[command(alias = "logs")]
Log {
#[command(flatten)]
sel: SessionSel,
#[arg(long)]
tail: Option<usize>,
#[arg(long)]
raw: bool,
},
#[command(alias = "r")]
Restart {
#[command(flatten)]
sel: SessionSel,
},
#[command(alias = "stop")]
Kill {
#[command(flatten)]
sel: SessionSel,
},
#[command(alias = "type")]
Send {
#[command(flatten)]
sel: SessionSel,
text: String,
},
Prune {
#[arg(long)]
dry_run: bool,
},
Upgrade,
}