Repository navigation
Replies: 79 comments
The README lists the AM and AppMan install for LinuxDocs update on AeroFTP has been packaged in the AM and AppMan AppImage managers since ivan-hc/AM#2735. The README now shows both install commands next to the other Linux formats.
The AppImage delta updates ( Verified green: docs-only change (README), no code touched. |
Private MCP foundation for AeroAgentPost-4.2.1 follow-up, fixed on The private client foundation stores STDIO servers per user and keeps secrets in the encrypted vault. Bounded framing and protocol negotiation feed isolated processes, one-shot native approvals and audit; the private bridge rechecks live configuration and fresh tool schemas. Streamable HTTP and OAuth tokens are bound to current user/server revisions. The existing settings page saves STDIO configuration; HTTP settings, browser callback UX, live health/tools snapshots and model routing are follow-up work.
The source lane previously passed its own AeroFTP MCP server self-test inside Linux bubblewrap, using tools/list and read-only aeroftp_mcp_info without saved profiles or a third-party server. Current wire tests use deterministic STDIO peers and test-only loopback HTTP. The subsequent own-server validation passed as recorded below. A live round trip through the sandboxed private client to the freshly built AeroFTP MCP server called All MCP credential namespaces, including HTTP bearer and OAuth tokens, stay unavailable through generic user credential IPC. Settings refresh after a partial secret-write failure adopts the backend revision before retry. Commits in this lane:
Verified green: complete local landing checks on Named private MCP regression tests (107 passed in the full native gate)The separately enabled |
Scoped read-only AeroAgent workersPost-4.2.1 follow-up, fixed on AeroAgent can delegate confined local read tasks and up to two explicitly selected saved S3 scopes. Parent and worker usage share a bounded ledger, cancellation survives UI races, and completed worker cards retain bounded observations. Both workers can consume all three tool steps and their final model response before the parent join (10 aggregate requests). Shared ledger cancellation is reflected in every worker terminal event. Per-call file/argument errors return bounded, budgeted tool results so the model can correct them; scope, credential, lifecycle and budget failures remain terminal. Malformed persisted spending fails closed before budget admission. Delegation start and cancellation IPC are restricted to the main window. All twelve worker controls/status strings are translated into 46 non-English locales.
Prior live evidence from the worker lane: the dev GUI previously exercised a Kimi K3 local fixture, two selected S3 test profiles with distinct result cards, and Stop while both remote children ran. No separate GUI rerun is claimed for the later Stop/card and budget corrections; those have review and automated regression evidence. Commits in this lane:
Verified green: complete local landing checks on |
Amazon Bedrock Runtime providerPost-4.2.1 follow-up, fixed on Amazon Bedrock is available as an OpenAI-compatible Runtime provider with Region configuration and manual model IDs. Backend endpoint validation requires HTTPS and rejects URL credentials before provider tests, catalogs, nonstream and streaming inference. Exact plaintext loopback is permitted only inside test builds.
Commits in this lane:
Verified green: complete local landing checks on |
AppImage update information and matching delta sidecarsPost-4.2.1 follow-up, fixed on Linux AppImages embed update information and ship an adjacent
Commits in this lane:
Verified green: complete local landing checks on |
DOMPurify patch update for preview sanitizationPost-4.2.1 follow-up, fixed on DOMPurify is updated from the locked version 3.4.15 to 3.4.16. The manifest and lock file agree. The update retains our SVG-only sanitization profile and HTML highlighting sanitization; upstream repairs include IN_PLACE raw-text/hook handling and CommonJS declarations.
Verified green: clean npm install (zero reported vulnerabilities), production frontend build, fourteen sanitizer assertions, fmt, security regressions, version consistency, 1276 frontend tests in 146 files, typecheck, i18n 5436 keys/47 locales complete, strict all-target Clippy, 6158 Rust tests passed/0 failed/93 configured skips and strict cargo audit. CI: all three triggered workflows succeeded, nine checks passed and four were configured skips. Snyk passed. CodeRabbit was requested manually but skipped because the Dependabot author has no assigned review seat; the two-file manifest/lock diff was reviewed directly. Legend: 🔴 confirmed · 🟡 investigating · 🔵 planned / idea · 🟢 done / fixed (pending release) · ✅ released |
MCP HTTP server settings and backend-owned OAuth authorizationPost-4.2.1 follow-up, done on AI Settings > MCP now manages remote Streamable HTTP servers next to the local STDIO ones: add, enable, edit and remove a server, save a bearer token, or authorize through OAuth in the browser. The backend owns every secret and the whole authorization: the frontend only ever sees an opaque attempt, the public authorization URL and a redacted outcome. Enabling a server here still grants no tool access; routing tools to AeroAgent is the next slice (#1004).
Live test on the dev build (real GUI, driven through the WebKit inspector, English locale):
Not run live: a user switch from the GUI (covered by Review: CodeRabbit found two issues on the first head (loopback stalls, late start after unmount), both fixed with regression tests verified red on the old code; two later outside-diff findings were verified against the code and withdrawn. Verified green: exact-head Actions on Linux, Windows and macOS (14 checks passed, 4 configured skips), Snyk and Socket; local Legend: 🔴 confirmed · 🟡 investigating · 🔵 planned / idea · 🟢 done / fixed (pending release) · ✅ released |
AeroAgent can use the tools of enabled MCP serversPost-4.2.1 follow-up, done on MCP servers enabled in AI Settings now offer their tools to AeroAgent. A snapshot grants nothing: every tool call is checked again by the backend and needs its own approval in the separate approval window. Settings show the live health of each server and the tools it offers.
Live tests on the dev build (own AeroFTP MCP server,
Not run live: any third-party STDIO or HTTP MCP server, and non-Linux process isolation (external servers still fail closed there). Review: CodeRabbit found five issues (out-of-order snapshot answers, cached schema after a change, invisible check failure, snapshot deadline dropping discovery, OAuth outcome pruned before its wait); all fixed with regression tests verified red on the previous code, threads resolved. Verified green: exact-head Actions on Linux, Windows and macOS (14 checks passed, 4 configured skips), Snyk and Socket; local Legend: 🔴 confirmed · 🟡 investigating · 🔵 planned / idea · 🟢 done / fixed (pending release) · ✅ released |
No more crash at startup when the interface is slow to load, with appmenu-gtk-modulePost-4.2.1 follow-up, fixed on When the interface took more than 10 seconds to signal that it was ready, the splash safety timeout ran its own copy of the startup and set the application menu while the splash window was still alive. With
Not run: a release-build reproduction. A release build reaches the same code whenever its interface needs more than 10 seconds to start (first launch, slow disk), so it may have affected users of desktops that load Verified green: exact-head Actions on Linux, Windows and macOS (14 checks passed, 4 configured skips; one Windows job rerun after an unrelated MCP fixture timeout on a loaded runner); CodeRabbit review with no findings; strict all-target Clippy and fmt on the combination with current Legend: 🔴 confirmed · 🟡 investigating · 🔵 planned / idea · 🟢 done / fixed (pending release) · ✅ released |
A download test no longer reads a part before its bytes reach the diskPost-4.2.1 follow-up, fixed on
Not reproduced locally: it is a timing race; the evidence is the failed main run and tokio's documented drop behavior. Every other test in the module reads back only after Verified green: exact-head Actions (12 checks passed, 6 configured skips), CodeRabbit review with no findings; local Legend: 🔴 confirmed · 🟡 investigating · 🔵 planned / idea · 🟢 done / fixed (pending release) · ✅ released |
Saving a server that another user account already has now says soPost-4.2.1 follow-up, fixed on Multi-user AeroFTP was built to warn when you save a server profile that another user account on the same device already stores. The backend check shipped with the multi-user release, but nothing in the app ever called it, so the warning never appeared.
Seven more multi-user backend commands have no caller in the app; they are handled separately in #1016. Verified green: Legend: 🔴 confirmed · 🟡 investigating · 🔵 planned / idea · 🟢 done / fixed (pending release) · ✅ released |
A dev instance on another port now loads its own splash screenPost-4.2.1 follow-up, fixed on Development builds only, nothing changes for users of the released app. A dev instance started with a
Verified green: Legend: 🔴 confirmed · 🟡 investigating · 🔵 planned / idea · 🟢 done / fixed (pending release) · ✅ released |
The superseded MCP gate runtime and the test-only dispatch module are gonePost-4.2.1 follow-up, fixed on No behavior change for users: the removed code had no caller outside its own tests. Since #1004 every outbound MCP call goes through the schema-bound bridge, so the older approval runtime of
Verified green: Legend: 🔴 confirmed · 🟡 investigating · 🔵 planned / idea · 🟢 done / fixed (pending release) · ✅ released |
Seven multi-user commands that nothing called are removed, and a test keeps new ones from piling upPost-4.2.1 follow-up, fixed on No behavior change for users: none of these commands had a caller in the app. A registered command is still IPC surface, though, and one of the seven handed a decrypted per-user credential to the webview as a plain string. Each one was traced through its history and the multi-user design notes, and each had been replaced by a later flow, or added for API completeness and never used.
Verified green: Legend: 🔴 confirmed · 🟡 investigating · 🔵 planned / idea · 🟢 done / fixed (pending release) · ✅ released |
Export a server from its right-click menu, and filter the list in Import/ExportPost-4.2.1 follow-up, done on Exporting one server used to take four steps: open Import/Export, choose Export, find the profile in the full list, untick everything else. Now a right-click on the server in My Servers goes straight to the encrypted export with that profile selected, and every server list in the Import/Export dialog can be filtered, so picking "all the axpbuntu servers on Hetzner" is one word away.
Verified green: Legend: 🔴 confirmed · 🟡 investigating · 🔵 planned / idea · 🟢 done / fixed (pending release) · ✅ released |
The Linux build pins appimagetool to a versioned releaseFixed on On 2026-10-04 every Linux
Verified green: every CI check on the PR head, including the Linux AppImage build. Reviewed on the head by another session. |
A segmented SFTP download shares one read-ahead budget across its connectionsFixed on Every READ in flight holds a chunk-sized buffer until its reply is written out, so a segmented download keeps its read-ahead window in memory once per connection. With nothing asked, each connection took the whole one-connection window: the default four connections kept 4 x 32 READs of 256 KiB in flight for one file.
Verified green: the 50 |
Flatpak import results that only inform show OK aloneFixed on After a Flatpak data import that needs no restart, the result dialog offered Cancel next to OK although there was nothing to cancel.
Verified green: |
AeroImage marks loss once per section, Quick Connect labels get shorterFixed on
Verified green: |
Snap gate G4 says UNVERIFIED when snapcraft lint never ranFixed on Gate G4 checks the built snap for primed GPU libraries with
Verified green: |
The AppImage runtime is pinned and checked by digestFixed on The runtime appimagetool embeds is the first code that runs when an AppImage starts. Until now appimagetool downloaded it from type2-runtime's rolling
Verified green: the pull request's Linux job built the AppImage with the pinned runtime and did not download one; full CI on the pull request. |
Table cells follow their headersFixed on In the AeroFile file lists the sizes and the
Verified green: typecheck, vitest (180 files), |
The main window has rounded corners on LinuxFixed on The main window is borderless: the app draws its own title bar. Windows 11 rounds such a window itself, but a Linux compositor rounds only the windows it decorates, so on Linux AeroFTP had square corners next to every other window on the desktop.
Verified green: |
SFTP connections turn off Nagle's algorithmFixed on During a download the client sends only small packets: READ requests and the window adjustments that let the server send more. With Nagle's algorithm on, each waited for the previous one to be acknowledged, and when the server had just run out of credit only its delayed-ACK timer carried that acknowledgement back.
Verified green: the 48 |
Folders can be renamed on B2 and ImageKitFixed on Renaming a folder failed on both: B2 answered "Path not found" (it has no folders, only names with a common prefix) and ImageKit refused it.
Verified green: 88 B2 tests on API doubles (renewal at every step, versioned buckets, concurrent uploads, each new case red under its own mutation), fmt, clippy; full CI on the pull request. |
AeroSync compares only when asked, and a compare can be stoppedFixed on Opening AeroSync started reading both folders and every folder under them at once. On a home folder that is hundreds of thousands of files, with no way to stop the scan, and it kept running after the window closed. The compare also used the transfer cancel flag: it reset it when starting, which could clear a Stop just pressed on a transfer.
Verified green: |
AeroImage crops anywhere in the imageFixed on The crop selection only reached part of the picture: the bottom of a landscape image, a side of a portrait one, could not be selected. The selection was computed relative to the image but drawn relative to the whole viewer, where the image sits centred with margins, so it was shifted by the margin. It dates from the first AeroImage editor.
Verified green: |
Calculating used storage shows its progress and keeps its totalFixed on Clicking the storage figure in the status bar starts a scan of the used space. It started by dropping the figure to zero, moved only with a manual total, ended on a total of 0, and showed its running count as "files · bytes", which read as a product or a fraction. On WebDAV each click first waited up to 30 s for a whole-tree listing that the Filen Desktop bridge never answers.
Verified green: the App quota lifecycle tests on the real closures (kept total during and after the scan, no reset, deferred React updates, suspect scan), the StatusBar chip render tests, the WebDAV refusal tests (statuses, expiry, reconnect, Filen bridge), each red under its mutation; vitest 1635, clippy on the lib and the tests; full CI on the pull request. |
The used-storage scan and WebDAV walks list several folders at onceFixed on The used-storage scan walked one folder after another on every provider, and WebDAV listed one folder at a time on every walk. Both now run on the sync core's walker: up to eight folders at once where the provider lists on independent clones (SFTP, Azure Blob, WebDAV), one at a time under the provider lock elsewhere.
Verified green: new tests for the parallel listing, the per-folder limit on one session, the 429/503 retry and its 30 s budget, the Digest rotation, and the folder cap on both walks, each red under its mutation; the full local release gate (cargo test 6278, vitest 1644, clippy, audit) on the release tree; full CI on the pull request. |
✅ Released as v4.2.2AeroFTP v4.2.2 is out: MCP Servers for AeroAgent, Faster SFTP, and Parallel Selections. Every one of the 142 queued rows above shipped. Highlights:
Thanks to @EhudKirsh, @roflhouse and @shuvashish76 for the reports and discussion that shaped this release. The still-open Requested rows carry over to the new tracker: [Tracker] AeroFTP 4.2.3 (#1081). This tracker now closes. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
AeroFTP 4.2.2, Rolling Tracker
Umbrella issue for the next AeroFTP release (v4.2.2): known issues reported against v4.2.1 and the patches/updates landing on
mainafter the v4.2.1 tag.Before opening a new issue, please check the lists below. If your problem is already tracked here, just add a thumbs-up reaction or a comment with your environment (OS, version, provider) instead of filing a duplicate. We update this issue as bugs are found and fixed.
Found something that is not listed? Open a new issue and we will link it here.
What shipped in 4.2.1
See the v4.2.1 tracker (#898) and the release notes for the full change set, 74 tracked changes. The headline was four new ways to connect: Twake Drive as a native provider, IBM Cloud Object Storage and Mail.ru Cloud as ready presets, and Proton Drive through the official Proton Drive CLI. AeroAgent reached 1.5, with provider-native reasoning kept across tool calls and approvals that fail closed in a dedicated window. Most of the rest was repair: extraction no longer empties or truncates files on failure, a Mirror keeps what it did not complete, removing a folder never takes its content along on any backend, AeroSync's versioned backup keeps old copies on remote destinations, SFTP transfers end instead of hanging when the server goes away, and the CLI reports Ctrl-C as interrupted (exit 130). A full pre-release review read every change since 4.2.0 and found four blockers and six high-severity defects, among them a Mirror that could delete files it had been told to keep and a keystore import that could drop servers; all of them shipped fixed, each with a test that failed before the fix.
Patches & updates queued for 4.2.2
Done on
main, shipping in the next release.4a7c51f662c45bd45597f5dfd4fdcc02db75b7998ca06fc2fe23ff9c3e85b8e78cb910629e1fbc6d70084988c1ed11f833beaf4802061bbde8e4fb0fb89147d043cb6e1e91e81023f310ba280741ba3c0cb17eaf4ce09cff0341951e20e6b1800e0622b5d48d5bc8d127d1536ce86b8f2d0ca247e45513e3f23349f0577a180bcb67899f3bc8efb26a79c6253f718c16032b6f86ec8ff4e982905c8524603dd7def6a00dda9f656478f495f7e67b579f636638c0958f63a594452b78d5e4a3933062fc6be770263e89ea231b8f6d9c79b828dfe26b6eab3835e0c200ad7041f914b5a62a804020f7fe616790d541fe9213b2f1aa51c9bd331ce32d77428ad7ba9e01ea2eb46d6f3af8bc9c480a530390c621a36dd72a004d2e52c108ad10ddabf7cbbfb92f6ad8f4edae87260581478f529697063dde1db3834a015a7efa64013e6dc0773aa17d548756c1fe8be31af92b3c07ce1315a470bb87be0e78cdd10e0c5add5dc1a27a1ab6b684a4ae8f4730f8c33f6379e45d5fe502560aa083a17171b5d817e9016f12f7b0adc45f304b91609205d4421d1ff611dc8e40e386ddca42b93d89614e081fc9ebd4bdd60d9719a1aced17d8bbdb9f8f7c5b5b6d2645fc4c879c99f448987d3df027d5f694ae27d9ff7673lib.rson a Windows checkout (CRLF) passes again on Windows. Details.b9c8a87ea5698f0cce1b5d68233--transfer-enginehelp, the router docs and the engine docs say what the router does: plain WebDAV and Nextcloud downloads take the direct path, and-vnames the real override. Details.77e641b9dffa9414389e0d43409--transfer-enginehelp and the engine docs say the override reaches only the plain single-file transfer, and the AIMD figure captions give the conditions of what they show. Details.dfa4d6160af80d5581eeb0e46e2b3a1674cd401d7d4e4f85516cf3node.exeon a busy runner. Details.6f20d3280e92df5c2bce420b414d40c7b4c97709d994dad83fff0682d9d5eebaeebdb1d1af48b568733bf6375ca5847ea553d3b1b95a40df8460c14973d95e171ef16a1205e84bb03668c3835d09135f8cedff2cce8AEROFTP_SQUARE_CORNERS=1brings back the square ones. Details.09d1878c7ae1893755d4f97fdd348e11105830b2665c8a99b807e23c9865f80Requested / under consideration
Community requests and internal follow-ups being evaluated for this or a later release. Rows carried over from #1419 (renumbered) and from the 4.2.1 release follow-ups.
-iselectors (prioritised by the reporter ahead ofEdit(E)and the 2-letter semantics; exact behaviour to be pinned).jpgto.jxltranscode in AeroFile: JXL re-encodes an existing JPEG losslessly and reversibly (the original JPEG bytes reconstruct exactly), for a real size win with no quality loss. Candidate framing: AeroFile as a GUI for libjxl.icnsmulti-size (the v4.1.0 ones are single-resolution drafts). Needs a Mac to build and live-testparticipants/addcontactUUID format (currently a best-effort workaround), investigate the Filen free-plan 10-note limit ghost-note cleanup, and add a rich text editor for the rich note typemalloc(): unaligned fastbin chunk detected, the classic GLib heap-corruption signature, and it is the victim rather than the corruptor. Two marshalling fixes shipped in v4.0.5 and the SIGABRT still recurs with an identical signature, so the marshalling is incomplete and the remaining suspects are the event and plugin callbacks whose thread context is unconfirmed. Details.HKCUand re-read by the NSIS post-install hook so an in-app update cannot silently restore the association, plus a/NOASSOCsetup switch. Parked rather than half built, because a visible components-page checkbox needs forking the Tauri NSIS template. Details.pathandpath/.... The trap is the one #764 just closed, moved by one character: a sibling likereportsXalso matches the shorter prefix. Whoever takes this must write both doors before the change, not after:reportsXsurvives a delete ofreports, andreportssurvives when it is a real non-empty file. Worth doing when someone measures a slow recursive delete on a tree with many folders, not before. 4.2.1 context: #979 changed folder-removal semantics (a folder is removed only once empty,sync --deleteremoves the directories it emptied on every backend) but did not touch this listing or its probe; still open.defaultSaltTogglesays "no kit or keystore needed after create" anddefaultSaltTierMeaningsays "nothing else has to be carried", and neither holds, because the wrapped master key lives in the config rather than in the password, so a headerless vault needs the keystore whatever its salt mode. Two ways out, and the choice is a product call: implement the reconstruction and make the promise true, or correct the wording across 47 locales. Found while working #347; the copy was left untouched there on purpose. Details.transfer_dag_batch.rskeeps a copy of the handle and aborts on theErrarm, which is how a cancelled token arrives. But if the task is dropped outright rather than cancelled through the token, the await insidemultipart_abortdies with it and nothing on the runner path resends it, so the parts wait for the bucket lifecycle rule. Predates #766, which introduced the guard on the two provider paths only.If-Matchcannot be told from an object that really changed. A gateway answering 412 to every pinned range would send every download back to a single stream while the output announces four, and nothing distinguishes that from a replacement today. Raised during the review of #885 and deferred with the reason written down.syncdownloads print the effective multi-thread policy and one planner decide the stream count, but the server refusal itself is still log-only; still open.TransferCapabilities.atomic_renameisUnsupportedfor every provider and nothing reads it, while SFTP servers that announceposix-renamedo support it: the capability should carry the measured answer so a plan can show where it came from..aerotmpis not tied to the version it was started from. Resuming a partial download against an object replaced in the meantime joins two versions by a route #885 did not close..zsyncpublication landed in #999; verify AppImageUpdate/AM delta downloads against the next real release assets.vault.dbJSON handling. Follow-ups left by the 4.2.1 Flatpak config import work: the host-config migration path and the vault database's JSON handling need their deferred edges closed..gitattributes: drop the hand CRLF normalisations in the tray badge and checksum matrix tests once existing Windows development clones are refreshed, and moveLICENSEto the LF rule only if the NSIS license page is shown to render LF text correctly on Windows.linuxdeploy-plugin-appimagefromcontinuous, the gtk and gstreamer plugins frommaster): they are fetched unchecked on every Linux build, outsidebuild.yml, so pinning them needs the bundler's own controlsKnown issues found after release
Reported against v4.2.1. Empty at the time of opening: every entry in the previous tracker's block was resolved before it closed, so nothing carried over as pending.
Legend: 🔴 confirmed · 🟡 investigating · 🔵 planned / idea · 🟢 done / fixed (pending release) · ✅ released
All reactions