use crate::clipboard::PastedImage;
use crate::commands::Command;
use crate::session::SessionMetadata;
use crate::tools::utils::ConfirmationType;
#[derive(Debug, Clone)]
pub struct ExitSummary {
pub model: String,
pub input_tokens: u32,
pub output_tokens: u32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Mode {
Normal,
Safe,
}
impl Mode {
pub fn label(self) -> &'static str {
match self {
Mode::Normal => "normal",
Mode::Safe => "safe",
}
}
}
#[derive(Debug, Clone)]
pub struct StatusSnapshot {
pub model: String,
pub mode: Mode,
pub reasoning: String,
pub input_tokens: u32,
pub output_tokens: u32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum OutputKind {
Stdout,
Stderr,
}
#[derive(Debug)]
pub enum Job {
Message {
text: String,
images: Vec<PastedImage>,
},
Command(Command),
ResumeSelected(Option<String>),
Shutdown,
}
#[derive(Debug)]
#[allow(dead_code)]
pub enum UiEvent {
Output { kind: OutputKind, text: String },
Key(crossterm::event::KeyEvent),
Paste(String),
Resize,
Tick,
WorkerBusy(String),
WorkerIdle,
ShowResumePicker(Vec<SessionMetadata>),
Status(StatusSnapshot),
ConfirmRequest {
prompt: String,
choices: Vec<String>,
default_index: usize,
kind: ConfirmationType,
responder: std::sync::mpsc::Sender<usize>,
},
WorkerShutdown(ExitSummary),
}