0626bc80c0
Adds a queue-driven `MockLlmClient` that implements the `LlmClient` trait by replaying canned per-turn `StreamEvent` vectors and capturing every outgoing `MessageRequest`. The mock lives at the trait boundary so it stays decoupled from the concrete reqwest plumbing inside `DeepSeekClient`, and surfaces builders (`canned::*`) for the common event shapes (text delta, thinking delta, tool_use start, input JSON delta, message delta). Wires a new `--record <DIR>` flag into `deepseek eval` that appends one JSON Lines fixture line per step to `<DIR>/<scenario>.jsonl`. The format is documented at the top of `eval.rs` and is the storage shape the mock will replay from. `crates/tui/src/llm_client.rs` becomes `crates/tui/src/llm_client/mod.rs` to host the new submodule cleanly. The trait shape is unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>