Skip to content

Plus menu: one New Cloud VM item that opens the New Machine sheet - #11603

Merged
lawrencecchen merged 1 commit into
mainfrom
feat-plus-menu-new-cloud-vm
Sep 2, 2026
Merged

lawrencecchen merged 1 commit into
mainfrom
feat-plus-menu-new-cloud-vm

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented Sep 2, 2026 •

Copy link
Copy Markdown
Contributor

The + dropdown (and the cloud button right-click menu, which shares the same builder) listed Open Cloud VM, Fork, Checkpoint, Restore, and an Advanced submenu. It now shows a single "New Cloud VM" row that runs NewMachineSheetPresenter.presentNewMachineFetchingPlan, the same path as the Machines panel + button and the command palette.

The per-VM commands (fork, checkpoint, restore, status, ports, promote, tools, handoff) remain in the command palette. The unused command.cloudVM.advanced.title string is removed; command.cloudVM.new.title is added in English and Japanese.

https://claude.ai/code/session_012DskPjbscqPLLLDEnz1WBS


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


Summary by cubic

The + dropdown and cloud button right-click menu now show a single "New Cloud VM" item instead of the Open, Fork, Checkpoint, Restore, and Advanced submenu entries. Selecting it opens the New Machine sheet via the same NewMachineSheetPresenter path used by the Machines panel + button and command palette.

Per-VM commands (fork, checkpoint, restore, status, ports, promote, tools, handoff) remain available in the command palette, and the Advanced menu state for the cloud button is removed along with its unused command.cloudVM.advanced.title string. Adds the command.cloudVM.new.title string in English and Japanese.

Written for commit b0d51f1. Summary will update on new commits.

Review in cubic

The + dropdown and the cloud button right-click menu shared one builder
that listed Open, Fork, Checkpoint, Restore, and an Advanced submenu. It
now shows a single "New Cloud VM" row, which runs the same
NewMachineSheetPresenter path as the Machines panel + button and the
command palette. The per-VM commands stay reachable from the palette.

Claude-Session: https://claude.ai/code/session_012DskPjbscqPLLLDEnz1WBS
@vercel

vercel Bot commented Sep 2, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
cmux166 Ready Ready Preview Sep 3, 2026 7:15am UTC
cmux41 Ready Ready Preview Sep 3, 2026 7:15am UTC

@cursor

cursor Bot commented Sep 2, 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 Sep 2, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 4 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 10 included reviews currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Team

Run ID: dcdc2e3d-aa05-45b4-8573-923a1af2ec0b

📥 Commits

Reviewing files that changed from the base of the PR and between 5383cb9 and b0d51f1.

📒 Files selected for processing (3)
  • Resources/Localizable.xcstrings
  • Sources/Update/TitlebarCloudVMButton.swift
  • cmuxTests/CmuxConfigNewWorkspaceMenuTests.swift

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 Sep 2, 2026

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@lawrencecchen
lawrencecchen merged commit 9778ac7 into main Sep 2, 2026
9 of 11 checks passed
@lawrencecchen
lawrencecchen deleted the feat-plus-menu-new-cloud-vm branch September 2, 2026 09:46
lawrencecchen added a commit to JacobZwang/cmux that referenced this pull request Sep 2, 2026
main added CloudTreeNode.Kind.pendingMachine (manaflow-ai#11603-era machine create
placeholder) while this branch added isCompactableGroup; the merge left the
new case out of the switch and the build failed.

Claude-Session: https://claude.ai/code/session_017SYRh8isujtDXJPoCg2GU5
lawrencecchen added a commit that referenced this pull request Sep 2, 2026
…P modal on private addresses (#11626)

* Heal the VPC members rule on reuse; copyable machine IPs in the sidebar

The members-reach-each-other rule (all ports — it carries the whole
feature) is created with the VPC, but create-time rules can be deleted
out of band. ensureNetwork now verifies it on every reuse and re-creates
it when missing, best-effort so a transient listing failure never blocks
a create.

Machines record their private-network addresses in providerMetadata at
create; GET /api/vm returns them (`address: {ipv4, ipv6}`), the socket
vm.list payload passes them through, and the sidebar machine menu gains
"Copy IP Address" (v4 preferred, v6 fallback; hidden for machines with no
private address). Machines created before address recording learn theirs
on the next attach — the driver already reads vm.data() there, and the
workflow merges what it learned into the row.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Make the cloud tree context menu actually dispatch

Every item in the cloud tree's context menu rendered but no click ever
ran: the item's action selector was `perform(_:)`, which compiles to
`perform:` and collides with NSObject's perform machinery, so AppKit
never delivered the click to the subclass. Rename the selector to
`execute` — the shape SidebarRowMenuActionItem proved — and present the
menu per-event through menu(for:) with autoenablesItems=false, matching
every working cmux menu instead of the persistent-menu + delegate path.

Debug probes (menu.build / menu.execute / copyToPasteboard) stay in:
they are what located this, and the next menu regression should be one
log read away.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Skip the plain-HTTP warning for private-network addresses

The modal's rationale — traffic can be read or modified on the network —
is about the public Internet; traffic to RFC 1918, link-local, and IPv6
unique-local literals never crosses it, and cmux Cloud machines live at
exactly those addresses (their VPC ULAs, reached through the user's
WireGuard tunnel, which encrypts the path anyway). Warning on every
http://10.x panel trains people to click through the one dialog that
matters on public sites.

Only address literals qualify — a NAME is never private, so DNS cannot
smuggle a public host past the warning.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Cloud sidebar: workspaces-first, port links, .internal hostnames, tab focus

Sidebar
- Hide the Terminals pool unless a terminal belongs to no workspace
  (orphans only) — workspaces are the machine's face now, terminals
  already show under the workspace that has them.
- Ports section: one row per listening port, titled as a scheme-free
  underlined link (VS Code's forwarded-ports look) — host:port or
  <machine>.internal:port when the machine has a private address.
  Click opens it as a browser pane; the row's menu copies the full link.
  Workspace-tab browsers that happen to hit a localhost port are
  excluded (already shown under their workspace; would otherwise
  double-list).
- VS Code-style folder-chain compaction: a group whose only child is
  itself a container folds into one row ("Workspaces / workspace-1")
  instead of two. Only pure organizational groups fold; machines never
  do, since they carry status and actions no group row has.
- Workspace titles show the workspace's own name, never the machine's
  raw provider VM id as a prefix — `resolvedMachineName` reads the
  friendly label everywhere a machine name appears in user-facing text
  (progress labels, compound workspace titles).
- A terminal opens as a tab, not a new split column, and clicking a
  sidebar row now explicitly selects that tab (`SurfacePaneFactory.focus`
  after every project(...)) instead of relying on requestedFocus alone.

.internal hostnames
- New shared `CmuxInternalHostnames` (CmuxFoundation, used by both the
  app and the CLI so the slug algorithm can't drift): builds
  `<label-or-id>.internal` and manages a markered block in /etc/hosts.
- `cmux vpn hosts` writes every machine's name into /etc/hosts (managed
  block; the user's own entries untouched); `vpn up` runs it
  automatically, `vpn revoke` clears the block since every name it
  published is unreachable the moment the tunnel is gone.

Other
- Tabs close without a confirmation prompt (cmux.json
  warnBeforeClosingTab/XButton) — the terminal survives in the sidebar
  regardless, so the prompt was friction without a safety benefit.
- Folds in the in-progress titlebar refactor: TitlebarNewWorkspaceCloudSplitButton
  and its cloud-VM dropdown menu are gone, replaced by a plain
  TitlebarControlButton with a right-click context menu
  (showNewWorkspaceContextMenu); MinimalModeSidebarControlActionSlot
  drops the now-unused .cloudVM case.

7 new CmuxInternalHostnames tests + 2 new Freestyle provider tests,
all green; full Debug build clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Cover pendingMachine in the cloud tree compaction switch

main added CloudTreeNode.Kind.pendingMachine (#11603-era machine create
placeholder) while this branch added isCompactableGroup; the merge left the
new case out of the switch and the build failed.

Claude-Session: https://claude.ai/code/session_017SYRh8isujtDXJPoCg2GU5

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com>
rustybret pushed a commit to rustybret/bmux that referenced this pull request Sep 2, 2026
c8ec44d Cloud VPC follow-ups: copyable machine IPs, working tree menu, no HTTP modal on private addresses (manaflow-ai#11626)
cbda3b0 ci: land base-controlled CLA policy guard (manaflow-ai#11606)
40d1dc6 CLI: return notification ids and support scoped clear (manaflow-ai#10336)
d86d5f3 fix(relay): offload bounded filesystem actions (manaflow-ai#11568)
9778ac7 Plus menu: one New Cloud VM item that opens the New Machine sheet (manaflow-ai#11603)
392f83d fix(web): retire provider rows as destroyed in the Blaxel and E2B/Daytona migrations (manaflow-ai#11623)
c1ce87c Cloud: create machines in the background; Create returns control immediately (manaflow-ai#11397) (manaflow-ai#11421)

This branch was successfully deployed

2 active deployments
Preview – cmux41 — b0d51f1a Deployed Sep 3, 2026 by vercel[bot]
Preview – cmux166 — b0d51f1a Deployed Sep 3, 2026 by vercel[bot]
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