Skip to main content

vtcode_ui/tui/
core.rs

1use std::path::PathBuf;
2use std::sync::Arc;
3
4use crate::tui::config::KeyboardProtocolConfig;
5use crate::tui::core_tui;
6
7pub use crate::tui::core_tui::session::config::AppearanceConfig as SessionAppearanceConfig;
8pub use crate::tui::core_tui::session::config::{LayoutModeOverride, ReasoningDisplayMode, UiMode};
9pub use crate::tui::core_tui::session::mouse_selection::MouseSelectionState;
10pub use crate::tui::core_tui::style::{convert_style, theme_from_styles};
11pub use crate::tui::core_tui::theme_parser::ThemeConfigParser;
12pub use crate::tui::core_tui::types::{
13    ContentPart, EditingMode, FocusChangeCallback, InlineEventCallback, InlineHeaderContext,
14    InlineHeaderHighlight, InlineHeaderStatusBadge, InlineHeaderStatusTone, InlineLinkRange,
15    InlineLinkTarget, InlineListItem, InlineListSearchConfig, InlineListSelection,
16    InlineMessageKind, InlineSegment, InlineTextStyle, InlineTheme, ListOverlayRequest,
17    ModalOverlayRequest, OpenAIServiceTierChoice, OverlayEvent, OverlayHotkey, OverlayHotkeyAction,
18    OverlayHotkeyKey, OverlayRequest, OverlaySelectionChange, OverlaySubmission, RewindAction,
19    SecurePromptConfig, WizardModalMode, WizardOverlayRequest, WizardStep,
20};
21pub use crate::tui::options::{
22    FullscreenInteractionSettings, KeyboardProtocolSettings, SessionSurface,
23};
24
25pub type CoreCommand = core_tui::types::InlineCommand;
26pub type CoreEvent = core_tui::types::InlineEvent;
27pub type CoreHandle = core_tui::types::InlineHandle;
28pub type CoreSession = core_tui::types::InlineSession;
29
30/// Core session launch options for reusable TUI integrations.
31#[derive(Clone)]
32pub struct CoreSessionOptions {
33    pub placeholder: Option<String>,
34    pub surface_preference: SessionSurface,
35    pub inline_rows: u16,
36    pub event_callback: Option<InlineEventCallback>,
37    pub focus_callback: Option<FocusChangeCallback>,
38    pub active_pty_sessions: Option<Arc<std::sync::atomic::AtomicUsize>>,
39    pub input_activity_counter: Option<Arc<std::sync::atomic::AtomicU64>>,
40    pub keyboard_protocol: KeyboardProtocolSettings,
41    pub fullscreen: FullscreenInteractionSettings,
42    pub workspace_root: Option<PathBuf>,
43    pub appearance: Option<SessionAppearanceConfig>,
44    pub app_name: String,
45    pub non_interactive_hint: Option<String>,
46}
47
48impl Default for CoreSessionOptions {
49    fn default() -> Self {
50        Self {
51            placeholder: None,
52            surface_preference: SessionSurface::Auto,
53            inline_rows: crate::tui::config::constants::ui::DEFAULT_INLINE_VIEWPORT_ROWS,
54            event_callback: None,
55            focus_callback: None,
56            active_pty_sessions: None,
57            input_activity_counter: None,
58            keyboard_protocol: KeyboardProtocolSettings::default(),
59            fullscreen: FullscreenInteractionSettings::default(),
60            workspace_root: None,
61            appearance: None,
62            app_name: "Agent TUI".to_string(),
63            non_interactive_hint: None,
64        }
65    }
66}
67
68/// Spawn a core session using standalone options.
69pub fn spawn_core_session(
70    theme: InlineTheme,
71    options: CoreSessionOptions,
72) -> anyhow::Result<CoreSession> {
73    core_tui::spawn_session_with_prompts_and_options(
74        theme,
75        options.placeholder,
76        options.surface_preference.into(),
77        options.inline_rows,
78        options.event_callback,
79        options.focus_callback,
80        options.active_pty_sessions,
81        options.input_activity_counter,
82        KeyboardProtocolConfig::from(options.keyboard_protocol),
83        options.fullscreen,
84        options.workspace_root,
85        options.appearance,
86        options.app_name,
87        options.non_interactive_hint,
88    )
89}
90
91/// Commonly used core TUI API items.
92pub mod prelude {
93    pub use super::{
94        CoreCommand, CoreEvent, CoreHandle, CoreSession, CoreSessionOptions,
95        FullscreenInteractionSettings, InlineHeaderContext, InlineHeaderHighlight,
96        InlineHeaderStatusBadge, InlineHeaderStatusTone, InlineMessageKind, InlineSegment,
97        InlineTextStyle, InlineTheme, KeyboardProtocolSettings, LayoutModeOverride,
98        ListOverlayRequest, ModalOverlayRequest, OverlayEvent, OverlayHotkey, OverlayHotkeyAction,
99        OverlayHotkeyKey, OverlayRequest, OverlaySelectionChange, OverlaySubmission,
100        ReasoningDisplayMode, SessionAppearanceConfig, SessionSurface, UiMode, WizardModalMode,
101        WizardOverlayRequest, WizardStep, convert_style, spawn_core_session, theme_from_styles,
102    };
103}