Skip to content

Debug: chat header tools in the pane's tab row (no top bar prototype, hq-1d) - #20933

Merged
teamleaderleo merged 37 commits into
feat-cmux-nextfrom
op-next-toolbar/no-top-bar
Oct 15, 2026
Merged

teamleaderleo merged 37 commits into
feat-cmux-nextfrom
op-next-toolbar/no-top-bar

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 15, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Prototype for Leo's "why is there even a top bar" (hq-1d context): with the Debug toggle chrome.tabs.rowTools on, a chat pane has one row on top. Its header tools (summary, chat menu, …) move into the right end of the pane's tab row, and the separate chat header bar goes away. Off by default; nothing changes until it's turned on.

  • The strip gives up the tools' width at its trailing end, left of the pane's "…" (clamped to half the pane). Tab sizing and motion are untouched: the strip only gets a narrower frame, so Chrome-style shrinking (hq-1d/hq-4e) applies as before. No edits to NewTabSlot, NewTabPage+Open, TabStripView* or PaneController.apply.
  • Native → page: tabRow {height, trailingInset} event; page → native: pane.tabRowTools {width} (allowlisted in AgentPageOps.methods). Both convert through the page zoom.
  • New protocol PaneTabRowSharing (CmuxNextDesign); PaneContentView lays the content host under the row and keeps the strip and "…" above it.
  • Web: header/tabRow.ts (useTabRow, useTabRowTools), CSS vars --acpmux-tab-row-height / --acpmux-tab-row-inset; a slight fade where the tools meet the tabs.

Known rough edges (prototype): the page's rounded corners sit at the row's top; the warning status slot is hidden in this mode; the tools can flash once in the row before their width arrives; the lone-chat compact header is unchanged.

Stills below; the default stays off until Leo OKs it.

Showcase

DEV build on cosmic-gray at this head (fad20e4), a mock chat, with chrome.tabs.rowTools off (today) and on. Same window, 1200x760.

Off (today) On
Few tabs, light
Many tabs, light
Few tabs, dark
Many tabs, dark

With it on, the chat gets one row back (~32pt); with many tabs, they shrink a bit more to leave room for the five tools (Chrome-style shrinking unchanged).

Testing

  • webviews/test/agent-pane-tab-row.test.ts "the same row offered again" (a page that says ready again without reloading): red on 07b3822 (waitForFunction timeout, no report), green on 4369f14.

  • Red then green: bun test test/agent-pane-tab-row.test.ts (327c783 red; 2/2 with the feature).

  • vp check clean; crash ratchet, concurrency, god-file and system-blue checks OK.

  • Fleet Release compile passes on the head (step 6a36e90f, 23695c6).

  • Tested in the app (cosmic-gray DEV on 52b49dc): the toggle switches live; tabs, tools and chat lay out as shown.

Follow-ups (setting on only)

  • A zoom or interface-size change doesn't relayout the pane, so the reported width can be stale until the next layout.
  • The artifact panel (.acpmux-artifact) isn't offset for the row.
  • A held terminal can resize briefly during a paint hold.
  • The room/2 clamp on the tools' share isn't visible to the page.
  • Each newly offered row makes the page report the width, then 0, then the width again (the ref callback and the effect both follow it); Swift ends at the width, but a layout landing between could jump one frame.
  • No Swift test yet that pane.tabRowTools gets through the agent page host.

Changelog

none

🤖 Generated with Claude Code

teamleaderleo and others added 3 commits October 14, 2026 23:35
….rowTools

With the row offered (tabRow {height, trailingInset}), the chat header is the
row's height, ends its tools at the inset and reports their width with
pane.tabRowTools; without an offer the header is its own row and reports
nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Leo 2026-10-14, "why is there even a top bar". With the Debug setting
chrome.tabs.rowTools on (off by default), a chat pane's tab strip gives up
the width of the chat header's tools at its trailing end, left of the
pane's "...", and the chat page covers the strip's row: the strip and "..."
stay above it, and the page draws only its tools there, at the row's
height, with a short fade under the row. Off, nothing changes.

- CmuxNextDesign: PaneTabRowSharing, ChromeTunables.tabRowTools.
- PaneContentView+TabRow: the narrower strip frame, the row offered to
  the content, the agent name tag kept below the row.
- Agent pane: pane.tabRowTools {width} (decoded 0...2000, in
  AgentPageOps), the tabRow event (replayed on the page host, offered
  again after a page load), AgentPaneTabRow on the model. The side chat
  helper moves to AgentPaneSideChat to keep AgentPaneModel under 1000
  lines.
- Page: header/tabRow.ts; the header's data-tab-row mode; the summary card
  under the row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…toolbar/no-top-bar

# Conflicts:
#	webviews/src/agent-session/acpmux/App.tsx
@cursor

cursor Bot commented Oct 15, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot 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.

@coderabbitai

coderabbitai Bot commented Oct 15, 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: 1ef27481-2410-4e92-b93f-f682241adaa3

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.

@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

all web/size checks green

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-135xe created for this PR by the cmux coordinator.

…mance

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

blacksmith-sh Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Found 1 test failure on Blacksmith runners:

Failure

Test View Logs
convention violations found (ERROR lines above)./
convention violations found (ERROR lines above).
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@cursor

cursor Bot commented Oct 15, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot 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.

teamleaderleo and others added 2 commits October 15, 2026 00:53
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Fleet Release compile passes at fad20e4 (check-release-compile.sh, step 9ed333c2). The two earlier failures needed public import for AgentPaneView's PaneTabRowSharing conformance. In-app stills to follow.

@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Not verified: macOS jobs did not run: compile and app tests were skipped on 23695c6637; ci-status is green without them.

CI passes on 23695c6637 (run 38758683459 attempt 1).
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped (the macos job needs both to succeed). Re-run CI once they pass, before merging.

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

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

CI fast guards passes on 23695c6637 (https://github.com/manaflow-ai/cmux/actions/runs/38758683459). This covers only the fast guards, not CI: CI's result is the ci-status check, and the CI failure attribution comment names any failing test.

teamleaderleo and others added 3 commits October 15, 2026 01:45
…s its draft

useTabRowTools kept the tools element in state; setting it on mount re-rendered
the pane while its first snapshot loaded, and a relaunched new chat lost its
kept draft (agent-pane-unsent-draft, red on fad20e4, green here).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…toolbar/no-top-bar

# Conflicts:
#	Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Tunables/ChromeTunables.swift
The zoom and setting checks move to AgentPaneTabRow; AgentPaneView's
conformance only forwards to it. The pane sets the content's tools callback
with each offer instead of following and unfollowing views, and the agent
tag's offset is inline.

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

Copy link
Copy Markdown
Collaborator Author

Re-tested in the app at c938fd2 (cosmic-gray DEV, after the size-cap refactor and the draft fix): toggle off/on, few and many tabs, light and dark. Same layout as the body's stills; with it on, the strip narrows 980 → 834pt for the tools. Release compile passes on this head (step 0eb1b58f).

@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 15, 2026 10:10 — with GitHub Actions Inactive
teamleaderleo and others added 5 commits October 15, 2026 03:26
Base grew to 3 lines under the CmuxNextApp cap. The strip's share of the row
and the offer move to a PaneTabRowSharing extension, AgentPaneView's witnesses
to a constrained extension in CmuxNextAgentPane, and the App keeps three
layout lines and the conformance on its existing Parking line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A page that said ready again without reloading lost its width in the App,
and the re-offered identical row was deduped, so the tabs ran under the
tools. Also keep the agent tag's offset unchanged with the setting off.

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

Copy link
Copy Markdown
Collaborator Author

react-apps-check on 52b49dc is red from base: menu-focus.test.ts waits for the gallery stage, and gallery:build fails on base with 'bootstrapScript has Swift escapes' (cx-3rf4z). The job then hit timeouts and was cancelled. The same test fails locally on this head the same way. #21020 fixes it. I'll base-merge once it lands and land on a green react-apps-check. The tab-row and unsent-draft tests passed in that run.

Base reds: exact base 062b82b (landing 6 head, cmux-tui full run 38530387510). The gate excludes a red job only when that run has the same job red with the same error lines; expected: "valgrind-leak-check (startup)" and "valgrind-leak-check" (red on feat-cmux-next 12b1e29, run 38357900702; valgrind 0 errors). This landing changes only cmux-tui/crates/acpmux and cmux-tui/crates/cmux-coderouter. Windows VM proof (gpuitest, router e5cc1d8, same acpmux and cmux-coderouter code apart from tip changes in hub/ and tests): windows_daemon 11 passed, 0 failed, incl. a_killed_daemon_takes_its_router_with_it.
…cx-ncc.54)

wait_for_winner (daemon/windows.rs) waits while another start's daemon
holds daemon.lock and has not bound its socket yet. It tested the lock
with File::try_lock, which took the lock for an instant when it was free:
a third start's daemon that tried the lock in that instant exited too.

Now a 1-byte read at offset 0 on a read-only handle tests the lock and
never takes it. ERROR_LOCK_VIOLATION (33) means another handle holds the
lock (LockFileEx over the whole range, as File::try_lock takes it); a read
or ERROR_HANDLE_EOF (38, std returns it as Ok(0)) means the lock is free.
Proven on the Windows VM (Windows Server 2022, NTFS, as gpuitest, folder
C:\build-wb\acpwin-probe, /tmp/acpwin/l4/probe/lock-probe.ps1): with a
holder in another process, an empty and a 1-byte daemon.lock both gave 33;
free, both gave 38. The outdated RISK comment is replaced.
hq-84 approved the per-connection peer decision (c12e44a) with two P3
follow-ups, both done here:
- free_tier::ProviderPeer is neither Clone nor Copy: a peer read for one
  connection cannot be handed to another (serve_with_admin is public).
- The Windows router admin bind retry (server/windows_socket.rs) removes the
  old socket file only after the same check bind_unix makes: another user's
  socket is refused and never removed, a socket that still answers (a
  stopping router) is left until it goes, a stale file of our user is
  removed.
Also admin_connection takes the AdminConnection as one value, so the
clippy::too_many_arguments allow is gone.
teamleaderleo and others added 15 commits October 15, 2026 07:17
…reruns once alone and passes as FLAKY (named), or stays red

cargo test ran the 361 test binaries one after another: 765 s of tests on rbx,
998 s on cmux9. nextest runs them at once: 55-60 s on rbx at 32 threads.
The full run's reds were load reds (a different set every run, each green
alone; cx-mqvyw, cx-t9m9q). A lower thread cap did not remove them (16
threads: 1 flaky in 2 runs, 99-109 s; 8 threads: 190 s). So a failed test
runs once more alone after the full run (2 s on rbx): a test that fails alone
stays red; one that passes alone is printed as gate-notice: FLAKY with its
name. Doc tests are their own step. The 4 Linux load-red skips go away (the
rerun covers them); protocol_ir_is_current is a base red (cx-ngrbq).
…ith the step; nextest extracts beside its final path; rerun_notes
* test: stopping a vp dev server stops the Vite it started

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

* fix: browser tests stop the Vite their vp dev server started

SIGTERM to vp left its Vite child running; every dev-server test leaked
about 1.1 GiB per run, and on react-apps-check the leaks starved the dev
server files after a failing menu-focus into timeouts. stopDevServer stops
vp's children by parent pid, then vp, and keeps the server in the test's
process group so the runner's timeout still reaches it.

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

* fix: the dev server warm check covers tests that load pages

dev-server-stop starts and stops vp dev without a browser, so it has
nothing to warm. Also read pgrep's output safely when it is missing.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
….2) (#20972)

* test(cx-kz6m0.2): agent chat approval banners offer Allow once and Deny

Red: the banner posts without the approval category and its buttons answer
nothing yet.

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

* test(cx-kz6m0.2): import NotificationSource's module in the approval banner test

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

* feat(cx-kz6m0.2): Allow once and Deny on agent chat approval banners

An agent chat on this Mac that waits on one tool permission now gets a
banner that says what it asks to do (tool title and command, scrubbed),
with Allow once and Deny (destructive). Each button re-reads the prompt
over a person-proven acpmux connection and answers it with
_acpmux/permission_respond only while the same request is pending; the
decision-to-option mapping is shared with the feed bridge. A prompt
that ended or changed opens the tab instead. debug.notifications gains
allow/deny actions and an approval field.

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

* test(cx-kz6m0.2): approval banners skip a read or superseded ask

Red: a banner whose prompt read outlived an acknowledge or a newer ask
still posts, and an older approval banner still answers.

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

* fix(cx-kz6m0.2): approval banners skip stale reads and retire older buttons

A banner whose prompt read outlived an acknowledge or a newer
notification of its tab no longer posts; a newer banner on a tab retires
the older approval banner's buttons, so the map holds one entry per tab.
The approval category hides the command where macOS hides previews.

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

* refactor(cx-kz6m0.2): approval banners live in CmuxNextAgentPane

CmuxNextApp is size-capped (SW14). The answerer, the person-proven
acpmux line, the banner bookkeeping and category, the prompt helpers the
feed bridge shares (digest, frame, shown command, option mapping), and
FeedSecretScrubber move to CmuxNextAgentPane, which already holds the
acpmux connection types. CmuxNextApp keeps only the wiring and ends 57
lines smaller than its base.

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

* refactor(cx-kz6m0.2): prompt and scrubber helpers as extensions, not public namespaces

package-conventions-lint refuses all-static public enums. The prompt
helpers and FeedSecretScrubber stay internal to CmuxNextAgentPane; the
app reaches them through extensions on the request dictionary, offered
options, String and Data.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* test: reasoning menu rows share one check gutter and Ultracode's note is one short line

The reasoning-claude gallery variant now offers Extra High on Opus, so its
menu shows Ultracode as its note promises.

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

* CmuxNext: reasoning menu drawn as a native menu

Ultracode's two-line grey description becomes a short note beside its name
(Extra High + multi-agent, every locale), with the text as its tooltip. The
check moves into a fixed leading gutter shared by every row, so labels align
whether or not a row is checked, as in the access menu. Rows are one height;
section headers sit on the label column in the system's caption style; the
separator is inset to the rows with even spacing. The access menu's 1-4
numbers become secondary key-equivalent text.

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

* CmuxNext: reasoning menu rows and headers use logical padding for RTL

The asymmetric row padding and the header's gutter indent were physical
(left/right), so in Arabic the check gutter sat on the right while the
extra inset stayed on the left. Use padding-inline so both mirror.

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

* test: reasoning menu rows with Ultracode as its own On/Off section

The base now draws Ultracode as a switch section after the levels; the
one-line note sits on its On row.

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

* chore(next): PR autofix at 8902b9d

- regenerated schemas/defaults/cmux-next.json

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38699733289

* CmuxNext: mark Ultracode's note tooltip as allowed (the menu may cut the note)

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: cmux-autofix[bot] <cmux-autofix[bot]@users.noreply.github.com>
… _acpmux/btw (#20826)

* test: side sessions share one right pane and the palette asks a side question

Behavior tests for /btw side sessions: _acpmux/btw goes out through the
pane relay like a prompt and its side session opens beside the chat;
later side sessions of a chat open as tabs in its one right pane; Ask a
Side Question… is a palette action that sends the page sideQuestion.
The tracker and view command are stubs here (old behavior), so these fail.

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

* feat(cmux-next): /btw side sessions share one right pane; Ask a Side Question…

chat.sideChat (New side chat and /btw side sessions) opens a chat's later
side sessions as focused tabs in the pane its first one split off to the
right, instead of a new split each time (AgentSidePanes, one tracker per
chat session, opens one at a time like AgentSubagentPanes).

The pane relay allows _acpmux/btw (sessionId, question, model): session
scoped, gesture required like a prompt, and its reply's sessionId joins
the pane's scope so chat.sideChat may open it.

Ask a Side Question… (agentPane.sideQuestion) is a palette action for a
focused agent chat, with no default key; it sends the page sideQuestion,
which the page ignores while its side sessions gate is off.

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

* chore(cmux-next): regenerate action exports for Ask a Side Question…

From scripts/measure/export-action-surfaces.sh (fleet light step) on 004a08b.

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

* test: the pane relay refuses the inline side question _acpmux/ask

/btw now starts a side session (_acpmux/btw); the page no longer sends
_acpmux/ask and the Rust policy drops it (web PR). The relay still
passes it here, so this fails.

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

* fix(cmux-next): the pane relay no longer allows _acpmux/ask

The page sends _acpmux/btw for /btw now and the Rust pane policy drops
_acpmux/ask (web PR), so the Swift allowlist, its session scope, gesture
rule and params entry drop it too and the two lists stay mirrored.

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

* revert(cmux-next): drop the Ask a Side Question… palette action for now

Review: it shows for every NEXT user and does nothing while the page's
side sessions gate is off, the default. It returns with the Labs flag
follow-up, gated by requires on labs.sideSessions. Removes its catalog
group, handler, strings, AgentPaneView.askSideQuestion (no other caller),
its test, and its action exports (back to the base copies; regenerated
on the fleet to confirm).

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

* test: a chat whose side tabs all closed keeps no side-pane tracker

AgentSidePanes keeps one tracker per chat session for good today, so
this fails.

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

* fix(cmux-next): drop side-pane trackers whose side tabs all closed

AgentSidePanes.chat drops idle trackers of other chats with no side tab
still open (read through the latest open's pane lookup), so the
registry does not keep one per chat that ever had a side session. The
test layout's pane lookup holds it weakly, as the app's does.

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

* refactor(cmux-next): side-pane placement lives in CmuxNextAgentPane, not the App

The App size cap fails when a change adds lines to CmuxNextApp. The side
pane's single placement closure (AgentSidePanes.open(_:chat:pane:place:))
moves into CmuxNextAgentPane, and the App reuses openBeside, which now
focuses a side session it adds as a tab, so CmuxNextApp does not grow.
AcpmuxPaneMethods.swift stays at its 400-line budget.

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

* test(cmux-next): /btw and Ask a Side Question… follow Debug Settings' Side sessions

Red first: with agent.sideSessions off (the default) the palette has no
Ask a Side Question… and the page's header state says side sessions are
off; with it on the action shows in a focused agent chat, the page is
told, turning it off hides the action again without reopening, and
running the action sends the page the sideQuestion command (prefill).

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

* feat(cmux-next): Side sessions (/btw) Debug Settings toggle gates /btw and Ask a Side Question…

agent.sideSessions (Debug Settings > Pages, "Side sessions (/btw)", off
by default, DEV and NIGHTLY) replaces the page's side-question
experiment. The page reads it as sideSessions in the chat header state
(pane.tabState and the headerState push); the header watch observes the
toggle, so a change reaches open chats without reopening them.

Ask a Side Question… returns (from 161e75f) in the palette only,
no key, requiring the new sideSessions context fact, which
ActionRegistry.publishSideSessions() keeps in step with the toggle, so it
is hidden while the toggle is off. Its handler shares one loop with
Switch Model… and Search Files…, so CmuxNextApp does not grow; the
AgentPaneView and AgentPaneModel god types do not grow either.

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

* chore(cmux-next): regenerate action exports for Ask a Side Question…

From export-action-surfaces.sh on fleet step 82e608fc0e5b3b3b3c3708a7
(light, aws-m4pro-9) at c8dbb22.

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

* chore(cmux-next): regenerate action exports on the merged head

The textual merge of action-surfaces.json went stale; regenerated by
export-action-surfaces.sh on fleet step 3384e925ec431e91b8a90d09 at
986fed6.

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

* fix(cmux-next): name the sideSessions context fact for the control bridge

RegistryReachabilityTests runs every action with every named context fact;
the bridge's own name table lacked sideSessions, so Ask a Side Question…
stayed unavailable there (fleet suites at 47266ba).

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

* chore(cmux-next): ActionCatalog.xcstrings is base's plus Ask a Side Question…

The textual merge rewrote 27 of base's lines; this is base's catalog with
only action.agentPane.sideQuestion added (no key or value lost).

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

* chore(cmux-next): regenerate action exports on the merged head

export-action-surfaces.sh on fleet step 715bded4f5ecea4562b53200 at
000d2fd; the textual merge of the exports went stale again.

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

* chore(next): PR autofix at c6ec002

- regenerated plans/cmux-next/action-surfaces.json
- regenerated plans/cmux-next/actions.md

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38724924351

* next: move Ask a Side Question… to a follow-up; keep the Side sessions toggle

The palette action, its context bit, catalog strings and action exports
leave this PR (plans/cmux-next exports are frozen). The Debug Settings
toggle and the header-state plumbing that gates /btw stay, with a header
test for the off and on states.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: cmux-autofix[bot] <cmux-autofix[bot]@users.noreply.github.com>
…toolbar/no-top-bar

# Conflicts:
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneModel+Header.swift
@cursor

cursor Bot commented Oct 15, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot 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.

@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 15, 2026 15:15 — with GitHub Actions Inactive
@teamleaderleo
teamleaderleo merged commit edc99a4 into feat-cmux-next Oct 15, 2026
111 of 125 checks passed
@teamleaderleo
teamleaderleo deleted the op-next-toolbar/no-top-bar branch October 15, 2026 16:03
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Landed as edc99a4. Gate on 23695c6: fleet Release compile passed (step 6a36e90f), react-apps-check, the CmuxNextApp size cap and the crash ratchet green, freeze-check clean. In-app check on cosmic-gray on 52b49dc (stills above); every commit since is a base merge, and the one conflict (AgentPaneModel+Header.swift, with #20826) keeps the AgentPaneSideChat enum with base's new body. Review subagent: no blocking findings; the setting-on follow-ups are listed in the description. cmux-next checks shows only base reds (BuiltInAdBlockerSetting, BrowserFitFrameView type scale). The chrome.tabs.rowTools Debug toggle stays off by default.

teamleaderleo added a commit that referenced this pull request Nov 2, 2026
…32687)

* test(agent-pane): header icons have nothing behind them at rest, in the tab row too

Fails on base: the shell paints --agent-page-bg behind the tab-row tools,
and hover / toggled-on draw no pill.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-a2f53c60d9511e7ec747

* fix(agent-pane): no background behind the header's top-right icons at rest

The chat shell painted the page color across the pane's tab row, so the
header tools sat on a band of it while the tabs beside them sat on the
row (since #20933; #25638 cleared html but not the shell). The shell now
paints the page color only below the row. The icon under the pointer
gets the hover pill, and a toggle whose panel is open (or a button whose
menu is open) gets the filled rounded square, as in Leo's reference.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-a2f53c60d9511e7ec747

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch was previously deployed

1 inactive deployment
cmux-tui-merge-tree — 23695c66 Deployed Oct 15, 2026 by teamleaderleo via publish the merge tree #1620
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.

2 participants