use clap::{Args, Subcommand};
#[derive(Debug, Args)]
pub struct PluginArgs {
#[command(subcommand)]
pub command: PluginSub,
}
#[derive(Debug, Subcommand)]
pub enum PluginSub {
Install(PluginInstallArgs),
Uninstall(PluginUninstallArgs),
List,
}
#[derive(Debug, Clone, Copy, clap::ValueEnum)]
pub enum ScopeArg {
User,
Project,
}
#[derive(Debug, Args)]
pub struct AgentFlags {
#[arg(long)]
pub claude: bool,
#[arg(long)]
pub codex: bool,
#[arg(long)]
pub opencode: bool,
#[arg(long)]
pub cursor: bool,
#[arg(long)]
pub windsurf: bool,
#[arg(long)]
pub aider: bool,
#[arg(long)]
pub zed: bool,
#[arg(long)]
pub gemini: bool,
#[arg(long)]
pub copilot: bool,
#[arg(long = "continue")]
pub continue_dev: bool,
#[arg(long)]
pub kiro: bool,
#[arg(long)]
pub antigravity: bool,
#[arg(long)]
pub all: bool,
}
#[derive(Debug, Args)]
#[command(after_help = "EXAMPLES:\n \
zenith plugin install # auto-detect and install for the user\n \
zenith plugin install --claude --codex # specific agents\n \
zenith plugin install --all --scope project # everything, into ./\n \
zenith plugin install --claude --dry-run # preview without writing")]
pub struct PluginInstallArgs {
#[command(flatten)]
pub agents: AgentFlags,
#[arg(long, value_enum, default_value_t = ScopeArg::User)]
pub scope: ScopeArg,
#[arg(long)]
pub force: bool,
#[arg(long)]
pub dry_run: bool,
}
#[derive(Debug, Args)]
pub struct PluginUninstallArgs {
#[command(flatten)]
pub agents: AgentFlags,
#[arg(long, value_enum, default_value_t = ScopeArg::User)]
pub scope: ScopeArg,
#[arg(long)]
pub dry_run: bool,
}