use clap::{Parser, Subcommand};
#[derive(Parser, Debug)]
#[command(
name = "babysit",
version,
about = "Run a command inside a TUI and expose it to external agents via subcommands",
long_about = None,
arg_required_else_help = false,
// When no subcommand is given, trailing args become the wrapped command.
subcommand_negates_reqs = true,
)]
pub struct Cli {
#[command(subcommand)]
pub command: Option<Command>,
#[arg(long, value_name = "NAME")]
pub name: Option<String>,
#[arg(trailing_var_arg = true, allow_hyphen_values = true, num_args = 0..)]
pub cmd: Vec<String>,
}
#[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 {
List {
#[arg(long)]
json: bool,
},
Status {
#[command(flatten)]
sel: SessionSel,
#[arg(long)]
json: bool,
},
Log {
#[command(flatten)]
sel: SessionSel,
#[arg(long)]
tail: Option<usize>,
#[arg(long)]
raw: bool,
},
Restart {
#[command(flatten)]
sel: SessionSel,
},
Kill {
#[command(flatten)]
sel: SessionSel,
},
Send {
#[command(flatten)]
sel: SessionSel,
text: String,
},
}
pub fn print_help() {
use clap::CommandFactory;
Cli::command().print_help().ok();
println!();
}