//! Chain CLI commands for multi-contract orchestration. //! //! Provides commands for creating, managing, and visualizing chains //! (DAGs of contracts). use clap::Args; use std::path::PathBuf; use uuid::Uuid; /// Common arguments for chain commands requiring API access. #[derive(Args, Debug, Clone)] pub struct ChainArgs { /// API URL #[arg(long, env = "MAKIMA_API_URL", default_value = "https://api.makima.jp", global = true)] pub api_url: String, /// API key for authentication #[arg(long, env = "MAKIMA_API_KEY", global = true)] pub api_key: String, } /// Arguments for the `run` command (create chain from YAML file). #[derive(Args, Debug)] pub struct RunArgs { #[command(flatten)] pub common: ChainArgs, /// Path to the chain YAML file pub file: PathBuf, /// Don't actually create the chain, just validate and show what would be created #[arg(long)] pub dry_run: bool, } /// Arguments for the `status` command. #[derive(Args, Debug)] pub struct StatusArgs { #[command(flatten)] pub common: ChainArgs, /// Chain ID pub chain_id: Uuid, } /// Arguments for the `list` command. #[derive(Args, Debug)] pub struct ListArgs { #[command(flatten)] pub common: ChainArgs, /// Filter by status (active, completed, archived) #[arg(long)] pub status: Option, /// Limit number of results #[arg(long, default_value = "50")] pub limit: i32, } /// Arguments for the `contracts` command. #[derive(Args, Debug)] pub struct ContractsArgs { #[command(flatten)] pub common: ChainArgs, /// Chain ID pub chain_id: Uuid, } /// Arguments for the `graph` command (ASCII DAG visualization). #[derive(Args, Debug)] pub struct GraphArgs { #[command(flatten)] pub common: ChainArgs, /// Chain ID pub chain_id: Uuid, /// Show contract status in nodes #[arg(long)] pub with_status: bool, } /// Arguments for the `validate` command. #[derive(Args, Debug)] pub struct ValidateArgs { /// Path to the chain YAML file pub file: PathBuf, } /// Arguments for the `preview` command. #[derive(Args, Debug)] pub struct PreviewArgs { /// Path to the chain YAML file pub file: PathBuf, } /// Arguments for the `archive` command. #[derive(Args, Debug)] pub struct ArchiveArgs { #[command(flatten)] pub common: ChainArgs, /// Chain ID pub chain_id: Uuid, }