Skip to content

composer: the account's Cloud machines in the machine list, with Resume and Open - #26013

Merged
teamleaderleo merged 1 commit into
feat-cmux-nextfrom
lane/p0-machines-cloud-inventory-picker
Oct 27, 2026
Merged

teamleaderleo merged 1 commit into
feat-cmux-nextfrom
lane/p0-machines-cloud-inventory-picker

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator

Leo, 2026-10-26: "the dropdown should show the states of stuff when you've done the acp things or any kind of connectivity."

Replaces draft #25305, built on #25955's structure. #25955 made the composer's machine list show every peer the local acpmux reports, with its state. A Cloud machine the local acpmux has no link to, a paused one for example, still didn't appear. This PR adds those machines from the app's own list (#26011, cloudMachine.list).

The native methods landed in #26011.

What changes

For a new chat, both the environment picker (previews on) and the plain Computer menu (previews off) now list the account's Cloud machines that acpmux doesn't list.

  • Where they go: in Cloud and VMs, after the connected machines.
  • Labels: each row shows the machine's stage: "Paused · Resume", "Open" or "Starting…".
  • Matching: a machine acpmux already lists under the same name keeps acpmux's row and its live state, so nothing shows twice.
  • Picking: a pick resumes a paused machine (cloudMachine.resume) or opens it (cloudMachine.open). It doesn't move the chat, and the rows take no ⌥⌘ digit.
  • Refresh: the app's list is read again when the list opens and every 5 s while it's open, on composer: list every machine acpmux knows in the environment picker #25955's useMachineRefresh timer. That timer stops when the list closes. Only one request runs at a time.
  • Scope: a started chat's picker is unchanged.
  • Wiring: ComposerContext reads the list from a small store (cloudMachines.ts, useSyncExternalStore), so the composer and the New Tab page get it without new props through Composer or NewTabScreen.

The draft's other webview parts aren't taken:

  • Update and Log in actions: acpmux sends no needsLogin, and the automatic peer update already handles outdated peers.
  • "Pair with a ticket…" and "Ask an agent to set it up" rows: they belong to other lanes (Connect Phone…, Add machine…).
  • The status-pill restyle: composer: list every machine acpmux knows in the environment picker #25955 settled the row's look.
  • Native and peer row keys: not needed, because the new rows have their own cloud-machine: ids.

Before / after

Gallery renders, Chromium on Linux, at 4cb8cc2. The "before" is agent-pane.composer-context/environment-picker and /computer-menu, which have no account list, as on base. The "after" is the same machines plus three account machines: paused, ready and booting.

Before After
Environment picker, previews on, dark before environment-picker dark after environment-picker dark
Environment picker, previews on, light before environment-picker light after environment-picker light
Plain Computer menu, previews off, dark before computer-menu dark after computer-menu dark
Plain Computer menu, previews off, light before computer-menu light after computer-menu light

Tests

test/environment-picker-cloud-machines.test.tsx, 11 tests:

  • reading the reply, and refusing a signed-out or not-loaded list;
  • matching with acpmux peers by name;
  • an old Cloud chat's host row giving way to the account's machine of that name, so a paused machine resumes instead of starting a chat;
  • resume or open, then a fresh list read, even when a read was already in flight;
  • the picker's rows: section, labels, not greyed, no digit, and a pick runs the machine's action without moving the chat;
  • the plain menu's rows, and its default path reading the app's list as it opens;
  • a started chat showing none;
  • the default path through the page bridge (cloudMachine.list, then cloudMachine.resume on a click).

On Linux at 8c7cc71 (rebased over #25644): this suite, environment-picker, composer-location-row-new-chat-only and new-tab-saved-environments all pass (72 pass, 0 fail), along with tsc, vp fmt --check and oxlint.

Review (Codex gpt-6-astra xhigh):

  • Round 1: four findings.
    • Fixed: name-only matching, and a fresh list read after an action.
    • Already handled: the plain menu's default refresh. It already ran through the shared onOpen; a test now covers it.
    • Kept as designed: rows only when onProject is set. Without it the strip is read-only and nothing can be picked.
  • Round 2: one finding, the old Cloud chat's host row, fixed.
  • Round 3: SHIP at 4921d6e.
  • After the rebase over composer: make a started chat's environment chip actionable #25644: SHIP at 8c7cc71.

Risk

Low. This is a small, contained machine-list change: new rows only for a new chat, and a pick runs an existing app action that the app validates again.

Gallery: agent-pane.composer-context/environment-picker-cloud-machines, agent-pane.composer-context/computer-menu-cloud-machines

Agent session: agent session

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 8c7cc71: 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=pr26013 -f ref=lane/p0-machines-cloud-inventory-picker -f platform=macos -f backend_mode=local

Unclear: web / react-apps-check failed: no known signature; failed step: Check webview test shards. This PR merged before its CI finished: fix forward on main.

CI failed on 8c7cc715ba (run 40477861794 attempt 1): 3 code, 1 unknown.

Job Verdict Why
web / react-apps-base-check (3) code a web test failed
web / react-apps-base-check (1) code a web test failed
web / react-apps-base-check (4) code a web test failed
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Failures:

  • seen on other PRs accent-glass-invariants.test.ts no orange or system accent and no opaque glass on 2294 gallery stages: failed (job)
  • seen on other PRs agent-pane-agents-pill.test.ts by default the running agents sit in the tray above the composer, not in the transcript: failed (job)
  • seen on other PRs agent-pane-bottom-stack.test.ts in a short pane the transcript keeps room and the queue scrolls inside its height: failed (job)
  • seen on other PRs agent-pane-older-rows-fade.test.ts Reduce Motion draws rows of an older page in full ink at once: failed (job)
  • seen on other PRs agent-pane-queue-scroll-bottom.test.ts chromium > a prompt the fold hides, run elsewhere, leaves no room as the stack shrinks, opens and cl...: failed (job)
  • seen on other PRs agent-pane-queue-scroll-bottom.test.ts webkit > the queue opened, the view scrolled to its end shows the last row whole, and it stays: failed (job)
  • seen on other PRs agent-pane-queue-scroll-bottom.test.ts webkit > the queue closed at the latest row keeps the last row on the stack, with no room that glide...: failed (job)
  • seen on other PRs agent-pane-queue-scroll-bottom.test.ts webkit > a prompt the fold hides, run elsewhere, leaves no room as the stack shrinks, opens and clos...: failed (job)
  • seen on other PRs agent-pane-background-tasks.test.ts the summary card lists the chat's background tasks: running ones first, the finished folded: failed (job)
  • seen on other PRs agent-pane-hairline-focus.test.ts composer at 1x: focus is the resting hairline a step brighter, no ring: failed (job)
  • ... 14 more in the job logs
Matched log lines
web / react-apps-base-check (3): (fail) no orange or system accent and no opaque glass on 2294 gallery stages [473708.58ms]
web / react-apps-base-check (1): (fail) the summary card lists the chat's background tasks: running ones first, the finished folded [1025.67ms]
web / react-apps-base-check (4): (fail) only page.css imports the page's sheets [23.24ms]

Not re-run automatically: web / react-apps-base-check (3), web / react-apps-base-check (1), web / react-apps-base-check (4), 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); no finished base run on 8711a8c to compare; do not merge until green; see lane-rules
red: web / Web status; NEW: green on the base 8711a8c; do not merge until green; see lane-rules
red: web / react-apps-base-check (1); no finished base run on 8711a8c to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (3); no finished base run on 8711a8c to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (4); no finished base run on 8711a8c to compare; do not merge until green; see lane-rules
red: web / react-apps-check; no finished base run on 8711a8c to compare; do not merge until green; see lane-rules

Tour of 8c7cc715ba (run): no media. The tour did not run: only webview code changed (7 path(s)), which the gallery advisory run checks in Linux Chromium on the pull request (its artifact holds any captures); add the media-tour-mac label, then re-add media-tour, to tour it on a Mac.

Gallery before/after for 8c7cc71: the capture produced no images (run).

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 27, 2026
@blacksmith-sh

blacksmith-sh Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Found 8 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp60kwdtqv/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmpsuos825q/summary-fail.json (live):/summary-fail.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
convention violations found (ERROR lines above)./
convention violations found (ERROR lines above).
View Logs
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)/
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)
View Logs

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

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

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

@cursor

cursor Bot commented Oct 27, 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

Copy link
Copy Markdown
Collaborator Author

cmux-next guards / nightly-guards / workflow-guard-tests / release-notary is red on 12 of 18 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
teamleaderleo force-pushed the lane/p0-machines-cloud-inventory-picker branch from e87e612 to 4921d6e Compare October 27, 2026 08:26
…me and Open

The environment picker and the plain Computer menu (cmux#25955) list only
the peers acpmux reports, so a paused Cloud machine, or one this Mac's
acpmux never linked, was missing. A new chat's list now also reads the
app's list (cloudMachine.list, cmux#26011) as it opens and every 5 s while
open, and adds each machine acpmux does not list as a peer to Cloud and
VMs with its stage: "Paused · Resume", "Open", "Starting…". A pick
resumes a paused machine or opens it; no chat moves, and these rows take
no ⌥⌘ digit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6
@teamleaderleo
teamleaderleo force-pushed the lane/p0-machines-cloud-inventory-picker branch from 4921d6e to 8c7cc71 Compare October 27, 2026 09:02
@cursor

cursor Bot commented Oct 27, 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 merged commit 7d6a474 into feat-cmux-next Oct 27, 2026
210 of 217 checks passed
@teamleaderleo
teamleaderleo deleted the lane/p0-machines-cloud-inventory-picker branch October 27, 2026 09:26
@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 8c7cc715 Deployed Oct 27, 2026 by teamleaderleo via wait for same-key tree publisher #63390
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant