feat(cli): spacesh-cli scaffold — clap tree, one-shot client, command mapping
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
use clap::{Parser, Subcommand, ValueEnum};
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
#[command(name = "spacesh", about = "spacesh CLI — thin client to the spacesh daemon")]
|
||||
pub struct Cli {
|
||||
/// Print raw JSON instead of human output.
|
||||
#[arg(long, global = true)]
|
||||
pub json: bool,
|
||||
#[command(subcommand)]
|
||||
pub cmd: Sub,
|
||||
}
|
||||
|
||||
#[derive(ValueEnum, Clone, Copy, Debug, PartialEq)]
|
||||
pub enum StateArg { Work, Wait, Done, Error, Idle }
|
||||
|
||||
#[derive(ValueEnum, Clone, Copy, Debug, PartialEq)]
|
||||
pub enum DirArg { Right, Down }
|
||||
|
||||
#[derive(ValueEnum, Clone, Copy, Debug, PartialEq)]
|
||||
pub enum EdgeArg { Left, Right, Top, Bottom }
|
||||
|
||||
#[derive(Subcommand, Debug)]
|
||||
pub enum Sub {
|
||||
Open { path: String },
|
||||
Status,
|
||||
NewSurface {
|
||||
workspace_id: String,
|
||||
#[arg(long)] cmd: Option<String>,
|
||||
#[arg(long = "arg")] args: Vec<String>,
|
||||
#[arg(long, default_value_t = 80)] cols: u16,
|
||||
#[arg(long, default_value_t = 24)] rows: u16,
|
||||
},
|
||||
Split {
|
||||
surface_id: String,
|
||||
#[arg(long, value_enum, default_value_t = DirArg::Right)] dir: DirArg,
|
||||
#[arg(long)] cmd: Option<String>,
|
||||
#[arg(long = "arg")] args: Vec<String>,
|
||||
},
|
||||
Close { surface_id: String },
|
||||
Focus { surface_id: String },
|
||||
Restart { surface_id: String },
|
||||
Notify {
|
||||
#[arg(long)] surface: String,
|
||||
#[arg(long, value_enum)] state: StateArg,
|
||||
},
|
||||
ApplyPreset {
|
||||
workspace_id: String,
|
||||
#[arg(long)] preset: String,
|
||||
#[arg(long = "agent")] agents: Vec<String>,
|
||||
},
|
||||
SetRatios {
|
||||
workspace_id: String,
|
||||
#[arg(long, value_delimiter = ',')] path: Vec<u32>,
|
||||
#[arg(long, value_delimiter = ',')] ratios: Vec<f32>,
|
||||
},
|
||||
Move {
|
||||
surface_id: String,
|
||||
#[arg(long)] target: String,
|
||||
#[arg(long, value_enum)] edge: EdgeArg,
|
||||
},
|
||||
CloseWorkspace { workspace_id: String },
|
||||
Group {
|
||||
#[command(subcommand)] action: GroupAction,
|
||||
},
|
||||
SetMeta {
|
||||
workspace_id: String,
|
||||
#[arg(long)] name: Option<String>,
|
||||
#[arg(long)] group: Option<String>,
|
||||
#[arg(long)] unread: Option<bool>,
|
||||
#[arg(long)] order: Option<u32>,
|
||||
},
|
||||
Shutdown,
|
||||
Completions { shell: clap_complete::Shell },
|
||||
}
|
||||
|
||||
#[derive(Subcommand, Debug)]
|
||||
pub enum GroupAction {
|
||||
Create { #[arg(long)] name: String, #[arg(long)] color: String },
|
||||
Set { group_id: String, #[arg(long)] name: Option<String>, #[arg(long)] color: Option<String>, #[arg(long)] order: Option<u32> },
|
||||
Delete { group_id: String },
|
||||
}
|
||||
Reference in New Issue
Block a user