Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
05158b1
ci(cmux-tui): skip docs-only artifact publishes
teamleaderleo Oct 30, 2026
fa6efd5
ios: New Message to one agent sends its images (#27877)
teamleaderleo Oct 30, 2026
4e5fe02
carry of #26682: fix(setup): report actionable harness authentication…
teamleaderleo Oct 30, 2026
e0f3350
acpmux: leave superseded tool output out of a chat's open page (#27614)
teamleaderleo Oct 30, 2026
6ba8e71
cmux NEXT: one machine link state for the sidebar and the agent pane;…
teamleaderleo Oct 30, 2026
c142713
ci(cmux-tui): owned minis skip the Go and branch Rust caches that nev…
teamleaderleo Oct 30, 2026
91e0204
cmux-next tests: the test process's children start without SWIFT_BACK…
teamleaderleo Oct 30, 2026
c66f534
chore(next): base autofix at e0f33500c849
github-actions[bot] Oct 30, 2026
d230d11
ci(cmux-tui artifacts): short Linux jobs take the shared 32/16 vCPU s…
teamleaderleo Oct 30, 2026
9d318f9
acpmux: a bare session name or id prefix reaches the one live session…
teamleaderleo Oct 30, 2026
5741e0d
fix(l10n): fill the 8 cmux NEXT string-table keys missing languages (…
teamleaderleo Oct 30, 2026
afe5e8d
ci(nightly): the remote-daemon build and attest jobs take the Linux r…
lawrencecchen Oct 30, 2026
9f605ce
chore(next): base autofix at afe5e8ddc4c6
github-actions[bot] Oct 30, 2026
6dc0ccf
fix(inspector): hide unsupported chat environment save (#28238)
teamleaderleo Oct 30, 2026
6225e77
acpmux: a person's Stop of a chat on a peer holds the other agents' m…
teamleaderleo Oct 30, 2026
813ef6f
docs(cmux-tui): agent-hooks: cmux-next has no ssh-tmux mirror (#27797)
teamleaderleo Oct 30, 2026
844a99b
fix(webviews): dispose page subscriptions after their store stops (#2…
teamleaderleo Oct 30, 2026
5ec8097
Agent pane: answered question and checklist as Claude desktop cards (…
teamleaderleo Oct 30, 2026
7c408e8
acpmux: a peer link hears no change of a row mirrored from another pe…
teamleaderleo Oct 30, 2026
4a0b8f0
acpmux: briefs asks the peers at once and names each one left out (#2…
teamleaderleo Oct 30, 2026
af9aa30
test(cmux-tui): a lost terminal's end finds its pages read ahead (red)
lawrencecchen Oct 30, 2026
6dd84ad
perf(cmux-tui): the startup reads a lost terminal's end pages ahead
lawrencecchen Oct 30, 2026
65b5de8
acpmux: new and ensure keep a predecessor's harness, or say why not (…
teamleaderleo Oct 30, 2026
5a95830
feat(next): scroll the session rail independently (#26520)
teamleaderleo Oct 30, 2026
81a7def
cmux-next: a subagent pane draws its chat from the kept tail (#28235)
teamleaderleo Oct 30, 2026
96de8cb
chat-open bench: a timed-out or errored open never counts as a time (…
teamleaderleo Oct 30, 2026
4fb9a26
ci(cmux-tui): the attestation waits out a rate limit until GitHub ans…
teamleaderleo Oct 30, 2026
58d6a62
New Tab: project and machine head the composer, menus open away from …
teamleaderleo Oct 30, 2026
770f243
fix(acpmux): send's examples go in help_examples, not its own after-h…
teamleaderleo Oct 30, 2026
7f97b84
cmux mcp serve: start other MCP servers (cmux-cua) on first call, not…
teamleaderleo Oct 30, 2026
3c7024f
cmux NEXT MCP: tool evals on real Claude/Codex harnesses, and code mo…
lawrencecchen Oct 30, 2026
cdd3f6d
fix(cli): describe every cmux cloud verb in its help (#28252)
teamleaderleo Oct 30, 2026
6ede406
ci(ios): add unsigned Release simulator compile route (#27642)
teamleaderleo Oct 30, 2026
00e8c4a
fix(ios): make recovery screens retry their failed loads (#27309)
teamleaderleo Oct 30, 2026
ec3b144
cmux-next: a chat's first frame waits on one daemon round trip (#27755)
teamleaderleo Oct 30, 2026
569f9ea
Agent pane: copy button in an expanded card's top-right corner (#28057)
teamleaderleo Oct 30, 2026
cc40c49
chore(next): base autofix at 569f9ea15f62
github-actions[bot] Oct 30, 2026
8bbd4ec
sidebar: a hover control stays lit while its menu is open, and lights…
teamleaderleo Oct 30, 2026
0a088aa
acpmux + agent pane: Stop always ends the turn stopped with Continue;…
teamleaderleo Oct 30, 2026
09311f4
test(cmux-tui): the roster cursor keeps up with a quiet journal (red)
lawrencecchen Oct 30, 2026
d1ef44a
perf(cmux-tui): the agent roster cursor follows the journal head
lawrencecchen Oct 30, 2026
7afea47
chat-open bench: each open's line says why it has no first content (#…
teamleaderleo Oct 30, 2026
8f5dfe0
cmux mcp: terminals by tab or pane, waits on output, named missing fi…
lawrencecchen Oct 30, 2026
6607ecd
fix(webviews): three react-apps-check base reds (prompt rail tests, t…
teamleaderleo Oct 30, 2026
c67c337
cmux-next iOS: the slash-command list scrolls inside the room above t…
teamleaderleo Oct 30, 2026
7365192
test(chief): count the participant tag #27935 added (base red) (#28316)
teamleaderleo Oct 30, 2026
14f30b7
acpmux: an idle harness ends when its MCP server's path has a space i…
teamleaderleo Oct 30, 2026
5415983
test(cmux-tui): the feed start trims against notification receipts on…
lawrencecchen Oct 30, 2026
438ece0
perf(cmux-tui): the feed start trims against an index of notification…
lawrencecchen Oct 30, 2026
e9883ab
ci(cmux-tui): skip docs-only artifact publishes
teamleaderleo Oct 30, 2026
205c04c
fix(ci): retain compatibility for published v2 keys
teamleaderleo Oct 30, 2026
fc18c22
fix(ci): seed docs-independent trees and preserve historical artifact…
teamleaderleo Oct 30, 2026
9fc2592
fix(ci): replace parent-dependent docs key with history-free tree key
teamleaderleo Oct 30, 2026
94dd297
test(ci): mock tree listing in preflight fixtures
teamleaderleo Oct 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .github/workflows/ci-guards.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1781,6 +1781,10 @@ jobs:
if: ${{ !cancelled() && matrix.group == 'ci' }}
run: python3 tests/test_ci_blacksmith_linux_failover.py

- name: Validate cmux-tui artifacts Linux jobs take the shared 32/16 vCPU set
if: ${{ !cancelled() && matrix.group == 'ci' }}
run: python3 tests/test_cmux_tui_artifacts_linux_runner_set.py

- name: Validate the macOS cross-compile shadow jobs stay compare-only
if: ${{ !cancelled() && matrix.group == 'ci' }}
run: python3 tests/test_ci_macos_cross_shadow_jobs.py
Expand Down
93 changes: 57 additions & 36 deletions .github/workflows/cmux-tui-artifacts.yml

Large diffs are not rendered by default.

17 changes: 17 additions & 0 deletions .github/workflows/cmux-tui.yml
Original file line number Diff line number Diff line change
Expand Up @@ -713,19 +713,36 @@ jobs:
# cmux-tailnet's build script compiles libtailscale with `go build`. The
# owned Mac minis have no Go, so clippy died there before any test ran.
# go-version matches the pinned libtailscale go.mod (see its build.rs).
#
# No Actions cache for Go on an owned mini. The mini keeps its own
# ~/go/pkg/mod between jobs, and Go makes that tree read-only, so
# untarring the ~590 MB cache over it failed with "Can't unlink
# already-existing object: Permission denied" on 8 of 8 sampled jobs
# (2026-10-29). Each of those jobs still downloaded the tarball (about 63 s)
# and then tried to save it again (about 48 s). Blacksmith VMs start empty,
# so they keep the cache.
- name: Set up pinned Go (libtailscale)
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version-file: cmux-tui/crates/cmux-tailnet/go-version
cache: ${{ !contains(runner.name, '-glaeda') }}
cache-dependency-path: cmux-tui/crates/cmux-tailnet/build.rs

# On an owned mini, only feat-cmux-next saves. The cache key carries a hash
# of each mini's Rust environment, and a dispatch on a branch can read only
# that branch's entries and the default branch's. So a branch save almost
# never comes back: 0 of 8 sampled jobs restored one (2026-10-29). Each
# branch save took about 155 s and 0.6-0.9 GB of the repository's 10 GB
# GitHub cache store. These saves filled about 70% of the store, and the
# store evicts by least-recent use, so other caches were pushed out.
- name: Cache cargo build
id: cargo-cache
uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
with:
cache-bin: false
workspaces: cmux-tui -> target
shared-key: cmux-tui-macos
save-if: ${{ !contains(runner.name, '-glaeda') || github.ref == 'refs/heads/feat-cmux-next' }}

- name: Report cargo cache hit rate
if: always()
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3074,7 +3074,7 @@ jobs:
# Resume already retained these exact assets in build-nightly-app.
needs: [decide, resolve-nightly-cmux-tui-client, build-nightly-app]
if: needs.decide.outputs.build_only != 'true'
runs-on: ${{ github.repository_owner != 'manaflow-ai' && 'ubuntu-24.04' || 'blacksmith-4vcpu-ubuntu-2404' }}
runs-on: ${{ github.repository_owner != 'manaflow-ai' && 'ubuntu-24.04' || vars.LINUX_RUNNER == 'blacksmith-16vcpu-ubuntu-2404' && 'blacksmith-16vcpu-ubuntu-2404' || 'blacksmith-32vcpu-ubuntu-2404' }}
permissions:
contents: read
timeout-minutes: 20
Expand Down Expand Up @@ -3126,7 +3126,7 @@ jobs:
# needs this job: a quota wait must neither occupy a Mac nor delay the feed.
needs: [build-nightly-remote-daemon]
if: inputs.nightly_next_unsigned_run == ''
runs-on: ${{ github.repository_owner != 'manaflow-ai' && 'ubuntu-24.04' || 'blacksmith-4vcpu-ubuntu-2404' }}
runs-on: ${{ github.repository_owner != 'manaflow-ai' && 'ubuntu-24.04' || vars.LINUX_RUNNER == 'blacksmith-16vcpu-ubuntu-2404' && 'blacksmith-16vcpu-ubuntu-2404' || 'blacksmith-32vcpu-ubuntu-2404' }}
permissions:
contents: read
attestations: write
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,8 @@ Packages/macOS/CmuxNext/ws-no-color-gallery/
Packages/macOS/CmuxNext/ws-no-color-gallery.tar
Packages/macOS/CmuxNext/group-header-gallery/
Packages/macOS/CmuxNext/group-header-gallery.tar
Packages/macOS/CmuxNext/machine-link-gallery/
Packages/macOS/CmuxNext/machine-link-gallery.tar
Packages/macOS/CmuxNext/sidebar-look-gallery/
Packages/macOS/CmuxNext/sidebar-look-gallery.tar
Packages/macOS/CmuxNext/machines-section-gallery/
Expand Down
9 changes: 7 additions & 2 deletions Native/OptChat/optchat-chief/tests/harness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,7 @@ fn chief_zoom_and_date_answer_from_the_live_memory() {
/// keeps `mux.parent` only.
#[test]
fn the_chiefs_turn_and_compactor_sessions_carry_cmux_chief_and_children_do_not() {
use optchat_chief::acpmux::{CHIEF_ROLE_TAG, CHIEF_TAG};
use optchat_chief::acpmux::{CHIEF_PARTICIPANT_TAG, CHIEF_ROLE_TAG, CHIEF_TAG};
let mut h = harness_with(settings);
h.connect();
h.say("user_local", "hello");
Expand All @@ -441,8 +441,13 @@ fn the_chiefs_turn_and_compactor_sessions_carry_cmux_chief_and_children_do_not()
let tags = &inner.specs[0].tags;
assert_eq!(tags.get(CHIEF_TAG).map(String::as_str), Some("h0me"));
assert_eq!(tags.get(CHIEF_ROLE_TAG).map(String::as_str), Some("turn"));
// The Chief's participant id, which acpmux stamps as `fromChief` (#27935).
assert_eq!(
tags.get(CHIEF_PARTICIPANT_TAG).map(String::as_str),
Some(cmux_chief::rules::AGENT_MUX)
);
// Plus its names on an approval card (approval_display_tags.rs), never `mux.parent`.
assert_eq!(tags.len(), 4);
assert_eq!(tags.len(), 5);
assert!(!tags.contains_key(cmux_chief::rules::PARENT_TAG));
}
let dir = tempfile::tempdir().unwrap();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7545,6 +7545,126 @@
"state": "translated",
"value": "Plan"
}
},
"ar": {
"stringUnit": {
"state": "needs_review",
"value": "الخطة"
}
},
"bs": {
"stringUnit": {
"state": "needs_review",
"value": "Plan"
}
},
"da": {
"stringUnit": {
"state": "needs_review",
"value": "Plan"
}
},
"de": {
"stringUnit": {
"state": "needs_review",
"value": "Plan"
}
},
"es": {
"stringUnit": {
"state": "needs_review",
"value": "Plan"
}
},
"fr": {
"stringUnit": {
"state": "needs_review",
"value": "Plan"
}
},
"it": {
"stringUnit": {
"state": "needs_review",
"value": "Piano"
}
},
"ja": {
"stringUnit": {
"state": "needs_review",
"value": "計画"
}
},
"km": {
"stringUnit": {
"state": "needs_review",
"value": "ផែនការ"
}
},
"ko": {
"stringUnit": {
"state": "needs_review",
"value": "계획"
}
},
"nb": {
"stringUnit": {
"state": "needs_review",
"value": "Plan"
}
},
"pl": {
"stringUnit": {
"state": "needs_review",
"value": "Plan"
}
},
"pt-BR": {
"stringUnit": {
"state": "needs_review",
"value": "Plano"
}
},
"ru": {
"stringUnit": {
"state": "needs_review",
"value": "План"
}
},
"th": {
"stringUnit": {
"state": "needs_review",
"value": "แผน"
}
},
"tr": {
"stringUnit": {
"state": "needs_review",
"value": "Plan"
}
},
"uk": {
"stringUnit": {
"state": "needs_review",
"value": "План"
}
},
"vi": {
"stringUnit": {
"state": "needs_review",
"value": "Kế hoạch"
}
},
"zh-Hans": {
"stringUnit": {
"state": "needs_review",
"value": "计划"
}
},
"zh-Hant": {
"stringUnit": {
"state": "needs_review",
"value": "計畫"
}
}
}
},
Expand All @@ -7556,6 +7676,126 @@
"state": "translated",
"value": "Plan · %lld active"
}
},
"ar": {
"stringUnit": {
"state": "needs_review",
"value": "الخطة · %lld قيد التنفيذ"
}
},
"bs": {
"stringUnit": {
"state": "needs_review",
"value": "Plan · aktivno: %lld"
}
},
"da": {
"stringUnit": {
"state": "needs_review",
"value": "Plan · %lld aktive"
}
},
"de": {
"stringUnit": {
"state": "needs_review",
"value": "Plan · %lld aktiv"
}
},
"es": {
"stringUnit": {
"state": "needs_review",
"value": "Plan · %lld en curso"
}
},
"fr": {
"stringUnit": {
"state": "needs_review",
"value": "Plan · %lld en cours"
}
},
"it": {
"stringUnit": {
"state": "needs_review",
"value": "Piano · %lld in corso"
}
},
"ja": {
"stringUnit": {
"state": "needs_review",
"value": "計画 · %lld 件実行中"
}
},
"km": {
"stringUnit": {
"state": "needs_review",
"value": "ផែនការ · កំពុងធ្វើ %lld"
}
},
"ko": {
"stringUnit": {
"state": "needs_review",
"value": "계획 · %lld개 진행 중"
}
},
"nb": {
"stringUnit": {
"state": "needs_review",
"value": "Plan · %lld aktive"
}
},
"pl": {
"stringUnit": {
"state": "needs_review",
"value": "Plan · w toku: %lld"
}
},
"pt-BR": {
"stringUnit": {
"state": "needs_review",
"value": "Plano · %lld em andamento"
}
},
"ru": {
"stringUnit": {
"state": "needs_review",
"value": "План · выполняется: %lld"
}
},
"th": {
"stringUnit": {
"state": "needs_review",
"value": "แผน · กำลังทำ %lld"
}
},
"tr": {
"stringUnit": {
"state": "needs_review",
"value": "Plan · %lld etkin"
}
},
"uk": {
"stringUnit": {
"state": "needs_review",
"value": "План · виконується: %lld"
}
},
"vi": {
"stringUnit": {
"state": "needs_review",
"value": "Kế hoạch · %lld đang chạy"
}
},
"zh-Hans": {
"stringUnit": {
"state": "needs_review",
"value": "计划 · %lld 项进行中"
}
},
"zh-Hant": {
"stringUnit": {
"state": "needs_review",
"value": "計畫 · %lld 項進行中"
}
}
}
}
Expand Down
Loading
Loading