v0.5.1 — Deep Research Transient Error Handling
🐛 Bug Fix: Issue #98
Deep research (--mode deep) intermittently failed with a generic "no confirmation from API" message when Google returned a transient error. The structured error payload (e.g., DeepResearchErrorDetail code 3) was silently swallowed because _extract_rpc_result() only checked for auth errors (code 16).
Now instead of a cryptic failure, you get an actionable message:
Failed to start research — Google API error code 3 (DeepResearchErrorDetail).
This is likely a transient issue. Try again in a few minutes, or use --mode fast.
🔧 What Changed
_extract_rpc_result()now detects all structured API errors initem[5], not just auth (code 16)start_research()refactored to use_call_rpc()— gets auth retry, server error retries, and debug logging for free- New
RPCErrorexception class with error code, detail type, and detail data attrs - Service layer catches
RPCErrorand provides user-friendly messages with actionable suggestions
📊 Tests
- 6 new tests (3 core, 3 service)
- 634 total tests passing, zero regressions
- Live end-to-end integration test: deep research start → status → import (54 sources) ✅
📦 Install / Upgrade
uv tool install notebooklm-mcp-cli
# or: pip install notebooklm-mcp-cli
Thanks to @isleofgreg for the detailed bug report! 🙌