use std::sync::Arc;
use super::models::ModelsModalState;
use super::plugins::PluginsModalState;
use super::settings::{RuntimeSnapshot, SettingsState};
use super::sidecar::SidecarUiStatus;
pub(crate) struct RenderModel {
pub(crate) status_text: Option<String>,
pub(crate) streaming: bool,
pub(crate) spinner_frame: usize,
pub(crate) sidecar_pills: Vec<SidecarPillSnap>,
pub(crate) runtime_model: String,
pub(crate) runtime_thinking: String,
pub(crate) lines: Arc<[ratatui::text::Line<'static>]>,
#[allow(dead_code)]
pub(crate) lines_width: usize,
pub(crate) scroll_back: u16,
pub(crate) visible_range: (usize, usize),
pub(crate) selection: Option<(u16, u16, u16, u16)>,
pub(crate) messages_empty: bool,
pub(crate) logo_build_t: Option<f64>,
pub(crate) logo_dismiss_t: Option<f64>,
pub(crate) subagents: Vec<SubagentSnap>,
pub(crate) active_tasks: std::sync::Arc<synaps_cli::extensions::active_tasks::ActiveTasks>,
pub(crate) input: String,
pub(crate) cursor_pos: usize,
pub(crate) ghost_hint: Option<GhostHint>,
pub(crate) show_full_output: bool,
pub(crate) session_cost: f64,
pub(crate) total_input_tokens: u64,
pub(crate) total_output_tokens: u64,
pub(crate) total_cache_read_tokens: u64,
pub(crate) total_cache_creation_tokens: u64,
pub(crate) total_cache_write_1h: u64,
pub(crate) last_turn_context: u64,
pub(crate) last_turn_context_window: u64,
pub(crate) toasts: Vec<super::toast::Toast>,
pub(crate) settings: Option<(SettingsState, RuntimeSnapshot)>,
pub(crate) plugins: Option<PluginsModalState>,
pub(crate) models: Option<ModelsModalState>,
pub(crate) help_find: Option<synaps_cli::help::HelpFindState>,
pub(crate) secret_prompt: Option<SecretPromptSnap>,
pub(crate) protected_bottom_rows: u16,
}
#[derive(Clone)]
pub(crate) struct SidecarPillSnap {
#[allow(dead_code)]
pub(crate) plugin_id: String,
pub(crate) display_name: Option<String>,
pub(crate) status: SidecarUiStatus,
pub(crate) armed: bool,
}
#[derive(Clone)]
pub(crate) struct SubagentSnap {
pub(crate) name: String,
pub(crate) status: String,
pub(crate) elapsed_secs: f64,
pub(crate) done: bool,
}
#[derive(Clone)]
pub(crate) struct GhostHint {
pub(crate) ghost_text: String,
pub(crate) match_badge: Option<String>,
}
#[derive(Clone)]
pub(crate) struct SecretPromptSnap {
pub(crate) title: String,
pub(crate) prompt: String,
pub(crate) masked_buffer_chars: usize,
}