//! Command-line interface for the makima CLI. pub mod config; pub mod daemon; pub mod directive; pub mod server; pub mod view; use clap::{Parser, Subcommand}; pub use config::CliConfig; pub use daemon::DaemonArgs; pub use directive::DirectiveArgs; pub use server::ServerArgs; pub use view::ViewArgs; /// Makima - unified CLI for server, daemon, and task management. #[derive(Parser, Debug)] #[command(name = "makima")] #[command(version, about = "Makima CLI - server, daemon, and task management", long_about = None)] pub struct Cli { #[command(subcommand)] pub command: Commands, } #[derive(Subcommand, Debug)] pub enum Commands { /// Run the makima server Server(ServerArgs), /// Run the daemon (connect to server, manage tasks) Daemon(DaemonArgs), /// Directive commands for DAG-based project management #[command(subcommand)] Directive(DirectiveCommand), /// Interactive TUI browser for directives and tasks View(ViewArgs), /// Configure CLI settings (API key, server URL) /// /// Saves configuration to ~/.makima/config.toml for use by CLI commands. #[command(subcommand)] Config(ConfigCommand), } /// Config subcommands for CLI configuration. #[derive(Subcommand, Debug)] pub enum ConfigCommand { /// Set the API key /// /// Saves the API key to ~/.makima/config.toml SetKey(config::SetKeyArgs), /// Set the API URL /// /// Saves the API URL to ~/.makima/config.toml SetUrl(config::SetUrlArgs), /// Show current configuration Show, /// Show the config file path Path, } // SupervisorCommand and ContractCommand removed in Phase 5 — contracts // subsystem is gone. See cli/contract.rs and cli/supervisor.rs deletion. /// Directive subcommands for DAG-based project management. #[derive(Subcommand, Debug)] pub enum DirectiveCommand { /// List all directives List(directive::DirectiveListArgs), /// Get directive status with steps Get(DirectiveArgs), /// Get directive status (alias for get) Status(DirectiveArgs), /// Add a step to the directive AddStep(directive::AddStepArgs), /// Remove a step from the directive RemoveStep(directive::RemoveStepArgs), /// Set dependencies for a step SetDeps(directive::SetDepsArgs), /// Start the directive (begin executing steps) Start(DirectiveArgs), /// Pause the directive Pause(DirectiveArgs), /// Advance the DAG (find newly-ready steps) Advance(DirectiveArgs), /// Mark a step as completed CompleteStep(directive::StepActionArgs), /// Mark a step as failed FailStep(directive::StepActionArgs), /// Mark a step as skipped SkipStep(directive::StepActionArgs), /// Update the directive's goal (triggers re-planning) UpdateGoal(directive::UpdateGoalArgs), /// Batch add multiple steps from JSON BatchAddSteps(directive::BatchAddStepsArgs), /// Update directive metadata (PR URL, etc.) Update(directive::UpdateArgs), /// Ask a question and wait for user feedback Ask(directive::AskArgs), /// Create an order for future work (spike or chore only) CreateOrder(directive::CreateOrderArgs), /// Verify the current worktree merges cleanly into the directive's base branch. /// /// Mandatory pre-flight before creating or pushing a directive PR — fails /// with a non-zero exit code (and a list of conflicting files) if the merge /// would conflict with the base branch. Verify(directive::VerifyArgs), } impl Cli { /// Parse command-line arguments pub fn parse_args() -> Self { Self::parse() } }