Conversation
Every remote file command inherited one 30s frontend request deadline, so a slow-but-healthy transfer was reported as "Request timeout" while the host kept transferring. Transfers now stream instead of buffering whole files, stage the destination and publish it only after the bytes completed, and carry one cancellable transfer id from the progress card to the backend so a stop reaches the operation it displays. Co-authored-by: OpenBitFun <318544290+bitfun-ai@users.noreply.github.com>
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
Remote workspace transfers no longer inherit one 30s frontend request deadline, and both providers (SFTP and container) now stream, stage, and publish the same way.
Root cause of the reported failure: the shared
ApiClientapplied its default 30s deadline to every Tauri command, includingremote_download_to_local_path/remote_upload_from_local_path. A slow-but-healthy transfer was aborted client-side withRequest timeoutwhile the host kept transferring, and the progress listener was torn down at the same moment, so the UI reported a failure for a transfer that could still complete. The same single deadline also hid whole-file buffering on both sides, an inconsistent cancel path, and a stop action that never reached drag-and-drop uploads.No upstream issue: this was reported directly against 1.0.2 behaviour ("文件传输失败:Error: Request timeout" while receiving files from a remote workspace).
Type and Areas
Type: bug fix / robustness fix.
Areas: desktop/Tauri, web UI, Rust core (remote SSH services), docs.
Motivation / Impact
For users:
For developers:
ApiRequestConfig.timeout <= 0now means "no deadline" (previously0silently fell back to the default), so a long-running command can opt out explicitly; the two transfer commands use it, commands without a stop surface keep the default;Verification
cargo test -p openbitfun-services-integrations --no-default-features --features remote-ssh-concrete --lib remote_ssh::— passed (163 passed, 5 ignored)cargo test -p openbitfun-desktop --lib api::ssh_api::tests— passedcargo test -p openbitfun-desktop --lib api::local_file_download::tests— passedcargo test -p openbitfun-desktop --lib remote_workspace_policy— passedcargo check -p openbitfun-services-integrations --no-default-features --features remote-ssh-concreteand--features remote-ssh— passedcargo check -p openbitfun-desktop --lib— passed (needs the same Linux GTK/webkit build packages CI installs)pnpm run type-check:web— passedpnpm --dir src/web-ui run test:run src/tools/file-system src/features/ssh-remote src/infrastructure/api— passed (50 files / 440 tests)pnpm run fmt:rs,pnpm run i18n:audit,pnpm run check:core-boundaries,pnpm run check:repo-hygiene, eslint on the changed files — passedgit diff --cached --check— cleanAI assistance: this change is AI-assisted. Automated testing level is fully tested according to the list above (unit/integration plus the repository's static checks); it was not manually exercised against a real remote host in this environment (no live SSH/container target was available), so an end-to-end transfer check on a real workspace is still worth doing during review.
Reviewer Notes
workspace_file_uploadchunk protocol, or relay-service/mobile-web code changed — so no relay or mobile-web redeploy is involved, and no cross-version negotiation changes.workspace_file_uploadalready used, and it is what makes a cancelled upload non-destructive. Documented indocs/architecture/remote-workspace-transport.md.ApiClientdeadline opt-out,sshApideadline boundary, drag-and-drop multi-file stop, peer-download stop.Checklist
Generated with OpenBitFun