use serde::{Deserialize, Serialize}; #[derive(Debug, Default, Deserialize, Serialize)] #[serde(default)] pub struct InputData { pub model: Option, pub cost: Option, pub context_window: Option, pub workspace: Option, pub version: Option, pub output_style: Option, pub transcript_path: Option, pub session_id: Option, pub cwd: Option, pub vim: Option, pub agent: Option, pub exceeds_200k_tokens: Option, #[serde(flatten)] pub extra: std::collections::HashMap, } #[derive(Debug, Default, Deserialize, Serialize)] #[serde(default)] pub struct VimInfo { pub mode: Option, } #[derive(Debug, Default, Deserialize, Serialize)] #[serde(default)] pub struct AgentInfo { pub name: Option, } #[derive(Debug, Default, Deserialize, Serialize)] #[serde(default)] pub struct ModelInfo { pub id: Option, pub display_name: Option, } #[derive(Debug, Default, Deserialize, Serialize)] #[serde(default)] pub struct CostInfo { pub total_cost_usd: Option, pub total_duration_ms: Option, pub total_api_duration_ms: Option, pub total_lines_added: Option, pub total_lines_removed: Option, pub total_tool_uses: Option, pub last_tool_name: Option, pub total_turns: Option, /// Captures any fields we don't explicitly model (for debugging via --dump-state). #[serde(flatten)] pub extra: std::collections::HashMap, } #[derive(Debug, Default, Deserialize, Serialize)] #[serde(default)] pub struct ContextWindow { pub used_percentage: Option, pub total_input_tokens: Option, pub total_output_tokens: Option, pub context_window_size: Option, pub current_usage: Option, } #[derive(Debug, Default, Deserialize, Serialize)] #[serde(default)] pub struct CurrentUsage { pub input_tokens: Option, pub output_tokens: Option, pub cache_read_input_tokens: Option, pub cache_creation_input_tokens: Option, } #[derive(Debug, Default, Deserialize, Serialize)] #[serde(default)] pub struct Workspace { pub project_dir: Option, pub terminal_width: Option, } #[derive(Debug, Default, Deserialize, Serialize)] #[serde(default)] pub struct OutputStyle { pub name: Option, }