Skip to content

feat(app): manage desktop plugins in Extensions › Plugins - #59489

Merged
Hona merged 2 commits into
anomalyco:devfrom
Hona:merge-plugin-settings
Oct 27, 2026
Merged

Hona merged 2 commits into
anomalyco:devfrom
Hona:merge-plugin-settings

Conversation

@Hona

@Hona Hona commented Oct 27, 2026 •

Copy link
Copy Markdown
Member

One place for plugins: Settings › Plugins is gone, and Settings › Extensions › Plugins now manages what the desktop app runs, next to MCPs and Skills.

Before After
Settings › Plugins page Extensions › Plugins tab Merged Extensions › Plugins tab
  • Desktop app's own server: each config plugin row gets the desktop UI switch, Reload, its status (Loading, Failed with the error's first line and Show details), the Server/TUI tags, and the note on turning off other parts. Rows the server list doesn't name (unsupported OS, reserved id, unreadable bundle, GUI-only) still show, matched by plugin id.
  • Built-ins are hidden. They always run and can't be turned off. A built-in that failed still shows one row with its error and Reload, since this was the only place a built-in failure appeared.
  • Other servers and the web list names only, as before: the desktop app runs GUI parts only from its own server.
  • Old entry points (?tab=plugins, layout.settings("plugins"), search for "plugins" or "extension gui built-in") open Extensions on the Plugins tab.
  • Docs and the plugin guides now say Settings › Extensions › Plugins.
flowchart LR
  list["server plugin.list()"] --> merge["merge by plugin id"]
  installed["desktop main: installed, unsupported, reserved, unreadable"] --> merge
  merge --> rows["Extensions › Plugins rows (built-ins hidden unless failed)"]
Loading

Visual

<svg xmlns="http://www.w3.org/2000/svg" width="240" height="72" viewBox="0 0 240 72" fill="none" stroke="currentColor" stroke-linecap="round">
  <g opacity=".35"><line x1="10" y1="14" x2="40" y2="14"/><line x1="10" y1="24" x2="34" y2="24"/><line x1="10" y1="34" x2="38" y2="34"/></g>
  <g>
    <line x1="10" y1="44" x2="32" y2="44" opacity=".35"/>
    <animate attributeName="opacity" values="1;1;0;0;1" keyTimes="0;.2;.35;.9;1" dur="4s" repeatCount="indefinite"/>
  </g>
  <line x1="52.5" y1="6" x2="52.5" y2="66" opacity=".2"/>
  <g opacity=".45"><rect x="64.5" y="8.5" width="22" height="8" rx="2"/><rect x="90.5" y="8.5" width="26" height="8" rx="2" fill="currentColor" fill-opacity=".15"/><rect x="120.5" y="8.5" width="20" height="8" rx="2"/></g>
  <rect x="64.5" y="22.5" width="166" height="42" rx="3" opacity=".4"/>
  <g>
    <line x1="72" y1="32" x2="104" y2="32" opacity=".6"/>
    <rect x="212.5" y="28.5" width="12" height="7" rx="3.5" fill="currentColor" fill-opacity=".35"/>
    <line x1="72" y1="44" x2="96" y2="44" opacity=".6"/>
    <rect x="212.5" y="40.5" width="12" height="7" rx="3.5" opacity=".5"/>
    <line x1="72" y1="56" x2="110" y2="56" opacity=".6"/>
    <animateTransform attributeName="transform" type="translate" values="0 6;0 6;0 0;0 0;0 6" keyTimes="0;.3;.45;.9;1" dur="4s" repeatCount="indefinite"/>
    <animate attributeName="opacity" values="0;0;1;1;0" keyTimes="0;.3;.45;.9;1" dur="4s" repeatCount="indefinite"/>
  </g>
</svg>

Added by the opencode bot (AI-generated).

Related: #41037

Hona added 2 commits October 27, 2026 13:22
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.
@Hona
Hona requested a review from Brendonovich as a code owner October 27, 2026 03:31
Copilot AI balanced review requested due to automatic review settings October 27, 2026 03:31

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@Hona
Hona enabled auto-merge (squash) October 27, 2026 03:33

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

@Hona
Hona merged commit 5792c3e into anomalyco:dev Oct 27, 2026
23 checks passed
@amrkmn amrkmn mentioned this pull request Oct 27, 2026
1 task
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants