systemprompt_cli/commands/admin/
mod.rs1pub mod agents;
2pub mod config;
3pub mod session;
4pub mod setup;
5pub mod users;
6
7use anyhow::Result;
8use clap::Subcommand;
9use systemprompt_runtime::DatabaseContext;
10
11use crate::shared::render_result;
12use crate::CliConfig;
13
14#[derive(Debug, Subcommand)]
15pub enum AdminCommands {
16 #[command(subcommand, about = "User management and IP banning")]
17 Users(users::UsersCommands),
18
19 #[command(subcommand, about = "Agent management")]
20 Agents(agents::AgentsCommands),
21
22 #[command(subcommand, about = "Configuration management and rate limits")]
23 Config(config::ConfigCommands),
24
25 #[command(about = "Interactive setup wizard for local development environment")]
26 Setup(setup::SetupArgs),
27
28 #[command(subcommand, about = "Manage CLI session and profile switching")]
29 Session(session::SessionCommands),
30}
31
32pub async fn execute(cmd: AdminCommands, config: &CliConfig) -> Result<()> {
33 match cmd {
34 AdminCommands::Users(cmd) => users::execute(cmd, config).await,
35 AdminCommands::Agents(cmd) => agents::execute(cmd).await,
36 AdminCommands::Config(cmd) => config::execute(cmd, config),
37 AdminCommands::Setup(args) => {
38 let result = setup::execute(args, config).await?;
39 render_result(&result);
40 Ok(())
41 },
42 AdminCommands::Session(cmd) => session::execute(cmd, config).await,
43 }
44}
45
46pub async fn execute_with_db(
47 cmd: AdminCommands,
48 db_ctx: &DatabaseContext,
49 config: &CliConfig,
50) -> Result<()> {
51 match cmd {
52 AdminCommands::Users(cmd) => users::execute_with_db(cmd, db_ctx, config).await,
53 _ => anyhow::bail!("This command requires full profile context"),
54 }
55}