1use serde::{Deserialize, Serialize};
2
3#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
5#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, Default)]
6#[serde(rename_all = "kebab-case")]
7pub enum FileOpener {
8 Cursor,
9 #[default]
10 None,
11 Vscode,
12 VscodeInsiders,
13 Windsurf,
14}
15
16impl FileOpener {
17 pub fn scheme(self) -> Option<&'static str> {
18 match self {
19 Self::None => None,
20 Self::Vscode => Some("vscode"),
21 Self::Cursor => Some("cursor"),
22 Self::Windsurf => Some("windsurf"),
23 Self::VscodeInsiders => Some("vscode-insiders"),
24 }
25 }
26}
27
28#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
30#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, Default)]
31#[serde(rename_all = "snake_case")]
32pub enum HistoryPersistence {
33 #[default]
34 File,
35 None,
36}
37
38#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
40#[derive(Debug, Clone, Deserialize, Serialize, Default)]
41pub struct HistoryConfig {
42 #[serde(default)]
43 pub persistence: HistoryPersistence,
44 #[serde(default)]
45 pub max_bytes: Option<usize>,
46}
47
48#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
50#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, Default)]
51#[serde(rename_all = "snake_case")]
52pub enum TerminalNotificationMethod {
53 #[default]
54 Auto,
55 Bel,
56 Osc9,
57}
58
59#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
61#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq)]
62#[serde(rename_all = "snake_case")]
63pub enum TuiAlternateScreen {
64 Always,
65 Never,
66}
67
68#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
70#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
71#[serde(rename_all = "kebab-case")]
72pub enum TuiNotificationEvent {
73 AgentTurnComplete,
74 ApprovalRequested,
75}
76
77#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
79#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
80#[serde(untagged)]
81pub enum TuiNotificationsConfig {
82 Enabled(bool),
83 Events(Vec<TuiNotificationEvent>),
84}
85
86#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
88#[derive(Debug, Clone, Deserialize, Serialize, Default)]
89pub struct TuiConfig {
90 #[serde(default)]
91 pub notifications: Option<TuiNotificationsConfig>,
92 #[serde(default)]
93 pub notification_method: Option<TerminalNotificationMethod>,
94 #[serde(default)]
95 pub animations: Option<bool>,
96 #[serde(default)]
97 pub alternate_screen: Option<TuiAlternateScreen>,
98 #[serde(default)]
99 pub show_tooltips: Option<bool>,
100}