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