Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner
|
Very interesting. I need to review it more closely. My only concern is that this is a full email client while the browser is a thin wrapper over WebKit. |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements part 1 of #7 (read-only mail). Today a Noodle bot can't use e-mail at all. This PR adds Noodle Mail, a companion app like Browser and Computer:
messenger tool mailwithmailboxes,folders,list,search,readandattachment(saves to a workspace file). Results are short JSON. A bot never sees a password and can't send mail.readmarks a message as read only if the bot asks, and Noodle checks the assignment again right before that change.One commit per layer, so it can be read commit by commit:
Mail/Sources/MailEngine): IMAP and SMTP on SwiftMail 1.13.0, pinned exactly. Sending exists in the engine but nothing calls it yet; it is for a later PR with approved sends.Mail/MailProtocol): the versioned package Noodle links.Mail/,Tools/Mail): the tool extension only forwards calls that Noodle's broker already authorized, over Noodle Mail's socket.MailController, mailbox assignments in the store and checkpoint, the Mail tab in Edit Bot and New Bot, and atest-mailCI job shaped liketest-browser.Left to you on purpose, because they are release or app-identity decisions:
CompanionAppcase, so no install entry in Settings or the Window menu, no downloads and no Sparkle feed.CompanionAppVisibility, menu-bar extra, About or Help yet. Each background launch shows a Dock icon.Known limits:
mail.jsoncan't be read or comes from a newer version, New Bot fails with "One of the selected mailboxes is unavailable." even when none is selected.BrowserController.validatebehaves the same way.New dependencies, in the Noodle Mail package only: SwiftMail (BSD-2-Clause), swift-nio-imap, swift-nio-ssl (bundles BoringSSL) and swift-se0270-range-set (Apache-2.0), SwiftCross and swift-dotenv (MIT). The IMAP and SMTP test servers in
Mail/Tests/MailEngineTests/Supportare adapted from SwiftMail and keep its notice.This is a big PR (about 8,900 added lines, most of them in
Mail/). I'm happy to split it into one PR per commit if that is easier to review.Verification
On this branch (upstream b4eee9a + 4 commits), macOS 26.7.1, Xcode 27.0:
Tests/ReleaseAutomation/test_workflows.py21.scripts/xcode-build.sh MailandNoodle, thenscripts/verify-tool-extensions.sh: verified (5).messenger tool. The Keychain held one item per mailbox. Find Servers found the servers for a custom domain hosted at Seznam and for a gmail.com address.Not tested:
test-mailCI job hasn't run yet (actionlint wasn't available offline).CompanionAssignmentPickerTests.testBrowserAndComputerAssignmentPreviewsfails locally. It also failed on c733034 without these changes; I didn't re-check it on b4eee9a.Visual changes
Visual changes require before and after screenshots before the PR is ready
for review. See the visual review requirements.
Before
Noodle 0.69.1: Edit Bot has no Mail tab (bot name and backstory blurred). Noodle Mail is a new app, so it has no before.
After
PR build, macOS 26.7.1, light and dark. The sample mailboxes use example.com. The blurred row is a real test mailbox.
Edit Bot → Mail:

Noodle Mail, mailbox list:

Removing a mailbox:

No recording yet. Find Servers fills in the IMAP and SMTP fields a second or two after you click it. I can add a short recording if you want one.
Checklist
CHANGELOG.mdandMail/CHANGELOG.md)🤖 Generated with Claude Code