From bb3f17fc0295df55bc8ec9fc6a70dc7456b05b39 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Thu, 2 Apr 2026 22:59:25 +0900 Subject: [PATCH] refactor(plugins): drop generic status report alias (#59700) --- src/cli/plugins-cli-test-helpers.ts | 1 - src/cli/plugins-cli.install.test.ts | 4 ++-- src/cli/plugins-cli.uninstall.test.ts | 12 ++++++------ src/plugin-sdk/facade-runtime.test.ts | 2 ++ src/plugin-sdk/facade-runtime.ts | 4 +++- src/plugins/status.test.ts | 6 ++---- src/plugins/status.ts | 6 ------ 7 files changed, 15 insertions(+), 20 deletions(-) diff --git a/src/cli/plugins-cli-test-helpers.ts b/src/cli/plugins-cli-test-helpers.ts index df4458b777f..35c6f90383a 100644 --- a/src/cli/plugins-cli-test-helpers.ts +++ b/src/cli/plugins-cli-test-helpers.ts @@ -20,7 +20,6 @@ export const recordPluginInstall = vi.fn(); export const clearPluginManifestRegistryCache = vi.fn(); export const buildPluginSnapshotReport = vi.fn(); export const buildPluginDiagnosticsReport = vi.fn(); -export const buildPluginStatusReport = buildPluginDiagnosticsReport; export const buildPluginCompatibilityNotices = vi.fn(); export const applyExclusiveSlotSelection = vi.fn(); export const uninstallPlugin = vi.fn(); diff --git a/src/cli/plugins-cli.install.test.ts b/src/cli/plugins-cli.install.test.ts index 0324203a4bd..75a8386a8e4 100644 --- a/src/cli/plugins-cli.install.test.ts +++ b/src/cli/plugins-cli.install.test.ts @@ -3,7 +3,7 @@ import { installedPluginRoot } from "../../test/helpers/bundled-plugin-paths.js" import type { OpenClawConfig } from "../config/config.js"; import { applyExclusiveSlotSelection, - buildPluginStatusReport, + buildPluginDiagnosticsReport, clearPluginManifestRegistryCache, enablePluginInConfig, installHooksFromNpmSpec, @@ -179,7 +179,7 @@ describe("plugins cli install", () => { }); enablePluginInConfig.mockReturnValue({ config: enabledCfg }); recordPluginInstall.mockReturnValue(installedCfg); - buildPluginStatusReport.mockReturnValue({ + buildPluginDiagnosticsReport.mockReturnValue({ plugins: [{ id: "alpha", kind: "provider" }], diagnostics: [], }); diff --git a/src/cli/plugins-cli.uninstall.test.ts b/src/cli/plugins-cli.uninstall.test.ts index 99866a89d58..d735a1f0b3c 100644 --- a/src/cli/plugins-cli.uninstall.test.ts +++ b/src/cli/plugins-cli.uninstall.test.ts @@ -2,7 +2,7 @@ import { beforeEach, describe, expect, it } from "vitest"; import { installedPluginRoot } from "../../test/helpers/bundled-plugin-paths.js"; import type { OpenClawConfig } from "../config/config.js"; import { - buildPluginStatusReport, + buildPluginDiagnosticsReport, loadConfig, parseClawHubPluginSpec, promptYesNo, @@ -39,7 +39,7 @@ describe("plugins cli uninstall", () => { }, }, } as OpenClawConfig); - buildPluginStatusReport.mockReturnValue({ + buildPluginDiagnosticsReport.mockReturnValue({ plugins: [{ id: "alpha", name: "alpha" }], diagnostics: [], }); @@ -74,7 +74,7 @@ describe("plugins cli uninstall", () => { } as OpenClawConfig; loadConfig.mockReturnValue(baseConfig); - buildPluginStatusReport.mockReturnValue({ + buildPluginDiagnosticsReport.mockReturnValue({ plugins: [{ id: "alpha", name: "alpha" }], diagnostics: [], }); @@ -111,7 +111,7 @@ describe("plugins cli uninstall", () => { installs: {}, }, } as OpenClawConfig); - buildPluginStatusReport.mockReturnValue({ + buildPluginDiagnosticsReport.mockReturnValue({ plugins: [{ id: "alpha", name: "alpha" }], diagnostics: [], }); @@ -139,7 +139,7 @@ describe("plugins cli uninstall", () => { }, }, } as OpenClawConfig); - buildPluginStatusReport.mockReturnValue({ + buildPluginDiagnosticsReport.mockReturnValue({ plugins: [{ id: "linkmind-context", name: "linkmind-context" }], diagnostics: [], }); @@ -170,7 +170,7 @@ describe("plugins cli uninstall", () => { }, }, } as OpenClawConfig); - buildPluginStatusReport.mockReturnValue({ + buildPluginDiagnosticsReport.mockReturnValue({ plugins: [{ id: "linkmind-context", name: "linkmind-context" }], diagnostics: [], }); diff --git a/src/plugin-sdk/facade-runtime.test.ts b/src/plugin-sdk/facade-runtime.test.ts index a0e2914c858..052b9f6927b 100644 --- a/src/plugin-sdk/facade-runtime.test.ts +++ b/src/plugin-sdk/facade-runtime.test.ts @@ -143,6 +143,8 @@ describe("plugin-sdk facade runtime", () => { }), ).toThrow("plugin load failure"); + expect(listImportedBundledPluginFacadeIds()).toEqual(["bad"]); + // A second call must also throw (not return a stale empty sentinel). expect(() => loadBundledPluginPublicSurfaceModuleSync<{ marker: string }>({ diff --git a/src/plugin-sdk/facade-runtime.ts b/src/plugin-sdk/facade-runtime.ts index d0d23a81269..164417a550f 100644 --- a/src/plugin-sdk/facade-runtime.ts +++ b/src/plugin-sdk/facade-runtime.ts @@ -337,9 +337,11 @@ export function loadBundledPluginPublicSurfaceModuleSync(param let loaded: T; try { + // Track the owning plugin once module evaluation begins. Facade top-level + // code may have already executed even if the module later throws. + loadedFacadePluginIds.add(resolveTrackedFacadePluginId(params.dirName)); loaded = getJiti(location.modulePath)(location.modulePath) as T; Object.assign(sentinel, loaded); - loadedFacadePluginIds.add(resolveTrackedFacadePluginId(params.dirName)); } catch (err) { loadedFacadeModules.delete(location.modulePath); throw err; diff --git a/src/plugins/status.test.ts b/src/plugins/status.test.ts index 2d1914fdbbd..d987e6c0085 100644 --- a/src/plugins/status.test.ts +++ b/src/plugins/status.test.ts @@ -17,7 +17,6 @@ const withBundledPluginAllowlistCompatMock = vi.fn(); const withBundledPluginEnablementCompatMock = vi.fn(); const listImportedBundledPluginFacadeIdsMock = vi.fn(); const listImportedRuntimePluginIdsMock = vi.fn(); -let buildPluginStatusReport: typeof import("./status.js").buildPluginStatusReport; let buildPluginSnapshotReport: typeof import("./status.js").buildPluginSnapshotReport; let buildPluginDiagnosticsReport: typeof import("./status.js").buildPluginDiagnosticsReport; let buildPluginInspectReport: typeof import("./status.js").buildPluginInspectReport; @@ -242,7 +241,7 @@ function expectBundleInspectState( expect(inspect.shape).toBe(params.shape); } -describe("buildPluginStatusReport", () => { +describe("plugin status reports", () => { beforeAll(async () => { ({ buildAllPluginInspectReports, @@ -251,7 +250,6 @@ describe("buildPluginStatusReport", () => { buildPluginCompatibilityWarnings, buildPluginInspectReport, buildPluginSnapshotReport, - buildPluginStatusReport, formatPluginCompatibilityNotice, summarizePluginCompatibility, } = await import("./status.js")); @@ -454,7 +452,7 @@ describe("buildPluginStatusReport", () => { }), ); - const report = buildPluginStatusReport({ + const report = buildPluginDiagnosticsReport({ config: {}, env: { OPENCLAW_VERSION: "2026.3.23-1", diff --git a/src/plugins/status.ts b/src/plugins/status.ts index 64fdc849831..eeae8a6cdaa 100644 --- a/src/plugins/status.ts +++ b/src/plugins/status.ts @@ -228,12 +228,6 @@ export function buildPluginDiagnosticsReport(params?: PluginReportParams): Plugi return buildPluginReport(params, true); } -// Compatibility alias for existing hot/reporting callers while the repo finishes -// migrating to explicit snapshot vs diagnostics builders. -export function buildPluginStatusReport(params?: PluginReportParams): PluginStatusReport { - return buildPluginDiagnosticsReport(params); -} - function buildCapabilityEntries(plugin: PluginRegistry["plugins"][number]) { return [ { kind: "cli-backend" as const, ids: plugin.cliBackendIds ?? [] },