Skip to main content

systemprompt_cli/commands/admin/
mod.rs

1pub mod access_control;
2pub mod agents;
3pub mod bridge;
4pub mod config;
5pub mod session;
6pub mod setup;
7pub mod users;
8
9use anyhow::Result;
10use clap::Subcommand;
11use systemprompt_runtime::DatabaseContext;
12
13use crate::CliConfig;
14use crate::shared::render_result;
15
16#[derive(Debug, Subcommand)]
17pub enum AdminCommands {
18    #[command(subcommand, about = "User management and IP banning")]
19    Users(users::UsersCommands),
20
21    #[command(subcommand, about = "Agent management")]
22    Agents(agents::AgentsCommands),
23
24    #[command(subcommand, about = "Configuration management and rate limits")]
25    Config(config::ConfigCommands),
26
27    #[command(about = "Interactive setup wizard for local development environment")]
28    Setup(setup::SetupArgs),
29
30    #[command(subcommand, about = "Manage CLI session and profile switching")]
31    Session(session::SessionCommands),
32
33    #[command(
34        subcommand,
35        about = "Bridge helper enrollment (device certs, exchange codes)"
36    )]
37    Bridge(bridge::BridgeCommands),
38
39    #[command(
40        subcommand,
41        name = "access-control",
42        about = "Access-control baseline operations (DB → YAML export)"
43    )]
44    AccessControl(access_control::AccessControlCommands),
45}
46
47pub async fn execute(cmd: AdminCommands, config: &CliConfig) -> Result<()> {
48    match cmd {
49        AdminCommands::Users(cmd) => users::execute(cmd, config).await,
50        AdminCommands::Agents(cmd) => agents::execute(cmd).await,
51        AdminCommands::Config(cmd) => config::execute(cmd, config),
52        AdminCommands::Setup(args) => {
53            let result = setup::execute(args, config).await?;
54            render_result(&result);
55            Ok(())
56        },
57        AdminCommands::Session(cmd) => session::execute(cmd, config).await,
58        AdminCommands::Bridge(cmd) => bridge::execute(cmd, config).await,
59        AdminCommands::AccessControl(cmd) => access_control::execute(cmd, config).await,
60    }
61}
62
63pub async fn execute_with_db(
64    cmd: AdminCommands,
65    db_ctx: &DatabaseContext,
66    config: &CliConfig,
67) -> Result<()> {
68    match cmd {
69        AdminCommands::Users(cmd) => users::execute_with_db(cmd, db_ctx, config).await,
70        _ => anyhow::bail!("This command requires full profile context"),
71    }
72}