Skip to content

feat: add user-scoped Gmail API connector - #182

Merged
QueryPlanner merged 1 commit into
mainfrom
codex/gmail-api-connector
Sep 3, 2026
Merged

feat: add user-scoped Gmail API connector#182
QueryPlanner merged 1 commit into
mainfrom
codex/gmail-api-connector

Conversation

@QueryPlanner

Copy link
Copy Markdown
Owner

What

Add the private, user-scoped Gmail REST connector and Telegram/ADK integration.

Why

Replace the earlier Gmail implementation with a bounded connector that keeps OAuth credentials and message content isolated to the connected private Telegram user. This reviewed PR supersedes the earlier open PR #181.

How

  • Add direct Gmail OAuth, encrypted per-user token storage, and REST tools.
  • Expose Gmail only to the private Telegram root-agent flow.
  • Spill large email results into the session sandbox and add requested attachment downloads.
  • Enforce token-cache isolation, Spam/Trash restrictions, safe errors, and fail-closed draft sending.
  • Keep downloaded Gmail files temporary and outside Cloudflare R2.
  • Document Blacki storage boundaries and required cross-feature impact review.

Tests

  • uv run ruff format --check
  • uv run ruff check
  • uv run mypy .
  • uv run pytest --cov=src --cov-report=term-missing (2,033 passed, 1 skipped, 100% coverage)

Related Issues

Closes #85

Supersedes #181

- Replace Gmail MCP with private REST tools
- Add encrypted OAuth and per-user credential isolation
- Add sandbox spillover and attachment downloads
- Enforce safe errors and fail-closed draft sending
- Document Blacki storage and integration boundaries
@QueryPlanner
QueryPlanner merged commit b7a3987 into main Sep 3, 2026
3 checks passed
@QueryPlanner
QueryPlanner deleted the codex/gmail-api-connector branch September 3, 2026 15:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: Gmail API proxy tool and skill

1 participant