Skip to content

cmux next: chat ui parity pass (thoughts, header, thread details, side column, files) - #21315

Closed
lucasr1b wants to merge 259 commits into
feat-cmux-nextfrom
next-chat-ui
Closed

lucasr1b wants to merge 259 commits into
feat-cmux-nextfrom
next-chat-ui

Conversation

@lucasr1b

@lucasr1b lucasr1b commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator

update (2026-10-21): #22057 (files beside the chat) is merged into this branch, so this pr now carries the chat viewer too, with the latest feat-cmux-next. fixes from dogfooding the combined build:

  • render cards loaded nothing (blank, then "could not load the page"): newer webkit reports a new iframe's request as an empty url, and the render frame was allowed only into a nil or about:blank frame. AgentPaneNavigation now treats an empty url as blank. found with a diagnostic build: the frame's navigation reached the policy with target= empty and never reached the scheme handler.
  • the composer, pr dock and asks size from the pane like the transcript, so they stay centered under the chat with files open.
  • a new chat's first files open made the whole chat jump: files and the file viewer are lazy chunks with a null fallback (no column for a few frames while thread details had already closed), the old changes layout (chat at 44%) applied to the bare reviewing class, and closing thread details left a popover flag that revived it. the column now draws a shell while its chunk loads, the review layout waits for a panel, and closing clears both flags.
  • thread details has an x like files; files, a file and thread details are one 320 px column.

update (2026-10-20): merged feat-cmux-next again (27 conflicts, each ported onto the base's new structure, string tables regenerated, settings stamp from the helper) and lawrence's merge of #22058. the CmuxNextApp size cap passes: the new code lives in CmuxNextAgentPane, and the app target is 131 lines smaller than the base. new fix: a render guide queued with a prompt that gets withdrawn or replaced now waits for the next prompt instead of being lost (red test first, render-guide.test.ts). security pass on the whole diff: no findings, the #21760 fixes all still hold. greptile's four findings fixed red-first (render preview errors in all 21 locales; the header's terminal beside a panel opens a tab there even with new terminals opening workspaces; files search menu acts on the result; renders with bare body text grow). ci: our reds fixed (seven react compiler bailouts, a recap footer test, an extra settings stamp line); the rest is red on feat-cmux-next too (cmux-next checks, protocol contract, inventory, same-tree cmux-tui, defaults freshness, some react-apps-check suites).

update (2026-10-19): lawrence's #21760 review is addressed on this branch (#21760 merged into it before the review): nested fences stay code, only the live reply auto-runs (history waits for a click) with a hang watchdog, confirm strips show the whole payload with an origin label and hold one request at a time, openLink reports refusals, a render frame loads its document once and never navigates after (7b926b0, 6d1c37d, 5e754d7, red tests first). the trust note for #13742 covers the rest.

split out to keep this one reviewable: the chat viewer (files and changes beside the chat) is #22057, thread details site icons #22058 (stacked on this branch; lawrence merged it in on 2026-10-20), and the blank-workspace layout fix #22059 (against feat-cmux-next).


first pass at getting the agent chat closer to claude / codex / t3 / cursor / conductor, plus in-chat rendering (#21760 is folded in here). almost everything is behind a switch (debug settings, or ~/.config/cmux/agent-pane/layout.json for the web-only header bits), the parity bits are off by default. the render switches (live render, render guide, render kit, render preview, render expand, table scroll) and site icons are on by default. the ones without a switch are bug fixes.

what's in here

thoughts (debug settings → pages → thought style: brain)

  • thoughts, and the notes an agent writes between steps, become one quiet line: a brain icon and the thought's first line. click it and it reads "Thoughts" over the full text. works in finished turns (inside worked for) and while a turn runs.

cleaner transcript (browser preview only for now: ?mock&sleek)

  • softer prompt bubble, slimmer code block header, quieter edited-files card, softer inline code. not wired to debug settings yet, waiting on which ones we keep.

header

  • layout.json headerStyle: quiet (every tab kind as muted icons, no box, a divider before sources), expand (hovered icon slides open to its name), labels, tray, add / add-terminal (one + menu). split down lives in the … menu in these.
  • layout.json threadTitle: true: project / thread name at the top left (the project is a label). click the name to rename the tab in place (pane.rename). a chat without a project reads "no project".
  • with threadTitle on, summary becomes thread details: this mac's name, then open in (finder, vs code, cursor, zed, xcode, whichever are installed, real app icons, remembers the last pick, folder.openIn; the app side uses the tab's own folder, the page never names a path).

right side / panes (debug settings → panes)

  • agentChat.panelTabs: with a panel beside the chat, terminal and browser add a tab to it instead of another split, and the header keeps its tools in …
  • agentChat.sideColumn: ⌥⌘B (toggle right sidebar, a stub until now) shows/hides a column beside the chat. it opens as window tiles (terminal, browser, files, changes, new chat). this goes against the "no right sidebar" rule in pointers.md, so it's here to look at, not to ship.
  • agentChat.dockBesideTabs: a chat that shares its pane with other tabs docks left when files / changes / preview opens, like a lone chat does. without it the view takes a new column that fills the screen and scrolls the chat and its tabs out of view until you close it.

files page

  • search field (the session host's git.files.search under the tab's folder), refresh button, git-ignored files listed greyed out (on this mac only, never .git, capped at 500 per folder). the folder title is gone, the tab already names it.

in-chat rendering (debug settings → pages → agentPane.labs.liveRender, on by default)

  • an agent's html in a ```cmux-render block (or a render tool call) draws inside the chat as it streams. one sandboxed frame per block from the first token: markup and styles show as the agent writes, scripts run once the block is complete, never half-written.
  • it sits in the conversation like the rest of the reply: no card, no title bar, no run/stop, no full screen, no code view. full column width, grows to its content, uses the chat's own fonts and colors.
  • ```cmux-react blocks hold a component (function App()), mounted with pinned react 18.3.1 + babel standalone 7.26.4 once the block is complete.
  • pages can talk back through window.cmux: prefill, sendPrompt, openLink and copy all wait for a click in the pane (a quiet confirm line under the page), plus theme / onTheme and an in-memory state.
  • switched off, render cards behave exactly as before (run gate, card chrome).
  • agents draw on their own (agentPane.labs.renderGuide, on by default): a short note with the first prompt of each session (hidden prompt context, app connections only) says when a visual beats prose and how to lay it out. same idea as t3code's standing html_render line.
  • native styles (agentPane.labs.renderKit, on by default): a design layer in the frame before the first byte, so plain html looks like the app while it streams (type, tables, controls, stat tiles, segmented), cmux.chart for line / area / bar / donut charts in system colors, streamed elements fade in, data-cmux-prompt follow-up buttons, and a quiet "ask to fix" note when a page throws.
  • agents can check their page first: render_preview returns a png of the page drawn off screen in the real chat frame, with console errors and layout warnings (agentPane.labs.renderPreview). wide markdown tables scroll (tableScroll), renders open larger (renderExpand).
  • faster: renders start on fence open (not after the reveal smoother), one booted frame shell, react deps load in parallel when the fence opens (block close to drawn 700 ms to about 50 ms), quieter sizing.

chat labs (debug settings → pages → agentPane.labs.*, each off by default)

  • contextMeter: context ring next to the model picker, details on hover.
  • promptCollapse: prompts over 8 lines fold with show more; find opens them.
  • messageTimes: hover a prompt to see when it was sent.
  • codeWrap: one wrap choice for every code block, remembered.
  • planProgress: the running plan's current step and a thin bar above the composer.
  • shortcutsHelp: "keyboard shortcuts" in the chat menu, the pane's live bindings in groups.
  • precedence: a labs entry in layout.json wins, then the debug settings toggle, then the default.

transcript speed (no switch)

  • while a reply streams, rows it didn't touch keep their props, so the rest of the thread doesn't re-render. 2000 turns in chrome: 86 to 12 ms per frame (p50).

fixes (no switch)

  • the transcript's latest position was 16px short of the real bottom (rows draw below the thread's top padding but the scroll range didn't count it), so the newest text sat on the composer and a scroll to the end snapped back. it now ends at the bottom with 16px of room.
  • a prompt's floating copy showed for any focus in the row, so clicking edit put it on the prompt's corner. keyboard focus only now, never over the editor.
  • send with nothing to send has no hover and the arrow cursor.
  • chat summary no longer crashes the pane ("could not be drawn") when it opens: a hook ran after an early return.
  • the thread title's project label shows in full beside a short title (was "N…").
  • dev server only: pane render errors go to $TMPDIR/cmux-pane-errors.log (post only, same origin, 20 KB cap), since the web view keeps no console a session can read.
  • layout.json pointerCursor: true puts pointer cursors on the composer's controls (the field keeps the text cursor). arrow stays the default.

screenshots

Preview (in-chat render with native styles and charts)
Preview
Preview (it builds as the agent writes)
Preview
Preview (a real agent reply, drawn without being asked)
Preview
Preview (what render_preview hands back to the agent (real app, off screen))
Preview
Preview (light)
Preview
Preview (context ring)
Preview
Preview (long prompt folding)
Preview
Preview (prompt times)
Preview
Preview (keyboard shortcuts)
Preview

files beside the chat (was #22057, behind agentPane.labs.chatViewer, on)

  • the header's files (chat actions menu, or a pinned quick action) opens the chat's folder in a column on the right: folders open in place, .. goes up (never above the chat's folder), search across the folder, a file opens in the same column.
  • a path link in a reply shows the file there too, read through the app (link.readPath): the same checks as opening a path link today (deny list, agentPane.links.outsideRoots, a user gesture), text only, capped at 1 MiB. changes and a changed file's open work as before.
  • one panel on the right: opening files or a file closes thread details; while the viewer is open, thread details floats under its header button. below 820 px the column takes the transcript's place.
  • the files list and a file have one way out, an x at the end of their title row; escape still closes.

heads up

  • render cards run agent html without a click by default, in a sandboxed frame (scripts only, no same origin) that shares the pane's web process, so a busy loop in agent code can freeze the pane. that and the talk-back bridge are a trust change, so they go to Design and product calls (gallery: #15427), plus CI admin #13742 before this merges.
  • render_preview (mcp) lets the agent see a screenshot of its page before showing it; the rust side is only compiled by ci, so agents get it once a cmux binary with it is published.
  • not yet: the fast frame startup for the bundled app frame (small swift change; the dev frame has it).

verification

  • render + labs: focused bun tests each on their own (live-render, render-stream, render-fence, pane-error-endpoint, artifact-panel, chat-labs, chat-labs-b, labs-precedence, summary-card-open, ui-rules, pane-english...), chrome + webkit via playwright against the mock, every lab clicked through, render streaming sampled mid stream. two codex correctness passes and a subagent review, findings fixed. AgentPaneLabsTests added, not run locally.
  • web: typecheck, the new tests (thoughts, live notes, header add menu / tray / panel tabs, thread title, files page) and the existing transcript, header and copy tests pass locally. browser preview screenshots for the web parts.
  • swift: built and run in a tagged dev app many times; dogfooded by me. swift tests added (HeaderPanelTabsTests, AgentPaneThoughtStyleTests) but not run locally.
  • browser-lane suites (render-preview, render-kit-css, markdown-table) ran locally in chromium + webkit on 2026-10-20: 16 pass.
  • 2026-10-21 (combined branch): browser layout tests in chromium (CMUX_BROWSER_TESTS=1 bun test test/chat-viewer-layout.test.tsx): 12 pass; the 4 new-chat jump cases failed before the fix (transcript and composer 448 px apart for a frame). summary-card-open 7, chat-viewer 34, chat-files-view 7, render tests (incremental-markdown, render-stream, render-fence, live-render, page-reveal) 120, all pass. the empty-url render fix has a swift test (AgentPaneNavigationTests, ci) and was checked in the dev app.
  • not run locally: swift tests (ci), the full gate. the app compiles and runs locally (xcode 27.1; one upstream file needs a local Task<_, Never> annotation there, not part of this pr).

changelog

Added: Agent chats can show interactive pages that build as the agent writes them
Added: Files and files a chat links to open in a column beside the chat

(the other parity bits stay behind dev switches)

…hout a box

quiet: the tab icons with no group fill, muted, a hairline before sources.
expand: quiet, and the icon under the pointer slides open to its name
(still under reduce motion). layout.json headerStyle quiet|expand.
toggle right sidebar (opt-cmd-b, a stub until now) runs the focused chat's
new tab / hide tabs: a column of panes opens beside the chat and hides again,
closing nothing. the column starts as window tiles (terminal, browser, files,
changes, new chat), no text, a letter picks one. files and changes open in
the column's own pane (pane.action here:), not in a new split. off by
default; read at launch. dev: ?mock&newtab=surfaces, gallery new-tab/side-column.
it was bound once at launch, so turning agentChat.sideColumn on in a running
app left the shortcut reporting no right sidebar until a relaunch.
…ever over its editor

it showed for any focus inside the row, so clicking a prompt's edit put copy
on the prompt's corner.
…ader

summary becomes thread details: the chat's folder with open in (finder, vs
code, cursor, zed, xcode, whichever are installed; folder.openIn names no
path, the app uses the tab's own folder), the branch with ahead/behind and
base, and head's commit (a click copies it), above outputs and changes.
layout.json threadTitle puts project / title at the header's start: the
project opens new chat here in that folder, the title renames the tab in
place (pane.rename).
…crumb fixes

with panelTabs on, a tab an agent or the header opens beside a lone chat
moves into a column on its right instead of docking the chat left and taking
its pane (files, changes, preview). thread details' top is now menu rows:
where (machine, project or no project), open in <app> with the app's own
icon and a chevron for the rest (last pick remembered), branch, commit.
the breadcrumb's project keeps its width while the title is edited, shows a
folder icon, and reads no project (placeholder icon, not clickable) for a
chat in agent-home.
…cursors

open in's app icons come from the icon's own image at 64px (drawn into a
32px bitmap they were blurred on a grey tile). thread details' top is one
bordered group with hairlines between rows, one folder glyph per row. the
thread name shows a text cursor. layout.json pointerCursor puts pointer
cursors on the composer's controls (arrow stays the default).
…ursor

the field is a combobox (its @ and / menus), so the pointer rule caught it.
no container, no project (the header's breadcrumb has it), no branch or
commit: this mac by name with a computer glyph, then open in <app>.
…d details uses the location strip's computer glyph
…behind agentChat.dockBesideTabs

a chat sharing its pane with other tabs was not lone, so files (changes,
preview) took a new column; on a screen without columns it filled the window
and scrolled the chat and its tabs out of view until closed. with the switch
on such a chat docks left like a lone one, the view opens on its right and
the other tabs stay with it. the chat that asked docks, not the pane's first.
the header gets a refresh button and a search field (the session host's
git.files.search under the tab's folder, a flat list of matches while it
holds text, escape clears). on this mac a folder lists what git ignores too,
marked ignored and drawn at 45% (never .git, at most 500 per folder).
@coderabbitai

coderabbitai Bot commented Oct 17, 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: 8f271b5a-0fd5-4eeb-92e8-cd77f6e22e97

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 17, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 94aeeaa: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr21315 -f ref=next-chat-ui -f platform=macos -f backend_mode=local

Unclear: web / react-apps-check (3) failed: no known signature; failed step: Build the web bundles.

CI failed on 94aeeaaeb5 (run 39513417454 attempt 1): 5 unknown.
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped.

Job Verdict Why
web / react-apps-check (3) unknown no known signature; failed step: Build the web bundles
web / react-apps-check (1) unknown no known signature; failed step: Build the web bundles
web / react-apps-check (4) unknown no known signature; failed step: Build the web bundles
web / react-apps-check (2) unknown no known signature; failed step: Build the web bundles
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Not re-run automatically: web / react-apps-check (3), web / react-apps-check (1), web / react-apps-check (4), web / react-apps-check (2), web / react-apps-check are not machine failures.

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.

red: cmux-next checks (god files, concurrency, crash safety, l10n); NEW: red check: Tier routing (+1 more) is not red on the base b4841f0; do not merge until green; see lane-rules
red: web / Web status; NEW: green on the base b4841f0; do not merge until green; see lane-rules
red: web / react-apps-check; no finished base run on b4841f0 to compare; do not merge until green; see lane-rules
red: web / react-apps-check (1); no finished base run on b4841f0 to compare; do not merge until green; see lane-rules
red: web / react-apps-check (2); no finished base run on b4841f0 to compare; do not merge until green; see lane-rules
red: web / react-apps-check (3); no finished base run on b4841f0 to compare; do not merge until green; see lane-rules
red: web / react-apps-check (4); no finished base run on b4841f0 to compare; do not merge until green; see lane-rules

CI fast guards failed on 94aeeaaeb5 (https://github.com/manaflow-ai/cmux/actions/runs/39513417454). It does not block the merge; a red guard merged into main breaks it for every open PR.
The log named no failed step; see the run.

Agents: python3 scripts/ci/guard_attribution.py fix applies the mechanical fixes locally.

@github-actions

github-actions Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

CI fast guards failed on 97ac86def0 (https://github.com/manaflow-ai/cmux/actions/runs/39184137497). It does not block the merge; a red guard merged into main breaks it for every open PR.
The log named no failed step; see the run.

Agents: python3 scripts/ci/guard_attribution.py fix applies the mechanical fixes locally. This comment is updated in place on each push.

@teamleaderleo

Copy link
Copy Markdown
Collaborator

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

…e: and rename refusals, thread details behind threadTitle

- files search keeps the host's paths (relative to the folder searched) and
  only drops ones that leave it; a tab in a repo subfolder or behind a
  symlink found nothing before.
- the ignored scan skips a listing git cut short, uses the entry's own type
  (a symlink is a file), leaves empty folders out and runs off the main actor.
- opt-cmd-b toggles the focused chat, else the nearest chat on the focused
  pane's left by position, never a new tab page or dictionary order.
- here: only from the side column's tiles page and only files/changes; an
  unknown action, no folder or a remote chat answers a failure.
- pane.rename answers the tab's refusal so the page rolls back.
- thread details (label and rows) only with layout.json threadTitle; today's
  chat summary otherwise. open in uses one placeholder string; borders=none
  drops its rules.
- the title field ignores return/escape inside an ime composition and never
  commits twice; files search waits 120ms after typing; the floating copy is
  out of the tab order while a prompt is edited; side column help text.
- tests: files search (web), request decoding and here: refusal, search path
  filter (swift).
@lucasr1b

Copy link
Copy Markdown
Collaborator Author

correctness review (review subagent, correctness first) on the branch's own changes. no blockers: nothing in the new page methods reaches a path outside the chat's folder or an app outside the fixed list. findings and what happened to each, fixed in 4b1a92c:

P1

  1. files search mapped the host's paths against the repo root, but git.files.search returns them relative to the folder searched. a tab in a repo subfolder (or behind a symlink) found nothing, and /repo/a could map a/b.ts to the wrong file. fixed: paths pass as returned, only absolute / .. / . / empty / NUL are dropped; open checks again. swift test added.
  2. renaming the summary button to "thread details" would break agent-pane-background-tasks.test.ts (ci browser lane) and a gallery play. fixed differently: thread details (label and rows) now only shows with layout.json threadTitle, so the default is today's "chat summary" and nothing else changes for anyone.

P2
3. the ignored-files scan could mark tracked files ignored past git's 2000-entry cut, showed empty folders, followed symlinks, and ran on the main actor. fixed: skipped when git's listing is truncated, uses the entry's own type, skips empty folders, runs off the main actor.
4. the title field committed mid-IME and could commit twice on blur. fixed (isComposing guard, settled ref).
5. ⌥⌘B picked a chat in dictionary order and did nothing from the column's tiles page. fixed: focused chat, else the nearest chat on the focused pane's left by position.
6. "open in" concatenated two strings. fixed: one summary.openInApp string with {app}, 21 locales.
7. thread details hairlines ignored borders = none. fixed.
8. files search ran on every keystroke. fixed: 120ms one-shot wait; refresh searches at once. web test added.
9. the floating copy stayed in the tab order while a prompt was edited. fixed (visibility: hidden).
10. here: answered ran for unknown actions / no folder, any new tab page could call it, files offered for remote chats. fixed: tiles page only (surfaces), files / changes only, failure for unknown, no folder or a non-local chat. swift test added.
11. pane.rename answered ok even when rename tab refused. fixed: the refusal reaches the page, which puts the old name back. whether a tab rename also updates the session title the header reads is not verified yet (needs a check in a dev app).
12. stale "relaunch to apply" help text on the side column switch. fixed.
13. test gaps: added web files-search tests and swift tests for pane.rename / folder.openIn decoding and refusals, here: refused on a chat, and the search path filter. still missing: a test for the transcript bottom inset (the follow tests are browser-lane, skipped locally) and ChatColumnPlacement.resolve(sharing:).

verification after the fixes: typecheck clean, web tests for files page / files search / thread title / transcript copy / header styles pass locally, strings check clean, the tagged app builds and launches. swift tests are written but not run locally (ci).

…r tray are fieldsets, the tiles take their letters on the buttons
@lucasr1b

Copy link
Copy Markdown
Collaborator Author

ran the ci-mirroring checks locally on 4b1a92c and fixed what was ours in the next commit:

  • type scale: the slim code header used a raw 12px, now var(--text-detail).
  • lint (vp check fails on warnings): the side column tiles and the header tray used role="group" divs, now fieldsets; the tiles take their letter keys on the buttons.

still red locally but not from this branch (the branch doesn't touch these files, they match feat-cmux-next):

  • acpmux-protocol:check: codegen drift in protocol/generated (types.ts, methods.ts).
  • check-l10n.sh: sidebar.doc.refused.other missing 19 locales in CmuxNextSidebar.
  • check-no-godfiles.sh: daemon / cloud files over their caps, none of them touched here.

passing locally: concurrency, crash safety, layers, system blue, text focus, browser test lanes, formatting, typecheck, the touched web tests.

…300px

a screenshot the agent saves in a temp folder used to draw as a locked name card
with an open button. it now follows the outside-files setting: open (default)
shows it inline, ask first shows a load image button, show as text keeps the card.
deny-listed names stay refused. reply and tool images cap at 300px wide.
@lucasr1b

Copy link
Copy Markdown
Collaborator Author

pushed 2a13f8d: reply images outside the chat's folders (like a screenshot the agent saves in a temp folder) now show inline instead of the locked name card. they follow agentPane.links.outsideRoots: open (default) shows at once, ask first shows a load image button, show as text keeps the card. deny-listed names stay refused. reply and tool images cap at 300px wide.

heads up: this loosens decision d5 (outside images used to always be refused), so it's a trust policy change and should get a yes before merge. the image is read by the host and handed to the page as a data url, so nothing leaves the machine.

web test added (red on the old code, green now). swift tests added in AgentPaneReplyImageOutsideTests, not run locally (no build host here, disk too low for a local build), leaving them to ci.

@blacksmith-sh

This comment has been minimized.

…arity switches

all behind labs in agent-pane/layout.json, off by default:
- liveRender: render cards run on their own with stop, window.cmux bridge
  (prefill, send with a confirm strip, copy, open link with confirm, theme,
  state), cmux-react fences, and a dev server render frame with its own policy
- contextMeter, promptCollapse, copyTurn, messageTimes, codeWrap
@teamleaderleo

Copy link
Copy Markdown
Collaborator

cmux-next / cmux-next checks (god files, concurrency, crash safety, l10n) › Browser chrome icons is red on 9 of 9 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator

cmux-next / cmux-next checks (god files, concurrency, crash safety, l10n) › Capability texts never say update the app is red on 9 of 9 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator

cmux-next / cmux-next checks (god files, concurrency, crash safety, l10n) › Checks job structure is red on 9 of 9 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator

cmux-next / cmux-next checks (god files, concurrency, crash safety, l10n) › Main-thread concurrency is red on 9 of 9 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

lucasr1b and others added 14 commits October 21, 2026 08:02
Resolves the 8 conflicts against 1e98159:
- The guarded fetch types moved to CmuxNextRemoteFetch (3956b17): the
  branch's allowsTruncation and finalURL now live on RemoteFetchRequest and
  RemoteFetchResponse there, and the source-icon files and tests import the
  new module.
- FaviconLoader keeps ImageIO and CmuxNextCompat with CmuxNextRemoteFetch.
- Agent pane tunables list both sides' entries.
- acpmux: RowFrame forwards sessionId to the row component; question records,
  subagent rows and the in-flight title come from the base next to the
  branch's render-guide queue and notes between steps; SubagentClockContext
  wraps the branch's transcript and summary card; the subagent pill names the
  chat with sessionTitle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Markdown keeps the branch's received-render fences and adds the base's
away blocks (a block that streamed in while the chat was hidden never enters).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… the files viewer joins the chat pr

conflicts: localizable.xcstrings (kept every key from both sides), markdown.tsx (kept the render engine's revealed and received-render blocks, added feat-cmux-next's away blocks and cached fence check). dropped an unused chatLook memo dependency.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…es viewer's strings

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he transcript, so they stay centered with the files column open (lucas)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… chat's first files open moves the chat once, thread details has an x (red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…flag too, the viewer column draws a shell while its chunk loads, and review layout waits for a panel (lucas)

the new-chat glitch: files and the file viewer are lazy chunks with a null fallback, so the first open had no panel for a few frames while thread details had already closed and the old changes layout (chat at 44%) applied to the bare reviewing class.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s, a file and thread details are one 320 px column (lucas)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… is an empty url (red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…mpty url, as newer webkit reports a new frame (every render card stayed blank)

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

Copy link
Copy Markdown
Collaborator Author

@greptile review

lucasr1b and others added 2 commits October 21, 2026 12:00
…scriptor that resolves into a denied place, is not read (red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…riptor's real path against the roots and deny list before reading (security pass p2, check-then-open race)

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

Copy link
Copy Markdown
Collaborator Author

@greptile review

conflicts in app.tsx, turns.ts, model.ts, chatfind.ts, the strings catalog and the pane build script, each keeping both sides: the render engine, brain thought notes, the files viewer and thread details next to upstream's session cards, incoming messages, agent-pair resume and the activity line. a final reply followed by a started-chat card no longer turns into a thought note (new test in transcript-live-notes).

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

Copy link
Copy Markdown
Collaborator Author

@greptile review

@teamleaderleo

Copy link
Copy Markdown
Collaborator

cmux-next / cmux-next fast tier is red on 15 of 15 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator

cmux-next / cmux-next web bundles (source-keyed cache) is red on 9 of 15 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator

CI / web / react-apps-check (1) is red on 6 of 10 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator

CI / web / react-apps-check (4) is red on 6 of 10 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

This branch was previously deployed

3 inactive (1 outdated) deployments
ci-routing-agent — 94aeeaae Deployed Oct 20, 2026 by github-actions[bot]
cmux-tui-merge-tree — 94aeeaae Deployed Oct 20, 2026 by lucasr1b
artifacts — 11205b9b Deployed Oct 20, 2026 by lucasr1b
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.

3 participants