//! Supervisor subcommand - contract orchestration commands. use clap::Args; use uuid::Uuid; /// Common arguments for supervisor commands. #[derive(Args, Debug, Clone)] pub struct SupervisorArgs { /// API URL #[arg(long, env = "MAKIMA_API_URL", default_value = "http://localhost:8080")] pub api_url: String, /// API key for authentication #[arg(long, env = "MAKIMA_API_KEY")] pub api_key: String, /// Current task ID (optional) #[arg(long, env = "MAKIMA_TASK_ID")] pub task_id: Option, /// Contract ID #[arg(long, env = "MAKIMA_CONTRACT_ID")] pub contract_id: Uuid, } /// Arguments for spawn command. #[derive(Args, Debug)] pub struct SpawnArgs { #[command(flatten)] pub common: SupervisorArgs, /// Name of the task #[arg(index = 1)] pub name: String, /// Plan/description for the task #[arg(index = 2)] pub plan: String, /// Parent task ID to branch from #[arg(long)] pub parent: Option, /// Checkpoint SHA to start from #[arg(long)] pub checkpoint: Option, /// Repository URL (local path or remote URL). If not provided, will try to detect from current directory. #[arg(long)] pub repo: Option, } /// Arguments for wait command. #[derive(Args, Debug)] pub struct WaitArgs { #[command(flatten)] pub common: SupervisorArgs, /// Task ID to wait for #[arg(index = 1)] pub task_id: Uuid, /// Timeout in seconds #[arg(index = 2, default_value = "300")] pub timeout: i32, } /// Arguments for read-file command. #[derive(Args, Debug)] pub struct ReadFileArgs { #[command(flatten)] pub common: SupervisorArgs, /// Task ID to read from #[arg(index = 1)] pub task_id: Uuid, /// File path to read #[arg(index = 2)] pub file_path: String, } /// Arguments for branch command. #[derive(Args, Debug)] pub struct BranchArgs { #[command(flatten)] pub common: SupervisorArgs, /// Branch name to create #[arg(index = 1)] pub name: String, /// Reference (task ID or SHA) to branch from #[arg(long)] pub from: Option, } /// Arguments for merge command. #[derive(Args, Debug)] pub struct MergeArgs { #[command(flatten)] pub common: SupervisorArgs, /// Task ID to merge #[arg(index = 1)] pub task_id: Uuid, /// Target branch to merge into #[arg(long)] pub to: Option, /// Squash commits on merge #[arg(long)] pub squash: bool, } /// Arguments for pr command. #[derive(Args, Debug)] pub struct PrArgs { #[command(flatten)] pub common: SupervisorArgs, /// Task ID to create PR for #[arg(index = 1)] pub task_id: Uuid, /// PR title #[arg(long)] pub title: String, /// PR body/description #[arg(long)] pub body: Option, /// Base branch (default: main) #[arg(long, default_value = "main")] pub base: String, } /// Arguments for diff command. #[derive(Args, Debug)] pub struct DiffArgs { #[command(flatten)] pub common: SupervisorArgs, /// Task ID to get diff for #[arg(index = 1)] pub task_id: Uuid, } /// Arguments for checkpoint command. #[derive(Args, Debug)] pub struct CheckpointArgs { #[command(flatten)] pub common: SupervisorArgs, /// Checkpoint message #[arg(index = 1)] pub message: String, } /// Arguments for ask command (ask user a question). #[derive(Args, Debug)] pub struct AskArgs { #[command(flatten)] pub common: SupervisorArgs, /// The question to ask #[arg(index = 1)] pub question: String, /// Optional choices (comma-separated) #[arg(long)] pub choices: Option, /// Context about what this relates to #[arg(long)] pub context: Option, /// Timeout in seconds (default: 3600 = 1 hour) #[arg(long, default_value = "3600")] pub timeout: i32, } /// Arguments for status command (get contract status including phase). #[derive(Args, Debug)] pub struct StatusArgs { #[command(flatten)] pub common: SupervisorArgs, } /// Arguments for advance-phase command. #[derive(Args, Debug)] pub struct AdvancePhaseArgs { #[command(flatten)] pub common: SupervisorArgs, /// The phase to advance to (specify, plan, execute, review) #[arg(index = 1)] pub phase: String, }