NEXT iOS: stream attachments to the Mac with no size cap
The iPhone accepts attachments of any size and streams disk-backed files to the Mac in 192 KiB chunks. Previously the composer and upload transport refused files above 100 MiB and loaded smaller files whole. The Mac receiver change has landed in #26954; #27072 supplies the real-link upload probe.
Leo: "well i just think we can improve it a fuckton more than it is now... it's slow it's bad it belabours the point in too many tooltips it's ugly in places it doesn't even work in places there's lots of functionality that needs to get in"
The file's security scope stays open during upload and preview, with balanced cleanup on success and failure. Small text files remain inline in agent prompts. Files pasted from provider URLs are copied while those temporary URLs remain valid; small text/images keep their inline behavior, while larger files retain a disk URL. Picked videos also stream from disk. Existing upload progress and all attachment controls remain available.
A normal merge of feat-cmux-next resolved the newer pasted-file feature's references to the removed cap. No host services were changed.
Validation:
- Previous head
a499073f38a9eff2fb4d05dc023c5cfa3a17b372: fleet iOS Demo build and launch passed; 1,414 tests passed, 0 failed, 1 skipped. The detailed red/green security-scope receipt is in the PR comments. - Current head
31db946f1a245011f534079aebc28616700557f1: fleet iOS compilation/tests and independent review requested. Filter:LinkUploadTests|ScopedFileTests|LocalFileScopeTests|ComposerFileCopyTests; the full iOS simulator test mode also compiles the iOS-only composer code. - Head
f62fdc6e0052b3017d115eba2fea0ffdb8ec0409(after a clean base merge): Files and Artifacts opens a disk-backed attachment (over 256 KiB, held by URL) from the phone throughLocalFileArtifactSource. It used to ask the Mac forAttachments/<name>, which the Mac doesn't have; #27072's Codex review found this. RegressionSessionArtifactsDiskAttachmentTestsfails at the test commit3ce2652fand passes atf62fdc6e(fleet iOS simulator, withSubagentAndArtifactTestsandLocalFileScopeTests: 11 passed). - Head
c0f471a908253a43291f5f1e6df48fc12c2063d6: fixes the two P2s from the Codex review atf62fdc6e. Cancelling an upload now closes its channel and stops the stream, releasing the file handle and scope. A newer attachment of a name now wins over an older one in Files and Artifacts. Regressions inLinkUploadTestsandSessionArtifactsDiskAttachmentTestsfail at1d334ebcand pass atc0f471a9(fleet iOS simulator, 25 passed). - Head
6089b8cd2a8bccb915ce8cf6bbf5cb6450af972c: closing a link channel now wakes a send that is waiting for room in its queue (rust/crates/cmux-mobile-link/src/link.rs). A cancelled upload over a stalled link therefore releases its file handle and scope right away.close_wakes_a_send_waiting_for_roomfails atd380a85cand passes at6089b8cd(cmux-ci test --setup rust: clippy clean, 81 passed). - New staging regression copies a 101 MiB + 7-byte sparse provider file, deletes the source, checks the destination length/end marker, and verifies no inline Data was created. Small and empty files remain attachable. Not run locally.
- End-to-end proof: #27072 checks a 150 MiB upload's size/hash and the phone's memory footprint. Its fleet probe is pending.
- Screenshot evidence for changed attachment behavior remains pending. No new timer, observer, or animation loop.
Risk: scoped-file lifetime and provider URL expiry. Both picked-file scope tests and provider-copy regressions cover these paths; the final iOS build must pass before landing.
Changelog: Fixed attaching large files to agent chats and terminals.
CI note: the release-notary rerun fails scripts/whats-new/test_digest.py:89, test_the_repository_highlights_validate, on the old computer-use-live-preview.md highlight. The original base had the same test and assertion failure; the rerun checks out the original PR merge commit, so it retains that old base content. This PR changes no highlights or What's New code. Release-notary and its dependent Guard status are base reds; fleet validation remains required.
Agent session: agent session
š¤ Generated with Claude Code