Skip to content

Control UI: add guarded dashboard keyboard shortcuts #81946

@BunsDev

Description

@BunsDev

Split from #11146.

Problem

The Control UI has a command-palette shortcut, but common dashboard chat actions still require mouse interaction. The most obvious gap is the New messages button, which is click-wired only.

Current source evidence:

  • ui/src/ui/app.ts has a document-level shortcut only for Cmd/Ctrl+K / Ctrl+K to toggle the command palette.
  • ui/src/ui/views/chat.ts renders New messages with only the button click path to onScrollToBottom.
  • Chat textarea key handling is local to composer behavior such as slash menu, search, and history; it is not a guarded dashboard dispatcher.

Scope

Add a guarded Control UI shortcut dispatcher for the smallest valuable set of dashboard actions:

  • / focuses the chat composer when focus is not already inside editable content.
  • N jumps to new messages / bottom when the new-message affordance is present.
  • Esc dismisses transient dashboard UI such as command palette, search, menus, notices, or focus state where applicable.
  • Keep existing Cmd/Ctrl+K command palette behavior.

Avoid binding Space as the primary jump shortcut for the first pass because it conflicts with native button/page behavior.

Acceptance criteria

  • Shortcuts do not fire while focus is in an input, textarea, select, contenteditable region, dialog text field, or component-owned text editor.
  • Existing composer-local arrow/history/slash-menu behavior remains unchanged.
  • New-message jump reaches the same behavior as clicking New messages.
  • Shortcut help/discoverability is available through the command palette or adjacent UI if there is an existing pattern for it.
  • Focused UI tests cover guarded dispatch, no-op editable-focus cases, and the new-message path.

Validation expectation

Before merge, run focused UI tests for the touched shortcut/chat path and the repo's changed-file gate in Testbox for user-visible Control UI work.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestmaintainerMaintainer-authored PR

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions