feat(gmail): add +reply, +reply-all, and +forward helpers#105
feat(gmail): add +reply, +reply-all, and +forward helpers#105jpoehnelt merged 21 commits intogoogleworkspace:mainfrom
Conversation
|
Warning You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again! |
🦋 Changeset detectedLatest commit: 9b53621 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
|
How does this compare to the request in #88? |
jpoehnelt
left a comment
There was a problem hiding this comment.
Code duplication between reply.rs and forward.rs
Missing encode_path_segment() on the message-id in URL construction
a883182 to
e6f388e
Compare
This PR is a direct implementation of the feature request in #88. It adds
One thing not yet covered: attachment forwarding. The current |
84ebbfe to
3ec8332
Compare
Thanks for the review! Both points are fixed now — Sorry about the initial state — I had an AI agent push before I'd properly reviewed. Everything's been cleaned up since. A couple of questions:
|
|
Nice work addressing the prior feedback — dedup and
|
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #105 +/- ##
==========================================
+ Coverage 55.19% 56.73% +1.54%
==========================================
Files 38 40 +2
Lines 13166 14127 +961
==========================================
+ Hits 7267 8015 +748
- Misses 5899 6112 +213 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
3ec8332 to
a9302c6
Compare
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request introduces +reply, +reply-all, and +forward helper commands for the Gmail CLI, which is a great feature. The implementation is mostly solid, with good test coverage and documentation. However, I've identified a few areas for improvement concerning code structure and correctness. Specifically, there's a bug in handling repeated email headers, and some refactoring is needed to resolve circular dependencies and improve module organization. Addressing these points will enhance the maintainability and robustness of the new helpers.
d0679f8 to
2b37938
Compare
- Use reqwest .query() for metadata params per AGENTS.md convention - Add MIME-Version and Content-Type headers to raw messages - Add --from flag to +reply, +reply-all, +forward for send-as/alias - Narrow ReplyConfig/ForwardConfig visibility to pub(super) - Refactor create_reply_raw_message args into ReplyEnvelope struct
- Exclude authenticated user's own email from reply-all CC by fetching user profile via Gmail API - Use format=full to extract full plain-text body instead of truncated snippet for quoting and forwarding - Deduplicate CC addresses using a HashSet - Reuse auth token from message fetch in send_raw_email to eliminate double auth round-trip - Propagate auth errors in send_raw_email instead of silently falling back to unauthenticated requests - Use consistent CRLF line endings in quoted and forwarded message bodies per RFC 2822
8eba0b0 to
b5f2988
Compare
@jpoehnelt Done, rebased |
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request introduces +reply, +reply-all, and +forward helper commands for Gmail, which is a great enhancement. The implementation is thorough, with robust handling of email headers, recipient logic, and comprehensive tests. I've found one critical issue related to parsing email headers that could lead to silently dropping recipients if the Gmail API returns multiple headers for To, Cc, or Reply-To. My review includes a suggestion to fix this.
0c55a84 to
14b9487
Compare
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request introduces valuable +reply, +reply-all, and +forward helper commands for the Gmail CLI, significantly improving its usability for common email workflows. The implementation is robust, with thorough handling of email headers, recipient logic, and multipart message parsing. The addition of shared helper functions in src/helpers/gmail/mod.rs is a good architectural choice. I have one suggestion to further improve maintainability by applying one of the new helpers to the existing +send command.
|
Hi @jpoehnelt, would you mind taking a look and giving the pull request another review? |
There was a problem hiding this comment.
Excellent work on refactoring the shared logic and ensuring the path strings are properly encoded. Adding the robust multipart/header extractors resolves the edge cases raised previously. The CLA failure is a known false positive related to our CI token configuration. Approving this for merge!
|
Amazing! Thanks so much :) |
Description
Closes #88 — adds first-class reply and forward support to the Gmail CLI helpers.
+reply— Reply to a message by ID. Automatically fetches the original message, setsIn-Reply-To,References, andthreadIdheaders, quotes the original, and sends viausers.messages.send.+reply-all— Same as+replybut addresses all original To/CC recipients. Supports--removeto drop recipients and--ccto add new ones.+forward— Forward a message to new recipients with a standard forwarded-message block (From, Date, Subject, To, Cc). Supports optional--bodyfor a note above the forwarded content.All three commands support
--dry-runfor safe previewing (works without auth credentials).Address handling details:
Reply-TooverFromwhen selecting reply recipients (mailing lists, support systems)Reply-Toheaders (e.g.,list@example.com, owner@example.com) and deduplicates CC against the full setReply-To,To, andCcheaders by concatenating values in order instead of overwriting earlier entries"Doe, John" <john@example.com>) are handled correctly--removefiltering and sender exclusion — e.g., removingann@example.comdoes not affectjoann@example.comKnown limitation:
+forwardcurrently forwards the message text/snippet only. Full MIME forwarding with attachments will be addressed in a follow-up PR (ref #88).New files
src/helpers/gmail/reply.rs+replyand+reply-alllogic, message metadata fetching, RFC 2822 header constructionsrc/helpers/gmail/forward.rs+forwardlogic, forwarded message formattingModified files
src/helpers/gmail/mod.rssrc/helpers/gmail/send.rs.changeset/gmail-reply-forward.mdDry Run Output:
+reply:+reply-all:+forward:Checklist:
AGENTS.mdguidelines (no generatedgoogle-*crates).cargo fmt --allto format the code perfectly.cargo clippy -- -D warningsand resolved all warnings.pnpx changeset) to document my changes.