1use clap::{Parser, Subcommand};
4
5use crate::relay::RelayCommand;
6
7#[derive(Parser)]
8#[command(
9 name = "life",
10 about = "Agent Operating System — deploy, configure, and manage agents",
11 version,
12 propagate_version = true
13)]
14pub struct Cli {
15 #[command(subcommand)]
16 pub command: Option<Command>,
17}
18
19#[derive(Subcommand)]
20pub enum Command {
21 Setup,
23
24 Deploy(DeployArgs),
26
27 Status(StatusArgs),
29
30 List(ListArgs),
32
33 Destroy(DestroyArgs),
35
36 Templates(TemplateArgs),
38
39 Cost(CostArgs),
41
42 Logs(LogsArgs),
44
45 Scale(ScaleArgs),
47
48 Relay {
50 #[command(subcommand)]
51 command: RelayCommand,
52 },
53}
54
55#[derive(clap::Args)]
56pub struct DeployArgs {
57 #[arg(long, short)]
59 pub agent: String,
60
61 #[arg(long, short, default_value = "railway")]
63 pub target: String,
64
65 #[arg(long, default_value = "anthropic")]
67 pub provider: String,
68
69 #[arg(long)]
71 pub project_name: Option<String>,
72
73 #[arg(long)]
75 pub template_path: Option<String>,
76
77 #[arg(long)]
79 pub no_wait: bool,
80
81 #[arg(long, short = 'e')]
83 pub env: Vec<String>,
84}
85
86#[derive(clap::Args)]
87pub struct StatusArgs {
88 #[arg(long, short)]
90 pub agent: String,
91
92 #[arg(long, short, default_value = "railway")]
94 pub target: String,
95
96 #[arg(long, default_value = "table")]
98 pub format: String,
99}
100
101#[derive(clap::Args)]
102pub struct ListArgs {
103 #[arg(long, default_value = "table")]
105 pub format: String,
106}
107
108#[derive(clap::Args)]
109pub struct DestroyArgs {
110 #[arg(long, short)]
112 pub agent: String,
113
114 #[arg(long, short, default_value = "railway")]
116 pub target: String,
117
118 #[arg(long, short = 'y')]
120 pub yes: bool,
121}
122
123#[derive(clap::Args)]
124pub struct TemplateArgs {
125 #[command(subcommand)]
126 pub command: TemplateCommand,
127}
128
129#[derive(Subcommand)]
130pub enum TemplateCommand {
131 List,
133 Show {
135 name: String,
137 },
138}
139
140#[derive(clap::Args)]
141pub struct CostArgs {
142 #[arg(long, short)]
144 pub agent: String,
145
146 #[arg(long, short, default_value = "railway")]
148 pub target: String,
149
150 #[arg(long, default_value = "24h")]
152 pub window: String,
153
154 #[arg(long, default_value = "table")]
156 pub format: String,
157}
158
159#[derive(clap::Args)]
160pub struct LogsArgs {
161 #[arg(long, short)]
163 pub agent: String,
164
165 #[arg(long, short)]
167 pub service: Option<String>,
168
169 #[arg(long, short, default_value = "railway")]
171 pub target: String,
172
173 #[arg(long, short, default_value = "50")]
175 pub lines: u32,
176}
177
178#[derive(clap::Args)]
179pub struct ScaleArgs {
180 #[arg(long, short)]
182 pub agent: String,
183
184 #[arg(long, short, default_value = "arcan")]
186 pub service: String,
187
188 #[arg(long, short)]
190 pub replicas: Option<u32>,
191
192 #[arg(long)]
195 pub auto: bool,
196
197 #[arg(long, short, default_value = "railway")]
199 pub target: String,
200}