Unify Google OAuth callback: Drive-connect reuses the login redirect_uri
Seth+1: Claude Sonnet 5
c7a1227
Drive-connect previously used its own /api/chat-agent/drive/callback,
requiring a second entry in Google Cloud Console's Authorized redirect URIs
(and produced redirect_uri_mismatch until added). Both flows now funnel
through the single already-registered /api/auth/google/callback, and
auth_routes.google_callback tells them apart by checking whether the
incoming `state` matches the Drive-connect flow's pending session state
before falling through to normal login handling. Token exchange is shared
via oauth_utils.exchange_code_for_tokens.
Verified with FastAPI TestClient: Drive-connect's authorize URL now carries
the same redirect_uri as login, the shared callback correctly routes each
flow and persists the Drive refresh token, ordinary login is unaffected,
and a bogus/unmatched state is still rejected with 400.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Add Chat Agent module: RAG website widget with Drive/site knowledge base and CRM lead capture
Seth+1: Claude Sonnet 5
991c079
Adds an embeddable WordPress chat widget backed by a Google Drive folder and a
site crawl, with admin-editable skills/guardrails, streaming replies, and
automatic CrmLead creation (with live transcript) for every chat that shares
a name/email.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>