3 months ago
6b4f950cmdk and the Command primitive were installed but never wired up, so switching threads, jumping to settings, opening a workspace, or running a skill were all mouse-only. - components/ui/command.tsx: add CommandDialog (Dialog + Command shell) with a visually-hidden DialogTitle and aria-describedby opt-out for a11y. - ui/CommandPalette.tsx: palette body reading from the existing zustand store. Groups: Actions (New chat, Browse skills), Recent threads (newest non-draft/non-archived, top 8), Workspaces (project workspaces), Settings (derived from getSettingsGroups), Skills (enabled installations). Selection reuses existing store actions: selectThread / selectWorkspace / openSettings(page) / openSkills / openNewChatLanding. - App.tsx: add a Cmd/Ctrl+K keydown listener (scoped to the main window so popout quick-chat/menu-bar/canvas keep their minimal shells) toggling a local open state; render the palette alongside the other top-level modals. No accelerator conflict (Skills is Cmd+Shift+K). - test/command-palette.test.tsx: lock in recent-threads filtering, settings page derivation, and open/closed rendering against a mocked store.
Parent70d9f75