Repository navigation
cmux-next Home: drag pictures into the Chief chat from any app - #22965
Conversation
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. |
|
Bead |
3d3e2a4 to
47a942c
Compare
Correctness review (subagent, read-only, at 3d3e2a4)No blockers. Findings and how they are resolved at 47a942c:
Checked correct by the reviewer: concurrency of the promise reader ( |
583ea7a to
52f7b09
Compare
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. |
42b1f75 to
19939bd
Compare
|
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)
Not verified: macOS jobs did not run: compile and app tests were skipped on CI passes on Written by web and size checks: green Tour of |
|
Found 6 test failures on Blacksmith runners: Failures
|
d6962be to
beb3dab
Compare
Second correctness review (subagent, read-only, at cca6db8) and resolution
Rebase onto f3fbb9c (#22698, attachments checks off the main actor): the promise flow now uses that change's |
… into the message box Drags with real CGEvents from Finder (png, jpg, heic, gif, pdf, several at once), the screenshot thumbnail, Chrome, Safari, Preview and a cmux browser tab into the DEBUG Home fixture, and records what the draft holds and what a send attaches.
…into the message box Real Home views (dock, Home tab, conversation tab) get a drag as AppKit delivers it: the deepest view under the pointer registered for one of the drag's types, entered, moves (the entered answer stands for a view with no draggingUpdated of its own), the drop and the end. What the drag carries is a value the intake reads through a new seam (HomeNativeTranscriptView.dropContents, and HomeFilePromise for NSFilePromiseReceiver): the CI Macs' pasteboard server answers reads inconsistently. No behavior change. Cases: Finder files (1 and 5) on the transcript, header, field and conversation list; a file promise (the screenshot thumbnail, Photos); TIFF, PDF and GIF bytes with the picture's link (Preview, a browser); link drags that must stay out. The drop highlight and the pending notice are checked by the fix commit (they do not exist here).
beb3dab to
efbd7ab
Compare
… bytes, the whole pane, a drop highlight) Lawrence 2026-10-20: "I want people to drag images into Chief properly." - File promises (the screenshot thumbnail, Photos, a browser's or Preview's picture): the drop asks the source for its file at once and the file arrives on a background queue (HomePromisedFiles, 30 s bound by a DemandTimer on an injected clock); the notice says "Adding the dropped files…" meanwhile, and the file takes its place in the intake order. The drag's own picture bytes (read at the drop) stand in when no file comes. A drag offers copy only for a promise of a file, not of a folder; a promise that does not read during the drag (Chrome's picture) does not hide the drag's own picture bytes. - Picture bytes: GIF, WebP and PDF next to PNG, JPEG, HEIC and TIFF (Preview's selection, a browser). - The part limit is checked in the intake order, so a paste after a pending drop counts its files. - One drop target for the whole pane: MessagesLab's pane and transcript register no drag types, so every drag outside the field reaches HomeNativeTranscriptView; the field reports its drags to it (Compose patch: acceptsDropPasteboard, onDropTargetChange); Home's conversation list forwards drags to the shown conversation. No plain string or bare link is registered: text drags keep the field's own handling and links keep the panes' drop zones. DragWhileStreamingTests follows: the transcript side of its sweep is the surrounding drop target's now. - A drop highlight over the pane (the theme's focus ring as a rounded outline over a faint tint, Motion.home fades) while a drag the composer takes is over it. - Paste never asks for promises (only a drop can); debug.home.drive draft reports the draft. - Proof script: windows close through their own close buttons, front order before each drag.
efbd7ab to
405ee64
Compare
Landed in feat-cmux-nextLanded through safe-push as Gate receipt at 405ee64 ( Red/green:
Real pointer drags on cmux-lawrence-2 (
The drop highlight on a real drag: a rounded outline in the theme's focus ring around the pane (window snapshots during the hover, at 19939bd and d6962be). Base reds named by safe-push (not from this push): package conventions lint, main-actor work ratchet, CI target graph. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/39647862464 at 5818254 failed: cmux-next checks (god files, concurrency, crash safety, l10n). |
Lawrence (2026-10-20): "I want people to drag images into Chief properly."
What changes
A drag of pictures or files into Home (the Chief chat) attaches them like a paste, anywhere on the pane:
HomePromisedFiles, 30 s bound by aDemandTimeron an injected clock). Meanwhile the notice above the field says "Adding the dropped files…"; then the chip appears in its place in the intake order. The drag's own picture bytes (read at the drop) stand in when no file comes. The main thread never waits for a source.HomeNativeTranscriptView; the field reports its own drags (Compose patch:acceptsDropPasteboard,onDropTargetChange); Home's conversation list forwards drags to the shown conversation. No plain string or bare link is registered, so text drags keep the field's handling and links keep the panes' drop zones.debug.home.drive {action: draft}reports the draft, pending drops, the notice and the highlight.scripts/cmux-next/home-image-drop-proof.py: real CGEvent drags from Finder, the screenshot thumbnail, Chrome, Safari, Preview and a cmux browser tab into the DEBUG Home fixture (nx-remote--needs input).Changelog
Tests
HomeImageDropTests(CmuxNextAppTests): real Home views (dock, Home tab, conversation tab) get drags as AppKit delivers them (the deepest registered view, entered, updated when implemented, drop, end). The drag contents are a value read throughHomeNativeTranscriptView.dropContents/HomeFilePromise(CI pasteboard servers answer inconsistently). Cases: Finder files (1 and 5) on the transcript rows, header, field and list; a file promise; TIFF, PDF and GIF bytes with the picture's link; a browser picture whose promise does not read; link drags stay out.DragWhileStreamingTestsfollows the new routing.Observed / Not run
package-test-lane.sh suite Packages/macOS/CmuxNext HomeImageDropTestsat the red commit (test and seam only): Finder, promise and picture-bytes cases fail (88+12+9 issues at 60c7e92 / earlier red heads), the link case passes.HomeTypeToFocusTestscrashes silently on the current tip 7b41b2a too (base red, not this change).--needs input), table in the landing comment. The real-drag harness is not deterministic (the same Finder drag attached in one run and not in the next, at the same points), so the table counts only drags that attached.