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 Init,
23
24 Setup,
26
27 Deploy(DeployArgs),
29
30 Status(StatusArgs),
32
33 List(ListArgs),
35
36 Destroy(DestroyArgs),
38
39 Templates(TemplateArgs),
41
42 Cost(CostArgs),
44
45 Logs(LogsArgs),
47
48 Scale(ScaleArgs),
50
51 Relay {
53 #[command(subcommand)]
54 command: RelayCommand,
55 },
56}
57
58#[derive(clap::Args)]
59pub struct DeployArgs {
60 #[arg(long, short)]
62 pub agent: String,
63
64 #[arg(long, short, default_value = "railway")]
66 pub target: String,
67
68 #[arg(long, default_value = "anthropic")]
70 pub provider: String,
71
72 #[arg(long)]
74 pub project_name: Option<String>,
75
76 #[arg(long)]
78 pub template_path: Option<String>,
79
80 #[arg(long)]
82 pub no_wait: bool,
83
84 #[arg(long, short = 'e')]
86 pub env: Vec<String>,
87}
88
89#[derive(clap::Args)]
90pub struct StatusArgs {
91 #[arg(long, short)]
93 pub agent: String,
94
95 #[arg(long, short, default_value = "railway")]
97 pub target: String,
98
99 #[arg(long, default_value = "table")]
101 pub format: String,
102}
103
104#[derive(clap::Args)]
105pub struct ListArgs {
106 #[arg(long, default_value = "table")]
108 pub format: String,
109}
110
111#[derive(clap::Args)]
112pub struct DestroyArgs {
113 #[arg(long, short)]
115 pub agent: String,
116
117 #[arg(long, short, default_value = "railway")]
119 pub target: String,
120
121 #[arg(long, short = 'y')]
123 pub yes: bool,
124}
125
126#[derive(clap::Args)]
127pub struct TemplateArgs {
128 #[command(subcommand)]
129 pub command: TemplateCommand,
130}
131
132#[derive(Subcommand)]
133pub enum TemplateCommand {
134 List,
136 Show {
138 name: String,
140 },
141}
142
143#[derive(clap::Args)]
144pub struct CostArgs {
145 #[arg(long, short)]
147 pub agent: String,
148
149 #[arg(long, short, default_value = "railway")]
151 pub target: String,
152
153 #[arg(long, default_value = "24h")]
155 pub window: String,
156
157 #[arg(long, default_value = "table")]
159 pub format: String,
160}
161
162#[derive(clap::Args)]
163pub struct LogsArgs {
164 #[arg(long, short)]
166 pub agent: String,
167
168 #[arg(long, short)]
170 pub service: Option<String>,
171
172 #[arg(long, short, default_value = "railway")]
174 pub target: String,
175
176 #[arg(long, short, default_value = "50")]
178 pub lines: u32,
179}
180
181#[derive(clap::Args)]
182pub struct ScaleArgs {
183 #[arg(long, short)]
185 pub agent: String,
186
187 #[arg(long, short, default_value = "arcan")]
189 pub service: String,
190
191 #[arg(long, short)]
193 pub replicas: Option<u32>,
194
195 #[arg(long)]
198 pub auto: bool,
199
200 #[arg(long, short, default_value = "railway")]
202 pub target: String,
203}