Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.4.0 (2026-10-10)¶
Features¶
0.3.0 (2026-10-10)¶
Features¶
Documentation¶
- point GSpreadManager references at the archive tag (#25) (2ff6656)
- skill: rewrite the OpenClaw skill for 0.2.0 and keep it in sync (#26) (a5a422d)
0.2.0 (2026-10-09)¶
⚠ BREAKING CHANGES¶
- core: trash/delete/share/delete_event/delete_worksheet return False only when the resource doesn't exist; any other failure (auth, permissions, rate limit, 400) raises a GSuiteError instead of also returning False. get_event/Drive.get no longer turn arbitrary exceptions into None, and Gmail.get_signature only tolerates API errors.
- api: the API now fails closed. Without GSUITE_API_KEY every request gets a 401; deployments protected some other way (Cloud Run IAM, localhost) must set GSUITE_ALLOW_NO_API_KEY=true. The default host is 127.0.0.1 (settings and
gsuite serve), CORS is off unless GSUITE_CORS_ORIGINS is set, error bodies are RFC 9457 problem details instead of {"detail": ...}, and the admin key is only read from the X-Admin-Key header.
Features¶
- api: harden the REST API (#14) (b40a668)
- async foundation and AsyncSheets (#21) (b022075)
- core: retries, pagination and timeouts for every Google request (#15) (503bd21)
- drive: complete Drive client, REST routes and CLI (#16) (7c584ee)
- gmail,calendar: threaded replies, attachments, drafts, labels and Meet (#18) (9c36fff)
- sheets: expose the GSpreadManager engine on the public API (#20) (0e3c7a0)
- sheets: formatting, protection, find/replace, worksheets and pandas (#17) (35fb962)
- sheets: incorporate the GSpreadManager engine (#19) (70c11e5)
- Tasks and Contacts packages with REST API and CLI (#22) (cfdd84c)
Bug Fixes¶
- add Sheets to default OAuth scopes (#9) (a082784)
- CI test failure + publish workflow for gsuite-api (#5) (4367008)
- ci: get main green and run every test (#11) (13d3979)
Documentation¶
[0.1.3] - 2026-02-11¶
Fixed¶
- auth:
is_authenticated()now correctly returnsTrueafter loading valid credentials from SQLite - auth:
refresh()no longer fails withinvalid_scopeerror - Root cause:
Credentials.from_authorized_user_info()doesn't properly handle scopes; now usingCredentialsconstructor directly
[0.1.0] - 2026-01-28¶
Added¶
- Initial monorepo structure with Clean Architecture
gsuite-core: Unified OAuth2 authentication with token storage (SQLite, Secret Manager)gsuite-gmail: Gmail client with fluent message API and query buildergsuite-calendar: Calendar client for events and calendarsgsuite-drive: Drive client for files, folders, and sharinggsuite-sheets: Sheets client inspired by gspread APIgsuite-api: Unified FastAPI REST gatewaygsuite-cli: Typer CLI with Rich output- Comprehensive test suite with mocks (2500+ lines)
- Custom exception hierarchy (
gsuite_core.exceptions) - PEP 561 compliant with py.typed markers
- Structured logging with HttpError handling
Architecture¶
- Monorepo with independent packages
- Shared authentication across all services
- Provider-agnostic design with interfaces
- Type hints throughout (Python 3.11+)