1use crate::agent_app::AgentApp;
6use crate::chat_app::ChatApp;
7use anyhow::Result;
8use perspt_core::GenAIProvider;
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq)]
12pub enum AppMode {
13 Chat,
15 Agent,
17}
18
19pub async fn run_chat_tui(provider: GenAIProvider, model: String) -> Result<()> {
37 use crossterm::event::{
38 DisableMouseCapture, EnableBracketedPaste, EnableMouseCapture, KeyboardEnhancementFlags,
39 PopKeyboardEnhancementFlags, PushKeyboardEnhancementFlags,
40 };
41 use ratatui::crossterm::execute;
42 use std::io::stdout;
43
44 execute!(stdout(), EnableMouseCapture)?;
46
47 execute!(stdout(), EnableBracketedPaste)?;
49
50 let _ = execute!(
53 stdout(),
54 PushKeyboardEnhancementFlags(
55 KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES
56 | KeyboardEnhancementFlags::REPORT_EVENT_TYPES
57 )
58 );
59
60 let mut terminal = ratatui::init();
61 let mut app = ChatApp::new(provider, model);
62
63 let result = app.run(&mut terminal).await;
64
65 let _ = execute!(stdout(), PopKeyboardEnhancementFlags);
67 ratatui::restore();
68 execute!(stdout(), DisableMouseCapture)?;
69
70 result
71}
72
73pub fn run_agent_tui() -> std::io::Result<()> {
78 let mut terminal = ratatui::init();
79 let mut app = AgentApp::new();
80
81 use crate::task_tree::TaskStatus;
83 app.task_tree.add_task(
84 "root".to_string(),
85 "Implement authentication".to_string(),
86 0,
87 );
88 app.task_tree
89 .add_task("auth-1".to_string(), "Create JWT module".to_string(), 1);
90 app.task_tree
91 .add_task("auth-2".to_string(), "Add password hashing".to_string(), 1);
92 app.task_tree.update_status("root", TaskStatus::Running);
93 app.task_tree.update_status("auth-1", TaskStatus::Completed);
94
95 app.dashboard.total_nodes = 3;
96 app.dashboard.completed_nodes = 1;
97 app.dashboard.current_node = Some("auth-2".to_string());
98 app.dashboard.update_energy(0.5);
99 app.dashboard
100 .log("Started task: Implement authentication".to_string());
101 app.dashboard.log("OK: JWT module completed".to_string());
102
103 let result = app.run(&mut terminal);
104 ratatui::restore();
105 result
106}
107
108#[deprecated(note = "Use run_chat_tui or run_agent_tui instead")]
110pub fn run_tui() -> Result<()> {
111 run_agent_tui().map_err(|e| anyhow::anyhow!("TUI error: {}", e))
112}