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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
|
//! 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")]
pub api_url: String,
/// API key for authentication
#[arg(long, env = "MAKIMA_API_KEY")]
pub api_key: String,
/// Current task ID (optional)
#[arg(long, env = "MAKIMA_TASK_ID")]
pub task_id: Option<Uuid>,
/// Contract ID
#[arg(long, env = "MAKIMA_CONTRACT_ID")]
pub contract_id: Uuid,
}
/// Arguments for spawn command.
#[derive(Args, Debug)]
pub struct SpawnArgs {
#[command(flatten)]
pub common: SupervisorArgs,
/// Name of the task
#[arg(index = 1)]
pub name: String,
/// Plan/description for the task
#[arg(index = 2)]
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>,
/// Repository URL (local path or remote URL). If not provided, will try to detect from current directory.
#[arg(long)]
pub repo: Option<String>,
}
/// Arguments for wait command.
#[derive(Args, Debug)]
pub struct WaitArgs {
#[command(flatten)]
pub common: SupervisorArgs,
/// Task ID to wait for
#[arg(index = 1)]
pub task_id: Uuid,
/// Timeout in seconds
#[arg(index = 2, 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
#[arg(index = 1)]
pub task_id: Uuid,
/// File path to read
#[arg(index = 2)]
pub file_path: String,
}
/// Arguments for branch command.
#[derive(Args, Debug)]
pub struct BranchArgs {
#[command(flatten)]
pub common: SupervisorArgs,
/// Branch name to create
#[arg(index = 1)]
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
#[arg(index = 1)]
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
#[arg(index = 1)]
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
#[arg(index = 1)]
pub task_id: Uuid,
}
/// Arguments for checkpoint command.
#[derive(Args, Debug)]
pub struct CheckpointArgs {
#[command(flatten)]
pub common: SupervisorArgs,
/// Checkpoint message
#[arg(index = 1)]
pub message: String,
}
/// Arguments for ask command (ask user a question).
#[derive(Args, Debug)]
pub struct AskArgs {
#[command(flatten)]
pub common: SupervisorArgs,
/// The question to ask
#[arg(index = 1)]
pub question: String,
/// Optional choices (comma-separated)
#[arg(long)]
pub choices: Option<String>,
/// Context about what this relates to
#[arg(long)]
pub context: Option<String>,
/// Timeout in seconds (default: 3600 = 1 hour)
#[arg(long, default_value = "3600")]
pub timeout: i32,
}
/// Arguments for status command (get contract status including phase).
#[derive(Args, Debug)]
pub struct StatusArgs {
#[command(flatten)]
pub common: SupervisorArgs,
}
/// Arguments for advance-phase command.
#[derive(Args, Debug)]
pub struct AdvancePhaseArgs {
#[command(flatten)]
pub common: SupervisorArgs,
/// The phase to advance to (specify, plan, execute, review)
#[arg(index = 1)]
pub phase: String,
}
|