Dispatch a turn event through the orchestrator. This is the main entry point called by the CLI hook handler. It: 1. Routes the event to the appropriate handler based on `event_type` 2. Loads or creates the session state 3. Runs the state machine transition 4. Executes any actions (begin/end turn, record change) 5. Saves the updated session state 6. Returns a `DispatchResult` with any data to send
(&mut self, event: TurnEvent)
| 349 | /// Most errors are non-fatal — the orchestrator logs warnings and |
| 350 | /// continues. Fatal errors (session store IO failure, etc.) are propagated. |
| 351 | pub async fn dispatch(&mut self, event: TurnEvent) -> AgentResult<DispatchResult> { |
| 352 | match event.event_type { |
| 353 | HookType::SessionStart => self.handle_session_start(event).await, |
| 354 | HookType::TurnStart => self.handle_turn_start(event).await, |
| 355 | HookType::TurnEnd => self.handle_turn_end(event).await, |
| 356 | HookType::SessionEnd => self.handle_session_end(event).await, |
| 357 | HookType::PreToolUse | HookType::PostToolUse => self.handle_tool_use(event).await, |
| 358 | } |
| 359 | } |
| 360 | } |
| 361 | |
| 362 | // ═══════════════════════════════════════════════════════════════════════ |