An AI agent built to do Ralph loops - plan mode for planning and ralph mode for implementing.
at main 84 lines 2.6 kB view raw
1use ratatui::{ 2 Frame, 3 layout::Rect, 4 style::{Color, Modifier, Style}, 5 text::{Line, Span}, 6 widgets::{Block, Borders, Clear, Paragraph}, 7}; 8 9pub struct HelpOverlay { 10 pub visible: bool, 11} 12 13impl HelpOverlay { 14 pub fn new() -> Self { 15 Self { visible: false } 16 } 17 18 pub fn toggle(&mut self) { 19 self.visible = !self.visible; 20 } 21} 22 23impl Default for HelpOverlay { 24 fn default() -> Self { 25 Self::new() 26 } 27} 28 29pub fn draw_help(frame: &mut Frame, area: Rect) { 30 let width = 50.min(area.width.saturating_sub(4)); 31 let height = 16.min(area.height.saturating_sub(4)); 32 let x = (area.width - width) / 2; 33 let y = (area.height - height) / 2; 34 let help_area = Rect::new(x, y, width, height); 35 36 frame.render_widget(Clear, help_area); 37 38 let block = Block::default() 39 .borders(Borders::ALL) 40 .border_style(Style::default().fg(Color::Cyan)) 41 .title(" Help (Esc to close) "); 42 43 let lines = vec![ 44 Line::from(Span::styled( 45 "Global", 46 Style::default().add_modifier(Modifier::BOLD), 47 )), 48 Line::from(" q Quit"), 49 Line::from(" 1/2/3 Switch tabs"), 50 Line::from(" Tab Cycle tabs"), 51 Line::from(" [ ] Toggle side panel"), 52 Line::from(" ? Toggle help"), 53 Line::from(""), 54 Line::from(Span::styled( 55 "Dashboard", 56 Style::default().add_modifier(Modifier::BOLD), 57 )), 58 Line::from(" Shift+K/A Kanban/Activity view"), 59 Line::from(" ↑↓←→/hjkl Navigate"), 60 Line::from(" Enter Run selected spec"), 61 Line::from(""), 62 Line::from(Span::styled( 63 "Planning", 64 Style::default().add_modifier(Modifier::BOLD), 65 )), 66 Line::from(" i Enter insert mode"), 67 Line::from(" Esc Exit insert mode"), 68 Line::from(" Enter Send message"), 69 Line::from(" ↑↓/jk Scroll (not in insert)"), 70 Line::from(" PgUp/PgDn Page scroll"), 71 Line::from(" Home/End Jump to top/bottom"), 72 Line::from(""), 73 Line::from(Span::styled( 74 "Execution", 75 Style::default().add_modifier(Modifier::BOLD), 76 )), 77 Line::from(" ↑↓/jk Scroll output"), 78 Line::from(" PgUp/PgDn Page scroll"), 79 Line::from(" Home/End Jump to top/bottom"), 80 ]; 81 82 let paragraph = Paragraph::new(lines).block(block); 83 frame.render_widget(paragraph, help_area); 84}