fix(plugins): 插件管理 - 修正官方应用插件的分类与状态显示
AI 审美分析和剪辑工作台在管理页显示为"已停用",原因是三处插件 分类清单不一致: - 后端 officialApplicationPolicies 缺少 editor-shell - 管理页 officialApplicationIds 同时缺少 ai-art-critique 和 editor-shell - 用户插件页另有一份重复清单 后端把这两个插件当作系统协议处理(Kind=protocol),platformAvailable 回退为 false,于是返回"管理员已停用该插件",管理页据此渲染成"已停用"。 修复: - 后端补上 editor-shell 应用策略(权威修复,决定平台可用性) - 前端抽取唯一清单 OFFICIAL_APPLICATION_PLUGIN_IDS,管理页与用户插件页 共用,删除两份重复实现 - 补前后端回归测试,锁定这 8 个官方应用插件 验证:tsc --noEmit 通过;前端 17 项测试通过;后端 TestEditorShell* 与 既有插件测试通过;前后端镜像构建通过。
This commit is contained in:
@@ -8,9 +8,8 @@ import { useEffect, useMemo, useState } from "react";
|
||||
import { PaginationBar } from "@/components/layout/workspace-page";
|
||||
import "@/lib/plugins/builtin";
|
||||
import { EAGLE_PLUGIN_ID } from "@/lib/plugins/builtin/eagle";
|
||||
import { PROMPT_OPTIMIZER_PLUGIN_ID } from "@/lib/plugins/builtin/prompt-optimizer";
|
||||
import { COMFYUI_PLUGIN_ID, RUNNINGHUB_PLUGIN_ID } from "@/lib/plugins/builtin/workflows";
|
||||
import { MEDIA_CONVERSION_PLUGIN_ID } from "@/lib/plugins/builtin/media-conversion";
|
||||
import { isOfficialApplicationPluginId } from "@/lib/plugins/official-applications";
|
||||
import { listRegisteredPlugins } from "@/lib/plugins/plugin-registry";
|
||||
import type { PluginManifest, PluginManifestV2 } from "@/lib/plugins/plugin-types";
|
||||
import { fetchAdminPlugins, setPluginPlatformAvailability, uninstallPlugin, uploadPlugin, type AdminPluginState, type BackendPlugin, type PluginManagement } from "@/services/api/plugins";
|
||||
@@ -27,8 +26,6 @@ type AdminPluginItem = {
|
||||
error?: string;
|
||||
};
|
||||
|
||||
const officialApplicationIds = new Set([RUNNINGHUB_PLUGIN_ID, COMFYUI_PLUGIN_ID, EAGLE_PLUGIN_ID, PROMPT_OPTIMIZER_PLUGIN_ID, "portrait-clearance", MEDIA_CONVERSION_PLUGIN_ID]);
|
||||
|
||||
export default function AdminPluginsPage() {
|
||||
const { message, modal } = App.useApp();
|
||||
const [plugins, setPlugins] = useState<BackendPlugin[]>([]);
|
||||
@@ -363,7 +360,7 @@ function PluginBrandIcon({ pluginId }: { pluginId: string }) {
|
||||
function mergePlugins(remote: BackendPlugin[]): AdminPluginItem[] {
|
||||
const byId = new Map<string, AdminPluginItem>();
|
||||
for (const plugin of listRegisteredPlugins()) {
|
||||
const application = officialApplicationIds.has(plugin.manifest.id);
|
||||
const application = isOfficialApplicationPluginId(plugin.manifest.id);
|
||||
byId.set(plugin.manifest.id, {
|
||||
manifest: plugin.manifest,
|
||||
source: plugin.source || "bundled",
|
||||
|
||||
Reference in New Issue
Block a user