Problem
The command palette advertises search across chats, projects, settings, and skills, but source arrays are sliced before filtering. Only a small subset of chats/projects/skills can be found, and selecting a skill opens generic Tool Access rather than the chosen item.
User impact
“No results” is unreliable, so the palette cannot become the app's trusted navigation surface.
Relevant code
apps/desktop/src/ui/CommandPalette.tsx- Settings and extension registries/routing
- Task, Research, file, and panel actions
Implementation outline
- Build a complete searchable registry instead of limiting arrays before filtering.
- Separate Recent from All results.
- Index all chats, projects, settings, skills, plugins, connectors, Tasks, and supported files.
- Add New Chat, New Task, New Research, reconnect, toggle-panel, and diagnostics actions.
- Deep-link extension results to the selected detail view.
- Add user-language settings keywords and synonyms.
- Use deferred/async search for large datasets rather than silent caps.
- Avoid subscribing to broad runtime maps while the palette is closed.
- Give every result a clear type, destination, and shortcut where applicable.
Acceptance criteria
- Items beyond every current slice limit are discoverable.
- Skill/extension results open the selected detail view.
- Settings searches such as backup, telemetry, MCP, model, and archive route correctly.
- Recent items remain fast without constraining full search.
- Closed palette does not rerender for unrelated runtime changes.
- Arrow keys, Enter, Escape, and focus restoration are consistent.
Required tests
- Search results beyond existing limits.
- Deep-link routing for each item type.
- Keyword/synonym matching.
- Keyboard/focus restoration.
- Render-count assertion while closed.