pub mod migrate_cmd;
pub mod serve_cmd;
pub mod setup_cmd;
pub mod vault_cmd;
use std::path::PathBuf;
use clap::{Parser, Subcommand, ValueEnum};
#[derive(Parser)]
#[command(
name = "wardn",
about = "Credential isolation for AI agents",
version,
propagate_version = true
)]
pub struct Cli {
#[arg(long, global = true, default_value = "~/.vibeguard/vault.enc")]
pub vault: String,
#[arg(long, global = true)]
pub config: Option<PathBuf>,
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
Vault {
#[command(subcommand)]
command: VaultCommands,
},
Serve(ServeArgs),
Migrate(MigrateArgs),
Setup {
#[command(subcommand)]
command: SetupCommands,
},
}
#[derive(Subcommand)]
pub enum VaultCommands {
Create,
Set {
key: String,
},
Get {
key: String,
#[arg(long, default_value = "cli")]
agent: String,
},
List,
Rotate {
key: String,
},
Remove {
key: String,
},
}
#[derive(Parser)]
pub struct ServeArgs {
#[arg(long, default_value = "127.0.0.1")]
pub host: String,
#[arg(long, default_value_t = 7777)]
pub port: u16,
#[arg(long)]
pub mcp: bool,
#[arg(long)]
pub agent: Option<String>,
}
#[derive(Parser)]
pub struct MigrateArgs {
#[arg(long, value_enum, default_value = "claude-code")]
pub source: MigrateSourceArg,
#[arg(long)]
pub path: Option<PathBuf>,
#[arg(long)]
pub dry_run: bool,
}
#[derive(Clone, ValueEnum)]
pub enum MigrateSourceArg {
ClaudeCode,
OpenClaw,
Directory,
}
#[derive(Subcommand)]
pub enum SetupCommands {
ClaudeCode,
Cursor,
}