doum_cli/cli/config/
context.rs

1// Context Configuration Menu
2
3use crate::system::error::Result;
4use crate::system::config::{load_config, save_config};
5use crate::cli::menu::Menu;
6use crate::cli::tui::ratatui_select;
7use crate::cli::ui::prompt_number_input;
8
9/// Context configuration menu
10pub fn run_context_menu() -> Result<()> {
11    loop {
12        let config = load_config()?;
13        
14        let menu = Menu::builder("Context Settings")
15            .with_back()
16            .add_item(
17                "max_lines",
18                format!("Max Lines [current: {}]", config.llm.context.max_lines),
19                format!("Maximum number of lines to include (current: {})", config.llm.context.max_lines)
20            )
21            .add_item(
22                "max_size_kb",
23                format!("Max Size [current: {} KB]", config.llm.context.max_size_kb),
24                format!("Maximum context size in KB (current: {})", config.llm.context.max_size_kb)
25            )
26            .build();
27        
28        let selected = ratatui_select(
29            "šŸ“„ Context Configuration",
30            &menu.items,
31            Some("↑↓: Navigate | Enter: Select | Esc/q: Cancel"),
32            None
33        )?;
34        
35        match selected {
36            Some(item) => {
37                match item.id.as_str() {
38                    "back" => break,
39                    "exit" => {
40                        println!("\nšŸ‘‹ Goodbye!");
41                        std::process::exit(0);
42                    }
43                    "max_lines" => {
44                        edit_max_lines()?;
45                    }
46                    "max_size_kb" => {
47                        edit_max_size_kb()?;
48                    }
49                    _ => {
50                        println!("\nāš ļø  Unknown option");
51                    }
52                }
53            }
54            None => break,
55        }
56    }
57    
58    Ok(())
59}
60
61/// Edit max_lines setting
62fn edit_max_lines() -> Result<()> {
63    let mut config = load_config()?;
64    
65    let new_value = prompt_number_input::<usize>(
66        "Maximum lines",
67        Some(config.llm.context.max_lines)
68    )?;
69    
70    config.llm.context.max_lines = new_value;
71    save_config(&config)?;
72    
73    println!("āœ… Setting saved: max_lines = {}", new_value);
74    
75    Ok(())
76}
77
78/// Edit max_size_kb setting
79fn edit_max_size_kb() -> Result<()> {
80    let mut config = load_config()?;
81    
82    let new_value = prompt_number_input::<usize>(
83        "Maximum size (KB)",
84        Some(config.llm.context.max_size_kb)
85    )?;
86    
87    config.llm.context.max_size_kb = new_value;
88    save_config(&config)?;
89    
90    println!("āœ… Setting saved: max_size_kb = {}", new_value);
91    
92    Ok(())
93}