feat: enhance lesson management and review system
- Added LessonAccept and LessonReject actions to manage lesson outcomes. - Implemented probe for build/test verification before triggering reviews. - Introduced a mechanism for recording shadow hits and evaluating trials in the ReviewSystem. - Enhanced lesson structure with additional fields for scope, snippets, and provenances. - Updated command parsing to include lesson acceptance and rejection commands. - Improved session state management with staleness sweeps and retrospective creation. - Enhanced UI to display detailed usage statistics and quality trends.
This commit is contained in:
+32
-10
@@ -539,43 +539,65 @@ fn render_overlay(frame: &mut Frame, area: Rect, overlay: crate::app::state::typ
|
||||
}
|
||||
crate::app::state::types::Overlay::Usage => {
|
||||
let block = block.title(" Usage ");
|
||||
let (tokens_in, tokens_out, api_calls, review_tokens, session_start) = state.session_runtime.as_ref().map(|r| {
|
||||
let runtime = state.session_runtime.as_ref();
|
||||
let (tokens_in, tokens_out, api_calls, review_tokens, session_start) = runtime.map(|r| {
|
||||
(r.usage.tokens_in, r.usage.tokens_out, r.usage.api_calls, r.usage.review_tokens, r.session_start)
|
||||
}).unwrap_or((0, 0, 0, 0, 0));
|
||||
let (edit_count, lesson_count, review_count, consec_empty) = runtime.map(|r| {
|
||||
(r.edit_count, r.lesson_count, r.review_count, r.consecutive_empty_reviews)
|
||||
}).unwrap_or((0, 0, 0, 0));
|
||||
let elapsed_ms = chrono::Utc::now().timestamp_millis().saturating_sub(session_start);
|
||||
let hours = elapsed_ms / 3600000;
|
||||
let minutes = (elapsed_ms % 3600000) / 60000;
|
||||
let seconds = (elapsed_ms % 60000) / 1000;
|
||||
let total_tokens = tokens_in.saturating_add(tokens_out);
|
||||
let self_learning_total = review_tokens;
|
||||
let main_tokens = total_tokens.saturating_sub(self_learning_total);
|
||||
let lines = vec![
|
||||
Line::from(Span::styled(
|
||||
"Usage Dashboard",
|
||||
Style::default().fg(Theme::PRIMARY).add_modifier(Modifier::BOLD),
|
||||
)),
|
||||
Line::from(Span::styled("", Style::default())),
|
||||
Line::from(Span::styled("── Token Usage ──", Style::default().fg(Theme::DIM))),
|
||||
Line::from(Span::styled(
|
||||
format!("Tokens in: {}", tokens_in),
|
||||
format!(" Main agent tokens: {}", main_tokens),
|
||||
Style::default().fg(Theme::TEXT),
|
||||
)),
|
||||
Line::from(Span::styled(
|
||||
format!("Tokens out: {}", tokens_out),
|
||||
Style::default().fg(Theme::TEXT),
|
||||
)),
|
||||
Line::from(Span::styled(
|
||||
format!("Total tokens: {}", total_tokens),
|
||||
format!(" Self-learning tokens: {}", self_learning_total),
|
||||
Style::default().fg(Theme::INFO),
|
||||
)),
|
||||
Line::from(Span::styled(
|
||||
format!(" Total tokens: {}", total_tokens),
|
||||
Style::default().fg(Theme::INFO).add_modifier(Modifier::BOLD),
|
||||
)),
|
||||
Line::from(Span::styled(
|
||||
format!(" API calls: {}", api_calls),
|
||||
Style::default().fg(Theme::TEXT),
|
||||
)),
|
||||
Line::from(Span::styled("", Style::default())),
|
||||
Line::from(Span::styled("── Quality Trends ──", Style::default().fg(Theme::DIM))),
|
||||
Line::from(Span::styled(
|
||||
format!("API calls: {}", api_calls),
|
||||
format!(" Edits this session: {}", edit_count),
|
||||
Style::default().fg(Theme::TEXT),
|
||||
)),
|
||||
Line::from(Span::styled(
|
||||
format!("Review tokens: {}", review_tokens),
|
||||
format!(" Reviews completed: {}", review_count),
|
||||
Style::default().fg(Theme::TEXT),
|
||||
)),
|
||||
Line::from(Span::styled(
|
||||
format!(" Lessons found: {}", lesson_count),
|
||||
Style::default().fg(Theme::INFO),
|
||||
)),
|
||||
Line::from(Span::styled(
|
||||
format!("Session time: {}h {}m {}s", hours, minutes, seconds),
|
||||
format!(" Consecutive empty revs: {}", consec_empty),
|
||||
Style::default().fg(if consec_empty > 3 { Theme::WARNING } else { Theme::DIM }),
|
||||
)),
|
||||
Line::from(Span::styled("", Style::default())),
|
||||
Line::from(Span::styled("── Session ──", Style::default().fg(Theme::DIM))),
|
||||
Line::from(Span::styled(
|
||||
format!(" Duration: {}h {}m {}s", hours, minutes, seconds),
|
||||
Style::default().fg(Theme::DIM),
|
||||
)),
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user