Skip to main content

vtcode_tui/
core.rs

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