//! Event variants that a running subagent can emit to its parent via the //! shared mpsc channel. use serde_json::Value; /// Progress and outcome events emitted by `run_subagent` as it processes /// LLM responses and tool calls. #[derive(Debug, Clone)] pub enum SubagentEvent { StepCompleted { output: String, }, StepFailed { step: usize, error: String, }, Completed, ToolCall { tool: String, args: Value, }, ToolResult { tool: String, args: Value, }, Progress(String), /// Token usage reported by the LLM after one streaming call inside the /// subagent. The drain thread accumulates these across all steps and /// forwards the total to the parent's `TurnEvent::ReviewUsage` handler /// so the Usage panel can split "main" tokens from "self-learning" /// tokens (review, test-gen, arch-review, security-review, etc.). /// /// Why a separate variant instead of folding into `Completed`: usage /// is reported per-step, so the parent can update the running total /// incrementally rather than waiting for the whole subagent run to /// finish. The drain thread still aggregates before forwarding. Usage { tokens_in: u64, tokens_out: u64, }, }