Repository navigation
Reorganize Settings: split Plugins (built-in) from Extensions (installed) - #148
Conversation
…led), reorder nav, redesign Marketplace cards
The Plugins section mixed four unrelated things in one long scroll: the
compiled-in plugin permission/audit list, the Marketplace, Install-by-URL,
and the installed-extension list — and used "plugin" for both the
compiled-in tools and externally installed artifacts interchangeably.
- Split into two nav sections: Plugins (compiled-in tools + permissions +
activity log only) and Extensions (Marketplace + Install by URL +
installed list), matching the terminology docs/plugin-sdk already uses
("Settings → Extensions").
- Reordered the nav by how often each section is actually touched:
Appearance/Tools/Shortcuts, then Plugins/Extensions/MCP, then
Permissions/About/Storage/Config.
- Renamed the `settings.plugins.install/installed/tabs/marketplace/restart.*`
i18n keys to `settings.extensions.*`, fixed wording that no longer
matched the split ("Installed from outside" -> "Installed extensions",
"plugin list" -> "extension list" in the Marketplace copy), and moved the
extension-update badge from the Plugins nav entry to Extensions.
- Marketplace cards: separated label from id@version onto their own lines
(was truncating together), switched the grid to auto-fill so it uses
available width instead of a fixed 2-column layout, and gave installed
cards a subtle accent border/hover state for other cards.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BCypCuViyQDKGWxWspXKs2
Important Pullfrog covered this run's model usage.
|
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #148 +/- ##
==========================================
- Coverage 65.49% 65.43% -0.06%
==========================================
Files 13 13
Lines 3428 3428
==========================================
- Hits 2245 2243 -2
- Misses 1183 1185 +2 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
ℹ️ No critical issues. The split, the i18n rename, and the deep-link re-target are complete and covered by tests; only stale section-name references and one unused key came up.
Reviewed changes
- Section split:
Settings.tsxgains anextensionssection;SettingsPluginskeeps only the compiled-in plugin permission + audit tables, while the newSettingsExtensionstakes over the Marketplace / Install-by-URL tabs and thependingInstalltab-default + subscribe logic. - Nav reorder + badge:
SETTINGS_SECTIONSregrouped by usage frequency; the extension-update badge moved frompluginstoextensions. - i18n rename:
settings.plugins.{install,installed,tabs,marketplace,restart}.*→settings.extensions.*, plus a newsettings.section.extensions; copy reworded for the new terminology. - Deep-link retarget:
deepLink.tsnavigates with{ section: 'extensions' }; routing test andrenderSettingshelper follow. - Marketplace cards: label and
id@versionsplit onto separate lines, grid switched toauto-fill/minmax(15rem,1fr), installed cards get an accent border + hover state.
I verified npx tsc --noEmit is clean and the affected vitest suites pass (17 tests across routing / pendingInstall / marketplace / plugins), and that no stale settings.plugins.(install|installed|tabs|marketplace|restart) references remain outside i18n.ts.
ℹ️ Stale comments still name "Settings → Plugin" for the install flow
The install UI moved to Settings → Extensions, but three comments in files this PR touches still describe the deep-link target as Settings → Plugin. Only comments, no runtime effect, but they are the exact terminology this PR is aligning.
Technical details
# Stale section-name references after the Plugins → Extensions split
## Affected sites
- `src/lib/pendingInstall.ts:13` — "nếu người dùng ĐANG đứng ở Settings → Plugin …"
- `src/components/SettingsExtensionInstaller.tsx:133` — "… điều hướng tới Settings → Plugin"
- `src/components/SettingsExtensionInstaller.test.tsx:365` — "người dùng đang đứng sẵn ở Settings → Plugin"
- `src/platform/registry.ts:119` — says "Settings → Extensions đọc mảng này (`PLUGIN_ERRORS`)", but no component reads `PLUGIN_ERRORS` (only tests + `platform/index.ts` re-export); the previous text had the same inaccuracy under the old name.
## Required outcome
- Section-name references point at the section that actually renders the flow: the deep link now targets `settings.extensions` (per `deepLink.ts:76`), so the first three comments should say Settings → Extensions.
- `registry.ts:119` should either drop the "đọc mảng này" claim or note the array is currently only consumed by tests, so it doesn't imply a UI that does not exist.Important
Pullfrog covered this run's model usage. DeepSeek Flash is fast and cheap — expect lighter work than a frontier model. This model allowance is temporary and separate from your Pullfrog plan. Connect a model-provider subscription or API key →
DeepSeek Flash (model usage covered by Pullfrog) | 𝕏
| 'settings.plugins.install.description': { | ||
| // ── Settings — Extensions (cài plugin/sidecar KHÁC ngoài bản biên dịch sẵn, | ||
| // qua Marketplace hoặc dán URL manifest tay) ────────────────────────── | ||
| 'settings.extensions.title': { vi: 'Tiện ích', en: 'Extensions' }, |
There was a problem hiding this comment.
settings.extensions.title is added but never referenced — the nav label comes from settings.section.extensions (Settings.tsx:302) and the panel renders no visible title, so this is an unused duplicate of the same string. Either use it as the nav label (matching settings.plugins.title / settings.mcp.title) or drop it, so the two don't drift.



Summary
The Settings → Plugins page mixed four unrelated things in one long scroll — the compiled-in plugin permission/audit list, the Marketplace, Install-by-URL, and the installed-extension list — and used "plugin" for both the compiled-in tools and externally installed artifacts interchangeably.
docs/plugin-sdkalready uses ("Settings → Extensions").settings.plugins.install/installed/tabs/marketplace/restart.*i18n keys tosettings.extensions.*, fixed wording that no longer matched the split ("Installed from outside" → "Installed extensions", "plugin list" → "extension list" in the Marketplace copy), and moved the extension-update nav badge from Plugins to Extensions.id@versiononto their own lines (was truncating together), switched the grid to auto-fill so it uses available width instead of a fixed 2-column layout, and gave installed cards a subtle accent border plus a hover state for others.Test plan
npx tsc --noEmit— cleannpx vitest run— 1366/1366 passing (moved/updatedSettings.routing.test.tsx,SettingsMarketplace.test.tsx, renamedSettingsPlugins.pendingInstallTab.test.tsx→SettingsExtensions.pendingInstallTab.test.tsx)🤖 Generated with Claude Code
https://claude.ai/code/session_01BCypCuViyQDKGWxWspXKs2
Generated by Claude Code