Skip to main content

vtcode_config/
codex.rs

1use serde::{Deserialize, Serialize};
2
3/// Editor URI scheme for clickable file citations.
4#[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/// Local history persistence mode.
29#[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/// Codex-compatible history persistence settings.
39#[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/// Built-in TUI notification delivery method.
49#[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/// Alternate-screen preference for the TUI.
60#[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/// TUI notification filters compatible with Codex config.
69#[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/// Accept either `true`/`false` or an allowlist of event names.
78#[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/// Codex-compatible TUI settings.
87#[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}