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#[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
66pub 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
89pub 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}