use serde::{Deserialize, Serialize};
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, Default)]
#[serde(rename_all = "kebab-case")]
pub enum FileOpener {
Cursor,
#[default]
None,
Vscode,
VscodeInsiders,
Windsurf,
}
impl FileOpener {
pub fn scheme(self) -> Option<&'static str> {
match self {
Self::None => None,
Self::Vscode => Some("vscode"),
Self::Cursor => Some("cursor"),
Self::Windsurf => Some("windsurf"),
Self::VscodeInsiders => Some("vscode-insiders"),
}
}
}
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, Default)]
#[serde(rename_all = "snake_case")]
pub enum HistoryPersistence {
#[default]
File,
None,
}
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Deserialize, Serialize, Default)]
pub struct HistoryConfig {
#[serde(default)]
pub persistence: HistoryPersistence,
#[serde(default)]
pub max_bytes: Option<usize>,
}
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, Default)]
#[serde(rename_all = "snake_case")]
pub enum TerminalNotificationMethod {
#[default]
Auto,
Bel,
Osc9,
}
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum TuiAlternateScreen {
Always,
Never,
}
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
#[serde(rename_all = "kebab-case")]
pub enum TuiNotificationEvent {
AgentTurnComplete,
ApprovalRequested,
}
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
#[serde(untagged)]
pub enum TuiNotificationsConfig {
Enabled(bool),
Events(Vec<TuiNotificationEvent>),
}
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, Default)]
#[serde(rename_all = "snake_case")]
pub enum NotificationCondition {
#[default]
Unfocused,
Always,
}
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Deserialize, Serialize, Default)]
pub struct TuiConfig {
#[serde(default)]
pub notifications: Option<TuiNotificationsConfig>,
#[serde(default)]
pub notification_method: Option<TerminalNotificationMethod>,
#[serde(default)]
pub notification_condition: Option<NotificationCondition>,
#[serde(default)]
pub animations: Option<bool>,
#[serde(default)]
pub alternate_screen: Option<TuiAlternateScreen>,
#[serde(default)]
pub show_tooltips: Option<bool>,
}