//! Contract subcommand - task-contract interaction commands. //! //! This module contains two types of commands: //! 1. Task-contract interaction commands (used by agents via `makima contract`) //! 2. Contract management helper commands (used by users via `makima contracts`) use clap::Args; use uuid::Uuid; /// Common arguments for contract commands. #[derive(Args, Debug, Clone)] pub struct ContractArgs { /// 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, /// Current task ID (optional) #[arg(long, env = "MAKIMA_TASK_ID", global = true)] pub task_id: Option, /// Contract ID #[arg(long, env = "MAKIMA_CONTRACT_ID", global = true)] pub contract_id: Uuid, } /// Arguments for file command (get specific file). #[derive(Args, Debug)] pub struct FileArgs { #[command(flatten)] pub common: ContractArgs, /// File ID to retrieve pub file_id: Uuid, } /// Arguments for report command. #[derive(Args, Debug)] pub struct ReportArgs { #[command(flatten)] pub common: ContractArgs, /// Progress message pub message: String, } /// Arguments for completion-action command. #[derive(Args, Debug)] pub struct CompletionActionArgs { #[command(flatten)] pub common: ContractArgs, /// Comma-separated list of modified files #[arg(long)] pub files: Option, /// Number of lines added #[arg(long, default_value = "0")] pub lines_added: i32, /// Number of lines removed #[arg(long, default_value = "0")] pub lines_removed: i32, /// Whether there are code changes #[arg(long)] pub code: bool, } /// Arguments for update-file command. #[derive(Args, Debug)] pub struct UpdateFileArgs { #[command(flatten)] pub common: ContractArgs, /// File ID to update pub file_id: Uuid, } /// Arguments for create-file command. #[derive(Args, Debug)] pub struct CreateFileArgs { #[command(flatten)] pub common: ContractArgs, /// Name of the new file pub name: String, } // ============================================================================= // Contract Management Helper Commands (makima contracts) // ============================================================================= /// Common arguments for contracts management commands. #[derive(Args, Debug, Clone)] pub struct ContractsCommonArgs { /// API URL #[arg(long, env = "MAKIMA_API_URL", default_value = "https://api.makima.jp")] pub api_url: String, /// API key for authentication #[arg(long, env = "MAKIMA_API_KEY")] pub api_key: String, } /// Arguments for pause command. #[derive(Args, Debug)] pub struct PauseArgs { #[command(flatten)] pub common: ContractsCommonArgs, /// Contract ID to pause pub contract_id: Uuid, /// Reason for pausing the contract #[arg(long)] pub reason: Option, } /// Arguments for resume command. #[derive(Args, Debug)] pub struct ResumeArgs { #[command(flatten)] pub common: ContractsCommonArgs, /// Contract ID to resume pub contract_id: Uuid, } /// Arguments for advance command. #[derive(Args, Debug)] pub struct AdvanceArgs { #[command(flatten)] pub common: ContractsCommonArgs, /// Contract ID to advance pub contract_id: Uuid, /// Target phase to advance to #[arg(long)] pub phase: String, /// Force the phase transition even if deliverables are incomplete #[arg(long)] pub force: bool, } /// Arguments for restart-supervisor command. #[derive(Args, Debug)] pub struct RestartSupervisorArgs { #[command(flatten)] pub common: ContractsCommonArgs, /// Contract ID to restart supervisor for pub contract_id: Uuid, } /// Arguments for show command. #[derive(Args, Debug)] pub struct ShowArgs { #[command(flatten)] pub common: ContractsCommonArgs, /// Contract ID to show pub contract_id: Uuid, /// Show verbose output with all details #[arg(long, short = 'v')] pub verbose: bool, } /// Arguments for health command. #[derive(Args, Debug)] pub struct HealthArgs { #[command(flatten)] pub common: ContractsCommonArgs, /// Contract ID to check health for pub contract_id: Uuid, }