cmux NEXT sidebar: Priority rows' mark read, pin, snooze and archive are actions (palette, menu)

Merged
TE
16d ago
+1181-73

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) and sidebar.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 an agent-chat: target. On a row's chat it hides the row and sends _acpmux/archive the 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 new priorityRow menu (registry.makeContextMenu, through SidebarContextTarget.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

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.py passed; lint-ios-package-conventions.sh, lint-xcstrings.py and check-xcstrings-keys.py passed.
  • Not run: no live app capture of the row menu, so this has the media-tour label. plans/cmux-next/action-surfaces.json, actions.md and 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