use clap::{Parser, Subcommand};
use clap_complete::Shell;
use crate::task::{Priority, Status};
#[derive(Parser)]
#[command(
name = "bea",
about = "Bears 🐻🐻 - A file-based task tracker CLI and MCP server for AI agent workflows"
)]
#[command(version, propagate_version = true)]
pub struct Args {
#[command(subcommand)]
pub command: Command,
#[arg(long, global = true)]
pub json: bool,
}
#[derive(Subcommand, PartialEq)]
pub enum Command {
Init {
#[arg(long)]
claude: bool,
#[arg(long)]
copilot: bool,
#[arg(long)]
codex: bool,
},
Create {
title: String,
#[arg(long, default_value = "P2")]
priority: Priority,
#[arg(long, value_delimiter = ',')]
tag: Vec<String>,
#[arg(long = "depends-on", value_delimiter = ',')]
depends_on: Vec<String>,
#[arg(long)]
parent: Option<String>,
#[arg(long)]
body: Option<String>,
#[arg(long)]
epic: bool,
},
List {
#[arg(long)]
status: Option<Status>,
#[arg(long)]
priority: Option<Priority>,
#[arg(long)]
tag: Option<String>,
#[arg(long)]
epic: Option<String>,
#[arg(long, short = 'a')]
all: bool,
#[arg(long, conflicts_with_all = ["status", "priority", "tag", "epic", "all"])]
archived: bool,
},
Ready {
#[arg(long)]
tag: Option<String>,
#[arg(long)]
epic: Option<String>,
#[arg(long)]
limit: Option<usize>,
},
Epics,
Show {
id: String,
#[arg(long)]
plan: bool,
},
Update {
id: String,
#[arg(long)]
status: Option<Status>,
#[arg(long)]
priority: Option<Priority>,
#[arg(long, value_delimiter = ',')]
tag: Option<Vec<String>>,
#[arg(long)]
assignee: Option<String>,
#[arg(long)]
body: Option<String>,
#[arg(long)]
title: Option<String>,
#[arg(long)]
parent: Option<String>,
},
Status {
id: String,
status: Status,
},
Start {
id: String,
},
Done {
id: String,
},
Dep {
#[command(subcommand)]
command: DepCommand,
},
Graph {
#[arg(long, short = 'a')]
all: bool,
},
Delete {
id: String,
},
Search {
query: String,
#[arg(long, short = 'a')]
all: bool,
},
Cancel {
id: String,
},
Prune {
#[arg(long)]
done: bool,
},
Archive {
id: Option<String>,
},
Restore {
id: String,
},
Log {
#[arg(long)]
limit: Option<usize>,
},
Edit {
id: String,
},
Completions {
shell: Shell,
},
Mcp,
Tui,
}
#[derive(Subcommand, PartialEq)]
pub enum DepCommand {
Add {
id: String,
depends_on: String,
},
Remove {
id: String,
depends_on: String,
},
Tree {
id: String,
},
}