Repository navigation
feat(app): manage desktop plugins in Extensions › Plugins - #59489
Conversation
Merge the desktop-only Settings › Plugins page into the Plugins tab of
Extensions. On the desktop app's own server, each plugin row now carries
the desktop UI switch, Reload, status and error, the Server/TUI tags, and
the unsupported, reserved and unreadable explanations, merged by plugin
id with what main reports. Built-ins are hidden unless they failed. Other
servers and the web still list names only.
Remove the Settings › Plugins page, its nav item and search entry. Links
to `?tab=plugins` and `layout.settings("plugins")` open Extensions with
the Plugins tab selected.
A failed plugin row showed its whole stack trace, which made the row 20+ lines tall. Show the error's first line by default, with a "Show details" toggle that expands the full text. A one-line error has no toggle.
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
There was a problem hiding this comment.
I found no blocking problems. I couldn't run the desktop app here, so I checked it by reading the code: the merge of the server list with what the desktop app reports, the redirect for ?tab=plugins and layout.settings("plugins"), and removing the old page. The settings route tests pass, and tsc --noEmit in packages/app gives no errors. The new component story didn't run here because Chromium wouldn't start. A short screen recording of the merged tab on the desktop app's own server, including a failed plugin and a remote server, would be useful.
Public API: no changes. layout.settings(page) keeps its signature, and "plugins" now opens Extensions › Plugins instead of the removed page, so existing calls keep working. Removing "plugins" from SettingsRootTab only affects code inside the app.
One small, non-blocking point: the new story checks a lot in one test (row order, tags, errors, the details toggle, switches, Reload, and the bridge calls). It also drives Reload by position (.nth(1)), so it will break if the row order changes. Picking the button by its row, as the test already does for flaky, would make it sturdier.
Related: #41037
One place for plugins: Settings › Plugins is gone, and Settings › Extensions › Plugins now manages what the desktop app runs, next to MCPs and Skills.
?tab=plugins,layout.settings("plugins"), search for "plugins" or "extension gui built-in") open Extensions on the Plugins tab.Visual
Added by the opencode bot (AI-generated).
Related: #41037