Skip to content

Add a reusable command palette / launcher for Ink apps #6

Description

@kud

Goal

Add a reusable Raycast-style command palette / launcher to @kud/ink-ui, with Cockpit as the first consumer and the component designed to work across other Ink apps.

Why

Cockpit and the other TUIs increasingly have more actions than should live in persistent key hints. A global command launcher would provide one discoverable surface for navigation and actions without adding more one-off shortcuts to each screen.

The interaction should feel like the familiar Cmd+K command palette pattern: open an overlay, type to filter commands, move through results, and execute one.

Scope to explore

  • reusable CommandPalette / launcher primitive in @kud/ink-ui
  • host-provided command registry rather than hard-coded domain actions
  • searchable/fuzzy filtering by label, aliases and possibly keywords
  • keyboard navigation using the existing @kud/ink-ui keyboard contracts
  • grouped commands where useful (navigation, item actions, app actions, etc.)
  • optional shortcut hints displayed beside commands
  • clean overlay semantics: opening the launcher pushes one layer; esc closes exactly that layer
  • support commands that navigate within the current TUI as well as commands that return an intent for the host to execute after Ink releases the terminal
  • first integration target: Cockpit

Keyboard question

The UX concept is Cmd+K, but the actual terminal binding should be treated as a host/configuration concern rather than baked into the component. Investigate which chord is reliably exposed by the terminal/Ink environment and allow consumers to choose the trigger.

Design constraints

  • follow the existing @kud/ink-ui keyboard ownership rules; avoid competing useInput handlers
  • reuse existing TextInput, list cursor/selectable primitives, overlays/panels and design tokens rather than hand-rolling equivalents
  • the component should be domain-agnostic; Cockpit supplies its commands
  • keep the launcher fast enough to feel instantaneous and useful as the normal way to reach less-common actions

First Cockpit commands to consider

Examples only, not a fixed API:

  • switch view / section
  • refresh
  • open selected item in browser
  • open selected item / drill in
  • create or jump to a ticket-related action where supported
  • invoke extension-provided actions
  • help / discover available commands

Done when

  • @kud/ink-ui exposes a reusable launcher/command-palette API
  • its focus/back behaviour follows the existing app-key contract
  • filtering and keyboard execution are covered by tests
  • Cockpit can mount it with its own command registry without duplicating launcher UI/keyboard logic
  • the chosen trigger strategy is documented, including any terminal limitation around the Cmd+K pattern

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions