1pub mod config;
4pub mod run;
5
6use clap::{Parser, Subcommand};
7use std::path::PathBuf;
8
9#[derive(Parser, Debug)]
14#[command(name = "codetether")]
15#[command(version, about, long_about = None)]
16pub struct Cli {
17 #[arg(global = true)]
19 pub project: Option<PathBuf>,
20
21 #[arg(long, global = true)]
23 pub print_logs: bool,
24
25 #[arg(long, global = true, value_parser = ["DEBUG", "INFO", "WARN", "ERROR"])]
27 pub log_level: Option<String>,
28
29 #[arg(short, long, env = "CODETETHER_SERVER")]
32 pub server: Option<String>,
33
34 #[arg(short, long, env = "CODETETHER_TOKEN")]
36 pub token: Option<String>,
37
38 #[arg(short, long, env = "CODETETHER_WORKER_NAME")]
40 pub name: Option<String>,
41
42 #[command(subcommand)]
43 pub command: Option<Command>,
44}
45
46#[derive(Subcommand, Debug)]
47pub enum Command {
48 Tui(TuiArgs),
50
51 Serve(ServeArgs),
53
54 Run(RunArgs),
56
57 Config(ConfigArgs),
59
60 Worker(A2aArgs),
62
63 Swarm(SwarmArgs),
65
66 Rlm(RlmArgs),
68
69 Ralph(RalphArgs),
71
72 Mcp(McpArgs),
74
75 Stats(StatsArgs),
77
78 Cleanup(CleanupArgs),
80}
81
82#[derive(Parser, Debug)]
83pub struct TuiArgs {
84 pub project: Option<PathBuf>,
86}
87
88#[derive(Parser, Debug)]
89pub struct ServeArgs {
90 #[arg(short, long, default_value = "4096")]
92 pub port: u16,
93
94 #[arg(long, default_value = "127.0.0.1")]
96 pub hostname: String,
97
98 #[arg(long)]
100 pub mdns: bool,
101}
102
103#[derive(Parser, Debug)]
104pub struct RunArgs {
105 pub message: String,
107
108 #[arg(short, long)]
110 pub continue_session: bool,
111
112 #[arg(short, long)]
114 pub session: Option<String>,
115
116 #[arg(short, long)]
118 pub model: Option<String>,
119
120 #[arg(long)]
122 pub agent: Option<String>,
123
124 #[arg(long, default_value = "default", value_parser = ["default", "json"])]
126 pub format: String,
127
128 #[arg(short, long)]
130 pub file: Vec<PathBuf>,
131}
132
133#[derive(Parser, Debug, Clone)]
134pub struct A2aArgs {
135 #[arg(short, long, env = "CODETETHER_SERVER")]
137 pub server: String,
138
139 #[arg(short, long, env = "CODETETHER_TOKEN")]
141 pub token: Option<String>,
142
143 #[arg(short, long, env = "CODETETHER_WORKER_NAME")]
145 pub name: Option<String>,
146
147 #[arg(short, long)]
149 pub codebases: Option<String>,
150
151 #[arg(long, default_value = "safe", value_parser = ["all", "safe", "none"])]
153 pub auto_approve: String,
154
155 #[arg(short, long)]
157 pub email: Option<String>,
158
159 #[arg(long)]
161 pub push_url: Option<String>,
162}
163
164#[derive(Parser, Debug)]
165pub struct ConfigArgs {
166 #[arg(long)]
168 pub show: bool,
169
170 #[arg(long)]
172 pub init: bool,
173
174 #[arg(long)]
176 pub set: Option<String>,
177}
178
179#[derive(Parser, Debug)]
180pub struct SwarmArgs {
181 pub task: String,
183
184 #[arg(short, long)]
186 pub model: Option<String>,
187
188 #[arg(short = 's', long, default_value = "auto")]
190 pub strategy: String,
191
192 #[arg(long, default_value = "100")]
194 pub max_subagents: usize,
195
196 #[arg(long, default_value = "100")]
198 pub max_steps: usize,
199
200 #[arg(long, default_value = "300")]
202 pub timeout: u64,
203
204 #[arg(long)]
206 pub json: bool,
207}
208
209#[derive(Parser, Debug)]
210pub struct RlmArgs {
211 pub query: String,
213
214 #[arg(short, long)]
216 pub file: Vec<PathBuf>,
217
218 #[arg(long)]
220 pub content: Option<String>,
221
222 #[arg(long, default_value = "auto")]
224 pub content_type: String,
225
226 #[arg(long, default_value = "4000")]
228 pub max_tokens: usize,
229
230 #[arg(long)]
232 pub json: bool,
233
234 #[arg(short, long)]
236 pub verbose: bool,
237}
238
239#[derive(Parser, Debug)]
240pub struct RalphArgs {
241 #[arg(value_parser = ["run", "status", "create-prd"])]
243 pub action: String,
244
245 #[arg(short, long, default_value = "prd.json")]
247 pub prd: PathBuf,
248
249 #[arg(short, long)]
251 pub feature: Option<String>,
252
253 #[arg(long = "project-name")]
255 pub project_name: Option<String>,
256
257 #[arg(long, default_value = "10")]
259 pub max_iterations: usize,
260
261 #[arg(short, long)]
263 pub model: Option<String>,
264
265 #[arg(long)]
267 pub json: bool,
268}
269
270#[derive(Parser, Debug)]
271pub struct McpArgs {
272 #[arg(value_parser = ["serve", "connect", "list-tools", "call"])]
274 pub action: String,
275
276 #[arg(short, long)]
278 pub command: Option<String>,
279
280 #[arg(long)]
282 pub server_name: Option<String>,
283
284 #[arg(long)]
286 pub tool: Option<String>,
287
288 #[arg(long)]
290 pub arguments: Option<String>,
291
292 #[arg(long)]
294 pub json: bool,
295}
296
297#[derive(Parser, Debug)]
298pub struct StatsArgs {
299 #[arg(short, long)]
301 pub tools: bool,
302
303 #[arg(short, long)]
305 pub files: bool,
306
307 #[arg(long)]
309 pub tokens: bool,
310
311 #[arg(long)]
313 pub tool: Option<String>,
314
315 #[arg(long)]
317 pub file: Option<String>,
318
319 #[arg(short, long, default_value = "20")]
321 pub limit: usize,
322
323 #[arg(long)]
325 pub json: bool,
326
327 #[arg(long)]
329 pub all: bool,
330}
331
332#[derive(Parser, Debug)]
333pub struct CleanupArgs {
334 #[arg(short, long)]
336 pub dry_run: bool,
337
338 #[arg(long)]
340 pub worktrees_only: bool,
341
342 #[arg(long)]
344 pub json: bool,
345}