//! 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<Uuid>,
/// 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<String>,
/// 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<String>,
}
/// 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,
}