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
76#[derive(Parser, Debug)]
77pub struct TuiArgs {
78 pub project: Option<PathBuf>,
80}
81
82#[derive(Parser, Debug)]
83pub struct ServeArgs {
84 #[arg(short, long, default_value = "4096")]
86 pub port: u16,
87
88 #[arg(long, default_value = "127.0.0.1")]
90 pub hostname: String,
91
92 #[arg(long)]
94 pub mdns: bool,
95}
96
97#[derive(Parser, Debug)]
98pub struct RunArgs {
99 pub message: String,
101
102 #[arg(short, long)]
104 pub continue_session: bool,
105
106 #[arg(short, long)]
108 pub session: Option<String>,
109
110 #[arg(short, long)]
112 pub model: Option<String>,
113
114 #[arg(long)]
116 pub agent: Option<String>,
117
118 #[arg(long, default_value = "default", value_parser = ["default", "json"])]
120 pub format: String,
121
122 #[arg(short, long)]
124 pub file: Vec<PathBuf>,
125}
126
127#[derive(Parser, Debug, Clone)]
128pub struct A2aArgs {
129 #[arg(short, long, env = "CODETETHER_SERVER")]
131 pub server: String,
132
133 #[arg(short, long, env = "CODETETHER_TOKEN")]
135 pub token: Option<String>,
136
137 #[arg(short, long, env = "CODETETHER_WORKER_NAME")]
139 pub name: Option<String>,
140
141 #[arg(short, long)]
143 pub codebases: Option<String>,
144
145 #[arg(long, default_value = "safe", value_parser = ["all", "safe", "none"])]
147 pub auto_approve: String,
148
149 #[arg(short, long)]
151 pub email: Option<String>,
152
153 #[arg(long)]
155 pub push_url: Option<String>,
156}
157
158#[derive(Parser, Debug)]
159pub struct ConfigArgs {
160 #[arg(long)]
162 pub show: bool,
163
164 #[arg(long)]
166 pub init: bool,
167
168 #[arg(long)]
170 pub set: Option<String>,
171}
172
173#[derive(Parser, Debug)]
174pub struct SwarmArgs {
175 pub task: String,
177
178 #[arg(short, long)]
180 pub model: Option<String>,
181
182 #[arg(short = 's', long, default_value = "auto")]
184 pub strategy: String,
185
186 #[arg(long, default_value = "100")]
188 pub max_subagents: usize,
189
190 #[arg(long, default_value = "100")]
192 pub max_steps: usize,
193
194 #[arg(long, default_value = "300")]
196 pub timeout: u64,
197
198 #[arg(long)]
200 pub json: bool,
201}
202
203#[derive(Parser, Debug)]
204pub struct RlmArgs {
205 pub query: String,
207
208 #[arg(short, long)]
210 pub file: Vec<PathBuf>,
211
212 #[arg(long)]
214 pub content: Option<String>,
215
216 #[arg(long, default_value = "auto")]
218 pub content_type: String,
219
220 #[arg(long, default_value = "4000")]
222 pub max_tokens: usize,
223
224 #[arg(long)]
226 pub json: bool,
227
228 #[arg(short, long)]
230 pub verbose: bool,
231}
232
233#[derive(Parser, Debug)]
234pub struct RalphArgs {
235 #[arg(value_parser = ["run", "status", "create-prd"])]
237 pub action: String,
238
239 #[arg(short, long, default_value = "prd.json")]
241 pub prd: PathBuf,
242
243 #[arg(short, long)]
245 pub feature: Option<String>,
246
247 #[arg(long = "project-name")]
249 pub project_name: Option<String>,
250
251 #[arg(long, default_value = "10")]
253 pub max_iterations: usize,
254
255 #[arg(short, long)]
257 pub model: Option<String>,
258
259 #[arg(long)]
261 pub json: bool,
262}
263
264#[derive(Parser, Debug)]
265pub struct McpArgs {
266 #[arg(value_parser = ["serve", "connect", "list-tools", "call"])]
268 pub action: String,
269
270 #[arg(short, long)]
272 pub command: Option<String>,
273
274 #[arg(long)]
276 pub server_name: Option<String>,
277
278 #[arg(long)]
280 pub tool: Option<String>,
281
282 #[arg(long)]
284 pub arguments: Option<String>,
285
286 #[arg(long)]
288 pub json: bool,
289}