zilliz 1.4.0

TUI and CLI tool for managing Zilliz Cloud clusters and Milvus operations
Documentation
use clap::{Parser, Subcommand};

#[derive(Parser)]
#[command(
    name = "zilliz",
    about = "CLI and TUI for Zilliz Cloud",
    version,
    disable_help_flag = true,
    disable_help_subcommand = true
)]
pub struct Cli {
    #[command(subcommand)]
    pub command: Option<Commands>,

    /// Print help
    #[arg(long, short, global = true, action = clap::ArgAction::SetTrue)]
    pub help: bool,

    /// Output format: json, table, text, yaml, csv
    #[arg(long, short, global = true, default_value = "table")]
    pub output: Option<String>,

    /// JMESPath query to filter output
    #[arg(long, global = true)]
    pub query: Option<String>,

    /// Suppress table/CSV header row
    #[arg(long, global = true)]
    pub no_header: bool,
}

#[derive(Subcommand)]
pub enum Commands {
    /// Configure API key and default settings
    #[command(hide = true, disable_help_subcommand = true)]
    Configure {
        #[command(subcommand)]
        subcmd: Option<ConfigureCommands>,
    },

    /// Manage current cluster context
    #[command(hide = true, disable_help_subcommand = true)]
    Context {
        #[command(subcommand)]
        subcmd: Option<ContextCommands>,
    },

    /// Show CLI version
    #[command(hide = true)]
    Version,

    /// Log in to Zilliz Cloud
    #[command(hide = true)]
    Login {
        /// Don't automatically open the browser
        #[arg(long)]
        no_browser: bool,

        /// Log in with API key (interactive prompt if no value given, or pass key directly)
        #[arg(long, num_args(0..=1), default_missing_value = "")]
        api_key: Option<String>,

        /// Log in to the CN cloud (API key only)
        #[arg(long, conflicts_with = "dev")]
        cn: bool,

        /// Log in to the internal UAT environment (API key only). Hidden from
        /// public help output; intended for zilliz-tui contributors only. See
        /// CONTRIBUTING.md.
        #[arg(long, conflicts_with = "cn", hide = true)]
        dev: bool,
    },

    /// Log out from Zilliz Cloud and clear stored credentials
    #[command(hide = true)]
    Logout,

    /// Show current authentication status
    #[command(alias = "info")]
    Whoami,

    /// Switch to a different organization
    Switch {
        /// Organization ID (interactive selection if omitted)
        org_id: Option<String>,
    },

    /// Authentication commands (deprecated alias for `whoami` / `switch`)
    #[command(hide = true, disable_help_subcommand = true)]
    Auth {
        #[command(subcommand)]
        subcmd: Option<AuthCommands>,
    },

    /// Shell completion management
    #[command(hide = true, disable_help_subcommand = true)]
    Completion {
        #[command(subcommand)]
        subcmd: Option<CompletionCommands>,
    },

    /// View and manage command history
    #[command(hide = true, disable_help_subcommand = true)]
    History {
        #[command(subcommand)]
        subcmd: Option<HistoryCommands>,
    },

    /// Guided onboarding for first-time users
    Quickstart {
        /// Skip prompts and print the cheatsheet only
        #[arg(long)]
        non_interactive: bool,

        /// Skip the auth bootstrap step
        #[arg(long)]
        skip_login: bool,
    },

    /// Run a resource operation: zilliz <resource> <operation> [--flag value ...]
    #[command(external_subcommand)]
    External(Vec<String>),
}

#[derive(Subcommand)]
pub enum ContextCommands {
    /// Set the current cluster context
    Set {
        /// Cluster ID
        #[arg(long)]
        cluster_id: Option<String>,
        /// Cluster endpoint URL (auto-resolved from cluster-id if omitted)
        #[arg(long)]
        endpoint: Option<String>,
        /// Database name
        #[arg(long)]
        database: Option<String>,
        /// Resolve cluster details via the on-demand cluster API
        /// (for VectorLake on-demand clusters)
        #[arg(long)]
        on_demand: bool,
    },
    /// Show the current context
    Current {
        /// Output format: json, table, text
        #[arg(long, short)]
        output: Option<String>,
    },
    /// Clear the current context
    Clear,
}

#[derive(Subcommand)]
pub enum ConfigureCommands {
    /// Set a configuration value
    Set {
        /// Configuration key (e.g. api_key, base_url)
        key: String,
        /// Value to set (omit for credential keys to enter securely via prompt)
        value: Option<String>,
    },
    /// Get a configuration value
    Get {
        /// Configuration key
        key: String,
    },
    /// List all configuration values
    List,
    /// Clear all stored credentials
    Clear,
}

#[derive(Subcommand)]
pub enum AuthCommands {
    /// Show current authentication status
    Status,
    /// Switch to a different organization
    Switch {
        /// Organization ID (interactive selection if omitted)
        org_id: Option<String>,
    },
}

#[derive(Subcommand)]
pub enum CompletionCommands {
    /// Install shell completion to RC file
    Install {
        /// Shell type (auto-detected if omitted)
        #[arg(value_enum)]
        shell: Option<clap_complete::Shell>,
        /// Automatically write to shell RC file
        #[arg(long)]
        apply: bool,
    },
    /// Remove shell completion from RC file
    Uninstall {
        /// Shell type (auto-detected if omitted)
        #[arg(value_enum)]
        shell: Option<clap_complete::Shell>,
    },
    /// Check if shell completion is installed
    Status {
        /// Shell type (auto-detected if omitted)
        #[arg(value_enum)]
        shell: Option<clap_complete::Shell>,
    },
    /// Print completion script to stdout
    Show {
        /// Shell type
        #[arg(value_enum)]
        shell: clap_complete::Shell,
    },
}

#[derive(Subcommand)]
pub enum HistoryCommands {
    /// List recent command history (default: last 50)
    List {
        /// Number of entries to show
        #[arg(long, default_value = "50")]
        limit: usize,
        /// Show all entries
        #[arg(long)]
        all: bool,
    },
    /// Search command history by keyword
    Search {
        /// Search term (case-insensitive match on command field)
        #[arg(long)]
        keyword: String,
    },
    /// Clear all command history
    Clear {
        /// Skip confirmation prompt
        #[arg(long)]
        force: bool,
    },
}