systemprompt-cli 0.1.22

systemprompt.io OS - CLI for agent orchestration, AI operations, and system management
Documentation
use anyhow::{Context, Result};
use clap::Args;
use std::sync::Arc;

use systemprompt_agent::AgentState;
use systemprompt_agent::services::a2a_server::run_standalone;
use systemprompt_ai::AiService;
use systemprompt_database::Database;
use systemprompt_loader::ConfigLoader;
use systemprompt_logging;
use systemprompt_mcp::McpToolProvider;
use systemprompt_models::Config;
use systemprompt_oauth::JwtValidationProviderImpl;

#[derive(Debug, Clone, Args)]
pub struct RunArgs {
    #[arg(long, help = "Agent name to run")]
    pub agent_name: String,

    #[arg(long, help = "Port to listen on")]
    pub port: u16,
}

pub async fn execute(args: RunArgs) -> Result<()> {
    let config = Config::get().context("Failed to get configuration")?;
    let services_config = ConfigLoader::load().context("Failed to load services configuration")?;

    let db_pool = Arc::new(
        Database::from_config(&config.database_type, &config.database_url)
            .await
            .context("Failed to connect to database")?,
    );

    systemprompt_logging::init_logging(Arc::clone(&db_pool));

    let jwt_provider = Arc::new(
        JwtValidationProviderImpl::from_config().context("Failed to create JWT provider")?,
    );

    let agent_state = Arc::new(AgentState::new(
        Arc::clone(&db_pool),
        Arc::new(config.clone()),
        jwt_provider,
    ));

    let tool_provider = Arc::new(McpToolProvider::new(Arc::clone(&db_pool)));
    let ai_service = Arc::new(
        AiService::new(db_pool, &services_config.ai, tool_provider, None)
            .context("Failed to create AI service")?,
    );

    run_standalone(agent_state, ai_service, &args.agent_name, args.port)
        .await
        .context("Failed to run agent server")
}