Skip to content

v1.0.3

Choose a tag to compare

@github-actions github-actions released this 07 Jul 18:17

Other Changes

build(deps): Bump the frontend-dependencies group in /frontend with 2 updates - @dependabot[bot] in #7

Bumps the frontend-dependencies group in /frontend with 2 updates: marked and vite.

Updates marked from 15.0.12 to 18.0.5

Release notes

Sourced from marked's releases.

v18.0.5

18.0.5 (2026-06-04)

Bug Fixes

  • parse empty list item with trailing space (#3984) (b55410f)

v18.0.4

18.0.4 (2026-05-19)

Bug Fixes

v18.0.3

18.0.3 (2026-05-01)

Bug Fixes

  • avoid task checkbox for setext heading text (#3960) (2608e81)

v18.0.2

18.0.2 (2026-04-18)

Bug Fixes

  • fix infinite loop for indented code blank line (#3947) (58a52e8)

v18.0.1

18.0.1 (2026-04-17)

Bug Fixes

  • rules: ensure lookbehind regex is evaluated correctly by minifiers (#3945) (abd907a)

v18.0.0

18.0.0 (2026-04-07)

Bug Fixes

  • Bump typescript from 5.9.3 to 6.0.2 (#3934) (e8efc51)
  • prevent GFM table tokens from greedily capturing trailing newlines (#3926) (40f2665)
  • prevent heading and def tokens from greedily capturing multiple newlines (#3925) (b379e3e)

... (truncated)

Commits
  • 4063c63 chore(release): 18.0.5 [skip ci]
  • b55410f fix: parse empty list item with trailing space (#3984)
  • c6e667b chore(deps-dev): bump eslint from 10.4.0 to 10.4.1 (#3986)
  • 95f98ec chore(deps-dev): bump @​arethetypeswrong/cli from 0.18.2 to 0.18.3 (#3985)
  • c1a86f0 Add Node.js usage example to README (#3983)
  • 763f729 chore(deps-dev): bump marked-man from 2.1.0 to 2.1.1 (#3978)
  • 2cf1fd0 chore(deps-dev): bump markdown-it from 14.1.1 to 14.2.0 (#3977)
  • 0a2cd54 chore(release): 18.0.4 [skip ci]
  • 11adb69 fix: fix cli not reading stdin (#3967)
  • a37983f fix: cache list indentation regexes (#3969)
  • Additional commits viewable in compare view
Maintainer changes

This version was pushed to npm by GitHub Actions, a new releaser for marked since your current version.


Updates vite from 8.1.2 to 8.1.3

Release notes

Sourced from vite's releases.

v8.1.3

Please refer to CHANGELOG.md for details.

Changelog

Sourced from vite's changelog.

8.1.3 (2026-07-02)

Bug Fixes

Commits

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions

Updated frontend/package.json to bump two dependencies in the frontend-dependencies group:

  • marked from ^15.0.6 to ^18.0.5
  • vite from ^8.1.2 to ^8.1.3

These changes bring in upstream bug fixes for parsing/CLI behavior in marked and CSS, SSR, dynamic import preload, and dependency-related fixes in vite.

AI usage: Not Likely.

fix: nil-store crash when domReady beats startup with a large mailbox - @TRC-Loop in #10

Summary

  • domReady calls stringSetting to apply the saved theme, which dereferences a.store without checking it's been set yet.
  • startup() opens the store asynchronously; with a small/empty dev database this always finishes before Wails fires the dom-ready callback, but with a large real mailbox (tens of MB, plus a configsync full-restore copy) the callback can win the race, crashing the app on launch with a nil pointer dereference.
  • Guards stringSetting/boolSetting/intSetting against a nil store, returning the default the same way they already do for a missing setting or a read error.

Test plan

  • go build ./..., go vet ./internal/desktop/...
  • Reproduced the crash against a real (non-PELTON_DEV) profile with a large mailbox, confirmed the fix resolves it
  • Manual smoke test of theme application on a fresh/empty profile (unaffected code path)

Fixed a Pelton startup crash by guarding preference readers against a nil/unopened store when domReady fires before startup() finishes initializing storage. stringSetting, boolSetting, and intSetting now immediately return their provided default when a.store is nil, matching the existing fallback behavior for unset/unreadable settings. Added a storeReady synchronization channel to coordinate startup and the Wails domReady hook, preventing the race entirely.

AI usage: Probably — the changes follow a clear, systematic “guard + readiness channel” pattern, but no explicit AI/CodeRabbit/agentic emoji or marker strings were found in the touched files.

feat: friendly date/time picker - @TRC-Loop in #11

Summary

  • Adds a reusable DateTimePicker.svelte component (frontend/src/components/common/): a trigger button opening a month-grid calendar, with a scrollable year view (click the month/year label), keyboard navigation, today/clear actions, and an hour/minute control for datetime mode. Built entirely from design tokens, no new dependencies.
  • Replaces the native <input type="date"> / <input type="datetime-local"> inputs with it in:
    • SnoozeDialog.svelte (custom snooze time)
    • SearchBar.svelte (custom date range)
    • SettingsPanel.svelte (download-from date)
  • Adds new locale keys across all five languages (en source of truth).

Test plan

  • pnpm run check (svelte-check): clean
  • pnpm run build: succeeds
  • Manually tested in the running app (calendar, year view, keyboard nav, both light/dark themes)

Summary

  • Added a reusable DateTimePicker.svelte component with date/datetime modes, month grid, scrollable year view, keyboard navigation, today/clear actions, and time controls.
  • Replaced native date/datetime inputs in SnoozeDialog, SearchBar, and SettingsPanel with the shared picker.
  • Added new date-picker locale strings across English, German, Spanish, French, and Dutch.

AI usage

Very Likely — the PR shows strong signs of AI assistance (new component naming/structure, highly consistent locale additions, and the provided review-trigger context). I’d estimate it was likely used to help, but not necessarily 100% agentic.

feat: schedule messages to send later - @TRC-Loop in #12

Summary

  • Splits the compose window's Send button into a main action plus a caret that opens a menu of friendly scheduling presets (Later today, This evening, Tomorrow morning 8AM, Monday morning) plus a custom date/time option, mirroring the existing snooze dialog's pattern.
  • Adds an optional sendAt (RFC3339) to ComposeRequest; the backend validates it's a real future time and passes it through as the outbox's existing NotBefore, taking precedence over the short undo-send delay.
  • The outbox panel now shows "Scheduled for {time}" (instead of "Queued") for sends more than a minute out, with a cancel button reusing the existing cancelSend.
  • New locale strings across all five languages; Go tests added for the scheduling/validation logic.

Test plan

  • go build ./..., go vet ./internal/desktop/..., go test ./...
  • pnpm run check: clean
  • Manually tested scheduling a message via presets and a custom time, and cancelling a scheduled send from the outbox panel

Summary

  • Added scheduled send support to compose, including preset times, custom date/time selection, and a split send button.
  • Added sendAt to compose payloads and backend request handling, with validation that scheduled times are future RFC3339 timestamps and precedence over undo-send delay.
  • Updated outbox rows to show scheduled send times and allow canceling scheduled sends.
  • Added shared date preset helpers, localized new UI strings across all supported languages, and covered the scheduling logic with Go tests.

AI usage

Probably — the PR looks AI-assisted (consistent generated-style changes and comments), but not enough to say it was 100% agentic.

fix: detect the Linux system dark theme and match the Windows caption bar - @TRC-Loop in #16

Two related native-theme fixes.

Linux system dark theme — WebKitGTK never maps the desktop dark preference onto CSS prefers-color-scheme, so "System" theme always resolved to light on Fedora/GNOME. A new SystemColorScheme binding queries the XDG desktop portal (org.freedesktop.appearance / color-scheme) over DBus (the same signal browsers use) and the frontend consults it before first paint, falling back to the media query where it returns "" (macOS/Windows). Build-tagged so DBus only compiles on Linux.

Windows caption bar — the native title bar stayed light under a dark UI. SetWindowTheme now calls WindowSetDarkTheme/WindowSetLightTheme to match the resolved theme (no-op on macOS/Linux).

Builds clean for host and linux/amd64. Needs verification on Fedora (dark) and Windows (dark). Note: the Linux native menu strip/decorations are GTK-drawn and not themeable through Wails; not addressed here.

🤖 Generated with Claude Code

fix: date/time picker and send-later menu positioning under ui zoom - @TRC-Loop in #13

Summary

  • The friendly date/time picker's popover and the compose window's send-later menu are position: fixed, positioned from getBoundingClientRect() coordinates. The app's interface-scale feature applies css zoom on <html> (theme.ts), and under zoom, rect/pointer coordinates stay in unscaled screen pixels while a position: fixed element is placed in the zoomed layout space (ContextMenu.svelte already had to work around exactly this). Raw rect values landed both popovers in the wrong place, which presented as unclickable buttons and clicks appearing to hit unrelated controls underneath.
  • Extracted the scale-conversion helper ContextMenu.svelte already had into a shared currentUIScale() in theme.ts, and applied the same conversion in DateTimePicker's positionPanel() and Compose's toggleSendMenu().
  • Also swaps the send-later "Custom time…" field from a native <input type="datetime-local"> to the shared DateTimePicker component, for visual/behavioral consistency with the rest of the app (it was the last native date/time input left).

Test plan

  • pnpm run check: clean
  • Manual verification in the running app pending - this is a fresh fix based on root-cause analysis (matching ContextMenu.svelte's established pattern), not yet confirmed to fully resolve the reported symptoms end-to-end

This PR fixes zoom-related positioning issues for fixed UI popovers by introducing a shared currentUIScale() helper and using it where screen coordinates need to be converted into zoomed layout space.

  • Added currentUIScale() in theme.ts to read the app’s UI scale from --ui-scale.
  • Updated DateTimePicker to measure and place its panel with explicit fixed coordinates, compensating for zoom and clamping to the viewport.
  • Updated the compose send-later menu positioning to use the shared scale helper and viewport clamping.
  • Replaced the send-later “Custom time…” native datetime-local input with the shared DateTimePicker component for consistency.

Testing noted: pnpm run check passes; manual E2E verification is still pending.

AI usage: Very Likely. The change set and summaries show strong AI/agent involvement signals (AI-generated summaries, code-review tooling reference, polished automated-style descriptions), though there’s no direct proof it was fully agentic.

feat: guide iCloud setup to an app-specific password - @TRC-Loop in #15

The iCloud preset in the Add Mailbox wizard now makes it explicit that a regular Apple ID password will not work.

  • New appPasswordUrl field on provider presets. When set, a yellow warning box (no left border, --warning-bg) renders below the password field: "Don't use your normal password. Use an app-specific password instead." plus a clickable link that opens appleid.apple.com via BrowserOpenURL.
  • iCloud's password field placeholder becomes "App-specific password" instead of the generic "Password or app password".
  • Localized in all 5 locales.

Verified on macOS.

🤖 Generated with Claude Code

feat: split the Mailbox menu into Mailbox and Mail, move Low Power Mode - @TRC-Loop in #17

The native "Mailbox" menu was overloaded. It is now split:

  • Mailbox menu keeps mailbox-level operations (Sync Now, Add Mailbox).
  • New Mail menu holds the message actions (Undo, Mark as Read/Unread, Flag, Archive, Delete). The message-level items start disabled and are only enabled while a message is open, driven by a new SetMailActionsEnabled binding the frontend calls as the open message changes. Undo stays enabled (it needs no open message).
  • Low Power Mode moves out to the View menu.

Verified on macOS.

🤖 Generated with Claude Code

feat: add a mailbox manager to edit and delete accounts - @TRC-Loop in #18

A new Mailboxes category in Settings lists configured accounts and lets you edit or delete them, plus a "Manage Mailboxes…" item in the Mailbox menu that deep-links to it.

Backend

  • UpdateAccount binding: edits display name and server host/ports (email stays immutable; loaded server-side to prevent tampering).
  • DeleteAccount binding: removes the keyring secret (which lets any running idle loop exit cleanly on its next reconnect via the existing no-credentials path), the cached mail (DB cascade) and the account's attachment files on disk (DeleteAttachmentFilesForAccount).
  • AccountDTO gains imapPort/smtpPort.

Frontend

  • MailboxesSection.svelte: per-account edit form (reusing the wizard field labels) and an inline delete confirmation. Refreshes the sidebar on change.
  • Localized in all 5 locales.

Note: server-setting edits take effect on the next connection (existing idle sessions keep their settings until they reconnect). Verified on macOS.

🤖 Generated with Claude Code

Full Changelog: v1.0.2...v1.0.3