limit_cli/tui/mod.rs
1//! TUI (Terminal User Interface) module for limit-cli
2//!
3//! This module provides a rich terminal interface for interacting with the Limit AI agent.
4//!
5//! # Architecture
6//!
7//! The TUI system is organized into several components:
8//!
9//! - **State**: Core state types (`TuiState`, `FileAutocompleteState`)
10//! - **Bridge**: Connection between agent and UI (`TuiBridge`)
11//! - **App**: Main application loop (`TuiApp`)
12//! - **Input**: Input handling (`InputHandler`, `InputEditor`, `ClipboardHandler`)
13//! - **Activity**: Activity message formatting
14//! - **Autocomplete**: File autocomplete management
15//!
16//! # Example
17//!
18//! ```no_run
19//! use limit_cli::tui::app::{TuiBridge, TuiApp};
20//! use limit_cli::agent_bridge::AgentBridge;
21//! use limit_llm::{Config, ProviderConfig, CompactionSettings, CacheSettings};
22//! use tokio::sync::mpsc;
23//! use std::collections::HashMap;
24//!
25//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
26//! // Create config
27//! let mut providers = HashMap::new();
28//! providers.insert("anthropic".to_string(), ProviderConfig {
29//! api_key: Some("test-key".to_string()),
30//! model: "claude-3-5-sonnet-20241022".to_string(),
31//! base_url: None,
32//! max_tokens: 4096,
33//! timeout: 60,
34//! max_iterations: 100,
35//! thinking_enabled: false,
36//! clear_thinking: true,
37//! });
38//! let config = Config {
39//! provider: "anthropic".to_string(),
40//! providers,
41//! browser: limit_llm::BrowserConfigSection::default(),
42//! compaction: CompactionSettings::default(),
43//! cache: CacheSettings::default(),
44//! };
45//!
46//! // Create agent bridge and event channel
47//! let (tx, rx) = mpsc::unbounded_channel();
48//! let bridge = AgentBridge::new(config)?;
49//!
50//! // Create TUI bridge
51//! let tui_bridge = TuiBridge::new(bridge, rx)?;
52//!
53//! // Run TUI app
54//! let mut app = TuiApp::new(tui_bridge)?;
55//! app.run()?;
56//! # Ok(())
57//! # }
58//! ```
59
60mod state;
61
62pub mod activity;
63pub mod app;
64pub mod autocomplete;
65pub mod bridge;
66pub mod commands;
67pub mod input;
68pub mod ui;
69
70// Re-export public API
71pub use input::InputHandler;
72pub use state::{FileAutocompleteState, TuiState, MAX_PASTE_SIZE};