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)
| 362 | /// Most errors are non-fatal — the orchestrator logs warnings and |
| 363 | /// continues. Fatal errors (session store IO failure, etc.) are propagated. |
| 364 | pub async fn dispatch(&mut self, event: TurnEvent) -> AgentResult<DispatchResult> { |
| 365 | match event.event_type { |
| 366 | HookType::SessionStart => self.handle_session_start(event).await, |
| 367 | HookType::TurnStart => self.handle_turn_start(event).await, |
| 368 | HookType::TurnEnd => self.handle_turn_end(event).await, |
| 369 | HookType::SessionEnd => self.handle_session_end(event).await, |
| 370 | HookType::PreToolUse | HookType::PostToolUse => self.handle_tool_use(event).await, |
| 371 | } |
| 372 | } |
| 373 | } |
| 374 | |
| 375 | // ═══════════════════════════════════════════════════════════════════════ |