Skip to content

New Tab suggestions: solid, deduped, ranked, dismissable - #20153

Merged
teamleaderleo merged 5 commits into
feat-cmux-nextfrom
leo-newtab-suggestions
Oct 13, 2026
Merged

teamleaderleo merged 5 commits into
feat-cmux-nextfrom
leo-newtab-suggestions

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 13, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

The New Tab search suggestions (Leo 10-13: "red" typed on a wallpaper theme):

  • Solid surface. The popover's fill sits on the opaque popup surface (--surface-popup), not the page background, which is see-through on a wallpaper theme. The New Tab rows and Chats list no longer show through the suggestions.
  • One row per page. Rows dedupe by canonical address: no scheme, www., fragment or trailing slash, no tracking parameters (utm_*, fbclid, gclid, si, …), and a bot check's answer (?solution=…&js_challenge=1&token=…) dropped. Parameters that name a page (id, list, v, q, sha, page tokens, ref) stay, so two Drive files never merge. A page an open browser tab shows is that tab, "Switch to tab".
  • Clean rows. Titles lose the site's tagline on its front page ("Reddit - The heart of the internet" becomes "Reddit") and a trailing site name ("… : r/rust - Reddit"). The detail is the short host; a file page shows its path.
  • Chrome/Arc order, capped. The top hit (the address, else its best completion), open tabs, workspaces, visited pages, the web search, then Ask; at most 8 rows. Prompt text is unchanged: Ask, a web search, then up to 4 matches.
  • Dismiss. A press outside the composer and Escape close the suggestions and keep the typed text. A second Escape leaves the field. Pressing the field, typing, or Down/Up opens them again. Return on closed suggestions still takes their top row.

Testing

Red then green:

  • test/new-tab-suggestions.test.ts (new): the photo's data gives one Reddit row (the tab, "Reddit", reddit.com); the order; a typed address switches to its tab; the cap; canonical addresses; titles; page ids kept; a typed link to another Drive file stays an open row; file pages.
  • test/new-tab-omnibar.test.tsx: outside press, Escape then Escape, Return after Escape.
  • test/popup-surface.test.ts (browser lane): .nt-popover is the opaque popup surface over a see-through page. Run locally with CMUX_BROWSER_TESTS=1: on the red CSS, the agent-pane case fails in Chromium and WebKit (new-tab-suggestions has the page's transparent fill); on the fix, all 6 pass. CI's webviews-checks stops at the base's vp check errors before it reaches bun test.
  • Gallery: agent-pane.new-tab variants typed-red-duplicates (the photo's data) and typed-dismissed.

Locally (merged head): bun run check is green except 4 type errors in NewTabPage.gallery.tsx (defaultKind), which are on base since #19041/#20127 and untouched here. bun test test/new-tab-*.test.* test/ui-rules.test.ts: all pass.

Reviewed by a review subagent; its findings (page ids merged by a long-token rule, GitHub repo titles collapsing to "GitHub", Return doing nothing after Escape, file pages showing "file:") are fixed with tests.

Coordinated with op-next-appstore (composer rebuild) and op-next-icons (visual styling): no overlapping hunks.

Changelog

Fixed: New Tab search suggestions are a solid surface, list each page once (the open tab first), rank like a browser's address bar, and close on a click outside or Escape without losing the text.

🤖 Generated with Claude Code

teamleaderleo and others added 5 commits October 12, 2026 21:23
Red: two Reddit rows plus the open tab on the same ?solution= address,
a press outside or Escape leaves the rows open (Escape clears the text),
and the popover's fill falls back to the transparent page background.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The popover's fill sits on the opaque popup surface instead of the
see-through page background. Rows dedupe by canonical address (tracking
and one-off token parameters stripped); a page an open tab shows is that
tab, as Switch to tab, with a clean title and the host. The order is the
top hit, open tabs, workspaces, visited pages, the web search and Ask,
capped at eight. A press outside or Escape closes the rows and keeps the
text; a second Escape leaves the field.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… Escape

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…Escape

Only tracking parameters and a bot check's answer are noise, so two Drive
files or playlists never merge and a typed link never switches to another
page's tab. A site name heads the title only on its front page. Return on
closed suggestions takes their top row. A file page shows its path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cursor

cursor Bot commented Oct 13, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@coderabbitai

coderabbitai Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 924bf6a1-1f07-4a02-9e3d-064f2cd519c3

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@teamleaderleo
teamleaderleo merged commit 15b511c into feat-cmux-next Oct 13, 2026
90 of 92 checks passed
@teamleaderleo
teamleaderleo deleted the leo-newtab-suggestions branch October 13, 2026 04:35
@github-actions

Copy link
Copy Markdown
Contributor

Unclear: web / react-apps-check failed: no known signature; failed step: Verify webviews source checks. This PR merged before its CI finished: fix forward on main.

CI failed on abdada1e3c (run 38347084059 attempt 1): 1 unknown.

Job Verdict Why
web / react-apps-check unknown no known signature; failed step: Verify webviews source checks

Not re-run automatically: web / react-apps-check is not a machine failure.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

@github-actions

Copy link
Copy Markdown
Contributor

Gallery

Review in feed

113 states changed: agent-pane.artifact-panel/markdown, agent-pane.artifact-panel/versions, agent-pane.transcript/long-code, agent-pane.artifact-panel/closed, agent-pane.header-tools/customize-menu, ... · 16 new states · 42 play checks failed

Diff page and renders (the run's gallery-pr artifact)

State Before · after
agent-pane.artifact-panel/markdown (Apple System Colors, webkit)
agent-pane.artifact-panel/versions (Apple System Colors, webkit)
agent-pane.transcript/long-code (Apple System Colors Light, chromium)
agent-pane.transcript/long-code (Apple System Colors, webkit)
agent-pane.transcript/long-code (Apple System Colors, chromium)
agent-pane.artifact-panel/closed (Apple System Colors Light, webkit)

107 more on the diff page.

Live preview (follows this branch; start it with scripts/gallery-live.sh up <branch> from an hq checkout):

  • agent-pane.artifact-panel/markdown: /wt/leo-newtab-suggestions/?entry=agent-pane.artifact-panel#/agent-pane.artifact-panel/markdown
  • agent-pane.artifact-panel/versions: /wt/leo-newtab-suggestions/?entry=agent-pane.artifact-panel#/agent-pane.artifact-panel/versions
  • agent-pane.transcript/long-code: /wt/leo-newtab-suggestions/?entry=agent-pane.transcript#/agent-pane.transcript/long-code
  • agent-pane.artifact-panel/closed: /wt/leo-newtab-suggestions/?entry=agent-pane.artifact-panel#/agent-pane.artifact-panel/closed
  • agent-pane.header-tools/customize-menu: /wt/leo-newtab-suggestions/?entry=agent-pane.header-tools#/agent-pane.header-tools/customize-menu
  • agent-pane.composer-pickers/model-menu: /wt/leo-newtab-suggestions/?entry=agent-pane.composer-pickers#/agent-pane.composer-pickers/model-menu
  • 54 more on the diff page

Play checks failed (0 px anchor movement, 0 layout shift, no frame over 33 ms unless the entry gives a reason):

  • agent-pane.artifact-panel/markdown (Apple System Colors, webkit): play: no element for button "Open preview"
  • agent-pane.artifact-panel/versions (Apple System Colors, webkit): play: no element for button "Open preview"
  • agent-pane.artifact-panel/versions (Apple System Colors Light, webkit): play: no element for button "Open preview"
  • agent-pane.artifact-panel/markdown (Apple System Colors Light, webkit): play: no element for button "Open preview"
  • agent-pane.artifact-panel/markdown (Apple System Colors Light, chromium): play: no element for button "Open preview"
  • agent-pane.artifact-panel/markdown (Apple System Colors Light, webkit): play: no element for button "Open preview"
  • 215 more on the diff page

265 nondeterministic states differed from a second render of the same head (a clock or fixture leak) and are not counted as changes.

1662 unchanged · base a060ec1 · head abdada1

teamleaderleo added a commit that referenced this pull request Oct 13, 2026
…1925 12)

The live overlap (No agent to ask through Search the web, Search the web
for ... through the New terminal / browser / chat row) was a see-through
popover; #20153 made it solid after the audited build. This gallery play
keeps it covered: with no harness and typed text, the popover is opaque
and every item it reaches hits the popover, not the page under it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Oct 14, 2026
…Send, then the project row (#20148)

* test: New Tab offers Integrate a harness only when none is installed, quietly, and a dismissal sticks

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT: Integrate a harness only when none is installed, as one dismissible line (cx-udtm2)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: Integrate a harness waits for acpmux's list, counts an unavailable harness, and its dismissal outlives a relaunch

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: the harness hint dismissal rides newTab.remember with the page's other choices

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT: Integrate a harness waits for acpmux's list, counts any listed harness, and the app keeps its dismissal (cx-udtm2)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: the New Tab card is the composer's, field then model and Send then the project row

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT: the New Tab card is the agent composer's: field, model and Send, then its location row

The project picker leaves the bar for the composer's own location row (ComposerContext) at the
card's bottom, as in the agent composer; the mic and Send sit in the bar's end group.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: the New Tab location row names the machine the chat starts on and offers no other

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT: the New Tab location row offers only the page's machine, by its name; the field keeps focus after a pick

Review of #20148: the composer's Computer menu listed remote machines, but a New Tab chat starts
where the page runs. The add-project browser test opens the location row's Add project.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: New Tab suggestions cover the line and row under the field (hq#1925 12)

The live overlap (No agent to ask through Search the web, Search the web
for ... through the New terminal / browser / chat row) was a see-through
popover; #20153 made it solid after the audited build. This gallery play
keeps it covered: with no harness and typed text, the popover is opaque
and every item it reaches hits the popover, not the page under it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: the overlap play must reach No agent to ask

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: New Tab's location row leaves All chats the page's only scroller

In a 360px pane the card's new location row (36px) pushed the page past
the window: .nt-screen scrolled beside the list and the list shrank to its
60px floor. Red: new-tab-scroll "with All chats, the list is the page's
only scroller" in react-apps-check on 8a02ddc. A pane under 480px
now takes the row's room from the space above the card.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: base lint red, the field row's press handler takes no role (cx-d0d.80)

c4b5aee added onMouseDown on .nt-input, which vp check warns on
(jsx-a11y/no-static-element-interactions) and bun run check fails.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant