use anyhow::Result;
use clap::Args;
use octomind::agent::taps;
#[derive(Args, Debug)]
pub struct TapArgs {
#[arg(value_name = "TAP")]
pub tap: Option<String>,
#[arg(value_name = "PATH")]
pub local_path: Option<String>,
}
pub fn execute(args: &TapArgs) -> Result<()> {
match &args.tap {
Some(tap_arg) => {
let full_arg = match &args.local_path {
Some(path) => format!("{} {}", tap_arg, path),
None => tap_arg.clone(),
};
taps::add_tap(&full_arg)?;
if let Some(ref path) = args.local_path {
println!("✓ Tapped: {} (local: {})", tap_arg, path);
} else {
println!("✓ Tapped: {}", tap_arg);
}
}
None => {
let user_taps = taps::list_taps()?;
if user_taps.is_empty() {
println!("No user taps configured.");
} else {
println!("User taps:");
for tap in &user_taps {
if let Some(ref path) = tap.local_path {
println!(" {} (local: {})", tap.name, path);
} else {
println!(" {}", tap.name);
}
}
}
println!("\nBuilt-in: {} (always active)", taps::DEFAULT_TAP);
}
}
Ok(())
}