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