feat(workspace): ⌘/ focuses the sidebar search, and the rail shows shortcut tips (ent#621 follow-up) - #3249
Draft
trinity-ability wants to merge 2 commits into
Conversation
…cut tips (ent#621 follow-up) - `⌘/` (Ctrl+/) puts the cursor in the sidebar's "Search agents and chats" field and selects its text; pressed again from the field it hands the caret back to the message field. Below `sm` it opens the drawer and focuses that instance. The field shows the chord (key cap, title, aria-keyshortcuts). Chosen to echo the Dashboard's `/` filter key. - The shortcuts list moves to `⌥/` to free the chord, keeping the `⌘.` / `⌥.` pairing. - `PortalKeyTips`: a small panel pinned to the bottom of the open rail with four headline chords and an "All shortcuts" button; one icon at the foot of the collapsed strip; neither on the mobile sheet. Rows are derived from the key map (`KEY_TIPS` -> `keyTipRows`). Dismissible, remembered per browser in localStorage. - `PortalKeyCap`: the one `<kbd>` recipe for the key list, the tips and the search field. Requirements: core-agent.md 5.21a AC-1/9 amended, AC-11 and AC-12 added. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ollow-up) The panel was a heading, four rows and a footer button (213px). It is now two rows of two with the close and open-the-list controls stacked beside them (80px), and nothing above or below. - `keyHintCompact` packs a chord pair that differs only in its last key into one cap (`⌥↑↓`, `Alt+Shift+↑↓`); anything it cannot pack without losing something falls back to `keyHint`. - Columns size to their content; when the rail is dragged narrow a label shortens with an ellipsis (full text on hover) while a key cap never wraps and a row never becomes two. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This branch has not been deployed
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.
Follow-up to abilityai/trinity-enterprise#621, requested by the operator while trying the keys. Stacked on #3241, so the base is
feature/ent621-workspace-keymap; it merges after #3219 and #3241, on the operator's call. Draft until then. Frontend and docs only.What
⌘/(Ctrl+/) puts the cursor in the sidebar's "Search agents and chats" field and selects what is in it. Pressed again from the field, it hands the caret back to the message field. Belowsmthe sidebar is the drawer, so the key opens it and focuses that instance. The chord echoes the Dashboard's/filter key. The field shows it three ways: a key cap while empty and unfocused,title, andaria-keyshortcuts.⌥/to free the chord, keeping the⌘./⌥.pairing.⌘Kstays reserved and unbound.PortalKeyTips.vue): a small panel pinned to the bottom of the open rail. Two rows of two (switch agent, switch chat, search, new chat) with the close and open-the-list controls stacked beside them, 80px tall. The collapsed strip carries one icon at its foot instead; the mobile sheet carries neither. Dismissible, remembered per browser (localStorage).keyHintCompactpacks a chord pair that differs only in its last key into one cap (⌥↑↓,Alt+Shift+↑↓), and falls back tokeyHintfor anything it cannot pack without losing something.PortalKeyCap.vue: one<kbd>recipe for the key list, the tips and the search field.WORKSPACE_KEYMAP(KEY_TIPS->keyTipRows); nothing is hand-typed.docs/memory/requirements/core-agent.md§5.21a (AC-1 and AC-9 amended, AC-11 and AC-12 added, written before the code) and the chat-tabs feature flow.Operator rulings carried
⌘/for search (operator, 2026-10-05).Decisions made here, for the operator to overrule:
⌥/rather than losing its chord.Tests
workspaceKeymap.spec.js(the new chords,keyHintCompact,keyTipRows, the dismissal storage),workspaceKeymap.mount.spec.js(the search key in the mounted shell: column, drawer, return to the composer, suppression under a dialog, allowed during a call; the dismissal surviving a remount),portalKeyTips.mount.spec.js(the panel in all three rail forms),portalKeyHints.mount.spec.js(the search field's key cap andfocusSearch).markdownCodeBlocks.spec.js, a check of the installed DOMPurify) fails in the local container on the base branch too.⌥/; the panel button; dismissal across a reload; light and dark. The two-row layout was measured at the default rail width and at the narrowest (280px), with Mac labels and with Windows labels (platform faked, not a Windows machine): two rows, no wrapped key cap, no horizontal overflow. Windows labels shorten with an ellipsis at the narrowest width.Before merge
⌥/on a layout where/is a shifted key), screen readers, a tablet with a hardware keyboard belowsm.⌘/opens the key list; after this PR that is⌥/.🤖 Generated with Claude Code