doum_cli/cli/config/
context.rs1use 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
9pub 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
61fn 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
78fn 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}