summaryrefslogtreecommitdiff
path: root/makima/src/daemon/cli/supervisor.rs
blob: 00c7ff42cbf8d05d857f9ae616250692a8583f22 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
//! Supervisor subcommand - contract orchestration commands.

use clap::Args;
use uuid::Uuid;

/// Common arguments for supervisor commands.
#[derive(Args, Debug, Clone)]
pub struct SupervisorArgs {
    /// API URL
    #[arg(long, env = "MAKIMA_API_URL", default_value = "http://localhost:8080", 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 spawn command.
#[derive(Args, Debug)]
pub struct SpawnArgs {
    #[command(flatten)]
    pub common: SupervisorArgs,

    /// Name of the task
    pub name: String,

    /// Plan/description for the task
    pub plan: String,

    /// Parent task ID to branch from
    #[arg(long)]
    pub parent: Option<Uuid>,

    /// Checkpoint SHA to start from
    #[arg(long)]
    pub checkpoint: Option<String>,
}

/// Arguments for wait command.
#[derive(Args, Debug)]
pub struct WaitArgs {
    #[command(flatten)]
    pub common: SupervisorArgs,

    /// Task ID to wait for
    pub task_id: Uuid,

    /// Timeout in seconds
    #[arg(default_value = "300")]
    pub timeout: i32,
}

/// Arguments for read-file command.
#[derive(Args, Debug)]
pub struct ReadFileArgs {
    #[command(flatten)]
    pub common: SupervisorArgs,

    /// Task ID to read from
    pub task_id: Uuid,

    /// File path to read
    pub file_path: String,
}

/// Arguments for branch command.
#[derive(Args, Debug)]
pub struct BranchArgs {
    #[command(flatten)]
    pub common: SupervisorArgs,

    /// Branch name to create
    pub name: String,

    /// Reference (task ID or SHA) to branch from
    #[arg(long)]
    pub from: Option<String>,
}

/// Arguments for merge command.
#[derive(Args, Debug)]
pub struct MergeArgs {
    #[command(flatten)]
    pub common: SupervisorArgs,

    /// Task ID to merge
    pub task_id: Uuid,

    /// Target branch to merge into
    #[arg(long)]
    pub to: Option<String>,

    /// Squash commits on merge
    #[arg(long)]
    pub squash: bool,
}

/// Arguments for pr command.
#[derive(Args, Debug)]
pub struct PrArgs {
    #[command(flatten)]
    pub common: SupervisorArgs,

    /// Task ID to create PR for
    pub task_id: Uuid,

    /// PR title
    #[arg(long)]
    pub title: String,

    /// PR body/description
    #[arg(long)]
    pub body: Option<String>,

    /// Base branch (default: main)
    #[arg(long, default_value = "main")]
    pub base: String,
}

/// Arguments for diff command.
#[derive(Args, Debug)]
pub struct DiffArgs {
    #[command(flatten)]
    pub common: SupervisorArgs,

    /// Task ID to get diff for
    pub task_id: Uuid,
}

/// Arguments for checkpoint command.
#[derive(Args, Debug)]
pub struct CheckpointArgs {
    #[command(flatten)]
    pub common: SupervisorArgs,

    /// Checkpoint message
    pub message: String,
}