use std::path::PathBuf; #[derive(Debug)] pub(crate) struct ClaudeInstallPaths { pub hook_path: PathBuf, pub settings_path: PathBuf, } #[derive(Debug)] pub(crate) struct CodexInstallPaths { pub hook_path: PathBuf, pub hooks_path: PathBuf, pub config_path: PathBuf, } #[derive(Debug)] pub(crate) struct KimiInstallPaths { pub hook_path: PathBuf, pub config_path: PathBuf, } #[derive(Debug)] pub(crate) struct CopilotInstallPaths { pub hook_path: PathBuf, pub settings_path: PathBuf, } #[derive(Debug)] pub(crate) struct DevinInstallPaths { pub hook_path: PathBuf, pub settings_path: PathBuf, } #[derive(Debug)] pub(crate) struct DroidInstallPaths { pub hook_path: PathBuf, pub hooks_path: PathBuf, pub settings_path: PathBuf, pub updated_legacy_hooks: bool, } #[derive(Debug)] pub(crate) struct OpenCodeInstallPaths { pub plugin_path: PathBuf, } #[derive(Debug)] pub(crate) struct KiloInstallPaths { pub plugin_path: PathBuf, } #[derive(Debug)] pub(crate) struct OmpInstallPaths { pub extension_path: PathBuf, pub removed_legacy_pi_extension: bool, } #[derive(Debug)] pub(crate) struct HermesInstallPaths { pub plugin_dir: PathBuf, pub config_path: PathBuf, } #[derive(Debug)] pub(crate) struct QodercliInstallPaths { pub hook_path: PathBuf, pub settings_path: PathBuf, } #[derive(Debug)] pub(crate) struct CursorInstallPaths { pub hook_path: PathBuf, pub hooks_path: PathBuf, } #[derive(Debug)] pub(crate) struct CursorUninstallResult { pub hook_path: PathBuf, pub hooks_path: PathBuf, pub removed_hook_file: bool, pub updated_hooks: bool, } #[derive(Debug)] pub(crate) struct MastracodeInstallPaths { pub hook_path: PathBuf, pub hooks_path: PathBuf, } #[derive(Debug)] pub(crate) struct MastracodeUninstallResult { pub hook_path: PathBuf, pub hooks_path: PathBuf, pub removed_hook_file: bool, pub updated_hooks: bool, } #[derive(Debug)] pub(crate) struct QodercliUninstallResult { pub hook_path: PathBuf, pub settings_path: PathBuf, pub removed_hook_file: bool, pub updated_settings: bool, } #[derive(Debug, Clone, PartialEq, Eq)] pub(crate) struct IntegrationStatus { pub target: crate::api::schema::IntegrationTarget, pub path: PathBuf, pub state: IntegrationStatusKind, pub installed_version: Option, pub expected_version: u32, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub(crate) enum IntegrationStatusKind { NotInstalled, Current, Outdated, } #[derive(Debug, Clone, PartialEq, Eq)] pub(crate) struct IntegrationRecommendation { pub target: crate::api::schema::IntegrationTarget, pub label: &'static str, pub command: &'static str, pub available: bool, pub path: PathBuf, pub state: IntegrationStatusKind, } impl IntegrationRecommendation { pub fn needs_install(&self) -> bool { self.state == IntegrationStatusKind::Outdated || (self.available && self.state == IntegrationStatusKind::NotInstalled) } pub fn status_label(&self) -> &'static str { match (self.available, self.state) { (_, IntegrationStatusKind::Current) => "installed", (_, IntegrationStatusKind::Outdated) => "update available", (true, IntegrationStatusKind::NotInstalled) => "available", (false, IntegrationStatusKind::NotInstalled) => "not found", } } } #[derive(Debug)] pub(crate) struct PiUninstallResult { pub extension_path: PathBuf, pub removed_extension: bool, } #[derive(Debug)] pub(crate) struct OmpUninstallResult { pub extension_path: PathBuf, pub removed_extension: bool, } #[derive(Debug)] pub(crate) struct ClaudeUninstallResult { pub hook_path: PathBuf, pub settings_path: PathBuf, pub removed_hook_file: bool, pub updated_settings: bool, } #[derive(Debug)] pub(crate) struct CodexUninstallResult { pub hook_path: PathBuf, pub hooks_path: PathBuf, pub config_path: PathBuf, pub removed_hook_file: bool, pub updated_hooks: bool, } #[derive(Debug)] pub(crate) struct KimiUninstallResult { pub hook_path: PathBuf, pub config_path: PathBuf, pub removed_hook_file: bool, pub updated_config: bool, } #[derive(Debug)] pub(crate) struct CopilotUninstallResult { pub hook_path: PathBuf, pub settings_path: PathBuf, pub removed_hook_file: bool, pub updated_settings: bool, } #[derive(Debug)] pub(crate) struct DevinUninstallResult { pub hook_path: PathBuf, pub settings_path: PathBuf, pub removed_hook_file: bool, pub updated_settings: bool, } #[derive(Debug)] pub(crate) struct DroidUninstallResult { pub hook_path: PathBuf, pub hooks_path: PathBuf, pub settings_path: PathBuf, pub removed_hook_file: bool, pub updated_hooks: bool, pub updated_settings: bool, } #[derive(Debug)] pub(crate) struct OpenCodeUninstallResult { pub plugin_path: PathBuf, pub removed_plugin: bool, } #[derive(Debug)] pub(crate) struct KiloUninstallResult { pub plugin_path: PathBuf, pub removed_plugin: bool, } #[derive(Debug)] pub(crate) struct HermesUninstallResult { pub plugin_dir: PathBuf, pub config_path: PathBuf, pub removed_plugin_dir: bool, pub updated_config: bool, }