Repository navigation
cmux-next Chief: Subagents menu rows run chief.openSubagent, not an inline selector - #23073
Conversation
…ubagent The Chief pane's Subagents menu (#22852) builds its rows with an inline selector, which scripts/cmux-next/check-menu-actions.py rejects: ChiefPaneTools.swift: 1 inline menu row(s), 0 allowed This test pins the shape the fix gives the rows: each runs the registered chief.openSubagent action on its row's sidebar item, titled and described like its sidebar row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c6d-a1d2-7fc2-9458-92c6bdcb7b4d&host=huge-blue
…nline selector check-menu-actions.py was red on base: #22852's ChiefPaneTools.subagentsMenu built each row with its own #selector(openSubagent(_:)), a menu-only path beside the registry. Each row now comes from ActionRegistry.makeContextMenu(for: .sidebarItem, target:, entries:) and runs the new chief.openSubagent action on the row's sidebar item (target sidebar-item:<row id>), retitled to the subagent as menuRun's callers do. ChiefSidebar binds the action to the same activate path a click on the sidebar row runs: reveal the subagent's tab, else open a workspace on it. Title and tooltip are unchanged; the row has no icon and no key equivalent. Palette, CLI verb and right-click are exempt as focusMove (it shows an existing subagent; `cmux action run chief.openSubagent --target sidebar-item:<id>` reaches it). Generated action exports are left to the autofix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c6d-a1d2-7fc2-9458-92c6bdcb7b4d&host=huge-blue
|
Owned by land-and-ci-a8 on huge-blue · session |
|
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 |
|
Bead |
…te row Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c6d-a1d2-7fc2-9458-92c6bdcb7b4d&host=huge-blue
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/39558816819 at c7ce585 failed: cmux-next Release compile (Xcode 26). |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/39559424526 at 240de48 failed: cmux-next Release compile (Xcode 26). |
… no target Follow-ups to #23073. Open Chief Subagent shows a subagent's tab or opens a workspace on it, so it joins ActionCatalog.focusActionIDs and action.list reports it as focusing. A run with no target (its shortcut, `cmux action run` without --target) now refuses through ActionRegistry.refuse, as other handlers do: a keyboard run shows the reason in the refusal HUD, and the palette and the control socket get it back. A target that is not a subagent row refuses as not found. The reason is localized in the 21 locales of the CmuxNextAgentLanes catalog. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c6d-a1d2-7fc2-9458-92c6bdcb7b4d&host=huge-blue
… no target (#23108) * test: chief.openSubagent focuses, and a run with no subagent refuses visibly Two follow-ups to #23073. Open Chief Subagent shows a subagent's tab or opens a workspace on it, so action.list should report it as focusing; it does not (ActionCatalog.focusActionIDs lacks it). And a run with no target (its shortcut, `cmux action run chief.openSubagent` without --target) returns from the handler without a word: no notice for a keyboard run, no reason for a caller. These tests pin both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c6d-a1d2-7fc2-9458-92c6bdcb7b4d&host=huge-blue * cmux-next Chief: chief.openSubagent focuses, and refuses visibly with no target Follow-ups to #23073. Open Chief Subagent shows a subagent's tab or opens a workspace on it, so it joins ActionCatalog.focusActionIDs and action.list reports it as focusing. A run with no target (its shortcut, `cmux action run` without --target) now refuses through ActionRegistry.refuse, as other handlers do: a keyboard run shows the reason in the refusal HUD, and the palette and the control socket get it back. A target that is not a subagent row refuses as not found. The reason is localized in the 21 locales of the CmuxNextAgentLanes catalog. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c6d-a1d2-7fc2-9458-92c6bdcb7b4d&host=huge-blue --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
Shipped in:
|
check-menu-actions.py(the "Menu rows run registered actions, not inline selectors" step ofcmux-next guards) fails on feat-cmux-next because the Chief pane's Subagents menu built its rows with an inline#selector(openSubagent(_:)). This PR makes each row run a new registered action,chief.openSubagent, so that check passes. The rows behave the same as before.chief.openSubagent("Open Chief Subagent") goes inSidebarSectionActionCatalog. Its target is the subagent row's sidebar item (sidebar-item:<id>). It is exempt from the palette and CLI verb asfocusMove, likehome.openConversation. Its title is translated into the catalog's 21 languages.ChiefSidebar.bindbinds it to the existingactivate(LayoutItemID(target.id), registry:)path, the same path a click on the sidebar row takes.ChiefPaneTools.subagentsMenu()builds each row throughregistry.makeContextMenu, then sets the subagent's own title and status tooltip, with no icon and no key. The@objc openSubagentselector is gone.plans/cmux-next/action-surfaces.json,actions.md) are regenerated by PR autofix on a Mac runner, not by hand.Testing
python3 scripts/cmux-next/check-menu-actions.pyfails onChiefPaneTools.swift, the same failure as the base red.HomeDockTabRowToolsTests.eachSubagentRowOpensItsSessionThroughTheRegisteredAction(commit 1). It checks throughActionRegistry.menuRun(of:)that each row runschief.openSubagenton its ownsidebar-item:<row id>with no arguments, and that each row keeps its title and tooltip.Observed / Not run
check-menu-actions.pypasses,prepush-gate.pyreports no new violations andcheck-no-godfiles.shpasses on the changed files.localization_catalog.py checkfails exactly as it does on base, with no error in the files changed here.ActionSurfaceParityTestsandActionContractTestsrun on CI.Changelog
none
Agent session: huge-blue
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
The Chief pane's Subagents menu rows now run the registered
chief.openSubagentaction through the action registry, instead of an inline selector, so thecheck-menu-actions.pyguard passes. Rows behave identically to before.chief.openSubagentaction binds to the same activation path as a click on the sidebar row; its target is the row'ssidebar-item:<id>, and it is exempt from the palette and CLI verb asfocusMove.Written for commit 2b76082. Summary will update on new commits.