Skip to main content

systemprompt_cli/commands/admin/
mod.rs

1pub 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}