systemprompt_cli/commands/cloud/profile/
args.rs1use clap::{Args, Subcommand, ValueEnum};
4
5#[derive(Debug, Subcommand)]
6pub enum ProfileCommands {
7 #[command(about = "Create a new profile", hide = true)]
8 Create(CreateArgs),
9
10 #[command(about = "List all profiles")]
11 List,
12
13 #[command(
14 about = "Show profile configuration",
15 after_help = "EXAMPLES:\n systemprompt cloud profile show\n systemprompt cloud profile \
16 show --filter agents\n systemprompt cloud profile show --json"
17 )]
18 Show {
19 name: Option<String>,
20
21 #[arg(short, long, value_enum, default_value = "all")]
22 filter: ShowFilter,
23
24 #[arg(long, help = "Output as JSON")]
25 json: bool,
26
27 #[arg(long, help = "Output as YAML")]
28 yaml: bool,
29 },
30
31 #[command(about = "Delete a profile")]
32 Delete(DeleteArgs),
33
34 #[command(about = "Edit profile configuration")]
35 Edit(EditArgs),
36}
37
38#[derive(Debug, Args)]
39pub struct DeleteArgs {
40 pub name: String,
41
42 #[arg(short = 'y', long, help = "Skip confirmation prompts")]
43 pub yes: bool,
44}
45
46#[derive(Debug, Args)]
47pub struct CreateArgs {
48 pub name: String,
49
50 #[arg(
51 long = "tenant-id",
52 env = "SYSTEMPROMPT_TENANT_ID",
53 help = "Tenant ID (required in non-interactive mode)"
54 )]
55 pub tenant: Option<String>,
56
57 #[arg(long, value_enum, default_value = "local", help = "Tenant type")]
58 pub tenant_type: TenantTypeArg,
59
60 #[arg(long, env = "ANTHROPIC_API_KEY", help = "Anthropic (Claude) API key")]
61 pub anthropic_key: Option<String>,
62
63 #[arg(long, env = "OPENAI_API_KEY", help = "OpenAI (GPT) API key")]
64 pub openai_key: Option<String>,
65
66 #[arg(long, env = "GEMINI_API_KEY", help = "Google AI (Gemini) API key")]
67 pub gemini_key: Option<String>,
68
69 #[arg(long, env = "GITHUB_TOKEN", help = "GitHub token (optional)")]
70 pub github_token: Option<String>,
71}
72
73impl CreateArgs {
74 pub const fn has_api_key(&self) -> bool {
75 self.anthropic_key.is_some() || self.openai_key.is_some() || self.gemini_key.is_some()
76 }
77}
78
79#[derive(Clone, Copy, Debug, ValueEnum)]
80pub enum TenantTypeArg {
81 Local,
82 Cloud,
83}
84
85#[derive(Debug, Args)]
86pub struct EditArgs {
87 pub name: Option<String>,
88
89 #[arg(long, help = "Set Anthropic API key")]
90 pub set_anthropic_key: Option<String>,
91
92 #[arg(long, help = "Set OpenAI API key")]
93 pub set_openai_key: Option<String>,
94
95 #[arg(long, help = "Set Gemini API key")]
96 pub set_gemini_key: Option<String>,
97
98 #[arg(long, help = "Set GitHub token")]
99 pub set_github_token: Option<String>,
100
101 #[arg(long, help = "Set database URL")]
102 pub set_database_url: Option<String>,
103
104 #[arg(long, help = "Set external URL (cloud profiles)")]
105 pub set_external_url: Option<String>,
106
107 #[arg(long, help = "Set server host")]
108 pub set_host: Option<String>,
109
110 #[arg(long, help = "Set server port")]
111 pub set_port: Option<u16>,
112}
113
114impl EditArgs {
115 pub const fn has_updates(&self) -> bool {
116 self.set_anthropic_key.is_some()
117 || self.set_openai_key.is_some()
118 || self.set_gemini_key.is_some()
119 || self.set_github_token.is_some()
120 || self.set_database_url.is_some()
121 || self.set_external_url.is_some()
122 || self.set_host.is_some()
123 || self.set_port.is_some()
124 }
125}
126
127#[derive(Clone, Copy, Debug, ValueEnum)]
128pub enum ShowFilter {
129 All,
130 Agents,
131 Mcp,
132 Skills,
133 Ai,
134 Web,
135 Content,
136 Env,
137 Settings,
138}