use serde_json::Value;
#[derive(Debug, Clone)]
pub enum CliEvent {
SessionStart {
session_id: String,
model: String,
tools: Vec<String>,
},
AssistantText {
text: String,
is_delta: bool,
},
ToolCallStart {
id: String,
name: String,
input: Value,
},
ToolCallResult {
id: String,
output: String,
is_error: bool,
duration_ms: Option<u64>,
},
Thinking {
text: String,
},
TurnComplete {
input_tokens: u64,
output_tokens: u64,
},
SessionEnd {
result: String,
cost_usd: Option<f64>,
is_error: bool,
},
Error {
message: String,
},
}
pub trait NdjsonParser: Send {
fn parse_line(&mut self, line: &str) -> Vec<CliEvent>;
fn session_id(&self) -> Option<&str>;
}