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#[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
68pub 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
91pub 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}