From 6832b01b23e34e7499a458799ba7c1f74585b40e Mon Sep 17 00:00:00 2001 From: mirivlad Date: Tue, 16 Jun 2026 17:52:50 +0800 Subject: [PATCH] fix: show core capabilities in registry, add degraded text + contribution counts --- .../src/lib/plugin-manager/PluginCard.svelte | 46 ++++++++++++++++++- .../lib/plugin-manager/PluginManager.svelte | 34 +++++++++++--- 2 files changed, 72 insertions(+), 8 deletions(-) diff --git a/frontend/src/lib/plugin-manager/PluginCard.svelte b/frontend/src/lib/plugin-manager/PluginCard.svelte index 20854ea..5c2addc 100644 --- a/frontend/src/lib/plugin-manager/PluginCard.svelte +++ b/frontend/src/lib/plugin-manager/PluginCard.svelte @@ -2,6 +2,7 @@ export let p = {}; export let capabilities = []; export let permissions = []; + export let contributions = {}; $: m = p.manifest || {}; @@ -16,6 +17,24 @@ discovered: '#a0a0b8', }[p.status] || '#a0a0b8'); + $: pluginId = m.id || 'unknown'; + + $: contribCounts = { + views: (contributions.views || []).filter(v => v.pluginId === pluginId).length, + commands: (contributions.commands || []).filter(c => c.pluginId === pluginId).length, + sidebar: (contributions.sidebarItems || []).filter(s => s.pluginId === pluginId).length, + statusbar: (contributions.statusBarItems || []).filter(s => s.pluginId === pluginId).length, + }; + + $: contribSummary = (() => { + const parts = []; + if (contribCounts.views > 0) parts.push(contribCounts.views + ' view' + (contribCounts.views !== 1 ? 's' : '')); + if (contribCounts.commands > 0) parts.push(contribCounts.commands + ' command' + (contribCounts.commands !== 1 ? 's' : '')); + if (contribCounts.sidebar > 0) parts.push(contribCounts.sidebar + ' sidebar' + (contribCounts.sidebar !== 1 ? 's' : '')); + if (contribCounts.statusbar > 0) parts.push(contribCounts.statusbar + ' statusbar' + (contribCounts.statusbar !== 1 ? 's' : '')); + return parts.length > 0 ? parts.join(', ') : 'none'; + })(); + $: dangerousPermissions = (m.permissions || []).filter(name => { let perm = permissions.find(p => p.name === name); return perm && perm.dangerous; @@ -44,6 +63,10 @@ {p.status} + {#if p.status === 'degraded'} +

Plugin is usable, but some optional capabilities are unavailable.

+ {/if} + {#if m.description}

{m.description}

{/if} @@ -65,6 +88,10 @@ Root: {p.rootPath || '-'} +
+ Contributions: + {contribSummary} +
@@ -103,10 +130,13 @@ {@const found = capabilities.some(c => c.name === opt)} {opt} - {#if found}{:else}{/if} + {#if found}{/if} {/each} + {#if missingOptional.length > 0} +

ℹ Optional capabilities not available — plugin running in degraded mode

+ {/if} {/if} @@ -186,6 +216,13 @@ margin-bottom: 0.75rem; } + .degraded-text { + color: #ffc857; + font-size: 0.8rem; + margin-bottom: 0.5rem; + font-style: italic; + } + .card-meta { display: grid; grid-template-columns: 1fr 1fr; @@ -266,9 +303,14 @@ } .check { color: #4ecca3; margin-left: 2px; } - .x { color: #e94560; margin-left: 2px; } .danger-icon { color: #e94560; margin-left: 2px; } + .info { + color: #ffc857; + font-size: 0.8rem; + margin-top: 0.3rem; + } + .warning { color: #ffc857; font-size: 0.8rem; diff --git a/frontend/src/lib/plugin-manager/PluginManager.svelte b/frontend/src/lib/plugin-manager/PluginManager.svelte index 413aae8..26253fc 100644 --- a/frontend/src/lib/plugin-manager/PluginManager.svelte +++ b/frontend/src/lib/plugin-manager/PluginManager.svelte @@ -1,11 +1,12 @@