Repository navigation
cmux NEXT composer: a failed upload tries again on the next key or click, never refused for lack of one - #32102
Conversation
…s gesture Red on base: the first automatic try again goes 1 s after the failure with no key or click, the host refuses its begin (gestureRequired, "The app refused the agent connection."), and that text replaces the upload's own error on its tile. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-f9c38c84c6fe8afc010c
…key or click The host starts an upload only with a fresh gesture (AgentPaneModel uploadStage spends it at begin). The first automatic try again went on a 1 s timer with none, so it was always refused as "The app refused the agent connection.", and that refusal replaced the upload's own error on its tile. Every try again now waits for the next key or click (never Return), as the last one already did. Leo, 2026-10-31: "idk what's going on with video attachments" Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-f9c38c84c6fe8afc010c
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Gallery before/after for
States
Pick other states with a red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on d2dd826 to compare; do not merge until green; see lane-rules Shipped in:
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/41425819578 at f22cb91 failed: cmux-next checks (god files, concurrency, crash safety, l10n). |
…; tests restore the input patch on every path Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-f9c38c84c6fe8afc010c
|
Review (subagent claude-opus-5-5 medium): SHIP at af39b72 Checked: no retry path carries a batchToken. A retry is a new Follow-ups:
|
|
Found 6 test failures on Blacksmith runners: Failures
|
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Leo: "idk what's going on with video attachments"
A screen recording's tile showed "The app refused the agent connection." with Retry.
Cause
The host starts a chat upload only with the person's fresh key or click:
AgentPaneModeluploadStagespends that gesture atchat.upload.beginand answersgestureRequired(shown as "The app refused the agent connection.") without one. After a failed upload, the composer's first automatic retry (#30572) went out on a 1 s timer with no gesture. The gesture was already spent by the first begin, so the host always refused that retry. With no key or click in the next 15 s, the tile then showed the refusal and lost the upload's own error (for example "The upload timed out: the app did not answer.").Fix
composer/uploadRetry.ts: every automatic retry now waits for the person's next key or click in the page (never Return, which keeps its gesture for the send), as the last retry already did. Where no document exists (a test host), the 1 s timer stays.Test
cd webviews && bun test test/composer-upload-first-send.test.tsxa failed upload never tries again without the person's gesture, and keeps its own wordsfails withrefused = [2]. The 1 s retry went out with no gesture.Observed / Not run
scripts/web-lint.sh(format and fast lints; this host leaves the type-aware lint to CI);prepush-gate.py;tsc, which reports no errors in the changed files.Changelog
Fixed: a failed attachment upload tries again on your next key or click instead of showing "The app refused the agent connection."
No capture: no UI layout changes, only when a retry starts.
Agent session: agent session
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Fixes failed attachment uploads so automatic retries wait for the person's next key or click instead of firing on a 1-second timer. The timer-based retry was always refused by the host ("The app refused the agent connection."), and that refusal replaced the upload's own error on its tile.
Written for commit af39b72. Summary will update on new commits.