18 Commits

Author SHA1 Message Date
Simon a3768d0e82 feat(sheets): add --range flag to +append for targeting specific tabs (#641)
Previously +append always used hardcoded "A1" range, limiting appends
to the first sheet. Add optional --range flag (default: "A1") to allow
appending to any sheet tab using A1 notation.
2026-03-31 12:51:15 -06:00
googleworkspace-bot 705fb0ecac chore: release versions (#655) 2026-03-31 12:32:18 -06:00
Justin Poehnelt b307856f6a refactor: drop serde_yaml by migrating to toml (#657)
* refactor: migrate skill registry from yaml to toml to drop unmaintained serde_yaml dependency

* chore: add changeset for yaml to toml migration

* fix(tests): resolve TOML test suite formatting
2026-03-31 12:22:48 -06:00
Justin Poehnelt 503315bc42 docs: update installation instructions to prioritize github releases (#656)
* docs: update installation instructions to prioritize github releases

* ci: add explicit verification instructions to github release notes

---------

Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
2026-03-31 12:11:46 -06:00
googleworkspace-bot f4ee658360 chore: release versions (#647) 2026-03-31 11:20:03 -06:00
googleworkspace-bot c7c6646d7a chore: release versions (#629) 2026-03-26 12:45:06 -06:00
Justin Poehnelt 80bd150f76 feat(auth): use strict OS keychain integration on macOS and Windows (#631)
* fix(auth): implement platform-aware keyring storage

* chore: regenerate skills [skip ci]

* fix(auth): address PR comments on error handling and TOCTOU vulnerabilities

* fix(test): isolate config directory to prevent race conditions during cargo test

* refactor(auth): deduplicate key generation logic in credential store

* fix(test): execute credential tests serially to prevent environment pollution

* fix(auth): sanitize os keyring error strings and handle missing file fallbacks

This commit removes the inadvertently included skills, uses output::sanitize_for_terminal to protect the user from escape sequence injection via keyring errors, and ensures removal of the fallback file properly alerts the user when an io error occurs.

* chore: regenerate skills [skip ci]

---------

Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
Co-authored-by: googleworkspace-bot <googleworkspace-bot@users.noreply.github.com>
2026-03-26 12:40:07 -06:00
jpoehnelt-bot c7c42f6d07 fix: register script service and fix test path validation 2026-03-26 09:59:14 -06:00
googleworkspace-bot a63b070a51 chore: release versions (#628) 2026-03-26 09:56:34 -06:00
femto a52d297cdf feat: add HTTP proxy support via environment variables (#622)
* feat: add HTTP proxy support via environment variables

When http_proxy/https_proxy/all_proxy environment variables are set,
use reqwest (which natively supports proxy) for token refresh instead
of yup-oauth2's hyper-based client (which doesn't support proxy).

This enables gws to work in environments that require HTTP proxy to
access Google APIs (e.g., users in China).

Changes:
- Cargo.toml: Enable reqwest's default features including proxy support
- src/auth.rs: Add proxy-aware token refresh using reqwest as fallback

Fixes #422

* feat: add proxy support for auth login flow

When proxy env vars are set, use a custom OAuth flow with reqwest
for token exchange instead of yup-oauth2's hyper-based client.

Changes to auth_commands.rs:
- Add login_with_proxy_support() for proxy-aware OAuth login
- Add exchange_code_with_reqwest() for token exchange via reqwest
- Detect proxy env vars and choose appropriate flow

* fix: address proxy auth review feedback

* fix: reuse shared reqwest client for auth flows
2026-03-25 17:31:22 +00:00
googleworkspace-bot 45ca45bfd4 chore: release versions (#624) 2026-03-25 11:31:07 -06:00
Justin Poehnelt 19ddc25935 fix: move data files into CLI crate for crates.io publishing (#620)
* fix: move registry/ and templates/ into CLI crate for cargo publish

* chore: regenerate skills [skip ci]

---------

Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
Co-authored-by: googleworkspace-bot <googleworkspace-bot@users.noreply.github.com>
2026-03-24 16:35:41 -06:00
googleworkspace-bot 9198386a3d chore: release versions (#619) 2026-03-24 16:17:11 -06:00
Malo Bourgon 0850c48b68 feat(gmail): add --draft flag to +send, +reply, +reply-all, +forward (#571)
When --draft is set, calls users.drafts.create instead of
users.messages.send. Message construction is identical; only the
API method and metadata wrapper change. Threaded drafts (replies
and forwards) preserve threadId in the draft metadata.
2026-03-24 16:01:55 -06:00
googleworkspace-bot 2aec0ba5a3 chore: release versions (#618)
* chore: release versions

* chore: regenerate skills [skip ci]

---------

Co-authored-by: googleworkspace-bot <googleworkspace-bot@users.noreply.github.com>
2026-03-24 15:51:18 -06:00
googleworkspace-bot 186e88caa0 chore: release versions (#616) 2026-03-24 15:01:28 -06:00
Justin Poehnelt ea0849a657 fix: version sync workspace (#615) 2026-03-24 14:53:39 -06:00
Justin Poehnelt 029e5def2b feat: extract google-workspace library crate (cargo workspace) (#613)
* feat: extract google-workspace library crate and restructure as cargo workspace

- Create crates/google-workspace/ with public modules: discovery, error, services, validate, client
- Move CLI binary to crates/cli/ (package: google-workspace-cli, binary: gws)
- Root Cargo.toml is now workspace-only
- Binary modules use thin re-exports from library (zero behavioral changes)
- Discovery fetch_discovery_document accepts cache_dir parameter for library consumers
- Break output.rs / error.rs circular dep by moving char detection to library validate module
- Update CI workflows for workspace (--workspace flags, path filters)
- Update dist-workspace.toml and policy.yml for new crate locations

Closes #386

* refactor: rename crates/cli to crates/google-workspace-cli

* chore: sync CLI version to 0.20.1 and regenerate skills

* chore: update labeler paths for workspace crate layout

* fix: update flake.nix to read version from CLI crate Cargo.toml

* fix: use tokio::fs for non-blocking I/O in library discovery cache

* docs: update AGENTS.md source layout for workspace structure

* docs: add crate-level READMEs for crates.io

---------

Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
2026-03-24 14:40:03 -06:00