Skip to main content

systemprompt_cli/commands/cloud/profile/
args.rs

1//! Clap argument and command types for `cloud profile`.
2
3use 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}