systemprompt-cli 0.2.1

Unified CLI for systemprompt.io AI governance: agent orchestration, MCP governance, analytics, profiles, cloud deploy, and self-hosted operations.
Documentation
use anyhow::Result;
use clap::Args;
use systemprompt_files::{FilePersistenceMode, FilesConfig};

use super::types::{AllowedTypesOutput, FileConfigOutput, StoragePathsOutput};
use crate::CliConfig;
use crate::shared::CommandResult;

#[derive(Debug, Clone, Copy, Args)]
pub struct ConfigArgs;

pub fn execute(_args: ConfigArgs, _config: &CliConfig) -> Result<CommandResult<FileConfigOutput>> {
    let files_config = FilesConfig::get()?;
    let upload_config = files_config.upload();

    let persistence_mode = match upload_config.persistence_mode {
        FilePersistenceMode::ContextScoped => "context_scoped",
        FilePersistenceMode::UserLibrary => "user_library",
        FilePersistenceMode::Disabled => "disabled",
    };

    let mut allowed = Vec::new();
    if upload_config.allowed_types.images {
        allowed.push("images".to_string());
    }
    if upload_config.allowed_types.documents {
        allowed.push("documents".to_string());
    }
    if upload_config.allowed_types.audio {
        allowed.push("audio".to_string());
    }
    if upload_config.allowed_types.video {
        allowed.push("video".to_string());
    }
    let allowed_types = AllowedTypesOutput { allowed };

    let storage_paths = StoragePathsOutput {
        uploads: files_config.uploads().display().to_string(),
        images: files_config.images().display().to_string(),
        documents: files_config.documents().display().to_string(),
        audio: files_config.audio().display().to_string(),
        video: files_config.video().display().to_string(),
    };

    let output = FileConfigOutput {
        uploads_enabled: upload_config.enabled,
        max_file_size_bytes: upload_config.max_file_size_bytes,
        persistence_mode: persistence_mode.to_string(),
        storage_root: files_config.storage().display().to_string(),
        url_prefix: files_config.url_prefix().to_string(),
        allowed_types,
        storage_paths,
    };

    Ok(CommandResult::card(output).with_title("File Upload Configuration"))
}