1pub mod auth;
4pub mod config;
5pub mod run;
6
7use clap::{Parser, Subcommand};
8use std::path::PathBuf;
9
10#[derive(Parser, Debug)]
15#[command(name = "codetether")]
16#[command(version, about, long_about = None)]
17pub struct Cli {
18 #[arg(global = true)]
20 pub project: Option<PathBuf>,
21
22 #[arg(long, global = true)]
24 pub print_logs: bool,
25
26 #[arg(long, global = true, value_parser = ["DEBUG", "INFO", "WARN", "ERROR"])]
28 pub log_level: Option<String>,
29
30 #[arg(short, long, env = "CODETETHER_SERVER")]
33 pub server: Option<String>,
34
35 #[arg(short, long, env = "CODETETHER_TOKEN")]
37 pub token: Option<String>,
38
39 #[arg(short, long, env = "CODETETHER_WORKER_NAME")]
41 pub name: Option<String>,
42
43 #[command(subcommand)]
44 pub command: Option<Command>,
45}
46
47#[derive(Subcommand, Debug)]
48pub enum Command {
49 Tui(TuiArgs),
51
52 Serve(ServeArgs),
54
55 Run(RunArgs),
57
58 Auth(AuthArgs),
60
61 Config(ConfigArgs),
63
64 Worker(A2aArgs),
66
67 Swarm(SwarmArgs),
69
70 Rlm(RlmArgs),
72
73 Ralph(RalphArgs),
75
76 Mcp(McpArgs),
78
79 Stats(StatsArgs),
81
82 Cleanup(CleanupArgs),
84}
85
86#[derive(Parser, Debug)]
87pub struct AuthArgs {
88 #[command(subcommand)]
89 pub command: AuthCommand,
90}
91
92#[derive(Subcommand, Debug)]
93pub enum AuthCommand {
94 Copilot(CopilotAuthArgs),
96}
97
98#[derive(Parser, Debug)]
99pub struct CopilotAuthArgs {
100 #[arg(long)]
102 pub enterprise_url: Option<String>,
103
104 #[arg(long, env = "CODETETHER_COPILOT_OAUTH_CLIENT_ID")]
106 pub client_id: Option<String>,
107}
108
109#[derive(Parser, Debug)]
110pub struct TuiArgs {
111 pub project: Option<PathBuf>,
113}
114
115#[derive(Parser, Debug)]
116pub struct ServeArgs {
117 #[arg(short, long, default_value = "4096")]
119 pub port: u16,
120
121 #[arg(long, default_value = "127.0.0.1")]
123 pub hostname: String,
124
125 #[arg(long)]
127 pub mdns: bool,
128}
129
130#[derive(Parser, Debug)]
131pub struct RunArgs {
132 pub message: String,
134
135 #[arg(short, long)]
137 pub continue_session: bool,
138
139 #[arg(short, long)]
141 pub session: Option<String>,
142
143 #[arg(short, long)]
145 pub model: Option<String>,
146
147 #[arg(long)]
149 pub agent: Option<String>,
150
151 #[arg(long, default_value = "default", value_parser = ["default", "json"])]
153 pub format: String,
154
155 #[arg(short, long)]
157 pub file: Vec<PathBuf>,
158}
159
160#[derive(Parser, Debug, Clone)]
161pub struct A2aArgs {
162 #[arg(short, long, env = "CODETETHER_SERVER")]
164 pub server: String,
165
166 #[arg(short, long, env = "CODETETHER_TOKEN")]
168 pub token: Option<String>,
169
170 #[arg(short, long, env = "CODETETHER_WORKER_NAME")]
172 pub name: Option<String>,
173
174 #[arg(short, long)]
176 pub codebases: Option<String>,
177
178 #[arg(long, default_value = "safe", value_parser = ["all", "safe", "none"])]
180 pub auto_approve: String,
181
182 #[arg(short, long)]
184 pub email: Option<String>,
185
186 #[arg(long)]
188 pub push_url: Option<String>,
189}
190
191#[derive(Parser, Debug)]
192pub struct ConfigArgs {
193 #[arg(long)]
195 pub show: bool,
196
197 #[arg(long)]
199 pub init: bool,
200
201 #[arg(long)]
203 pub set: Option<String>,
204}
205
206#[derive(Parser, Debug)]
207pub struct SwarmArgs {
208 pub task: String,
210
211 #[arg(short, long)]
213 pub model: Option<String>,
214
215 #[arg(short = 's', long, default_value = "auto")]
217 pub strategy: String,
218
219 #[arg(long, default_value = "100")]
221 pub max_subagents: usize,
222
223 #[arg(long, default_value = "100")]
225 pub max_steps: usize,
226
227 #[arg(long, default_value = "300")]
229 pub timeout: u64,
230
231 #[arg(long)]
233 pub json: bool,
234}
235
236#[derive(Parser, Debug)]
237pub struct RlmArgs {
238 pub query: String,
240
241 #[arg(short, long)]
243 pub file: Vec<PathBuf>,
244
245 #[arg(long)]
247 pub content: Option<String>,
248
249 #[arg(long, default_value = "auto")]
251 pub content_type: String,
252
253 #[arg(long, default_value = "4000")]
255 pub max_tokens: usize,
256
257 #[arg(long)]
259 pub json: bool,
260
261 #[arg(short, long)]
263 pub verbose: bool,
264}
265
266#[derive(Parser, Debug)]
267pub struct RalphArgs {
268 #[arg(value_parser = ["run", "status", "create-prd"])]
270 pub action: String,
271
272 #[arg(short, long, default_value = "prd.json")]
274 pub prd: PathBuf,
275
276 #[arg(short, long)]
278 pub feature: Option<String>,
279
280 #[arg(long = "project-name")]
282 pub project_name: Option<String>,
283
284 #[arg(long, default_value = "10")]
286 pub max_iterations: usize,
287
288 #[arg(short, long)]
290 pub model: Option<String>,
291
292 #[arg(long)]
294 pub json: bool,
295}
296
297#[derive(Parser, Debug)]
298pub struct McpArgs {
299 #[arg(value_parser = ["serve", "connect", "list-tools", "call"])]
301 pub action: String,
302
303 #[arg(short, long)]
305 pub command: Option<String>,
306
307 #[arg(long)]
309 pub server_name: Option<String>,
310
311 #[arg(long)]
313 pub tool: Option<String>,
314
315 #[arg(long)]
317 pub arguments: Option<String>,
318
319 #[arg(long)]
321 pub json: bool,
322}
323
324#[derive(Parser, Debug)]
325pub struct StatsArgs {
326 #[arg(short, long)]
328 pub tools: bool,
329
330 #[arg(short, long)]
332 pub files: bool,
333
334 #[arg(long)]
336 pub tokens: bool,
337
338 #[arg(long)]
340 pub tool: Option<String>,
341
342 #[arg(long)]
344 pub file: Option<String>,
345
346 #[arg(short, long, default_value = "20")]
348 pub limit: usize,
349
350 #[arg(long)]
352 pub json: bool,
353
354 #[arg(long)]
356 pub all: bool,
357}
358
359#[derive(Parser, Debug)]
360pub struct CleanupArgs {
361 #[arg(short, long)]
363 pub dry_run: bool,
364
365 #[arg(long)]
367 pub worktrees_only: bool,
368
369 #[arg(long)]
371 pub json: bool,
372}