use clap::{Parser, Subcommand}; use clap_complete::Shell; #[derive(Parser)] #[command(name = "streamd")] #[command( author, version, about = "Personal knowledge management and time-tracking CLI using @Tag annotations" )] pub struct Cli { #[command(subcommand)] pub command: Option, } #[derive(Subcommand)] pub enum TodoAction { /// Edit a task by its number Edit { /// Task number to edit number: usize, }, /// Mark a task as done Done { /// Task number to mark as done number: usize, }, } #[derive(Subcommand)] pub enum Commands { /// Create a new stream file New, /// Display open tasks Todo { /// Show tasks with dates in the future #[arg(long)] show_future: bool, #[command(subcommand)] action: Option, }, /// Edit a stream file by position Edit { /// Position of the file to edit (0 = most recent, negative = from oldest) #[arg(default_value = "1")] number: i32, }, /// Display extracted timesheets Timesheet { /// Display time as minutes (HH:MM) instead of decimal hours (H.Hh) #[arg(short, long)] minutes: bool, /// Show all timecards grouped by day instead of the summary report #[arg(short, long)] debug: bool, }, /// Generate shell completions Completions { /// Shell to generate completions for #[arg(value_enum)] shell: Shell, }, }