use clap::{Args, Subcommand};
use crate::agent;
#[derive(Args)]
pub struct TaskTemplateArgs {
#[command(subcommand)]
pub command: TaskTemplateCommand,
}
#[derive(Args)]
pub struct TaskFromArgs {
#[command(subcommand)]
pub command: TaskFromCommand,
}
#[derive(Subcommand)]
pub enum TaskFromCommand {
#[command(after_long_help = "Examples:
ralph task from template bug --title \"Fix login timeout\"
ralph task from template feature --title \"Add dark mode\" --set target=src/ui/theme.rs
ralph task from template add-tests --title \"Test auth module\" --set target=src/auth/mod.rs
ralph task from template refactor-performance --title \"Optimize parser\" --set target=src/parser/
ralph task from template custom-template --title \"Custom task\" --set component=auth
Template variables:
{{target}} - Target file/path (set via --set target=... or positional TARGET)
{{module}} - Derived module name (e.g., src/cli/task.rs -> cli::task)
{{file}} - Filename only (e.g., task.rs)
{{branch}} - Current git branch name
Use 'ralph task template list' to see available templates.
Use 'ralph task template show <name>' to view template details.")]
Template(TaskFromTemplateArgs),
}
#[derive(Args)]
pub struct TaskFromTemplateArgs {
pub template: String,
#[arg(long = "title")]
pub title: String,
#[arg(long = "set", value_name = "VAR=VALUE")]
pub variables: Vec<String>,
#[arg(short, long)]
pub tags: Option<String>,
#[arg(long)]
pub runner: Option<String>,
#[arg(long)]
pub model: Option<String>,
#[arg(short = 'e', long)]
pub effort: Option<String>,
#[arg(long = "repo-prompt", value_enum, value_name = "MODE")]
pub repo_prompt: Option<agent::RepoPromptMode>,
#[command(flatten)]
pub runner_cli: agent::RunnerCliArgs,
#[arg(long)]
pub strict_templates: bool,
#[arg(long)]
pub dry_run: bool,
}
#[derive(Subcommand)]
#[allow(clippy::large_enum_variant)]
pub enum TaskTemplateCommand {
List,
Show(TaskTemplateShowArgs),
Build(TaskTemplateBuildArgs),
}
#[derive(Args)]
pub struct TaskTemplateShowArgs {
pub name: String,
}
#[derive(Args)]
pub struct TaskTemplateBuildArgs {
pub template: String,
#[arg(value_name = "TARGET")]
pub target: Option<String>,
pub request: Vec<String>,
#[arg(short, long)]
pub tags: Option<String>,
#[arg(short, long)]
pub scope: Option<String>,
#[arg(long)]
pub runner: Option<String>,
#[arg(long)]
pub model: Option<String>,
#[arg(short = 'e', long)]
pub effort: Option<String>,
#[arg(long = "repo-prompt", value_enum, value_name = "MODE")]
pub repo_prompt: Option<agent::RepoPromptMode>,
#[command(flatten)]
pub runner_cli: agent::RunnerCliArgs,
#[arg(long)]
pub strict_templates: bool,
}