← Back to PRs

#21867: feat: add email-brief extension for Gmail inbox summary via Telegram

by dzhechko open 2026-02-20 13:32 View on GitHub →
docs gateway cli commands agents size: XL
## Summary - Add `extensions/email-brief/` — a new OpenClaw plugin extension that provides Gmail inbox summarization via Telegram - Users invoke `/email_brief [filters] [period]` to get AI-powered email summaries directly in Telegram - Designed for Cloud.ru FM models (GLM-4.7, Qwen3-Coder) that cannot do tool calls — all data fetching is in TypeScript, LLM used only for text generation (`disableTools: true`) ### Key features - **Flexible argument parsing:** `/email_brief`, `/email_brief 7d`, `/email_brief from:user@company.com 3d`, `/email_brief urgent` - **Service Account JWT auth** via `node:crypto` (zero npm dependencies) with token caching and 55-min refresh margin - **Gmail API v1** integration: `messages.list` + `messages.get` with concurrent fetching (cap 5), 401 retry - **MIME body extraction**: recursive multipart traversal, base64url decode, HTML stripping - **LLM summarization** via `runEmbeddedPiAgent` with anti-injection prompt, urgency scoring, language detection - **Graceful fallback** to metadata list on LLM failure - **Telegram chunking** for long responses (3900 char threshold) - **Security**: PEM/Bearer token sanitization on all error paths, `requireAuth: true` ### Files added (13) | File | LOC | Purpose | |------|-----|---------| | `openclaw.plugin.json` | — | Plugin manifest with configSchema | | `types.ts` | 48 | Shared types (ParsedArgs, EmailMessage, GmailConfig) | | `parse-args.ts` | 59 | Argument parser (period + filters) | | `gmail-query.ts` | 35 | Gmail search query builder | | `gmail-body.ts` | 173 | MIME traversal, body extraction, HTML stripping | | `gmail-client.ts` | 304 | JWT auth, token caching, Gmail API client | | `summarize.ts` | 177 | Prompt builder, LLM invocation, fallback | | `index.ts` | 126 | Command handler orchestration | | `*.test.ts` (6 files) | 1371 | 78 tests across 6 test files | ### Quality artifacts (in `docs/features/email-brief/`) Full 9-step quality cycle completed: 1. ADR (DDD) with 5 invariants 2. Shift-left testing: 19 requirements, 38 test cases, 10 risks 3. QCSD ideation: HTSM + SFDIPOT + Testability (gate: GO) 4. Milestones plan: 5 milestones, 3 parallelization waves 5. Requirements validation: 19/19 traced, CONDITIONAL YES → conditions met 6. Implementation: 5 milestones, 78 tests passing 7. Brutal honesty review: Grade B (82/100), 0 Critical issues 8. Final gap check: all gaps resolved 9. **QE Queen: SHIP (85/100)** ## Test plan - [x] `pnpm test extensions/email-brief/` — 78/78 tests pass - [x] `pnpm tsgo` — 0 type errors in email-brief - [x] `pnpm lint` — 0 errors, 0 warnings - [ ] Manual test with real Gmail account + Service Account via Telegram - [ ] Manual test with Cloud.ru FM models (GLM-4.7, Qwen3-Coder) 🤖 Generated with [Claude Code](https://claude.com/claude-code)

Most Similar PRs