use clap::{Parser, Subcommand};
use crate::config::DEFAULT_CONFIG_PATH;
#[derive(Parser)]
#[command(
name = "warmplane",
about = "The local control plane that keeps MCP sessions warm"
)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
ValidateConfig {
#[arg(short, long, default_value = DEFAULT_CONFIG_PATH)]
config: String,
},
Daemon {
#[arg(short = 'p', long)]
port: Option<u16>,
#[arg(short, long, default_value = DEFAULT_CONFIG_PATH)]
config: String,
},
McpServer {
#[arg(short, long, default_value = DEFAULT_CONFIG_PATH)]
config: String,
},
ListCapabilities {
#[arg(short = 'p', long)]
port: Option<u16>,
#[arg(short, long, default_value = DEFAULT_CONFIG_PATH)]
config: String,
},
SearchCapabilities {
#[arg(short = 'p', long)]
port: Option<u16>,
#[arg(short, long, default_value = DEFAULT_CONFIG_PATH)]
config: String,
query: String,
#[arg(short, long, default_value = "8")]
limit: usize,
#[arg(short, long)]
server: Vec<String>,
#[arg(short, long)]
tag: Vec<String>,
},
DescribeCapability {
#[arg(short = 'p', long)]
port: Option<u16>,
#[arg(short, long, default_value = DEFAULT_CONFIG_PATH)]
config: String,
id: String,
},
CallCapability {
#[arg(short = 'p', long)]
port: Option<u16>,
#[arg(short, long, default_value = DEFAULT_CONFIG_PATH)]
config: String,
id: String,
#[arg(short, long, default_value = "{}")]
params: String,
#[arg(long)]
request_id: Option<String>,
#[arg(long)]
operation_id: Option<String>,
#[arg(long)]
work_item_id: Option<String>,
#[arg(long)]
actor_id: Option<String>,
#[arg(long)]
grant_id: Option<String>,
#[arg(long)]
idempotency_key: Option<String>,
},
ListResources {
#[arg(short = 'p', long)]
port: Option<u16>,
#[arg(short, long, default_value = DEFAULT_CONFIG_PATH)]
config: String,
},
ReadResource {
#[arg(short = 'p', long)]
port: Option<u16>,
#[arg(short, long, default_value = DEFAULT_CONFIG_PATH)]
config: String,
id: String,
#[arg(long)]
request_id: Option<String>,
#[arg(long)]
operation_id: Option<String>,
#[arg(long)]
work_item_id: Option<String>,
#[arg(long)]
actor_id: Option<String>,
#[arg(long)]
grant_id: Option<String>,
},
ListPrompts {
#[arg(short = 'p', long)]
port: Option<u16>,
#[arg(short, long, default_value = DEFAULT_CONFIG_PATH)]
config: String,
},
GetPrompt {
#[arg(short = 'p', long)]
port: Option<u16>,
#[arg(short, long, default_value = DEFAULT_CONFIG_PATH)]
config: String,
id: String,
#[arg(short, long, default_value = "{}")]
arguments: String,
#[arg(long)]
request_id: Option<String>,
#[arg(long)]
operation_id: Option<String>,
#[arg(long)]
work_item_id: Option<String>,
#[arg(long)]
actor_id: Option<String>,
#[arg(long)]
grant_id: Option<String>,
},
ListCatalogEvents {
#[arg(short = 'p', long)]
port: Option<u16>,
#[arg(short, long, default_value = DEFAULT_CONFIG_PATH)]
config: String,
#[arg(short, long)]
after: Option<String>,
},
CancelOperation {
#[arg(short = 'p', long)]
port: Option<u16>,
#[arg(short, long, default_value = DEFAULT_CONFIG_PATH)]
config: String,
id: String,
},
}