* feat(desktop): add SettingsStatTile and EntityIcon settings primitives
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat: icon metadata for MCP servers, marketplace entries, and plugin skills
- MCPServerConfig accepts optional icon (URL or data URI) that round-trips
through upsert/read; plugin servers fall back to the owning plugin logo
- marketplace.json entries parse interface icon/logo/brandColor into
availablePlugins/availableSkills interface metadata
- plugin bundled skills embed icon_small/icon_large data URIs like
standalone skills
- protocol docs + harness tests for each path
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat(desktop): rebuild Tool Access as the plugins/MCP/marketplace hub
Tool Access now hosts installed plugins, marketplace installs, skills, all-layer MCP servers (user/workspace/plugin/system) with icon+env/headers editors, flag-gated Codex connectors, and the relocated Search settings. Drops the provider stat grid and makes refreshPluginsCatalog self-sufficient (server + control socket).
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor(desktop): retire standalone plugins/skills view for Tool Access
- Route sidebar Plugins nav and openSkills through Settings > Tool Access
- Delete SkillsView, PluginsCatalogPage, SkillsCatalogPage, card grids, and
plugin management workspace state (pluginManagementWorkspaceId/Mode)
- Move still-used dialogs (ImportDialog, Install/Detail dialogs, skillUtils)
under src/ui/settings/toolAccess/
- Remove dead WorkspacesPage surface=all tab shell; relocate per-workspace
settings toggle into the defaults Advanced actions collapsible
- Update tests: drop catalog page/plugin management suites, retarget dialog
imports, remap legacy skills view cache assertions to settings
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor(desktop): migrate Desktop, Updates, Developer settings pages to SettingsPrimitives
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor(desktop): migrate Usage, Chats, Memory, Subagents settings pages to SettingsPrimitives
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor(desktop): dedupe settings ownership and collapse Backups stat tiles
- remove Workspace backups toggle from Defaults Behavior card (Backups page owns it)
- delete WorkspaceDefaultsSummary strip (Models owns provider/model/routing display)
- merge Privacy & Telemetry read-only status section into inline toggle pills, keep kill-switch row
- replace Backups InlineMetric stat tiles with a single status row
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor(desktop): standardize settings header and section action buttons
- chrome header actions use outline sm consistently (Remote Access start button)
- section action slots use outline sm buttons with data-icon lucide icons
- Subagents Refresh/New, Updates check/restart/release-notes, Desktop quick chat, Developer LibreOffice check
- Tool Access dialog triggers (Import, New plugin, New skill) drop pill styling for the shared contract
Co-authored-by: Cursor <cursoragent@cursor.com>
* chore: regenerate JSON-RPC schema artifacts for MCP icon field
Co-authored-by: Cursor <cursoragent@cursor.com>
* idk
* refactor(desktop): use SettingsSection for Defaults and Provider Settings on Models page
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor(desktop): float Defaults and Provider Settings headers outside their cards to match Providers
Co-authored-by: Cursor <cursoragent@cursor.com>
* style(desktop): soften outline button border to border/60
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat(desktop): default Subagents to global scope with workspace picker scoped to Workspace tab
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor(desktop): simplify Subagents settings page
Move Refresh/New into the settings header, drop the redundant nested
section header, collapse profile rows into a single divided list with
entity icons, and trim status pills to only meaningful states
(Disabled, Built-in, Main, Shadowed). Replace the raw profile ref and
template metadata line with the profile description, and swap the
static one-off-chat note for a scope-aware caption. Includes stray
biome formatting fixes in DesktopPage and sidebar-ui test.
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor(desktop): float section headers above cards across settings pages
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat: per-workspace availability overrides for global subagents
Adds cowork/agentProfiles/workspaceAvailability/set (protocol 7.41) so a
global or built-in subagent can be disabled for a single workspace without
editing the global profile. Overrides persist in the workspace
agent-profiles/workspace-overrides.json file, catalog entries expose
workspaceDisabled, and workspace-disabled profiles drop out of
effectiveProfiles and spawn resolution. The desktop Subagents Workspace tab
now lists global subagents with per-workspace availability switches; the
locked Main Agent profile stays always available.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: address PR review feedback
* test: isolate JSON-RPC desktop feature flags
* fix: address tool access review feedback
* fix: align mcp tool access workspace state
* fix: address plugin review feedback
* idk
* fix: preserve chat selection when opening tool access
* more
* fix: stabilize settings icons and runtime smoke
* fix: disambiguate MCP settings targets
* fix: preserve ambiguous Tool Access chats
---------
Co-authored-by: Cursor <cursoragent@cursor.com>