feat(ui): top-menu overhaul — hotfix v0.11.13#379
Merged
Conversation
#378) * feat(ui): reorganize menu bar and add domain menus The top menu was sparse and most repository/harness/marketplace operations were reachable only from sidebar toolbars and context menus — undiscoverable and without keyboard access. The File menu had also become a junk drawer of terminal, tab, navigation, zoom, and sidebar actions. Reorganize into intent-named menus: - File: terminal/document lifecycle only (new/open/export/close/delete) - View: sidebar, zoom, board navigation, command palette, font size - Edit: Find (its conventional home) - Window: Favourite Current Terminal Add three top-level domain menus mirroring the sidebar tabs: - Repositories: Add, Refresh All, Repository Settings - Harnesses: Install, Create New, Refresh All, Registries, Tools - Marketplaces: Add, Refresh All, Restore Defaults, Settings Global actions route through a new SidebarMenuCoordinator (mirroring SettingsCoordinator): a menu command reveals the sidebar, switches to the owning tab, and that tab consumes the request on appear — so the flows work regardless of which panel was showing. Settings items deep-link via SettingsCoordinator + openSettings(). The three menus live in their own DomainMenuCommands type to stay within @CommandsBuilder's 10-element limit. Menu labels are hardcoded English for now (consistent with the existing menu code); extraction into Strings.Menu.* and translation will follow as a dedicated localization commit. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat(ui): add Window terminal jump-list and Prune All Worktrees Window menu: a live jump list of open terminals, favourites first then board order, capped at nine with ⌘1–⌘9 and an "All Terminals…" item that routes overflow to the Command Palette. The snapshot is published to the menu via a new windowMenu focused value, rebuilt by ContentView whenever the board changes; selecting an item jumps to (selects) that terminal. Repositories menu: "Prune All Worktrees…" dry-runs a worktree prune across every repository and presents one aggregated confirmation sheet (PruneAllWorktreesSheet) listing stale records per repo, then prunes each on confirm — the all-repos counterpart to the existing per-repo PruneWorktreesSheet. Routed through SidebarMenuCoordinator like the other domain-menu actions. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * refactor(ui): collapse domain menus into one Workspace menu, MRU jump-list Three top-level menus plus Utilities was too much menu-bar real estate. Collapse Repositories / Harnesses / Marketplaces into flyout submenus under a single "Workspace" top-level menu, and fold Logging & Diagnostics (⌘⌥D) in alongside them — removing the separate Utilities menu. The bar goes from ten top-level menus to seven. Rework the Window jump-list from "favourites first, then board order, capped at nine" — which read as an arbitrary jiggled list — to the five most-recently-active terminals, most recent first (an MRU switcher): ⌘1 is the current terminal, ⌘2 the one before, etc. Recency is tracked by a transient MRU list on BoardViewModel, updated from selectedCard's didSet so every selection path (click, next/prev tab, jump) feeds it. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(ui): guard Prune All re-entrancy and error-vs-empty alert Two fixes from review of the Prune All path: - The menu command had no in-flight guard (unlike the toolbar button, which is disabled during analysis), so invoking it twice could stack two aggregated prune sheets. Skip when a dry-run is already running. - When every repository's dry-run threw, the empty candidate list was reported as "Nothing to prune" instead of surfacing the errors. Only show that alert when the list is genuinely empty and no repo errored. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat(localization): localize the new top-menu labels Extract the hardcoded English labels added for the Workspace menu, the relocated File/View/Edit/Window items, and the jump-list into 28 Strings.Menu.* keys and translate them across all 39 supported languages. The new keys live in Strings+TopMenu.swift as an extension Strings.Menu, matching the Strings+Sidebar / Strings+Diagnostics split convention (keeping the base Menu enum under the length limit). "Refresh All" uses a single shared key across the three submenus. No NEEDS TRANSLATION placeholders ship — every key is translated in every language file. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: David Collie <support@eyelock.net> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> (cherry picked from commit 29ba92a)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Hotfix release v0.11.13. Cherry-picks the top-menu overhaul (#378, squash
29ba92a2) ontov0.11.12so it ships to users without the rest of unreleaseddevelop.What ships
Verification
Built on
v0.11.12; clean build, lint, format, 1972 tests pass. CHANGELOG updated for v0.11.13.🤖 Generated with Claude Code