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, OverlayEvent, OverlayHotkey, OverlayHotkeyAction, OverlayHotkeyKey,
18    OverlayRequest, OverlaySelectionChange, OverlaySubmission, RewindAction, SecurePromptConfig,
19    WizardModalMode, WizardOverlayRequest, WizardStep,
20};
21pub use crate::options::{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 workspace_root: Option<PathBuf>,
40    pub appearance: Option<SessionAppearanceConfig>,
41    pub app_name: String,
42    pub non_interactive_hint: Option<String>,
43}
44
45impl Default for CoreSessionOptions {
46    fn default() -> Self {
47        Self {
48            placeholder: None,
49            surface_preference: SessionSurface::Auto,
50            inline_rows: crate::config::constants::ui::DEFAULT_INLINE_VIEWPORT_ROWS,
51            event_callback: None,
52            focus_callback: None,
53            active_pty_sessions: None,
54            input_activity_counter: None,
55            keyboard_protocol: KeyboardProtocolSettings::default(),
56            workspace_root: None,
57            appearance: None,
58            app_name: "Agent TUI".to_string(),
59            non_interactive_hint: None,
60        }
61    }
62}
63
64/// Spawn a core session using standalone options.
65pub fn spawn_core_session(
66    theme: InlineTheme,
67    options: CoreSessionOptions,
68) -> 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.workspace_root,
80        options.appearance,
81        options.app_name,
82        options.non_interactive_hint,
83    )
84}
85
86/// Commonly used core TUI API items.
87pub mod prelude {
88    pub use super::{
89        CoreCommand, CoreEvent, CoreHandle, CoreSession, CoreSessionOptions, InlineHeaderContext,
90        InlineHeaderHighlight, InlineHeaderStatusBadge, InlineHeaderStatusTone, InlineMessageKind,
91        InlineSegment, InlineTextStyle, InlineTheme, KeyboardProtocolSettings, LayoutModeOverride,
92        ListOverlayRequest, ModalOverlayRequest, OverlayEvent, OverlayHotkey, OverlayHotkeyAction,
93        OverlayHotkeyKey, OverlayRequest, OverlaySelectionChange, OverlaySubmission,
94        ReasoningDisplayMode, SessionAppearanceConfig, SessionSurface, UiMode, WizardModalMode,
95        WizardOverlayRequest, WizardStep, convert_style, spawn_core_session, theme_from_styles,
96    };
97}