use crate::api::ReasoningEffort;
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,
pub cache_read_tokens: u32,
pub cache_creation_tokens: u32,
pub peak_single_turn_input_tokens: u32,
pub panicked: bool,
}
#[derive(Debug, Clone)]
pub struct StatusSnapshot {
pub model: String,
pub mode: crate::config::SandboxMode,
pub approval: crate::config::ApprovalPolicy,
pub reasoning: String,
pub input_tokens: u32,
pub output_tokens: u32,
pub cache_read_tokens: u32,
pub cache_creation_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>),
ModelSelected(Option<&'static str>),
EffortSelected(Option<ReasoningEffort>),
PermissionsSelected(Option<crate::config::PermissionPreset>),
Shutdown,
}
#[derive(Debug, Clone, Copy)]
pub struct ModelPickerEntry {
pub name: &'static str,
pub description: &'static str,
pub is_current: bool,
pub is_available: bool,
}
#[derive(Debug, Clone, Copy)]
pub struct EffortPickerEntry {
pub effort: ReasoningEffort,
pub is_current: bool,
}
#[derive(Debug, Clone, Copy)]
pub struct PermissionsPickerEntry {
pub preset: crate::config::PermissionPreset,
pub is_current: bool,
pub is_available: bool,
}
#[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>),
ShowModelPicker { entries: Vec<ModelPickerEntry> },
ShowEffortPicker { entries: Vec<EffortPickerEntry> },
ShowPermissionsPicker {
entries: Vec<PermissionsPickerEntry>,
},
Status(StatusSnapshot),
ConfirmRequest {
prompt: String,
choices: Vec<String>,
default_index: usize,
kind: ConfirmationType,
responder: std::sync::mpsc::Sender<usize>,
},
WorkerShutdown(ExitSummary),
}