v0.7.1 — 2026-06-06
Fixed
server_inforeported"stale"for valid semi-stale cookies (PR #219) — Google enforces different session lifecycles for the NotebookLM homepage (a navigation endpoint) and the RPC API endpoints. Cookies that aresemi-stale— rejected by the homepage with a redirect toaccounts.google.com, but still 100% accepted by the RPC API — were causing the MCPserver_infotool (andnlm login --check) to falsely report"stale"even though every actual API tool would work fine. The newAuthHealthCheckerruns a homepage probe first and, onexpired/http_401/http_403, falls back to a liveNotebookLMClient.list_notebooks()call before deciding. The homepage headers were also upgraded to use the full browser-like_PAGE_FETCH_HEADERS(includingSec-Fetch-Dest/Sec-Fetch-Mode/Sec-Fetch-Site/Sec-Fetch-User) — without them Google was bot-detecting the homepage check and redirecting even fresh cookies, producing false"stale"reports on first probe. Results are cached for 30 seconds with mtime-based bypass, so an externalnlm loginis reflected without waiting for the TTL. The CLI and MCP now share the cache via theget_auth_health_checker()singleton inservices/auth.py. Thanks to @SERDAR-AKIN for the original multi-probe design and PR #219!
Changed
AuthHealthCheckerlives inservices/auth.py, notcore/auth.py— the multi-probe orchestration, 30-second cache, and verdict aggregation are business logic and belong in the services layer per the layering rule inCLAUDE.md/AGENTS.md/GEMINI.md.server_infodocstring no longer callsauth_statusalive check— it is cached for 30 seconds with mtime-based bypass.docs/AUTHENTICATION.mddocuments the same contract.AuthHealthReport.validis nowverdict == "configured"(was!=) — the field was inverted: it returnedTrueforstale/unverified/not_configuredreports. Pinned byTestReportValid.- API-probe exceptions are classified as transport errors when they are —
_probe_apinow catcheshttpx.TimeoutExceptionandhttpx.RequestErrorexplicitly and emits the"network_error:"prefix so_determine_verdictcan route them to"unverified". Pinned byTestProbeApiErrorClassification.
Credits
Thanks to @SERDAR-AKIN for the original multi-probe health checker design and PR #219.