Skip to content

Releases

v0.4.36

Choose a tag to compare

@cursor cursor released this 24 Oct 17:01
66182bb
versionName 0.4.36
versionCode 43699
Commit 66182bb
Signing certificate (SHA-256) 379a87854ada552f58933bf981624333bf8f6a170cd70999d3d35060da2be56b
Remote crash reporting Off - this build has no project to report to. Crash reports stay on the device; share them from Settings > Debug (long-press the version row).
CI https://github.com/BenItBuhner/Cursor-for-Android/actions/runs/40052988482

Install: download cursor-for-android-0.4.36.apk, then adb install -r cursor-for-android-0.4.36.apk (or open it on the device). SHA256SUMS.txt holds the checksums of the APK and AAB; *-mapping.txt is the R8 mapping for de-obfuscating stack traces. Installs of v0.2.0 and later update in place — same signing key.

What's new

  • False usage-limit on new chats. POST /v1/agents can return usage_limit_exceeded even when included usage remains. That launch now retries through StartBackgroundComposerFromSnapshot, which still checks included usage. A real account limit still shows in the account's words. Pool launches stay on the documented refusal. Extended stays off except for that one session.
  • Rail search. Phones keep in-rail search; wider layouts open the existing search palette.

What's Changed

Other changes

  • Open the search palette from the rail on wide layouts by @BenItBuhner in #578
  • Start a chat on the account when the public API falsely reports a usage limit by @BenItBuhner in #581

Full Changelog: v0.4.35...v0.4.36

v0.4.35

Choose a tag to compare

@cursor cursor released this 05 Oct 22:55
93bd11a
versionName 0.4.35
versionCode 43599
Commit 93bd11a
Signing certificate (SHA-256) 379a87854ada552f58933bf981624333bf8f6a170cd70999d3d35060da2be56b
Remote crash reporting Off - this build has no project to report to. Crash reports stay on the device; share them from Settings > Debug (long-press the version row).
CI https://github.com/BenItBuhner/Cursor-for-Android/actions/runs/37299630355

Install: download cursor-for-android-0.4.35.apk, then adb install -r cursor-for-android-0.4.35.apk (or open it on the device). SHA256SUMS.txt holds the checksums of the APK and AAB; *-mapping.txt is the R8 mapping for de-obfuscating stack traces. Installs of v0.2.0 and later update in place — same signing key.

What's new

  • PNG attachments. Some picker PNGs that failed the IEND walk or BitmapFactory (including Samsung trailers) now retry: last empty IEND, spec CRC, then ImageDecoder. Normal screenshots still go through byte-for-byte. Truncated copies still refuse.
  • README. The GitHub page is a short MIT-licensed landing with one hero still.

What's Changed

Other changes

Full Changelog: v0.4.34...v0.4.35

v0.4.34

Choose a tag to compare

@cursor cursor released this 04 Oct 13:00
dde6fc5
versionName 0.4.34
versionCode 43499
Commit dde6fc5
Signing certificate (SHA-256) 379a87854ada552f58933bf981624333bf8f6a170cd70999d3d35060da2be56b
Remote crash reporting Off - this build has no project to report to. Crash reports stay on the device; share them from Settings > Debug (long-press the version row).
CI https://github.com/BenItBuhner/Cursor-for-Android/actions/runs/37202523046

Install: download cursor-for-android-0.4.34.apk, then adb install -r cursor-for-android-0.4.34.apk (or open it on the device). SHA256SUMS.txt holds the checksums of the APK and AAB; *-mapping.txt is the R8 mapping for de-obfuscating stack traces. Installs of v0.2.0 and later update in place — same signing key.

What's new

  • Keyboard. Hardware-keyboard shortcuts: Ctrl+F full-screen composer, search on Ctrl+P (Ctrl+K still works), and media-viewer keys with an inline readout. Focus lands in the composer when a chat opens. You can edit the bindings in Settings.
  • Pickers and the transcript. Model, device and related pickers share one menu. The New Chat model and device lists put the current pick first. A long chat pages older messages as you scroll up, instead of stretching a collapsed history. Pulling the transcript shows a progress indicator, and a pill takes you back to the latest.
  • Updates. Background checks only. Download and install start from Settings. The sidebar shows "Update available"; nothing downloads or installs on its own.
  • Spotlight. Long-press a running chat or Project and follow it in its own live notification. The regular live notification leaves that item out so nothing is shown twice.

What's Changed

Other changes

  • New Chat: give the page over to the composer while the on-screen keyboard is up by @BenItBuhner in #566
  • Reorder the New chat page picker: Composer only, Projects, Recent agents, Projects + Recent by @BenItBuhner in #568
  • Unified dropdowns: every picker on one anchored CursorPicker popover, modelled on Cursor's by @BenItBuhner in #569
  • Fade the pull-to-catch-up indicator out cleanly, and dock the scroll-to-latest button beside the queue and goal by @BenItBuhner in #571
  • Keep paging until visible content fills the viewport by @BenItBuhner in #572
  • Keyboard shortcuts: Ctrl+F full-screen composer, search on Ctrl+P, media viewer keys by @BenItBuhner in #567
  • Updater: check-only in the background; install only from Settings by @BenItBuhner in #559
  • Spotlight: follow one chat or Project live in its own notification by @BenItBuhner in #448

Full Changelog: v0.4.33...v0.4.34

v0.4.33

Choose a tag to compare

@cursor cursor released this 02 Oct 04:24
72f7409
versionName 0.4.33
versionCode 43399
Commit 72f7409
Signing certificate (SHA-256) 379a87854ada552f58933bf981624333bf8f6a170cd70999d3d35060da2be56b
Remote crash reporting Off - this build has no project to report to. Crash reports stay on the device; share them from Settings > Debug (long-press the version row).
CI https://github.com/BenItBuhner/cursor-for-android/actions/runs/36962252717

Install: download cursor-for-android-0.4.33.apk, then adb install -r cursor-for-android-0.4.33.apk (or open it on the device). SHA256SUMS.txt holds the checksums of the APK and AAB; *-mapping.txt is the R8 mapping for de-obfuscating stack traces. Installs of v0.2.0 and later update in place — same signing key.

No more "Rate limited" when you swipe up, long chats that reopen instantly, and fewer background requests

  • Swiping up no longer shows "Rate limited" over a running chat. Swiping up to catch up on a chat whose agent was working could put "Rate limited by Cursor. Try again in N s." over it, even though the reply was streaming fine. Now the swipe catches up on whatever it can, the reply keeps streaming, and the app checks again by itself once the wait is over. Nothing pops up over the chat.
    • If a refresh fails for some other reason, the message now sits under the conversation with a Retry button instead of popping up, and it goes away on the next refresh that works.
  • Long chats reopen instantly. A long chat or Project could reopen to an empty page saying "Loading older…" and then load everything again from the start. It now opens straight from what's saved on your phone. That holds even if you left while it was still loading, restarted the app, or updated it.
    • A Project that kept working after you left no longer pushes its saved conversation out of the phone's storage.
  • Fewer background requests to Cursor. The app asks Cursor for less while your agents run, so you're less likely to run into Cursor's rate limits:
    • a chat that's already streaming live isn't also checked on separately;
    • quick background refreshes read less of your chat list;
    • when several parts of the app need the same answer at the same moment, Cursor is asked only once.
    • Opening a chat or coming back to the app still catches up straight away.

What's Changed

Other changes

  • Reopened long chats paint from the phone: keep turn files, persist past leaving by @BenItBuhner in #564
  • Never show "Rate limited by Cursor" over a running chat after a pull to catch up by @BenItBuhner in #563
  • Cut the remaining per-endpoint reads from the rate audit by @BenItBuhner in #565

Full Changelog: v0.4.32...v0.4.33

v0.4.32

Choose a tag to compare

@cursor cursor released this 02 Oct 01:06
ad2e524
versionName 0.4.32
versionCode 43299
Commit ad2e524
Signing certificate (SHA-256) 379a87854ada552f58933bf981624333bf8f6a170cd70999d3d35060da2be56b
Remote crash reporting Off - this build has no project to report to. Crash reports stay on the device; share them from Settings > Debug (long-press the version row).
CI https://github.com/BenItBuhner/cursor-for-android/actions/runs/36946658287

Install: download cursor-for-android-0.4.32.apk, then adb install -r cursor-for-android-0.4.32.apk (or open it on the device). SHA256SUMS.txt holds the checksums of the APK and AAB; *-mapping.txt is the R8 mapping for de-obfuscating stack traces. Installs of v0.2.0 and later update in place — same signing key.

A new "Projects + Recent" New Chat layout, pictures that stay on your messages, and an honest status for machines that are off

  • New Chat page: Projects + Recent. A fourth layout for the New Chat page shows your Project shortcuts with your recent chats listed right below them, in one scrolling page. Choose it in Settings under New chat page.
    • Arranging and hiding Projects works just as on the Projects layout, and a Project's own chats aren't listed a second time among the recents.
    • The layout picker in Settings now shows all four layouts side by side in one row, on phones too.
  • New projects no longer open on a "Rate limited" error. A chat that's briefly rate limited now loads on its own.
  • Pictures you send stay on your message. A picture attached to a message could disappear from your bubble after swiping up to reload, reopening the chat or restarting the app. It now stays put.
  • A machine that's off no longer shows as "rate limited". If the machine behind a Remote Control chat is powered off or not connected to Cursor, a queued message now says the machine isn't connected and sends by itself once it reconnects, instead of claiming Cursor is rate limiting you.
    • The app checks back now and then without resending anything. After about half an hour it stops and asks you to start the machine and tap retry.
    • When Cursor itself is briefly unavailable, the message says that, rather than "rate limited".
  • Scrolling up through pictures no longer jumps. Flicking up through a chat with images or screenshots could make the conversation skip ahead as each picture finished loading. The text now stays where it is, and pictures you've already seen open at their full size straight away.
  • Chats catch up the moment you open them. Opening a chat whose agent is running, or coming back to the app with one on screen, now checks for anything you missed straight away and carries on from there. Before, a quietly dropped connection could leave the chat waiting up to 30 seconds.
  • Lighter on your connection in the background. Following several running agents with no chat open is back to asking Cursor for updates as rarely as v0.4.30 did. The extra checking v0.4.31 added for stalled chats now only runs for the chat you have open.
  • "Show more" in the sidebar stays open. Tapping "Show N more" under Projects or Pinned now keeps the full list across visits and restarts, until you tap "Show less".
  • A calmer message box. The composer no longer lights up with a brighter outline when you tap into it. It keeps the same subtle outline as the cards stacked around it.
  • One refresh spinner everywhere. Pulling down in the sidebar and pulling up in a chat now show the same refresh indicator: a circle with a thin outline and no shadow, which is easier to see in dark mode.

What's Changed

Other changes

  • Test stall watchdog: dump and kill a stuck test JVM instead of waiting for the job timeout by @BenItBuhner in #537
  • Benchmarks: their own workflow, reporting on every commit without holding merges or releases by @BenItBuhner in #538
  • agentCheck: run the unit tests a change is likely to break, not the whole suite by @BenItBuhner in #539
  • Test fakes: atomic API call counters; CatalogRepositoryTest no longer spins a shard to death by @BenItBuhner in #541
  • CI: constant dev stamp on the unit-test shards so their compile can hit the build cache by @BenItBuhner in #542
  • Sidebar: keep "Show N more" across visits, recreation and restarts by @BenItBuhner in #543
  • SidebarCollapsePersistenceTest: wait for the frame that shows the fold before asserting it by @BenItBuhner in #544
  • Say a machine that is off is off, never "rate limited"; budget what a chat asks of Cursor by @BenItBuhner in #545
  • OutgoingSendTest: wait for the chat to follow the account's run before asserting its id by @BenItBuhner in #546
  • PinnedPanelFlowTest: trace each drag's edge and panes so the next CI failure says what happened by @BenItBuhner in #547
  • Refresh the unit-test slice weights: slowest slice 11.8 to 9.9 min by @BenItBuhner in #540
  • Stall recovery only for a chat on screen; followed agents back to the list's refresh alone by @BenItBuhner in #549
  • A sent picture stays on its bubble after the chat is read again by @BenItBuhner in #551
  • Composer: same 8 % stroke focused and unfocused by @BenItBuhner in #550
  • Draw both refresh indicators in one outlined, shadowless Material disc by @BenItBuhner in #552
  • cloud-agent-setup: make /dev/kvm usable by the agent's user by @BenItBuhner in #553
  • CI: a main push whose tree a green run already proved skips the heavy jobs by @BenItBuhner in #554
  • Actions cache: prune it after every main run, and save the unit-test caches from one shard, not six by @BenItBuhner in #555
  • Main re-run: re-run a red main run's failed test jobs once automatically, and /rerun-main for the rest by @BenItBuhner in #557
  • Cache maintenance: delete a closed PR's caches by id, and print sizes with awk by @BenItBuhner in #558
  • Verify and take up a held connection at once when a chat opens on it or comes back in front by @BenItBuhner in #556
  • New Chat page: "Projects + Recent" layout stacking the shortcuts over the recent chats by @BenItBuhner in #548
  • BlobDiskStoreTest: lane 7's last blob survives only if lane 7 finishes late; assert what the cache must hold instead by @BenItBuhner in #560
  • Hold a 429 to the endpoint Cursor refused; a new Project's first open waits it out and shows its kickoff by @BenItBuhner in #562
  • Fix the transcript skipping when flung up through figures by @BenItBuhner in #561

Full Changelog: v0.4.31...v0.4.32

v0.4.31

Choose a tag to compare

@cursor cursor released this 01 Oct 09:18
949eafa
versionName 0.4.31
versionCode 43199
Commit 949eafa
Signing certificate (SHA-256) 379a87854ada552f58933bf981624333bf8f6a170cd70999d3d35060da2be56b
Remote crash reporting Off - this build has no project to report to. Crash reports stay on the device; share them from Settings > Debug (long-press the version row).
CI https://github.com/BenItBuhner/cursor-for-android/actions/runs/36839259879

Install: download cursor-for-android-0.4.31.apk, then adb install -r cursor-for-android-0.4.31.apk (or open it on the device). SHA256SUMS.txt holds the checksums of the APK and AAB; *-mapping.txt is the R8 mapping for de-obfuscating stack traces. Installs of v0.2.0 and later update in place — same signing key.

Live chats keep streaming after a steer, Projects show up instantly, and you can hide them from New Chat

  • Live chats no longer go dead after a steer or a queued message. A chat could stop updating on the agent's last word while the agent kept working on the server, most often right after you steered it or a queued message was taken. The connection stayed open, so the app thought everything was fine. Now, if a live chat hears nothing new from the agent for a while, the app quietly checks the run: if it has finished, the chat shows the result; if not, it picks the stream back up where it left off. There's no "Reconnecting" message, and a long, quiet step never makes the app give up on the run.
  • Projects are on the New Chat page from the first frame. Opening the app used to show the empty page for a moment before the Project shortcuts appeared and the composer slid up. The page now opens exactly as you last saw it, and nothing moves. Changes since then, like a renamed or deleted Project, update in place once the list loads.
  • Hide Projects from the New Chat page. Long-press a shortcut to arrange them, as before. A Hidden line now opens under the shortcuts: drag a Project below it to hide it, or back above it to show it again. You can move several before tapping away to finish. Crossing the line gives a light buzz.
    • Hidden Projects are only left off the New Chat page. They stay in the sidebar, search and links, in the same order.
    • If every Project is hidden, the page shows a small "N hidden" row; tap it to drag them back.
    • The hidden list is kept across restarts and cleared when you sign out.
  • A smoother swipe up to reload. Pulling up past the newest message now lifts the whole chat with your finger, and the reload indicator sits centred in the gap that opens, instead of the chat stretching with the indicator rising out of the bottom edge. It takes a longer pull to trigger, so scrolling past the end is less likely to reload by accident: the arrow fills in and you feel a tick when letting go will reload. Let go early and the chat springs back without reloading.
  • Pictures and files line up in the composer. Attached pictures and file chips are now the same height, with the same rounded corners and the same remove button in the corner, all on one line. Long file names are cut shorter, so a picture plus a file fits on a phone without the file's remove button being cut off.

What's Changed

Other changes

  • ModelSlugScreenshotTest: wait for the presented transcript, not the repository's state by @BenItBuhner in #531
  • New Chat page: draw Projects from a disk snapshot on the first frame by @BenItBuhner in #532
  • Swipe-up reload: lift the transcript, centre the indicator, raise the threshold by @BenItBuhner in #534
  • New Chat: hide Projects by dragging them below a "Hidden" line by @BenItBuhner in #533
  • Resume live run streams that stall on keep-alives (steer / queued follow-up freezes) by @BenItBuhner in #536
  • Composer attachments: one height for picture tiles and file chips by @BenItBuhner in #535

Full Changelog: v0.4.30...v0.4.31

v0.4.30

Choose a tag to compare

@cursor cursor released this 01 Oct 04:19
8a0c9d8
versionName 0.4.30
versionCode 43099
Commit 8a0c9d8
Signing certificate (SHA-256) 379a87854ada552f58933bf981624333bf8f6a170cd70999d3d35060da2be56b
Remote crash reporting Off - this build has no project to report to. Crash reports stay on the device; share them from Settings > Debug (long-press the version row).
CI https://github.com/BenItBuhner/cursor-for-android/actions/runs/36812531625

Install: download cursor-for-android-0.4.30.apk, then adb install -r cursor-for-android-0.4.30.apk (or open it on the device). SHA256SUMS.txt holds the checksums of the APK and AAB; *-mapping.txt is the R8 mapping for de-obfuscating stack traces. Installs of v0.2.0 and later update in place — same signing key.

Images from Samsung phones now reach agents directly

  • Samsung screenshots and photos open for the agent right away. Samsung phones add a few extra bytes to the end of every screenshot and edited picture, and to camera photos. Cursor's image reader on the agent's side rejects images with those bytes. The agent then couldn't see the picture: it had to convert it first, or it replied that the screenshot didn't come through. The app now trims those extra bytes off before sending, without changing the image itself, so the agent sees it straight away.
  • Other images go out as you picked them. Pictures are no longer re-compressed or shrunk before sending, so the agent gets them at full quality. The app only re-saves a picture when it has to:
    • the file is damaged;
    • a photo needs turning the right way up;
    • it's wider or taller than 8000 pixels;
    • it's bigger than the 15 MB the agent accepts.

What's Changed

Other changes

  • Send images as picked, cut losslessly at their end marker, so agents view them natively by @BenItBuhner in #530

Full Changelog: v0.4.29...v0.4.30

v0.4.29

Choose a tag to compare

@cursor cursor released this 01 Oct 03:55
74ed74c
versionName 0.4.29
versionCode 42999
Commit 74ed74c
Signing certificate (SHA-256) 379a87854ada552f58933bf981624333bf8f6a170cd70999d3d35060da2be56b
Remote crash reporting Off - this build has no project to report to. Crash reports stay on the device; share them from Settings > Debug (long-press the version row).
CI https://github.com/BenItBuhner/cursor-for-android/actions/runs/36811056755

Install: download cursor-for-android-0.4.29.apk, then adb install -r cursor-for-android-0.4.29.apk (or open it on the device). SHA256SUMS.txt holds the checksums of the APK and AAB; *-mapping.txt is the R8 mapping for de-obfuscating stack traces. Installs of v0.2.0 and later update in place — same signing key.

A calmer Settings page, and steering a queued message shows it's steering

  • Settings is shorter and simpler.
    • Account: the account row now ends in a Sign out button (Leave demo in demo mode). The separate account details page and Sign out row are gone.
    • Appearance: pick Auto / Light / Dark with one sliding switch, plus an OLED black toggle.
    • New chat page: the previews are smaller.
    • Always on now: "Confirm before stopping", "Full transcript history" and "Keep chats live" are no longer settings. If you had any of them off, they're now on.
    • Crash reports: the "Send crash reports" setting is gone, and the app no longer sends crash reports anywhere. Crash reports stay on your phone, where you can share them from Settings > Debug.
    • Descriptions are shorter, and spacing between groups is even.
  • Steering a message from the account's queue looks like steering. In Extended mode and Projects, a message sent while the agent is busy waits on the queue card. Tapping its up arrow sends it into the turn under way. The row now reads "Steering…", then "Steered · the agent reads it at its next step", instead of an unclear "Being delivered to the agent." It can't be edited while it's being sent; a tap says so, right there on the row. Once the agent takes the message, the card folds away and the message moves into the chat.
  • Told plainly when a steer doesn't go through. If Cursor keeps the message queued instead of steering it, the row goes back to waiting and says so: "Not steered: Cursor kept it queued for when this turn ends." Before, the app could claim "Steered" when it wasn't.

What's Changed

Other changes

  • release-cut: write the CI row after the CI wait by @BenItBuhner in #529
  • Settings cleanup: theme switch, Sign out on the account row, fewer and shorter rows by @BenItBuhner in #526
  • Steer from the account queue reads as a steer, not "Being delivered" by @BenItBuhner in #521

Full Changelog: v0.4.28...v0.4.29

v0.4.28

Choose a tag to compare

@cursor cursor released this 01 Oct 02:01
eaa1f75
versionName 0.4.28
versionCode 42899
Commit eaa1f75
Signing certificate (SHA-256) 379a87854ada552f58933bf981624333bf8f6a170cd70999d3d35060da2be56b
Remote crash reporting Off - this build has no project to report to. Crash reports stay on the device; share them from Settings > Debug (long-press the version row).
CI https://github.com/BenItBuhner/cursor-for-android/actions/runs/36802389812

Install: download cursor-for-android-0.4.28.apk, then adb install -r cursor-for-android-0.4.28.apk (or open it on the device). SHA256SUMS.txt holds the checksums of the APK and AAB; *-mapping.txt is the R8 mapping for de-obfuscating stack traces. Installs of v0.2.0 and later update in place — same signing key.

S Pen works in every text box

  • Tap, select and scroll text with the S Pen like a finger. On Galaxy phones with an S Pen, text boxes were hard to use with the pen:

    • a tap only landed if it hit the exact spot where the cursor blinked;
    • pressing and holding to select text often failed;
    • dragging inside a long message barely scrolled it.

    Now a pen tap places the cursor where you tap, even a little above or below a one-line box. Press-and-hold selects text, and dragging scrolls. This works in all 14 text boxes in the app.

  • Handwriting only when your keyboard supports it. Pen strokes are passed to the keyboard as handwriting only when the keyboard can actually write (Gboard, for example), and never while the pen's side button is held. With a keyboard that can't, such as Samsung Keyboard, the pen just acts like a finger.

What's Changed

Other changes

  • S Pen: tap, select and scroll every text field like a finger by @BenItBuhner in #528

Full Changelog: v0.4.27...v0.4.28

v0.4.27

Choose a tag to compare

@cursor cursor released this 01 Oct 01:36
6d4a0d8
versionName 0.4.27
versionCode 42799
Commit 6d4a0d8
Signing certificate (SHA-256) 379a87854ada552f58933bf981624333bf8f6a170cd70999d3d35060da2be56b
Remote crash reporting Off - this build has no project to report to. Crash reports stay on the device; share them from Settings > Debug (long-press the version row).
CI https://github.com/BenItBuhner/cursor-for-android/actions/runs/36799739862

Install: download cursor-for-android-0.4.27.apk, then adb install -r cursor-for-android-0.4.27.apk (or open it on the device). SHA256SUMS.txt holds the checksums of the APK and AAB; *-mapping.txt is the R8 mapping for de-obfuscating stack traces. Installs of v0.2.0 and later update in place — same signing key.

No more out-of-memory crash in long sessions, and speed controls for videos

  • The app no longer runs out of memory after hours of use. With many agents working for a long time (for example 31 agents over about 8 hours), the app could slowly fill its memory and crash. Long texts such as files a tool read and the changes it made are now kept on the phone's storage, and space is freed as soon as nothing needs a text any more. When memory does get tight, the app now tidies up chats you aren't looking at; they reload instantly when you open them. Nothing live is dropped: every update still reaches the chat.
  • Hold a video to play it at 2×. While a video or recording plays, press and hold on it to speed it up to 2×. A small "2×" badge shows while you hold, and letting go returns to your normal speed. Holding doesn't hide the controls or swipe the video away.
  • Pick a playback speed: 0.5×, 1×, 2× or 4×. A speed button at the end of the player's controls opens a small menu. It works on videos as well as sound recordings, and voices keep their natural pitch at any speed.
  • Pictures you attach reach the agent. Agents, especially in Projects and Extended mode, sometimes said a screenshot "didn't come through". Every picture is now sent as a clean image of the type it really is, turned the right way up and shrunk to a size the agent can read. A picture that can't be sent shows a clear error under the message box instead of failing silently. Rotated camera photos now also look upright in the message box preview.

What's Changed

Other changes

  • Media viewer: hold for 2x, and a 0.5x–4x speed menu by @BenItBuhner in #522
  • Fix the long-session OutOfMemoryError: spilled texts stay on disk for the whole session by @BenItBuhner in #525
  • Frame-level guard: Transcribing never draws back up after a dictation ends by @BenItBuhner in #523
  • Send every image attachment as an intact image of the type it really is by @BenItBuhner in #524

Full Changelog: v0.4.26...v0.4.27