use std::path::PathBuf;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum QueryMode {
#[default]
Ask,
Explain,
Reason,
}
impl QueryMode {
pub fn label(&self) -> &'static str {
match self {
QueryMode::Ask => "ASK",
QueryMode::Explain => "EXPLAIN",
QueryMode::Reason => "REASON",
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct SourceRef {
pub id: String,
pub excerpt: String,
pub relevance_score: f32,
}
#[derive(Debug, Clone, PartialEq)]
pub struct QueryExplainedPayload {
pub answer: String,
pub confidence: f32,
pub sources: Vec<SourceRef>,
}
#[derive(Debug, Clone, PartialEq)]
#[allow(dead_code)]
pub enum Action {
Tick,
Render,
Resize(u16, u16),
Quit,
InputChar(char),
DeleteChar,
SubmitInput,
ClearInput,
FocusQueryInput,
FocusResultsViewer,
FocusRawResultsViewer,
FocusInfoPanel,
NextPane,
PreviousPane,
NextTab,
ScrollUp,
ScrollDown,
ScrollPageUp,
ScrollPageDown,
ScrollToTop,
ScrollToBottom,
LoadConfig(PathBuf),
LoadDocument(PathBuf),
ExecuteQuery(String),
ExecuteExplainedQuery(String),
ExecuteReasonQuery(String),
ExecuteSlashCommand(String),
SetQueryMode(QueryMode),
SetStatus(StatusType, String),
ClearStatus,
StartProgress(String),
StopProgress,
ToggleHelp,
QuerySuccess(String),
QueryExplainedSuccess(Box<QueryExplainedPayload>),
QueryError(String),
DocumentLoaded(String),
DocumentLoadError(String),
ConfigLoaded(String),
ConfigLoadError(String),
ExportSuccess(String),
SwitchWorkspace(String),
RefreshStats,
Noop,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum StatusType {
Info,
Success,
Warning,
Error,
Progress,
}
impl StatusType {
pub fn icon(&self) -> &str {
match self {
StatusType::Info => "ℹ",
StatusType::Success => "✓",
StatusType::Warning => "⚠",
StatusType::Error => "✗",
StatusType::Progress => "⟳",
}
}
pub fn color(&self) -> ratatui::style::Color {
use ratatui::style::Color;
match self {
StatusType::Info => Color::Blue,
StatusType::Success => Color::Green,
StatusType::Warning => Color::Yellow,
StatusType::Error => Color::Red,
StatusType::Progress => Color::Cyan,
}
}
}