mod claude;
mod codex;
pub(in crate::install) mod cursor;
pub(in crate::install) use claude::ClaudeHost;
pub(in crate::install) use codex::CodexHost;
use crate::install::host::{InstallHost, InstallTarget};
pub(in crate::install) fn resolve_hosts(target: InstallTarget) -> Vec<Box<dyn InstallHost>> {
match target {
InstallTarget::Claude => vec![Box::new(ClaudeHost)],
InstallTarget::Codex => vec![Box::new(CodexHost)],
InstallTarget::Cursor => Vec::new(),
InstallTarget::All => vec![Box::new(ClaudeHost), Box::new(CodexHost)],
InstallTarget::Auto => {
let all: Vec<Box<dyn InstallHost>> = vec![Box::new(ClaudeHost), Box::new(CodexHost)];
all.into_iter().filter(|h| h.is_available()).collect()
}
}
}
pub(in crate::install) fn cursor_selected(target: InstallTarget) -> bool {
match target {
InstallTarget::Cursor | InstallTarget::All => true,
InstallTarget::Auto => cursor::cursor_detected() && cursor::cursor_renderer_supported(),
InstallTarget::Claude | InstallTarget::Codex => false,
}
}