Repository navigation
cmux-next: liquid glass lens primitive and Glass setting - #22815
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
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 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 |
…lock A one-line reply kept the row's 34px floor over its footer, so the footer sat 16px under it on CI. The reply row above a footer drops the floor. The bubble's fill and rim move to one rule block, apart from its layout, so the shared glass primitive (#22815) can replace it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray
|
Bead |
|
owner: 01a15c40-f076-7583-9fcd-099f2a1deab4 |
One shared glass surface for every web page and the agent pane: webviews/src/ui/glass/ adds the .ui-glass class, its tokens (--glass-tint, --glass-blur, --glass-frost, --glass-refraction, --glass-rim, --glass-dispersion) and a WebGL lens that bends the host's wallpaper still at each glass rim. WKWebView can't refract a backdrop, so the host sends the still through cmuxTheme.backdrop. Settings > Appearance > Glass: Lens (default), Plain Glass (the blur glass from before) and Spectrum (lens plus a chromatic rim). Reduce Transparency and Low Power Mode fall back to Plain. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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. |
…#22754) * test(agent chat): ended runs keep each group's calls listed; MCP calls read in words Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: show each tool call instead of folding runs; humanize MCP tool ids An opened Worked for no longer folds a run under 'Used tools, ran commands'. Command, read and search groups open by default with their last 5 calls and '+K more'. Edits stay closed. The running line, activity line and permission card name an MCP call by server and action instead of mcp__server__tool; the raw id stays in the tooltip and the opened call. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: list a group's commands as Codex does, each 'Ran <command>' with its glyph Command, read and search groups list flush under their line (no tree guide). Each command row gets the terminal glyph and the localized 'Ran {command}' around the mono command. Edits keep the guide. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent pane: a running turn lists each call by default (codexToolRuns off) The app sent codexToolRuns=true, so a running turn still folded each run that text followed into 'Used tools, ran commands' and showed only the newest call of the run in flight. Turn the Debug tunable off by default; it stays available to compare the folded look. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: no tooltip on MCP rows; the raw id stays in the opened call test/tooltip-rules: an element whose text shows carries no title (Leo 2026-10-13). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * test(agent chat): prompt and answer action rows as Claude Code desktop draws them Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: Claude Code desktop's action rows under prompts and answers A prompt's row under its bubble: its age ('1 hour ago', the time on hover), two ticks once delivered, Copy, Edit, Fork and Bookmark. The latest prompt shows it always, older ones on hover. The answer's row moves to the left under its text, time first (turnActionsPlacement defaults to left; Debug 'right' keeps the old edge). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: a prompt's Fork goes through its own turn; ticks skip unread steers; RTL-safe action rows Fork under a bubble forks through the prompt's own turn, as its right-click Fork does. The always-visible row skips failed and queued prompts. Delivered ticks wait while a steer is unread. Margins are logical so RTL locales mirror. The visible time drops its tooltip. Gallery plays and the footer browser test follow the left default. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * test(agent chat): a prompt's Fork forks through its own turn Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: a prompt's row has Claude's single Read/Unread check instead of two Delivered ticks Leo's Claude Code reference (2026-10-20): one check, tooltip Unread while the prompt is being sent or waits as a steer, Read once the agent has it. The chat-column hover test now expects the prompt row's Copy (the action row is Claude's); a tool row still shows none. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Test the transcript's vertical rhythm (red) A layout test for the agent pane transcript: the steer line under its bubble, the meta row under a prompt, the band an older prompt's hidden row leaves, the prompt-to-Worked-for gap, the reply-to-footer gap and the footer-to-next-prompt gap. It fails on the current CSS. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: meta rows hug their message, one transcript rhythm Four spacing tokens set the transcript's rhythm, as Claude Code desktop's: --cv-meta-gap (4px, a message to its meta row), --cv-meta-row (24px, that row's line), --cv-message-gap (8px between messages) and --cv-turn-gap (24px between turns). - A steer's read state sits in its prompt's meta row, right under the bubble, instead of under the hidden action row. - A hidden action row keeps only its own 24px line; its buttons fade, the row stays, so pointing at a prompt moves nothing. - A reply's footer sits 4px under the reply, on a 24px line, and the turn ends 24px before the next prompt. - model.ts estimates rows with the same numbers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: user bubbles are translucent tinted glass The prompt bubble mixed the theme's text into the opaque base, a solid fill. It is now the text at 12% over transparent, so the window's backdrop shows through, with the composer's hairline edge kept. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Gallery: the transcript's rhythm as one fixture A steered prompt, a reply with its footer, and a Worked for turn in one transcript, so the spacing between them shows in one capture. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: name the prompt's Read/Unread check in comments Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: leave the receipt comments to the message-actions lane Puts back the two-tick wording in UserBubble.tsx and conversation.css, which #22773 owns. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: leave SteerMark where it was The steer's read state and the prompt's action-row visibility belong to #22773, which deletes SteerMark. This puts SteerMark back under the bubble as on feat-cmux-next, restores the row's own opacity rules, and drops the steer from the spacing test and the gallery fixture. The spacing tokens, the row's height and margin, and the estimates stay; model.ts now counts a steer's status line under the meta row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Test: a prompt bubble is translucent glass, not solid The chat-column test held the bubble to an opaque fill (Leo 2026-10-13). Leo now wants tinted glass: the fill is translucent but present. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: a short reply's footer hugs it too; bubble glass in one block A one-line reply kept the row's 34px floor over its footer, so the footer sat 16px under it on CI. The reply row above a footer drops the floor. The bubble's fill and rim move to one rule block, apart from its layout, so the shared glass primitive (#22815) can replace it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Test: row estimates match the transcript's CSS (red) A reply right over its footer draws its text and the 4px meta gap with no 34px floor, and a task's result draws 26px and the 8px message gap; model.ts still estimates both the old way. The spacing layout test also gets lower bounds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: row estimates match the transcript's CSS - A reply right over its turn's footer is estimated as its text and the 4px meta gap with no 34px floor, as .acpmux-row--before-footer draws it; the text-less fallback too. layoutConversation reads the next row, as App.tsx does, and places a kept row again when the row after it changes that. - A task's result is 26px and the 8px message gap. - A Chief's prompt draws no action row, so none is estimated. - The chat's last footer ends at the 8px message gap instead of the 24px turn gap (.acpmux-row--last-footer), so no band sits over the composer; the estimate follows it. - Footer buttons use the prompt's compact 5px radius. The estimate test also covers the last footer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Test: a footer with its answer's text is estimated as a footer (red) turnView gives each footer its answer's text for Copy, so the estimator reads the answer's Markdown instead of the footer's 24px line. The fixture footers now carry text, one test shapes the rows through turnView, and a hidden row after the last footer keeps it the last one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: estimate a footer as its line, whatever text it carries A footer carries its answer's text for Copy (turns.ts), so the estimator measured the answer's Markdown and never reached the footer's 24px line and gap. The footer is now estimated before the text path. The chat's last footer is the last row that draws: a hidden bookkeeping row after it no longer takes that away, in the estimate (nextDrawnRow) or in App.tsx's class. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
- A context-lost event from a canvas stop() dropped no longer turns off the lens that started after it. - The page decodes the wallpaper still only once glass is on screen. - The backdrop blur is sent in CSS px (divided by the page zoom). - Localizable.xcstrings keeps base's order; only the five Glass keys are added. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Found 6 test failures on Blacksmith runners: Failures
|
…ed as drawn (#22910) * test(agent chat): ended runs keep each group's calls listed; MCP calls read in words Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: show each tool call instead of folding runs; humanize MCP tool ids An opened Worked for no longer folds a run under 'Used tools, ran commands'. Command, read and search groups open by default with their last 5 calls and '+K more'. Edits stay closed. The running line, activity line and permission card name an MCP call by server and action instead of mcp__server__tool; the raw id stays in the tooltip and the opened call. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: list a group's commands as Codex does, each 'Ran <command>' with its glyph Command, read and search groups list flush under their line (no tree guide). Each command row gets the terminal glyph and the localized 'Ran {command}' around the mono command. Edits keep the guide. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent pane: a running turn lists each call by default (codexToolRuns off) The app sent codexToolRuns=true, so a running turn still folded each run that text followed into 'Used tools, ran commands' and showed only the newest call of the run in flight. Turn the Debug tunable off by default; it stays available to compare the folded look. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: no tooltip on MCP rows; the raw id stays in the opened call test/tooltip-rules: an element whose text shows carries no title (Leo 2026-10-13). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * test(agent chat): prompt and answer action rows as Claude Code desktop draws them Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: Claude Code desktop's action rows under prompts and answers A prompt's row under its bubble: its age ('1 hour ago', the time on hover), two ticks once delivered, Copy, Edit, Fork and Bookmark. The latest prompt shows it always, older ones on hover. The answer's row moves to the left under its text, time first (turnActionsPlacement defaults to left; Debug 'right' keeps the old edge). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: a prompt's Fork goes through its own turn; ticks skip unread steers; RTL-safe action rows Fork under a bubble forks through the prompt's own turn, as its right-click Fork does. The always-visible row skips failed and queued prompts. Delivered ticks wait while a steer is unread. Margins are logical so RTL locales mirror. The visible time drops its tooltip. Gallery plays and the footer browser test follow the left default. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * test(agent chat): a prompt's Fork forks through its own turn Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: a prompt's row has Claude's single Read/Unread check instead of two Delivered ticks Leo's Claude Code reference (2026-10-20): one check, tooltip Unread while the prompt is being sent or waits as a steer, Read once the agent has it. The chat-column hover test now expects the prompt row's Copy (the action row is Claude's); a tool row still shows none. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Test the transcript's vertical rhythm (red) A layout test for the agent pane transcript: the steer line under its bubble, the meta row under a prompt, the band an older prompt's hidden row leaves, the prompt-to-Worked-for gap, the reply-to-footer gap and the footer-to-next-prompt gap. It fails on the current CSS. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: meta rows hug their message, one transcript rhythm Four spacing tokens set the transcript's rhythm, as Claude Code desktop's: --cv-meta-gap (4px, a message to its meta row), --cv-meta-row (24px, that row's line), --cv-message-gap (8px between messages) and --cv-turn-gap (24px between turns). - A steer's read state sits in its prompt's meta row, right under the bubble, instead of under the hidden action row. - A hidden action row keeps only its own 24px line; its buttons fade, the row stays, so pointing at a prompt moves nothing. - A reply's footer sits 4px under the reply, on a 24px line, and the turn ends 24px before the next prompt. - model.ts estimates rows with the same numbers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: user bubbles are translucent tinted glass The prompt bubble mixed the theme's text into the opaque base, a solid fill. It is now the text at 12% over transparent, so the window's backdrop shows through, with the composer's hairline edge kept. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Gallery: the transcript's rhythm as one fixture A steered prompt, a reply with its footer, and a Worked for turn in one transcript, so the spacing between them shows in one capture. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: name the prompt's Read/Unread check in comments Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: leave the receipt comments to the message-actions lane Puts back the two-tick wording in UserBubble.tsx and conversation.css, which #22773 owns. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: leave SteerMark where it was The steer's read state and the prompt's action-row visibility belong to #22773, which deletes SteerMark. This puts SteerMark back under the bubble as on feat-cmux-next, restores the row's own opacity rules, and drops the steer from the spacing test and the gallery fixture. The spacing tokens, the row's height and margin, and the estimates stay; model.ts now counts a steer's status line under the meta row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Test: a prompt bubble is translucent glass, not solid The chat-column test held the bubble to an opaque fill (Leo 2026-10-13). Leo now wants tinted glass: the fill is translucent but present. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: a short reply's footer hugs it too; bubble glass in one block A one-line reply kept the row's 34px floor over its footer, so the footer sat 16px under it on CI. The reply row above a footer drops the floor. The bubble's fill and rim move to one rule block, apart from its layout, so the shared glass primitive (#22815) can replace it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Test: row estimates match the transcript's CSS (red) A reply right over its footer draws its text and the 4px meta gap with no 34px floor, and a task's result draws 26px and the 8px message gap; model.ts still estimates both the old way. The spacing layout test also gets lower bounds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: row estimates match the transcript's CSS - A reply right over its turn's footer is estimated as its text and the 4px meta gap with no 34px floor, as .acpmux-row--before-footer draws it; the text-less fallback too. layoutConversation reads the next row, as App.tsx does, and places a kept row again when the row after it changes that. - A task's result is 26px and the 8px message gap. - A Chief's prompt draws no action row, so none is estimated. - The chat's last footer ends at the 8px message gap instead of the 24px turn gap (.acpmux-row--last-footer), so no band sits over the composer; the estimate follows it. - Footer buttons use the prompt's compact 5px radius. The estimate test also covers the last footer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Test: a footer with its answer's text is estimated as a footer (red) turnView gives each footer its answer's text for Copy, so the estimator reads the answer's Markdown instead of the footer's 24px line. The fixture footers now carry text, one test shapes the rows through turnView, and a hidden row after the last footer keeps it the last one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: estimate a footer as its line, whatever text it carries A footer carries its answer's text for Copy (turns.ts), so the estimator measured the answer's Markdown and never reached the footer's 24px line and gap. The footer is now estimated before the text path. The chat's last footer is the last row that draws: a hidden bookkeeping row after it no longer takes that away, in the estimate (nextDrawnRow) or in App.tsx's class. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Test: incoming messages, notices and waiting steers are estimated as drawn (red) Another agent's message draws 2px margins around its 26px line and the 8px message gap (38px, estimated 30); a task notice draws the tool rows' 2px top margin (36px, estimated 34); a steer the agent has not read draws PendingSteer's 20px line, which the estimate leaves out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray * Agent chat: incoming messages, notices and waiting steers are estimated as drawn - Another agent's message: 26px line, 2px margins and the 8px message gap. - A task notice: the tool rows' 2px top margin, its 26px line and the gap. - A steer the agent has not read: PendingSteer's 20px line too. - App.tsx marks a reply over its footer by the next row that draws, as the estimate does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba3-d09a-7940-9fd6-158e10477c0e&host=cosmic-gray --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
A unit test's light DOM has no MutationObserver, and every page that loads the desktop layer crashed there (whats-new-by-area and others). The lens now leaves such a document to CSS glass. Linux WebKit's headless compositor leaves WebGL out of screenshots, so there the lens test checks the lens's state instead of pixels. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lens # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Windows/WebTheme.swift
Applied from the cmux-next PR autofix artifact of run 39555592062 (its push job was skipped). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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. |
|
|
|
Review (independent review subagent): SHIP at 800de14 Delta since the reviewed 6126d33: a base merge of feat-cmux-next (89078c9, which brings in #23478) and the settings exports regenerated on the fleet (800de14, cmux-ci step 488cb6a08483a6ed97777436).
Evidence at this head:
The defaults call is still needed: the new |
…default Leo 2026-10-21: "the lens thing we just need to see and feel... we can put it as a toggle and later promote to default". appearance.glass now defaults to plain, the glass from before the lens, so nobody's look changes. Lens and Spectrum stay in Settings > Appearance > Glass, and the palette's Toggle Liquid Glass Lens (appearance.glass.lens.toggle, CLI `settings toggle-glass-lens`) flips Plain and Lens live and writes the setting. Pages draw Plain before the host sends its mode. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c40-f08c-79b2-95af-689409622600&host=cmux16
Leo 2026-10-21: the lens is something to see and feel before it is the default. It moves out of the settings schema: the Debug Settings choice `glass.lens` (Glass and Overlays > Liquid Glass; DEV and NIGHTLY) picks Plain Glass (the default), Lens or Spectrum, and Toggle Liquid Glass Lens in the palette or the Debug menu flips it live. Release never activates Debug Settings, so today's glass is unchanged. The Settings > Appearance > Glass row and its exports are gone until the lens is promoted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c40-f08c-79b2-95af-689409622600&host=cmux16
…oggle Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c40-f08c-79b2-95af-689409622600&host=cmux16
…erge # Conflicts: # plans/cmux-next/action-surfaces.json # plans/cmux-next/actions.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c40-f08c-79b2-95af-689409622600&host=cmux16
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. |
|
Review (subagent): SHIP at 048ea3c Correctness review of the final head. Default unchanged: with no Debug override every page draws Plain glass. The settings schema, docs/mdm and the sources sha256 match base, and |
|
CI at 048ea3c: 61 passed, 1 red: gallery health |
…overs, cards and the Inspector Rebuilt on feat-cmux-next after #22815 landed (its squash, so the stacked history is replaced by the surface changes alone). Plain glass is the default now and the lens a Debug toggle, so the plain-only rules key on "not lens or spectrum" (a page with no data-glass is plain) and the lens rules on "lens or spectrum". A glass popup paints the glass tint over a component's own solid popup surface: the gallery invariant found ten menus and popovers (changes file and scope menus, needs-you, the new-tab chats filter) opaque under their blur; all 1645 scanned stages are clean. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c40-f08c-79b2-95af-689409622600&host=cmux16
…uid glass (#23477) * cmux-next glass: adopt the liquid glass on the agent pane, menus, popovers, cards and the Inspector Rebuilt on feat-cmux-next after #22815 landed (its squash, so the stacked history is replaced by the surface changes alone). Plain glass is the default now and the lens a Debug toggle, so the plain-only rules key on "not lens or spectrum" (a page with no data-glass is plain) and the lens rules on "lens or spectrum". A glass popup paints the glass tint over a component's own solid popup surface: the gallery invariant found ten menus and popovers (changes file and scope menus, needs-you, the new-tab chats filter) opaque under their blur; all 1645 scanned stages are clean. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c40-f08c-79b2-95af-689409622600&host=cmux16 * cmux-next glass: the last solid popovers are glass too The Needs you list and its sticky head, the subagents list, the Changes file, scope, options and chats-filter menus, the Add project dialog and the icon picker's bars painted the solid --surface-popup with no blur. They are .ui-glass now, with the glass's own rim and drop (no box-shadow of their own); only Reduce Transparency makes them solid. The Needs your input pill takes Jump to latest's glass again (it had lost its blur when the blur moved onto .ui-glass). The unused .acpmux-handoff-targets sheet is gone, and the acpmux preview loads glass.css so its popups have a fill. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c40-f08c-79b2-95af-689409622600&host=cmux16 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
Shipped in:
|
This PR is the primitive, the Debug toggle and the host feed. Adoption on the surfaces (composer, bubbles, queue card, menus and popovers, hover/link/Updated cards, jump pill) follows right after in its own PR; the gallery entry
ui.liquid-glassshows them all.Liquid glass with a real lens: the wallpaper bends at each glass rim, with a thin specular rim and an optional chromatic fringe (Spectrum). One shared web primitive,
.ui-glass.The lens is off by default. Leo (2026-10-21): "the lens thing we just need to see and feel... we can put it as a toggle and later promote to default". Today's glass (Plain Glass) is unchanged for everyone. In DEV and NIGHTLY builds, the Debug Settings choice
glass.lens(Glass and Overlays > Liquid Glass: Plain Glass, Lens, Spectrum) turns it on, and Toggle Liquid Glass Lens in the command palette or the Debug menu flips Plain and Lens live. It lives in the build's debug-tunables.json, outside the settings schema, so there is no Settings row and no new default; Release never activates Debug Settings and stays Plain. A Settings > Appearance control comes back when the lens is promoted.Design: plans/cmux-next/glass-lens-DESIGN.md. WebKit can't refract a backdrop (
backdrop-filter: url()parses but renders nothing; probed on macOS 27), and the wallpaper is drawn natively behind transparent web views. So the host sends each page a still of the wallpaper and its rect (cmuxTheme.backdrop), and one WebGL canvas per page lenses that copy under every visible.ui-glass.webviews/src/ui/glass/): tokens--glass-tint,--glass-blur,--glass-frost,--glass-refraction,--glass-rim,--glass-dispersion; class.ui-glass; the lens (lens.ts), which does nothing in Plain, under Reduce Transparency, with no still, or with no glass on screen, and whose rAF loop runs only after scroll, resize, DOM or animation changes. Gallery entryui.liquid-glassover a generated wallpaper.glass.lens(GlassLensMode.tunable); effective mode is Plain under Reduce Transparency or Low Power Mode, sent asdata-glass.GlassBackdropFeedper web view (PageWebView, AgentPaneView, AgentActivityHostView) sends the art as drawn (JPEG, ≤1024 px, off the main thread, cached), its aspect-filled rect, blur and tint;nullfor video, no art or translucent art.Media
The PR head built on a fleet mini (cmux-austin-mini-0), the gallery's glass transcript in a cmux NEXT browser tab over a colorful wallpaper:
Video, scrolling under the lens (stepped captures, not real time): lens-scroll-stepped.mp4
Frame time
Same mini (M4, 60 Hz display, no 120 Hz mini in the fleet), PR head app build, 400 turns (402 glass surfaces, 9 on screen), constant 1800 px/s scroll, 6 runs x 6 s per mode:
60.0 fps in every mode; drops are mostly each run's first frame. This counts requestAnimationFrame cadence, not compositor-side misses, at 1x scale.
Changelog
Added: An opt-in Liquid Glass lens for glass surfaces in DEV and NIGHTLY builds (Toggle Liquid Glass Lens in the palette or the Debug menu); the default glass is unchanged.
Observed / Not run
Observed:
bun test test/glass-state.test.ts: 13 pass.CMUX_BROWSER_TESTS=1 bun test test/glass-lens.test.ts: 10 pass in Chromium and WebKit (stripes displaced at the rim, not at the center or outside; no canvas in Plain or under Reduce Transparency; one redraw per move, then the loop stops; canvas removed with the last glass).cmux-ci compile-check --apppassed;GlassLensTests,GlassBackdropTests,PaletteRankCatalogTests,ActionContractTests,ActionSurfaceParityTests,PaletteMenuVocabularyTestspass (aws-m4pro-7).defaults_guard.py check-stamppasses (no new default).bun run check: one type error intest/editor-find-narrow.test.tsx, unchanged here and red on base (from fix(cmux-next editor): the find pill stays inside a narrow editor #22872).prepush-gate.py: no new violations.Not run:
Leo-ask: ask-0e7ea215d7
Leo-ask: ask-b5bfc7b208
Agent session: cmux16
🤖 Generated with Claude Code