Add built-in theme support with various pre-defined themes
Some checks failed
ci/someci/tag/woodpecker/5 Pipeline is pending
ci/someci/tag/woodpecker/6 Pipeline is pending
ci/someci/tag/woodpecker/7 Pipeline is pending
ci/someci/tag/woodpecker/1 Pipeline failed
ci/someci/tag/woodpecker/2 Pipeline failed
ci/someci/tag/woodpecker/3 Pipeline failed
ci/someci/tag/woodpecker/4 Pipeline failed
Some checks failed
ci/someci/tag/woodpecker/5 Pipeline is pending
ci/someci/tag/woodpecker/6 Pipeline is pending
ci/someci/tag/woodpecker/7 Pipeline is pending
ci/someci/tag/woodpecker/1 Pipeline failed
ci/someci/tag/woodpecker/2 Pipeline failed
ci/someci/tag/woodpecker/3 Pipeline failed
ci/someci/tag/woodpecker/4 Pipeline failed
- Introduce multiple built-in themes (`default_dark`, `default_light`, `gruvbox`, `dracula`, `solarized`, `midnight-ocean`, `rose-pine`, `monokai`, `material-dark`, `material-light`). - Implement theming system with customizable color schemes for all UI components in the TUI. - Include documentation for themes in `themes/README.md`. - Add fallback mechanisms for default themes in case of parsing errors. - Support custom themes with overrides via configuration.
This commit is contained in:
@@ -231,7 +231,15 @@ impl SessionController {
|
||||
if conv.messages.len() == 1 {
|
||||
let first_msg = &conv.messages[0];
|
||||
let preview = first_msg.content.chars().take(50).collect::<String>();
|
||||
return Ok(format!("{}{}", preview, if first_msg.content.len() > 50 { "..." } else { "" }));
|
||||
return Ok(format!(
|
||||
"{}{}",
|
||||
preview,
|
||||
if first_msg.content.len() > 50 {
|
||||
"..."
|
||||
} else {
|
||||
""
|
||||
}
|
||||
));
|
||||
}
|
||||
|
||||
// Build a summary prompt from the first few and last few messages
|
||||
@@ -240,7 +248,8 @@ impl SessionController {
|
||||
// Add system message to guide the description
|
||||
summary_messages.push(crate::types::Message::system(
|
||||
"Summarize this conversation in 1-2 short sentences (max 100 characters). \
|
||||
Focus on the main topic or question being discussed. Be concise and descriptive.".to_string()
|
||||
Focus on the main topic or question being discussed. Be concise and descriptive."
|
||||
.to_string(),
|
||||
));
|
||||
|
||||
// Include first message
|
||||
@@ -283,7 +292,15 @@ impl SessionController {
|
||||
if description.is_empty() {
|
||||
let first_msg = &conv.messages[0];
|
||||
let preview = first_msg.content.chars().take(50).collect::<String>();
|
||||
return Ok(format!("{}{}", preview, if first_msg.content.len() > 50 { "..." } else { "" }));
|
||||
return Ok(format!(
|
||||
"{}{}",
|
||||
preview,
|
||||
if first_msg.content.len() > 50 {
|
||||
"..."
|
||||
} else {
|
||||
""
|
||||
}
|
||||
));
|
||||
}
|
||||
|
||||
// Truncate if too long
|
||||
@@ -298,7 +315,15 @@ impl SessionController {
|
||||
// Fallback to simple description if AI generation fails
|
||||
let first_msg = &conv.messages[0];
|
||||
let preview = first_msg.content.chars().take(50).collect::<String>();
|
||||
Ok(format!("{}{}", preview, if first_msg.content.len() > 50 { "..." } else { "" }))
|
||||
Ok(format!(
|
||||
"{}{}",
|
||||
preview,
|
||||
if first_msg.content.len() > 50 {
|
||||
"..."
|
||||
} else {
|
||||
""
|
||||
}
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user