Repository navigation
Agent chat: a video shows its poster, play button and length, plays on a click, and opens in its own tab - #24112
Conversation
…ays on a click and opens in a tab Leo 2026-10-21: "id like to be able to watch .mp4s direclty in cmux next somehow (chromium?)". A reply's or a tool's video (a file, or a web video the host fetched) now draws as its poster frame with a glass play button and its length, previews muted under the pointer as before, and plays with sound and controls on a click. Open in tab opens it the way a link opens: a file through link.openPath (cmux's file pages), a web video in a cmux browser tab. Every control shows the pointing hand. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1602e-25ea-7611-8c79-d16df0c4058f&host=cosmic-gray
…at the test Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1602e-25ea-7611-8c79-d16df0c4058f&host=cosmic-gray
|
Owned by inline-media on cosmic-gray · session |
|
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 Passes: CI passes on CI passes on Written by red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on 84d5d32 to compare; do not merge until green; see lane-rules Tour of |
|
Found 11 test failures on Blacksmith runners: Failures
...and 1 more test failures. View all on Blacksmith
|
|
Bead |
…; hover transitions follow reduced motion Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1602e-25ea-7611-8c79-d16df0c4058f&host=cosmic-gray
…t with sound); hover transitions follow reduced motion The expanded player mounted an unmuted <video autoPlay>, so expanding a hovered thumbnail started it with sound before anyone pressed Play. It now reuses the thumbnail: poster, Play, length, and no autoplay. The play button's and the action bar's transitions run only under prefers-reduced-motion: no-preference and use the motion scale token. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1602e-25ea-7611-8c79-d16df0c4058f&host=cosmic-gray
…a-video # Conflicts: # webviews/src/agent-session/acpmux/conversation/InlineMedia.gallery.ts
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
…a-video # Conflicts: # webviews/src/agent-session/acpmux/chips/ReplyMedia.tsx
…e menu and drag-out) with the thumbnail player Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1602e-25ea-7611-8c79-d16df0c4058f&host=cosmic-gray
|
Review (subagent, correctness first): SHIP at 9580bab Different-model review (Codex xhigh via acpmux, diff only) returned SHIP at this head; compile at this head is green. |
|
Orphaned: no activity for 15 h, and no lane holds a lease on it. Adopted by the orphan sweep: merged |
|
|
|
|
|
|
|
Review (Codex xhigh, re-pinned after base update): SHIP at 457f6cb
|
|
Shipped in:
|
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Leo (2026-10-21, relayed by claude-sr2): "this watch is kind aass also id like to be able to watch .mp4s direclty in cmux next somehow (chromium?)"
Leo-ask: watch-mp4-inline (relayed by claude-sr2)
Takes back #24082: it doesn't. #24082's one-line
covers:list inInlineMedia.gallery.tsis re-wrapped onto several lines with two more covers (ReplyMedia.tsx#VideoThumbnail,icons.tsx#OpenTab). #24082's change, dropping theinlineMedia.tsmodule cover, is kept.Summary
A video in an agent reply or a tool's output used to draw as a bare
<video>box. Until it played, it was black (withpreload="metadata"WebKit paints no frame), with no length and no clear way to play it. Now it draws as a thumbnail that plays in place:1:05,1:02:05) in the corner.link.openPath. The host checks the path again (deny list, roots, gesture) and opens it in cmux's file pages.LocalFileHandoffsends mp4/mov/m4v to a WebKit tab, which plays it.browser.openInwithcmux, which opens a cmux browser tab.<video autoPlay>.prefers-reduced-motion: no-preference, timed by the motion-scale token--cmux-motion-micro.media.load, the unguessablecmux-agent://pane/__media/grant, the byte-range scheme handler, CSPmedia-src 'self'). It adds no new host method, CSP change or Swift.Codec path: WebKit
<video>, no native overlay<video>plays H.264, HEVC and AAC through AVFoundation. It plays the mp4/m4v/mov/webm files the host already grants, so no AVPlayerView overlay is needed. An overlay would also have to track scrolling and clipping inside the transcript.LocalFileHandoff). Web videos open in the cmux browser tab. The CEF fork does enable proprietary codecs:scripts/cmux-next/cef-manifest.jsonpinscef-154.0.28-cmux.28.plans/cmux-next/browser.mditem 6 says that since cmux.28 (2026-10-17) the fork builds withproprietary_codecs=true ffmpeg_branding=Chrome. It was verified 2026-10-19 with MP4 H.264/AAC.BrowserProtectedMedia.swiftandBrowserSiteEngines.swiftsayingproprietary_codecsis off predate cmux.28.Coverage
link.openPath, file pages)images.remote = alwaysTests
webviews/test/inline-video.test.tsx(new, 24 tests):link.openPath, https →browser.openIn cmux,http:/javascript:/a remotefile:///the deny list → none);cursor: pointeron the play button, the actions and a playing video's controls;autoplayand nothing playing after a hover preview; Play in the large player plays with sound. At the red commit 6c56706 this fails (autoplaypresent); at 3046a71 it passes;prefers-reduced-motion: no-preference(red at 6c56706, green at 3046a71).agent-pane.inline-mediagetsvideo-thumbnail(a local recording) andweb-video-thumbnail(a nightly reel link withimages.remote = always).Observed / Not run
bun test inline-video22 pass, 2 fail;bun test inline-video24 pass, 0 fail;test/inline-media.test.tsx52 pass;prepush-gate.py: no new violations.bun run checkinwebviews/passes (Oxfmt, Oxlint with the type check, catalog keys, layers, type scale, acpmux protocol).test/inline-video.test.tsxpasses in react-apps-check. Every red there is a base red:test/composer-row-layout.test.tstype errors (Row.muted), the Swift namespace convention errors inAgentPaneNeedsYouSetting.swiftandAttentionHighlightLook.swift, other test files in shard 1, gallery health'sagent-pane.composer#steer-read-hover, the release rails migration tests, and the release-notary guard.test/ui-rules.test.tsfails at5e70632dcaonVoiceInputCard.tsx,ChiefViewsPage.tsxandAppsPage.tsx.test/gallery-coverage.test.tsalso fails at5e70632dca:inlineMedia.ts/safeTail.tscovers, plus 13 base components with no entry. This PR's two new names (VideoThumbnail,OpenTab) are covered.cmux-ci capture). A follow-up push will add it. The gallery advisory run renders both new variants.AgentPaneReplyPaths), and the pane has no binary file read from a peer: acpmux hasputFilefor uploads but no download. Peer videos (and peer images) still show as their name. They need a new acpmux file-read route; that's a follow-up..mp4asapplication/octet-stream, so a top-level browser tab may download it instead of playing it. Inline playback is unaffected, because the host sniffs the bytes.cmux-ci compile-check.Changelog
🤖 Generated with Claude Code
Agent session: cosmic-gray