cmux NEXT sidebar: Priority rows' mark read, pin, snooze and archive are actions (palette, menu)
In the cmux NEXT sidebar's Priority view, a row's hover buttons (mark read, pin, snooze, archive) wrote straight into AgentPriorityMarks, so none of them had a palette row, a right-click menu or a bindable shortcut. They're registered actions now, and every entrypoint runs them through the registry on the row's chat.
- New target:
agent-chat:<session id>(ActionTargetKind.agentChat), the chat a Priority row shows. It stands in for a focused agent chat, so actions that need one can run on a row. - New actions (
SidebarPriorityActionCatalog, with Toggle Priority View moved beside them):sidebar.priority.markRead(Mark Chat as Read),sidebar.priority.togglePin(Pin or Unpin Chat in Priority; the menu row reads Pin to Priority or Unpin from Priority) andsidebar.priority.snooze(Snooze Chat for 1 Hour). The marks are this Mac's view state, so there's no CLI verb (guiOnly). There are no default shortcuts; a person can bind one. - Archive reuses
agentPane.archiveChat. It now also takes anagent-chat:target. On a row's chat it hides the row and sends_acpmux/archivethe way the button did, and it shows the row again if acpmux refuses. Any other run is still the focused chat's own Archive. No second archive action. - Entrypoints: the hover buttons send their choice to the feed, which runs the action (
SidebarPriorityRowActions.perform). A right-click on a row opens the newpriorityRowmenu (registry.makeContextMenu, throughSidebarContextTarget.priorityChat): Mark Chat as Read (left out where the button is greyed, on a question), Pin/Unpin, Snooze, then Archive Chat. From the palette, each action asks which chat and lists the Priority rows in rank order (PriorityChatTargetSource). - The marks and the acpmux archive moved from the feed into
AgentPriorityChats(CmuxNextAgentLanes), one per app, which the handlers write through.
SidebarPriorityPanelView.swift is untouched, so this stays clear of the Priority reorder motion PR.
Changelog
Added: Priority view rows have a right-click menu, and Mark as Read, Pin, Snooze and Archive are in the command palette and can take a shortcut.
Testing
Red/green: cmux-ci run --class light --script scripts/ci/package-test-lane.sh --arg=suite --arg=Packages/macOS/CmuxNext --arg=SidebarPriorityRowActionsTests --env CMUX_CI_XCODE_APP=/Applications/Xcode_26.6.app
- Red, test commit 0d7c097c8b0f2f41944b144255d5ddfd9681c04a (tests only, on base): step 443658f0fd0b1772dd456f2b failed. The suite doesn't compile there:
cannot find type 'AgentPriorityChats',type 'ActionTargetKind' has no member 'agentChat',type 'ActionMenuContext' has no member 'priorityRow'. The actions don't exist on base. - Green, head db94c25bbb682b05279be159b9b4ca0148fc237a: step 510f160c035970630e3cc4ac passed all six suites (
SidebarPriorityRowActionsTests,AgentPriorityRankingTests,ActionSurfaceParityTests,ActionCatalogTests,ActionContractTests,AgentChatKeyTests). cmux-ci compile-check --appat 45f19719b23f8145d1ab7f1404b1765fe15d9f61 (the same sources; the head after it changes only the test): passed, job 9f3a107799e01678d29dd2f0.
SidebarPriorityRowActionsTests checks that each action run through the registry on a row's chat writes the same AgentPriorityMarks the hover button wrote before. It checks that the hover button changes nothing while the action is unbound and matches a registry run once it's bound. It checks that the row's menu lists the four actions on the row's chat, that its pin row says Pin or Unpin, that it drops Mark as Read on a question, and that a menu item runs. It also checks that the palette lists the Priority chats, and that an unknown chat changes nothing.
Observed / Not run
- Observed: the fleet red and green steps above;
prepush-gate.pypassed;lint-ios-package-conventions.sh,lint-xcstrings.pyandcheck-xcstrings-keys.pypassed. - Not run: no live app capture of the row menu, so this has the
media-tourlabel.plans/cmux-next/action-surfaces.json,actions.mdand the other action exports aren't hand-edited; the PR autofix regenerates them (regenerate-action-exports.sh). Strings are added in all 21 catalog languages; the translations are mine and not reviewed by a native speaker.
Agent session: cosmic-gray
🤖 Generated with Claude Code