systemprompt_cli/commands/admin/
mod.rs1pub 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}