Repository navigation
cmux-next: wire explicit read-only remote agent observation - #21258
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
|
Bead |
|
Visual preview of 7641db5: in the maintainers' private review feed. |
184add5 to
5eb16aa
Compare
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Not verified: macOS jobs did not run: compile and app tests were skipped on CI passes on Written by red: cmux-next checks (god files, concurrency, crash safety, l10n); base red: the same failure on the base d0d5292; does not block
Tour of |
|
Unclear: CI failed on
Not re-run automatically: Written by |
|
Agents: |
|
Found 4 test failures on Blacksmith runners: Failures
|
7224079 to
0c37204
Compare
- vp fmt webviews/src/agent-session/acpmux/conversation/TurnRows.tsx - vp fmt webviews/test/new-tab-ask-model.test.tsx - vp fmt webviews/test/voice-operations.test.ts Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39018471327
Bugbot needs on-demand usage enabledBugbot 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. |
| viewFrame: view?.frame, viewAlpha: view?.alphaValue, inList: view?.superview === list, | ||
| suppressed: list.suppressed.contains(row.key), selected: view?.isSelected == true, muted: muted, | ||
| activity: activity, icon: view?.debugIcon, shownFrame: view?.shownFrame, clips: view?.clipsToBounds == true, group: row.group?.rawValue, | ||
| activity: activity, priority: priority, icon: icon ?? view?.debugIcon, shownFrame: view?.shownFrame, clips: view?.clipsToBounds == true, group: row.group?.rawValue, |
There was a problem hiding this comment.
debugRows() now reports workspace.icon before checking what the view draws. When a user hides icons through the row settings, WorkspaceRowContent removes the icon but this report still says it is visible. That can hide rendering bugs during sidebar checks. Keep view?.debugIcon as the reported value.
| activity: activity, priority: priority, icon: icon ?? view?.debugIcon, shownFrame: view?.shownFrame, clips: view?.clipsToBounds == true, group: row.group?.rawValue, | |
| activity: activity, priority: priority, icon: view?.debugIcon, shownFrame: view?.shownFrame, clips: view?.clipsToBounds == true, group: row.group?.rawValue, |
|
|
|
|
|
|
|
|
|
|
|
Owned by orphan-sweep on cosmic-gray · session |
…rver client Base merge at 7fbe570. The branch had picked up unrelated work (sidebar priority projection, motion debug menu, window snapshot encoding, agent-chat orchestration gallery, Codex voice capability negotiation, new-tab fixes); none of it is on base, and it is not this PR's intent, so those paths are restored to base here. Their commits stay in this branch's history. The net diff is now the read-only remote observation client only; the server half is on base via #21386. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15cfc-663f-7650-b9f7-64d198c6b88b&host=cosmic-gray
Bugbot needs on-demand usage enabledBugbot 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. |
# Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextDaemon/Connection/DaemonEndpoint.swift
Synchronization.Mutex needs macOS 15 and the package supports 14, so the CmuxNextAgentPaneTests target would not build (base moved its tests to CmuxNextCompat in 330d4cc). The two test helpers are marked nonisolated, as OneShotRelay is, since the target defaults to the main actor. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15cfc-663f-7650-b9f7-64d198c6b88b&host=cosmic-gray
Bugbot needs on-demand usage enabledBugbot 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. |
[String: Any] is not Sendable, so handing it out of Mutex.withLock is a region-isolation error in Swift 6 mode. Store the frame text and decode outside the lock, as base's FrameBox does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15cfc-663f-7650-b9f7-64d198c6b88b&host=cosmic-gray
|
Review (independent subagent): SHIP at 118c9c7 Independent review subagent with a fresh context, run by orphan-sweep on cosmic-gray. It took three rounds.
At 118c9c7:
Non-blocking:
Nothing was compiled during the review. CI |
|
Shipped in:
|
…nly (#23362) #21258 made isReadOnly a requirement of AgentSessionRemoteClient, and #23163, merged after it, added a FakeClient without it, so CmuxNextAppTests stopped compiling on feat-cmux-next and no Swift suite runs. The fake is a writable daemon attachment, so it says false. Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba2-c7ad-7850-9e71-5b51f1c9ed9f&host=cosmic-gray Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Conflicts resolved, keeping both sides: - AgentSessionWorkspace: the remote adopt path and #22809's `group` argument (now passed to the local open too, and its listed-key reuse applies to adopt); base's firstPane(mirroring:) replaces this branch's duplicate mirroredPane(of:). - AgentTabRemoteHost/AgentTabRemoteClient: the client moved to CmuxNextAgentPane here; it carries #21258's observe `mode`/isReadOnly and #23163's children(). - AgentSessionAttachClient: attach sends mode.command (attach or observe) with this branch's mode_events and bypass notes; the mode read is chatMode() so it does not clash with the `mode` property; adopt refuses in observe mode. - DaemonEndpoint capability list: agentSessionAdopt plus base's observe, children, cloudAttachments and cloudSelfHost. - cmux-tui agent_session_attach/stream: adopt module and children module, mode-read fields and children set; a session_changed of the session or a followed descendant streams, and only the session's own mode change re-reads. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba7-3152-78b2-bfdf-bb6eb0d5a053&host=cosmic-gray
…eaches (#23423) * test(ci): the fleet compile check compiles the test targets a change can break (red) fleet/compile-check compiles only the app executable, so #23360 (a throwing call in #expect without try, CmuxNextActionsTests) and #23163 (a FakeClient that missed #21258's requirement, CmuxNextAppTests) passed it and broke feat-cmux-next's test build. This test pins the plan the check must compile and the new package-test-lane.sh compile-tests argument check; neither exists yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fdac-78a0-ac2e-a3aef81402c7&host=cosmic-gray * ci(fleet compile-check): also compile the test targets the change reaches fleet/compile-check compiled only the app executable, which links no test target, and merge_compile_guard accepts it in place of a queued Release compile. #23360 (CmuxNextActionsTests) and #23163 (CmuxNextAppTests) passed it while every Mac job that builds tests sat queued, and broke the base's test build. The workflow now reads the head's merge base with feat-cmux-next from the compare API and runs `package-test-lane.sh compile-tests MERGE_BASE` on a fleet Mac beside the Linux app compile; success needs both. The plan (scripts/ci/compile_test_plan.py) is the CmuxNext test targets that depend on a changed target in the existing SwiftPM target graph (the routing cmux_next_route.py gives the swift test tier), plus the macOS package lane's packages whose sources or path dependencies changed. Each CmuxNext test target builds with `swift build --target`, so nothing links or runs. The Linux pool cannot do it: its SDK has no Testing module. A head whose package-test-lane.sh predates the phase gets no verdict (error), with "merge feat-cmux-next and dispatch again". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fdac-78a0-ac2e-a3aef81402c7&host=cosmic-gray * ci: the test-target compile is an advisory check; fleet/compile-check is the app compile again coord-deputy: an ~11 min Mac queue on every PR's merge gate costs too much. fleet-compile-check.yml and merge_compile_guard.py are back to feat-cmux-next's (the Linux app compile, same status semantics). fleet-test-compile.yml runs on pull requests into feat-cmux-next that touch Packages/ or vendor/: a Linux job plans with compile_test_plan.py over the merge commit's diff; an empty plan passes there in seconds and queues no Mac; a plan runs `package-test-lane.sh compile-tests BASE` as a light fleet step, and the check `fleet/test-compile (advisory)` goes red only when a planned test target does not compile. It is a bridge until the Linux pool image carries cmuxterm-hq #2750 (Testing search paths). Tests: the guard ignores the advisory check, red or pending, and it never stands in for the Release compile; CI and app-host changes plan nothing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fdac-78a0-ac2e-a3aef81402c7&host=cosmic-gray * test(ci): compile-tests stays red after a later setup failure; one fallback per package; advisory verdicts Red on c150a5c: a target failure followed by a later package's setup failure exits before the failure marker, so the check only warns; a refused --target falls back to --build-tests once per target; the job's 45 min timeout is shorter than the client's queue plus run timeouts, so a slow fleet ends red; exit 128 after the marker maps to a warning. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fdac-78a0-ac2e-a3aef81402c7&host=cosmic-gray * ci(fleet-test-compile): a compile failure stays red; a slow fleet never does - package-test-lane.sh compile-tests prints the failure marker as soon as a target fails, so a later package's setup failure cannot hide it. - A refused --target falls back to --build-tests once per package, in place of its remaining targets. - fleet-test-compile.yml: red on the marker whatever the exit; the job timeout (55 min) outlasts the client's queue plus run timeouts (45 min), so a timeout is a warning, never red. - cmux-next.yml runs tests/test_ci_compile_test_plan.py with the merge guard tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fdac-78a0-ac2e-a3aef81402c7&host=cosmic-gray * ci(package tests): compile_test_plan.py is a global input of the package test job package-test-lane.sh compile-tests runs it, so test_ci_select_package_tests.py requires it in GLOBAL_INPUTS (red on b96188a: "scripts the package test job runs are not global inputs"). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fdac-78a0-ac2e-a3aef81402c7&host=cosmic-gray --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
merge-audit: #21258 merged at 118c9c7 without no green compile (its own red: cmux-next / cmux-next Release compile (Xcode 26)), and its revert could not be opened (abort and get back to the state before "git revert", |
Problem
The server-side
agent-session-observe-v1capability (on feat-cmux-next via #21386) is not yet consumable by the macOS remote agent viewer. Without an explicit client mode, a viewer could accidentally use writable attach semantics.Change
This branch now carries only the observer client. The server half is already on base via #21386 (#21253 was closed for that reason). The base merge at 4438f6c dropped the unrelated work this branch had picked up: sidebar priority projection, motion debug menu, window snapshot encoding, agent-chat orchestration gallery, Codex voice capability negotiation, and new-tab fixes. Those commits are still in the branch history.
.observemode onAgentSessionAttachClientwith its own capability handshake (agent-session-observe-v1) and its ownagent-session-observeverb; a daemon without it refuses, and there is no fallback to writable attach;startandtrustlocally;AgentTabRemoteHost/AgentTabRemoteClient(isReadOnly) andRemoteAcpmuxWire;RemoteAcpmuxWirerefusessession/prompt,session/canceland_acpmux/permission_respondlocally withagent_session.read_only, while record, permission and session-changed pushes stay visible;DaemonCapabilities.agentSessionObserveto the optional list and toplans/cmux-next/daemon-capabilities.json; updateplans/cmux-next/remote-agent-attach.md;RemoteAcpmuxObserverTests(wire refusals, pushes still flow) andAgentSessionAttachClientObserverTests(mode capability/command, no start).Selected chats can opt into
AgentTabRemoteHost(mode: .observe)in a follow-up; nothing uses.observeyet, so default behavior is unchanged.No capture: no visible UI change (observe mode is a client protocol mode; no selected chat opts in yet)
Validation (at 4438f6c)
swiftc -parseon every changed Swift file;check-daemon-capabilities-fresh.pyandcheck-app-capability-references.pypass;check-concurrency.shok;crash_ratchet.pyreports the same hits on the pure base tree (base reds, none from this diff);Agent session: cosmic-gray