mirror of
https://github.com/stablyai/orca.git
synced 2026-09-29 08:03:20 +00:00
The hybrid app pulled its 9.1 MiB mobile-web package one 48 KiB chunk per RPC round trip, strictly serially, and 99.3% of the package is a single 9.5 MB script — so the whole download was 245 sequential round trips against whatever the relay path's latency happened to be. Measured on the real package over the real mobile relay client with a 120 ms round trip: 31.7 s (0.30 MB/s). Two changes, both negotiated: - the downloader now keeps up to MOBILE_WEB_PACKAGE_MAX_CONCURRENT_READS reads in flight across the whole manifest while still draining to the stager in offset order (the native stage appends at the file's current length), and narrows the window instead of failing when a host answers mobile_web_package_read_limited; - mobileWeb.package.asset.gzip takes an optional `length` so one read answers up to eight chunks. The params schema is strict, so older hosts reject the field — it is gated on the new mobileWeb.package.range.v1 capability, and the client still splits the range into 48 KiB stage writes. Same package, same harness, relay path: 31.7 s -> 2.8 s at 120 ms RTT and 62.9 s -> 5.5 s at 250 ms RTT, with 245 requests down to 76. The download still dies when the app is backgrounded past RELAY_BACKGROUND_GRACE_MS — the session suspends, the refresh effect aborts, and the stage is discarded — so the progress panel now says to keep the app open. Resuming from the staged offset needs a native stage-reopen API on both platforms and is not attempted here. mobile/scripts/measure-mobile-web-package-download.mjs drives the real downloader over both the direct and relay mobile clients with an injectable round trip, which is where every number above comes from. Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb