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#[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
67pub 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
88pub 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}