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#[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
64pub 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
86pub 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}