Skip to main content

oy_tui/
lib.rs

1#![deny(clippy::cognitive_complexity)]
2#![deny(clippy::too_many_arguments)]
3// too_many_lines omitted for TUI crate — UI rendering functions are naturally long but low complexity.
4// Threshold is configured in .clippy.toml as a guideline for non-UI crates.
5pub mod app;
6pub mod event;
7pub mod ui;
8
9mod agent;
10mod command;
11mod config;
12mod html_export;
13mod load_config;
14mod message;
15mod theme;
16
17use std::path::PathBuf;
18
19use crate::app::App;
20use crossterm::execute;
21
22/// Shared TUI entry point — callable from oy-code-cli.
23///
24/// If `session_path` is `Some`, the TUI will load that session on startup.
25pub async fn run_tui(session_path: Option<PathBuf>) -> color_eyre::Result<()> {
26    color_eyre::install()?;
27    execute!(
28        std::io::stdout(),
29        crossterm::event::EnableMouseCapture,
30        crossterm::event::EnableBracketedPaste,
31    )?;
32    let terminal = ratatui::init();
33    let result = App::new(session_path).await.run(terminal).await;
34    ratatui::restore();
35    execute!(
36        std::io::stdout(),
37        crossterm::event::DisableMouseCapture,
38        crossterm::event::DisableBracketedPaste,
39    )?;
40    result
41}