Skip to content

Add cmux vm command aliases - #6375

Closed
lawrencecchen wants to merge 9225 commits into
mainfrom
feat-vm-command-aliases
Closed

lawrencecchen wants to merge 9225 commits into
mainfrom
feat-vm-command-aliases

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented Jun 18, 2026 •

Copy link
Copy Markdown
Contributor

Summary:

  • route cmux vm create through the existing vm new implementation
  • add connect for vm ssh and remove for vm rm, while keeping existing aliases
  • document aliases separately from defaults and keep examples on canonical commands

Verification:

  • xcodebuild -project cmux.xcodeproj -scheme cmux-unit -configuration Debug -destination 'platform=macOS' -derivedDataPath /tmp/cmux-vm-aliases test -only-testing:cmuxTests/CLINotifyProcessIntegrationRegressionTests/testVMCreateAliasDispatchesThroughVMCreate -only-testing:cmuxTests/CLINotifyProcessIntegrationRegressionTests/testVMRemoveAliasDispatchesThroughVMDestroy -only-testing:cmuxTests/CLINotifyProcessIntegrationRegressionTests/testVMConnectAliasOpensManagedWorkspaceThroughSharedSSHPath\n- git diff --check\n- jq empty Resources/Localizable.xcstrings\n- cmux vm --help from the tagged app shows canonical commands plus the alias block\n\nDogfood:\n- tagged build: http://127.0.0.1:17320/vmalias\n

View with Codesmith Autofix with Codesmith
Need help on this PR? Tag /codesmith with what you need. Autofix is disabled.


Note

Low Risk
CLI parsing and help-text only; aliases call existing VM create/destroy/SSH paths with contract tests covering dispatch.

Overview
Expands cmux vm (and cloud) with familiar spellings that dispatch to the same handlers as today’s canonical verbs, and reshapes help/docs so scripts and examples steer toward the short names.

Aliases: create → new, list → ls, shell / attach / connect → managed SSH via the shared vmOpenShell path (same as ssh), and remove → rm alongside destroy / delete. Shell/attach/connect usage text now points at cmux vm ssh <id> instead of shell.

Docs & help: Top-level usage lines drop shell/attach from the primary subcommand list; a separate Aliases block lists mappings and says to prefer new, ls, ssh, and rm. docs/cli-contract.md and help probes match that layout.

Tests: Integration tests assert vm create → vm.create, vm remove → vm.destroy, and vm connect → the same workspace RPC sequence as vm ssh.

Reviewed by Cursor Bugbot for commit b81062f. Bugbot is set up for automated code reviews on this repo. Configure here.


Summary by cubic

Adds familiar cmux vm aliases (create→new, connect→ssh, remove→rm) and standardizes help/docs on canonical commands.

Since the last summary the branch has absorbed many unrelated main-branch changes, so the diff is now dominated by CI, release, and review-tooling files; the vm alias behavior is unchanged. Also documents the vm scp info command.

New Features

  • Aliases: create→new, list→ls, shell/attach/connect→ssh, remove/delete/destroy→rm.
  • cmux vm --help shows canonical commands (new, ls, rm, exec, ssh, ssh-info) plus an alias block; shell/attach are dropped from primary usage.
  • Integration tests verify create→vm.create, remove→vm.destroy, and connect→the same RPC path as ssh.

Written for commit 01faafe. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • New Features
    • Added vm connect as an alias for interactive SSH access (alongside shell and attach).
    • Expanded VM removal commands to support vm rm aliases for remove/destroy/delete.
  • Bug Fixes
    • Improved VM command parsing/usage output consistency, including clearer help when vmId is missing and standardized unknown-command help.
  • Documentation
    • Updated CLI help text and the CLI contract to reflect the canonical VM/cloud subcommand and alias set.
  • Tests
    • Added integration regression tests covering vm create, vm remove, and vm connect alias dispatch behavior.

@vercel

ghost commented Jun 18, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment Jun 19, 2026 2:17am
cmux-staging Building Building Preview, Comment Jun 19, 2026 2:17am

@coderabbitai

ghost commented Jun 18, 2026 •

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Review was skipped as selected files did not have any reviewable changes.

💤 Files selected but had no reviewable changes (1)
  • CLI/cmux.swift
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 9867daa3-5521-4f20-b6e4-9bf2c5df52c0

📥 Commits

Reviewing files that changed from the base of the PR and between 7e0da6b and 01faafe.

📒 Files selected for processing (1)
  • CLI/cmux.swift

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
📝 Walkthrough

Walkthrough

CLI command dispatch in cmux.swift is extended to accept connect as an alias for vm ssh and remove/destroy/delete as aliases for vm rm. Help and usage strings throughout are updated to use the canonical new|ls|rm|exec|ssh|ssh-info subcommand set with an explicit alias table. docs/cli-contract.md and the vm help block are aligned to match. Three regression tests covering the new alias paths are added.

Changes

VM alias normalization

Layer / File(s) Summary
Alias dispatch cases
CLI/cmux.swift
connect added to the shell/attach dispatch case with updated missing-id error message; remove, destroy, delete added to the rm dispatch case.
Help/usage text updates
CLI/cmux.swift
Default usage rewritten with canonical subcommands and alias mapping. vm/cloud synopsis line, detailed vm help, new Aliases: subsection, and global command list entry all updated to reflect canonical ssh/ssh-info names and document alias routing.
CLI contract documentation
docs/cli-contract.md
VM subcommands table refactored to enumerate canonical commands with aliases. No-socket help probe expectations updated to match new canonical subcommand set.
Alias regression tests
cmuxTests/VMSSHCommandTests.swift
testVMCreateAliasDispatchesThroughVMCreate validates vm.create RPC with correct params; testVMRemoveAliasDispatchesThroughVMDestroy validates vm.destroy RPC and stdout; testVMConnectAliasOpensManagedWorkspaceThroughSharedSSHPath validates full workspace lifecycle RPC sequence and connection-state output.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

  • manaflow-ai/cmux#4211: Adds --window threading to vm ssh workspace opening, overlapping the same vm connect/ssh routing logic that this PR consolidates.

Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error, 1 warning)

Check name Status Explanation Resolution
Cmux Full Internationalization ❌ Error PR adds new user-facing CLI text without localization: "Aliases are available for familiar spelling" help block, "Usage: cmux vm ssh" error message, and alias documentation section in `CLI/cmux.swi... Wrap all new user-facing error/help messages in String(localized:defaultValue:) and add matching keys with translations to Resources/Localizable.xcstrings for both "en" and "ja" locales.
Docstring Coverage ⚠️ Warning Docstring coverage is 14.29% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (20 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Add cmux vm command aliases' accurately summarizes the main change: adding command aliases to the vm subcommand.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cmux Swift Actor Isolation ✅ Passed PR introduces only CLI alias routing and test coverage; no new Swift 6 actor isolation issues. Changes are confined to command dispatch in CMUXCLI struct and test extensions.
Cmux Swift Blocking Runtime ✅ Passed PR introduces no blocking/timing synchronization in production code. Changes are pure command dispatch routing (case statements grouping aliases with canonical commands) and help text updates. Test...
Cmux Expensive Synchronous Load ✅ Passed PR adds CLI command aliases (vm create→vm new, vm connect→vm ssh, vm remove→vm rm) via simple switch case routing without introducing expensive synchronous operations on main actor or i...
Cmux Cache Substitution Correctness ✅ Passed PR makes no changes to cache/persistence mechanisms; purely CLI command routing and help text. Existing idempotency mechanism does fresh disk reads with TTL staleness handling.
Cmux No Hacky Sleeps ✅ Passed PR modifies only Swift code and documentation; check applies only to TypeScript/JavaScript/shell/build scripts (Swift covered by different rule).
Cmux Algorithmic Complexity ✅ Passed PR adds CLI command aliases via string literals in Swift switch cases (O(1) dispatch), with no nested loops, collection scans, or algorithmic complexity increases. Test code uses only test scaffold...
Cmux Swift Concurrency ✅ Passed PR only adds CLI command routing aliases (switch cases) and documentation; no legacy async patterns (DispatchQueue.global().async, Combine, completion handlers, fire-and-forget Tasks) are introduced.
Cmux Swift @Concurrent ✅ Passed PR contains only CLI command routing changes and documentation updates; no async functions, @concurrent annotations, or actor isolation issues introduced.
Cmux Swift File And Package Boundaries ✅ Passed PR is a focused bug fix adding 9 net lines to CLI/cmux.swift for VM command aliases; fits allowed case of incidental touches to existing oversized files with clear extraction path.
Cmux Swiftpm Lockfiles ✅ Passed PR changes only CLI/cmux.swift, test files, and docs; no SwiftPM packages, Package.resolved, .gitignore, or Xcode project dependency changes, so SwiftPM lockfile rules are not applicable.
Cmux Swift Logging ✅ Passed PR contains CLI-only changes with print() statements that are allowed as user-facing CLI output per rules. No debugPrint, NSLog, unauthorized Logger, or secret-exposing logs introduced.
Cmux User-Facing Error Privacy ✅ Passed User-facing error messages in PR comply with privacy rules: error messages use only canonical command names (vm ssh, vm rm) with no vendor names, internal provider names, flags, or credentials expo...
Cmux Swiftui State Layout ✅ Passed This PR contains no SwiftUI code changes—only CLI parsing, integration tests, and documentation updates. The SwiftUI state layout rule is not applicable.
Cmux Architecture Rethink ✅ Passed PR adds command aliases via unified case statements (new/create, rm/remove/destroy/delete, shell/attach/connect) with single code paths per behavior. No timing repairs, new state owners, duplicate...
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PR modifies only CLI command routing and integration tests—no NSWindow/NSPanel/WindowController/SwiftUI Window/WindowGroup code introduced or modified.
Cmux Source Artifacts ✅ Passed All three changed files (CLI/cmux.swift, cmuxTests/VMSSHCommandTests.swift, docs/cli-contract.md) are intentional hand-written source, test, and documentation files with no source control artifacts...
Description check ✅ Passed The PR description adequately covers the key changes, verification methods, and testing approach with sufficient detail for understanding the scope and impact.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat-vm-command-aliases

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.

ghost left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 59e9dbc. Configure here.

Comment thread CLI/cmux.swift Outdated
@greptile-apps

ghost commented Jun 18, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

Adds connect as an alias for vm ssh and remove as an alias for vm rm, while cleaning up the --help output to list canonical subcommands first with a separate aliases block. Existing canonical commands and RPC methods are unchanged, and three integration tests verify the new dispatch paths.

  • CLI/cmux.swift: connect added to the shell/attach case; remove added to the rm/destroy/delete case; help and error text updated to separate canonical commands from aliases.
  • cmuxTests/VMSSHCommandTests.swift: Three new integration tests cover vm create, vm remove, and vm connect alias dispatch end-to-end.
  • docs/cli-contract.md: VM subcommand table restructured to show canonical commands with alias notes; --help probe expectations updated to match the new canonical usage line.

Confidence Score: 5/5

Safe to merge — changes are limited to CLI alias routing and documentation with no backend or protocol modifications.

All changes are confined to CLI command dispatch (adding two cases to existing switch arms) and help text. Canonical commands and RPC methods are untouched. The only finding is a cosmetic inconsistency in the error message shown to cloud-alias users who omit the VM id.

No files require special attention. The test coverage gap in testVMConnectAliasOpensManagedWorkspaceThroughSharedSSHPath (missing workspace.remote.configure param assertions) was already called out in a prior thread.

Important Files Changed

Filename Overview
CLI/cmux.swift Adds connect to the shell/attach case and remove to the rm/destroy/delete case; updates help text to separate canonical commands from aliases. Minor cosmetic inconsistency: the updated error message hardcodes vm where the parallel ssh case uses \(command).
cmuxTests/VMSSHCommandTests.swift Adds three integration tests for the new aliases. testVMConnectAliasOpensManagedWorkspaceThroughSharedSSHPath verifies the method sequence but omits the workspace.remote.configure param assertions that the base testVMSSHOpensManagedWorkspaceThroughSharedSSHPath makes (already flagged in a prior review thread).
docs/cli-contract.md Restructures VM subcommand table to list canonical commands first with aliases in the description; updates the --help probe expectations. Documentation accurately reflects the new alias layout and canonical-command guidance.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["cmux vm &lt;subcommand&gt;"] --> B{subcommand}
    B --> |"new\ncreate"| C["vm.create RPC\n(+ optional shell drop-in)"]
    B --> |"ls\nlist"| D["vm.list RPC"]
    B --> |"shell / attach / connect"| E["vmOpenShell\n(legacy direct attach)"]
    B --> |"ssh"| F["vmOpenShell\n(managed SSH workspace)"]
    B --> |"rm / remove\ndestroy / delete"| G["vm.destroy RPC"]
    B --> |"exec"| H["vm.exec RPC"]
    B --> |"ssh-info"| I["vm.attach_info RPC"]
    style E fill:#ffe0b2,stroke:#f57c00
    style F fill:#c8e6c9,stroke:#388e3c
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A["cmux vm &lt;subcommand&gt;"] --> B{subcommand}
    B --> |"new\ncreate"| C["vm.create RPC\n(+ optional shell drop-in)"]
    B --> |"ls\nlist"| D["vm.list RPC"]
    B --> |"shell / attach / connect"| E["vmOpenShell\n(legacy direct attach)"]
    B --> |"ssh"| F["vmOpenShell\n(managed SSH workspace)"]
    B --> |"rm / remove\ndestroy / delete"| G["vm.destroy RPC"]
    B --> |"exec"| H["vm.exec RPC"]
    B --> |"ssh-info"| I["vm.attach_info RPC"]
    style E fill:#ffe0b2,stroke:#f57c00
    style F fill:#c8e6c9,stroke:#388e3c
Loading

Reviews (2): Last reviewed commit: "Merge branch 'main' into feat-vm-command..." | Re-trigger Greptile

Comment on lines +144 to +208
"transport": "ssh",
"host": "gateway.freestyle.sh",
"port": 2222,
"username": "cmux",
"credential": [
"kind": "password",
"value": "lease-token",
],
]
)
case "workspace.create":
return self.v2Response(
id: id,
ok: true,
result: [
"workspace_id": workspaceID,
]
)
case "workspace.rename":
return self.v2Response(id: id, ok: true, result: ["workspace_id": workspaceID])
case "workspace.remote.configure":
return self.v2Response(
id: id,
ok: true,
result: [
"workspace_id": workspaceID,
"workspace_ref": workspaceRef,
"remote": [
"enabled": true,
"state": "connecting",
],
]
)
case "workspace.select":
return self.v2Response(id: id, ok: true, result: ["workspace_id": workspaceID])
default:
return self.v2Response(
id: id,
ok: false,
error: ["code": "unexpected", "message": "Unexpected method \(method)"]
)
}
}

var environment = ProcessInfo.processInfo.environment
environment["CMUX_SOCKET_PATH"] = socketPath
environment["CMUX_CLI_SENTRY_DISABLED"] = "1"
environment["CMUX_CLAUDE_HOOK_SENTRY_DISABLED"] = "1"

let result = runProcess(
executablePath: cliPath,
arguments: ["vm", "connect", vmID],
environment: environment,
timeout: 5
)

wait(for: [serverHandled], timeout: 5)
XCTAssertFalse(result.timedOut, result.stderr)
XCTAssertEqual(result.status, 0, result.stderr)
XCTAssertEqual(result.stdout, "OK workspace=\(workspaceRef) target=cmux@gateway.freestyle.sh state=connecting\n")
XCTAssertEqual(
state.commands.compactMap { self.jsonObject($0)?["method"] as? String },
["vm.attach_info", "workspace.create", "workspace.rename", "workspace.remote.configure", "workspace.select"]
)
}

ghost Jun 18, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Connect-alias test asserts fewer RPC params than the base SSH test

testVMConnectAliasOpensManagedWorkspaceThroughSharedSSHPath verifies only the method sequence, not the content of the workspace.remote.configure call. The base testVMSSHOpensManagedWorkspaceThroughSharedSSHPath (line 315–326) additionally asserts destination, port, local_socket_path, skip_daemon_bootstrap, terminal_startup_command, and relay_port on that request — which are the fields that prove the SSH path is wired correctly end-to-end. Without those assertions, a regression that routes connect through the code path but forwards the wrong host/port/socket would still pass this test.

Comment thread CLI/cmux.swift Outdated
Comment on lines 3995 to 4013
@@ -4012,7 +4012,7 @@ struct CMUXCLI {
idFormat: idFormat
)

ghost Jun 18, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Parallel shell/attach/connect case duplicates the ssh case verbatim

Both branches call vmOpenShell with identical arguments. If ssh ever gains a new flag or behaviour change, connect/shell/attach will silently diverge. Since connect is being added as an alias for ssh, consider routing it through the ssh case via fallthrough so future changes to ssh apply automatically to all its aliases.

Suggested change
case "shell", "attach", "connect":
// Aliases for "ssh" — route through the same case to stay in sync.
fallthrough
case "ssh":
let (windowOpt, vmArgs) = parseOption(rest, name: "--window")
guard let vmId = vmArgs.first else {
throw CLIError(message: """
Usage: cmux vm ssh <id>
Find an id:
cmux vm ls
""")
}
let shortId = String(vmId.prefix(8))
try vmOpenShell(
id: vmId,
workspaceName: "vm:\(shortId)",
windowRaw: windowOpt ?? windowId,
client: client,
jsonOutput: jsonOutput,
idFormat: idFormat
)

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

ghost left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CLI/cmux.swift`:
- Line 34274: The global command documentation for the vm command contains an
incomplete list of aliases in the parenthetical note. Update the text that
currently reads "accepts create/list/attach/remove aliases" to include all
documented aliases: create, list, attach, remove, shell, connect (for ssh), and
delete, destroy (for rm). This will ensure consistency between the global
command summary and the comprehensive alias lists documented in the detailed
help sections and default error messages for the vm command.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 238fd56b-7cf5-42b2-975a-c7bd04319b61

📥 Commits

Reviewing files that changed from the base of the PR and between 8318b3b and 59e9dbc.

📒 Files selected for processing (3)
  • CLI/cmux.swift
  • cmuxTests/VMSSHCommandTests.swift
  • docs/cli-contract.md

Comment thread CLI/cmux.swift Outdated
auth <status|login|logout>
login | logout (aliases for auth login/logout)
vm <new|ls|rm|exec|shell|ssh> [args...] (alias: cloud)
vm <new|ls|rm|exec|ssh|ssh-info> [args...] (alias: cloud; accepts create/list/attach/remove aliases)

ghost Jun 18, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Incomplete alias list in global command documentation.

The parenthetical note says "accepts create/list/attach/remove aliases", but this omits several aliases that are documented in the detailed help (lines 14463-14468) and the default error message (lines 4129-4133):

  • Missing: shell, connect (aliases for ssh)
  • Missing: delete, destroy (aliases for rm)

This creates inconsistency between the comprehensive alias list in the detailed help and this brief global summary.

📝 Proposed fix for completeness
-          vm <new|ls|rm|exec|ssh|ssh-info> [args...]    (alias: cloud; accepts create/list/attach/remove aliases)
+          vm <new|ls|rm|exec|ssh|ssh-info> [args...]    (alias: cloud; accepts create/list/shell/attach/connect/remove/delete/destroy aliases)

Or for brevity while staying accurate:

-          vm <new|ls|rm|exec|ssh|ssh-info> [args...]    (alias: cloud; accepts create/list/attach/remove aliases)
+          vm <new|ls|rm|exec|ssh|ssh-info> [args...]    (alias: cloud; see `cmux vm` for full alias list)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CLI/cmux.swift` at line 34274, The global command documentation for the vm
command contains an incomplete list of aliases in the parenthetical note. Update
the text that currently reads "accepts create/list/attach/remove aliases" to
include all documented aliases: create, list, attach, remove, shell, connect
(for ssh), and delete, destroy (for rm). This will ensure consistency between
the global command summary and the comprehensive alias lists documented in the
detailed help sections and default error messages for the vm command.

Lawrence Chen and others added 22 commits September 15, 2026 03:57
* test: cover CLI account switching

* fix: allow switching accounts for CLI auth

* test: assert CLI auth cookies expire

* test: scope CLI auth cookie expiry assertion

* test: verify expiry on the CLI account switch path
…#12667)

* test: cover internal memory pressure notification side effects

* fix: keep memory pressure diagnostics out of user notifications

* test: restore shared pressure registrations after notification regression

* test: isolate relay selector authorization failures
* test: cover recursive Codex autoresume chain

* fix: keep Codex autoresume bindings across relaunches
* Guard production IROH v2 deploy against auth scope drift

* fix production scope probe expected auth responses

* Cover production scope probe failures and timeout bounds

* Bound production probes and verify structured auth errors

* Guard production deploy rollback after failed probe

* Avoid extra production deploy marker dependency

* Fix deploy test helper tuple typing
…2411)

* test: preserve Iroh sessions through application stalls

* fix: let Iroh own established connection lifetime

* fix: clear cloud panel failures through the workspace API

* test: cover coalesced tail of maximum-size mobile frame

* fix: apply mobile size limits per frame rather than per read

* test: derive mobile lane quota expectation

* test: include simulator streams in mobile lane quota

* test: keep mobile host connections alive while idle

* fix: let native transport own idle session lifetime

* test: distinguish retired transport from recovery presentation

* fix: retain recovery presentation while retiring dead transports

* test: cover live transport foreground recovery

* fix: retain live Iroh sessions during foreground recovery

* test: avoid AppKit keyWindow collision in Cloud drag fixture

* test: convert Cloud hover fixture coordinates as a point

* fix: disable first-frame timeout for admitted Iroh

* fix: keep closed control transports bound to their session

---------

Co-authored-by: austinpower1258 <austinwang115@gmail.com>
)

* test: reproduce missing discovery of older Macs after v2 upgrade

* test: cover legacy admission isolation from v2 authority

* feat: add scoped legacy compatibility broker service

* fix: preserve v2 device id in compatibility identity

* test: preserve saved Macs across the v2 storage upgrade

* fix: migrate saved Macs into the v2 local store

* Clarify Mac compatibility with older iOS clients

* Record bounded v2 connection failures in native journals

* bound compatibility binding revocation during teardown

* serve legacy mobile dialect from v2 mac endpoint

* compose v2 and legacy device-list admission authorities

* gate compatibility lifecycle on v2 enrollment

* pass real refresh token to legacy compatibility broker

* cancel legacy observers on v2 authority revocation

* Enforce compatibility revocation across native lifecycle changes

* Preserve older directory release channel values

* Fix older peer identity access and isolate backend runtime test suites

* await auth scope checks in compatibility token source
* Test deployment marker and migration safety

* Guard production probes and DO migrations
* test: prove cloud create does not depend on guest network announce

* fix: remove redundant cloud create network probe

* fix: validate cloud network addresses before publication
Exercise the shared local image transfer path for both image drops and Cmd+V paste. The materialized file must remain available after the path is sent so Claude Code and Codex can read it asynchronously.
Do not delete cmux-owned image files when the local terminal path is delivered. Claude Code and Codex read that path asynchronously after sendText returns; retain the file for the existing process-lifetime cleanup instead.
* fix(ios): preserve local scroll through reconnects

* fix(ios): bound reconnect scroll lease

* feat(debug): add mobile reconnect soak command

* fix(debug): use mac logger for reconnect soak

* fix(dev): require authenticated isolated tagged launches

* fix(terminal): require fresh screen state after reconnect

* fix(ios): remove stale reconnect scroll lease
lawrencecchen and others added 20 commits September 17, 2026 05:01
Restoring `@discardableResult` on its own line took the file to 515 lines
against a tracked budget of 514. Put it beside `@MainActor` instead.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Changelog and changelog-media entries cover the stable fixes since v0.64.24.
The 11 mobile.whatsNew.pairing.* keys added by #12316 shipped English-only in
both iOS catalogs; translate them into de, fr, ar, es, zh-Hant, zh-Hans, ko,
and ja with scripts/localization_catalog.py merge.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Build 106, not 105: the rc feed already serves com.cmuxterm.app 0.64.25 (105)
built from rc/v0.64.25, and bump-version.sh only checks the stable appcast
(104). Reusing 105 from a different source tree would give Sparkle two
binaries with one build number.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
fix: make tmux-compat polling backpressure deterministic
Show one compact Cloud terminal error inside its owning pane, with a square 1 px border, no shadow, Retry, and contextual Copy Error. Preserve safe failure categories and operation traces, and clean up every classified cancellation consistently.

Verified the default card in a tagged app, all 22 focused Cloud tests, and the cancellation regression before and after the fix.

#12609
@cursor

ghost commented Sep 17, 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.

@lawrencecchen

ghost commented Sep 19, 2026

Copy link
Copy Markdown
Contributor Author

Mac fleet instructions for head 01faafe5a60bcc29f5cb8c7239e5d319a6382293. Planned tag: pr-6375-01faafe5; this is not yet a published build.

JOB_JSON=$(~/.local/bin/cmux-ci submit --kind cmux --command 'CMUX_FLEET_BUILD_TAG=pr-6375-01faafe5 /Users/Shared/cmux-build-fleet/recipes/cmux.sh https://github.com/manaflow-ai/cmux.git 01faafe5a60bcc29f5cb8c7239e5d319a6382293' --artifact artifacts/cmux.app.zip --workspace https://github.com/manaflow-ai/cmux/pull/6375 --source-digest 01faafe5a60bcc29f5cb8c7239e5d319a6382293 --cache-key cmux:pr-6375 --min-free-bytes 268435456000 --label cmux --label ram48)
JOB_ID=$(python3 -c 'import json,sys; print(json.load(sys.stdin)["id"])' <<<"$JOB_JSON")
~/.local/bin/cmux-ci wait "$JOB_ID" --receipt artifacts/fleet/$JOB_ID.json
~/.local/bin/cmux-ci publish-hq "$JOB_ID"

Use an existing campaign job ID if one is already posted; do not submit a duplicate. A wait timeout leaves the remote job running. Published results will include an exact-head artifact link and timing/disk receipt. This recipe validates the macOS app only, not iOS or tests. Never use maclease or put credentials in a PR comment.

@github-actions

ghost commented Sep 26, 2026

Copy link
Copy Markdown
Contributor

Automatic catch-up: main is green again and this branch needed it.

I tried to catch this branch up with main (26a1e88311e5), but these files need a person:

  • CLI/cmux.swift: not a generated file; needs a person

Nothing was pushed. Merge main locally, fix those, and push; /catch-up is there again whenever you want it.

Automatic catch-up will not try this head again; a new push or /catch-up does.
Label the pull request no-auto-catch-up to opt out.

Catch-up run

@teamleaderleo teamleaderleo added area: cli The cmux CLI, cmux-tui, the socket API and SDKs S3: minor Wrong behavior with a workaround closing-soon Conflicting or red with no activity for 7+ days; closes 2026-10-06 unless the label is removed labels Sep 30, 2026
@teamleaderleo

ghost commented Oct 6, 2026

Copy link
Copy Markdown
Collaborator

Closing; reopen if you still want it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: cli The cmux CLI, cmux-tui, the socket API and SDKs closing-soon Conflicting or red with no activity for 7+ days; closes 2026-10-06 unless the label is removed S3: minor Wrong behavior with a workaround

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants