use crate::app::SlashCommandItem;
use crate::{FullscreenInteractionSettings, KeyboardProtocolSettings, SessionSurface};
pub trait WorkspaceInfoProvider {
fn workspace_name(&self) -> String;
fn workspace_root(&self) -> Option<std::path::PathBuf>;
}
pub trait NotificationProvider {
fn set_terminal_focused(&self, focused: bool);
}
pub trait ThemeProvider {
fn available_themes(&self) -> Vec<String>;
fn active_theme_name(&self) -> Option<String>;
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct HostSessionDefaults {
pub surface_preference: SessionSurface,
pub inline_rows: u16,
pub keyboard_protocol: KeyboardProtocolSettings,
pub fullscreen: FullscreenInteractionSettings,
}
impl Default for HostSessionDefaults {
fn default() -> Self {
Self {
surface_preference: SessionSurface::default(),
inline_rows: crate::config::constants::ui::DEFAULT_INLINE_VIEWPORT_ROWS,
keyboard_protocol: KeyboardProtocolSettings::default(),
fullscreen: FullscreenInteractionSettings::default(),
}
}
}
pub trait HostAdapter: WorkspaceInfoProvider + NotificationProvider + ThemeProvider {
fn session_defaults(&self) -> HostSessionDefaults {
HostSessionDefaults::default()
}
fn slash_commands(&self) -> Vec<SlashCommandItem> {
Vec::new()
}
fn app_name(&self) -> String {
"Agent TUI".to_string()
}
fn non_interactive_hint(&self) -> Option<String> {
None
}
}