Ensure that the ReAct agent correctly routes between local and web sources based on the query, verifying the full pipeline works for both paths.
## Context PR #232 added web search and page visit capabilities to the ReAct agent, giving it three tools: - `leann_search("query")` — local knowledge base - `web_search("query")` — public internet via Serper API - `visit_page("url")` — fetch full page content via Jina The PR is merged, but we haven't verified end-to-end that the agent correctly **routes between local and web sources** depending on the query, and that the **full pipeline** (retrieve → format → present) works for both paths. ## What to test ### 1. Dual-source presence - [ ] Confirm that when both `SERPER_API_KEY` is set and a local index exists, the agent has access to all three tools - [ ] Confirm that when `SERPER_API_KEY` is **not** set, `web_search` returns a clear error and the agent falls back to `leann_search` ### 2. Routing behavior - [ ] Query that should hit **local only** (e.g., "How does our authentication work?") → agent should choose `leann_search` - [ ] Query that should hit **web only** (e.g., "What