Skip to main content

systemprompt_cli/commands/admin/
mod.rs

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