From 476bb3852705cbccdac87f52687c6afd00f6e5a6 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sat, 25 Apr 2026 19:30:09 -0700 Subject: [PATCH] fix(setup): plan setup metadata from plugin registry --- src/plugins/setup-registry.ts | 17 ++++++++--------- .../test-helpers/registry-jiti-mocks.ts | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/plugins/setup-registry.ts b/src/plugins/setup-registry.ts index 4b92185a3d1..58b2d36610e 100644 --- a/src/plugins/setup-registry.ts +++ b/src/plugins/setup-registry.ts @@ -5,9 +5,10 @@ import { normalizeProviderId } from "../agents/provider-id.js"; import type { OpenClawConfig } from "../config/types.openclaw.js"; import { buildPluginApi } from "./api-builder.js"; import { collectPluginConfigContractMatches } from "./config-contracts.js"; -import { discoverOpenClawPlugins } from "./discovery.js"; import { getCachedPluginJitiLoader, type PluginJitiLoaderCache } from "./jiti-loader-cache.js"; -import { loadPluginManifestRegistry, type PluginManifestRecord } from "./manifest-registry.js"; +import { loadPluginManifestRegistryForInstalledIndex } from "./manifest-registry-installed.js"; +import type { PluginManifestRecord } from "./manifest-registry.js"; +import { loadPluginRegistrySnapshot } from "./plugin-registry.js"; import { resolvePluginCacheInputs } from "./roots.js"; import type { PluginRuntime } from "./runtime/types.js"; import { listSetupCliBackendIds, listSetupProviderIds } from "./setup-descriptors.js"; @@ -250,10 +251,9 @@ function resolveRelevantSetupMigrationPluginIds(params: { env?: NodeJS.ProcessEnv; }): string[] { const ids = new Set(collectConfiguredPluginEntryIds(params.config)); - const registry = loadPluginManifestRegistry({ + const registry = loadSetupManifestRegistry({ workspaceDir: params.workspaceDir, env: params.env, - cache: true, }); for (const plugin of registry.plugins) { const paths = plugin.configContracts?.compatibilityMigrationPaths; @@ -378,17 +378,16 @@ function matchesProvider(provider: ProviderPlugin, providerId: string): boolean function loadSetupManifestRegistry(params?: { workspaceDir?: string; env?: NodeJS.ProcessEnv }) { const env = params?.env ?? process.env; - const discovery = discoverOpenClawPlugins({ + const index = loadPluginRegistrySnapshot({ workspaceDir: params?.workspaceDir, env, cache: true, }); - return loadPluginManifestRegistry({ + return loadPluginManifestRegistryForInstalledIndex({ + index, workspaceDir: params?.workspaceDir, env, - cache: true, - candidates: discovery.candidates, - diagnostics: discovery.diagnostics, + includeDisabled: true, }); } diff --git a/src/plugins/test-helpers/registry-jiti-mocks.ts b/src/plugins/test-helpers/registry-jiti-mocks.ts index 8b0a7f15ede..bdf9c89a318 100644 --- a/src/plugins/test-helpers/registry-jiti-mocks.ts +++ b/src/plugins/test-helpers/registry-jiti-mocks.ts @@ -4,6 +4,7 @@ const registryJitiMocks = vi.hoisted(() => ({ createJiti: vi.fn(), discoverOpenClawPlugins: vi.fn(), loadPluginManifestRegistry: vi.fn(), + loadPluginRegistrySnapshot: vi.fn(), })); vi.mock("jiti", () => ({ @@ -23,14 +24,31 @@ vi.mock("../manifest-registry.js", () => ({ ) => registryJitiMocks.loadPluginManifestRegistry(...args), })); +vi.mock("../manifest-registry-installed.js", () => ({ + loadPluginManifestRegistryForInstalledIndex: ( + ...args: Parameters + ) => registryJitiMocks.loadPluginManifestRegistry(...args), +})); + +vi.mock("../plugin-registry.js", () => ({ + loadPluginRegistrySnapshot: ( + ...args: Parameters + ) => registryJitiMocks.loadPluginRegistrySnapshot(...args), +})); + export function resetRegistryJitiMocks(): void { registryJitiMocks.createJiti.mockReset(); registryJitiMocks.discoverOpenClawPlugins.mockReset(); registryJitiMocks.loadPluginManifestRegistry.mockReset(); + registryJitiMocks.loadPluginRegistrySnapshot.mockReset(); registryJitiMocks.discoverOpenClawPlugins.mockReturnValue({ candidates: [], diagnostics: [], }); + registryJitiMocks.loadPluginRegistrySnapshot.mockReturnValue({ + diagnostics: [], + plugins: [], + }); registryJitiMocks.createJiti.mockImplementation( (_modulePath: string, _options?: Record) => () => ({ default: {} }), );