Summary
A unified multi-transfer manager — a single panel showing all in-flight and queued B2 transfers (uploads, downloads, sync, batch) with per-item progress, throughput, and pause/resume/cancel/retry.
Why
Today every transfer feature (#56 upload, #57 download, #72 sync, #73 batch) is bound to VS Code's withProgress, which is hard-limited to one task per call (a message + % + optional cancel). It genuinely cannot present many concurrent transfers as a live dashboard with per-item controls and throughput. As soon as a user kicks off a folder upload + a batch download + a sync, the native progress surface falls apart. This is the one place in the whole sdk-parity backlog where native hits a real dead-end.
Why a webview here (and only here)
Per the interaction conventions in #87, native is the default and webviews must clear a high bar. This feature clears it: arbitrary layout with many live rows, per-row controls (pause/resume/cancel/retry), and throughput sparklines are not expressible with withProgress, a TreeView (no live per-row controls/visualization), or a virtual document (static). A WebviewView docked in the B2 view container is the right tool.
Proposed UX
Acceptance criteria
Out of scope (keep focused)
Filed from the fitness-neutral UI re-audit (see #87): the single in-scope capability where a webview genuinely beats every native primitive. All other 22 features stay native.
Summary
A unified multi-transfer manager — a single panel showing all in-flight and queued B2 transfers (uploads, downloads, sync, batch) with per-item progress, throughput, and pause/resume/cancel/retry.
Why
Today every transfer feature (#56 upload, #57 download, #72 sync, #73 batch) is bound to VS Code's
withProgress, which is hard-limited to one task per call (a message + % + optional cancel). It genuinely cannot present many concurrent transfers as a live dashboard with per-item controls and throughput. As soon as a user kicks off a folder upload + a batch download + a sync, the native progress surface falls apart. This is the one place in the whole sdk-parity backlog where native hits a real dead-end.Why a webview here (and only here)
Per the interaction conventions in #87, native is the default and webviews must clear a high bar. This feature clears it: arbitrary layout with many live rows, per-row controls (pause/resume/cancel/retry), and throughput sparklines are not expressible with
withProgress, aTreeView(no live per-row controls/visualization), or a virtual document (static). AWebviewViewdocked in the B2 view container is the right tool.Proposed UX
WebviewView("B2: Transfers") in the existingb2Explorercontainer, listing active + queued + recently-completed transfers.AbortSignal/ transfer controls.TransferQueueservice that this view renders.withProgressremains for single quick transfers; long/multiple ones surface here.Acceptance criteria
Out of scope (keep focused)