use adk_model::ModelProvider;
use clap::{Parser, Subcommand, ValueEnum};
#[derive(Parser)]
#[command(name = "adk-rust")]
#[command(about = "ADK-Rust CLI — interactive agent, web server, and skill tooling")]
pub struct Cli {
#[command(subcommand)]
pub command: Option<Commands>,
#[arg(long, global = true)]
pub provider: Option<ModelProvider>,
#[arg(long, global = true)]
pub model: Option<String>,
#[arg(long, global = true)]
pub api_key: Option<String>,
#[arg(long, global = true)]
pub instruction: Option<String>,
#[arg(long, global = true)]
pub thinking_budget: Option<u32>,
#[arg(long, global = true, value_enum, default_value_t = ThinkingMode::Auto)]
pub thinking_mode: ThinkingMode,
}
pub const ALL_PROVIDERS: &[ModelProvider] = ModelProvider::all();
#[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum)]
pub enum ThinkingMode {
Auto,
Show,
Hide,
}
#[derive(Subcommand)]
pub enum Commands {
Chat,
Serve {
#[arg(long, default_value_t = 8080)]
port: u16,
},
Skills {
#[command(subcommand)]
command: SkillsCommands,
},
Deploy {
#[command(subcommand)]
command: DeployCommands,
},
}
#[derive(Subcommand, Clone)]
pub enum SkillsCommands {
List {
#[arg(long, default_value = ".")]
path: String,
#[arg(long, default_value_t = false)]
json: bool,
},
Validate {
#[arg(long, default_value = ".")]
path: String,
#[arg(long, default_value_t = false)]
json: bool,
},
Match {
#[arg(long)]
query: String,
#[arg(long, default_value = ".")]
path: String,
#[arg(long, default_value_t = 3)]
top_k: usize,
#[arg(long, default_value_t = 1.0)]
min_score: f32,
#[arg(long = "include-tag")]
include_tags: Vec<String>,
#[arg(long = "exclude-tag")]
exclude_tags: Vec<String>,
#[arg(long, default_value_t = false)]
json: bool,
},
}
#[derive(Subcommand, Clone)]
pub enum DeployCommands {
Login {
#[arg(long, default_value = "http://127.0.0.1:8090")]
endpoint: String,
#[arg(long)]
token: String,
},
Logout,
Init {
#[arg(long, default_value = "adk-deploy.toml")]
path: String,
#[arg(long)]
agent_name: Option<String>,
#[arg(long)]
binary: Option<String>,
},
Validate {
#[arg(long, default_value = "adk-deploy.toml")]
path: String,
},
Build {
#[arg(long, default_value = "adk-deploy.toml")]
path: String,
},
Push {
#[arg(long, default_value = "adk-deploy.toml")]
path: String,
#[arg(long, default_value = "staging")]
env: String,
#[arg(long)]
workspace: Option<String>,
},
Status {
#[arg(long, default_value = "production")]
env: String,
#[arg(long)]
agent: Option<String>,
},
History {
#[arg(long, default_value = "production")]
env: String,
#[arg(long)]
agent: Option<String>,
},
Metrics {
#[arg(long, default_value = "production")]
env: String,
#[arg(long)]
agent: Option<String>,
},
Rollback {
#[arg(long)]
deployment_id: String,
},
Promote {
#[arg(long)]
deployment_id: String,
},
Secret {
#[command(subcommand)]
command: DeploySecretCommands,
},
}
#[derive(Subcommand, Clone)]
pub enum DeploySecretCommands {
Set {
#[arg(long)]
env: String,
key: String,
value: String,
},
List {
#[arg(long)]
env: String,
},
Delete {
#[arg(long)]
env: String,
key: String,
},
}