diff --git a/astrbot/dashboard/services/plugin_service.py b/astrbot/dashboard/services/plugin_service.py index 353fca2b55..f1e9d1bb42 100644 --- a/astrbot/dashboard/services/plugin_service.py +++ b/astrbot/dashboard/services/plugin_service.py @@ -643,7 +643,7 @@ def serialize_plugin_base( "version": plugin.version, "reserved": plugin.reserved, "activated": plugin.activated, - "online_vesion": "", + "online_version": "", "display_name": plugin.display_name, "logo": logo_url, "support_platforms": plugin.support_platforms, diff --git a/dashboard/src/views/extension/useExtensionPage.js b/dashboard/src/views/extension/useExtensionPage.js index 7c313cd71d..55356c1249 100644 --- a/dashboard/src/views/extension/useExtensionPage.js +++ b/dashboard/src/views/extension/useExtensionPage.js @@ -711,7 +711,10 @@ export const useExtensionPage = (initialTab = "installed") => { const findMarketPluginForExtension = (extension) => { if (!extension) return null; const source = extension.install_source || {}; - if (source.implicit === true || source.install_method !== "market") { + // Implicit records (legacy plugins installed before source persistence) + // still carry the plugin repo, so resolve them against the default market + // instead of treating them as unmatchable. + if (source.install_method !== "market") { return null; } if (extension.update_market_plugin) { @@ -765,10 +768,12 @@ export const useExtensionPage = (initialTab = "installed") => { extension.update_market_plugin = null; const source = extension.install_source; + // Implicit records (legacy plugins with no persisted install source) + // resolve to the default registry, so keep them in the update check + // instead of skipping them entirely. if ( !extension.updates_enabled || !source || - source.implicit === true || source.install_method !== "market" ) { return;