use anyhow::Result;
use clap::ValueEnum;
use std::path::PathBuf;
#[derive(Debug, Clone, Copy, ValueEnum, PartialEq, Eq)]
pub enum InstallTarget {
Auto,
Claude,
Codex,
All,
}
pub enum HookSupport {
Installed,
#[allow(dead_code)]
Skipped(&'static str),
}
pub trait InstallHost {
fn name(&self) -> &'static str;
fn config_path(&self) -> PathBuf;
fn is_available(&self) -> bool;
fn install_mcp(&self, bin: &str) -> Result<()>;
fn uninstall_mcp(&self, bin: &str) -> Result<()>;
fn install_hooks(&self, bin: &str) -> Result<HookSupport>;
fn uninstall_hooks(&self, bin: &str) -> Result<()>;
fn dry_run_plan(&self, bin: &str) -> Vec<String>;
}