
























@@ -3,6 +3,7 @@ import { createEmptyPluginRegistry } from "../registry.js";
3344const mocks = vi.hoisted(() => ({
55loadOpenClawPlugins: vi.fn<typeof import("../loader.js").loadOpenClawPlugins>(),
6+resolveRuntimePluginRegistry: vi.fn<typeof import("../loader.js").resolveRuntimePluginRegistry>(),
67getActivePluginRegistry: vi.fn<typeof import("../runtime.js").getActivePluginRegistry>(),
78resolveConfiguredChannelPluginIds:
89vi.fn<typeof import("../channel-plugin-ids.js").resolveConfiguredChannelPluginIds>(),
@@ -24,6 +25,8 @@ let resetPluginRegistryLoadedForTests: typeof import("./runtime-registry-loader.
2425vi.mock("../loader.js", () => ({
2526loadOpenClawPlugins: (...args: Parameters<typeof mocks.loadOpenClawPlugins>) =>
2627mocks.loadOpenClawPlugins(...args),
28+resolveRuntimePluginRegistry: (...args: Parameters<typeof mocks.resolveRuntimePluginRegistry>) =>
29+mocks.resolveRuntimePluginRegistry(...args),
2730}));
28312932vi.mock("../runtime.js", () => ({
@@ -61,6 +64,7 @@ describe("ensurePluginRegistryLoaded", () => {
61646265beforeEach(() => {
6366mocks.loadOpenClawPlugins.mockReset();
67+mocks.resolveRuntimePluginRegistry.mockReset();
6468mocks.getActivePluginRegistry.mockReset();
6569mocks.resolveConfiguredChannelPluginIds.mockReset();
6670mocks.resolveChannelPluginIds.mockReset();
@@ -70,6 +74,10 @@ describe("ensurePluginRegistryLoaded", () => {
7074resetPluginRegistryLoadedForTests();
71757276mocks.getActivePluginRegistry.mockReturnValue(createEmptyPluginRegistry());
77+mocks.loadOpenClawPlugins.mockReturnValue(createEmptyPluginRegistry());
78+mocks.resolveRuntimePluginRegistry.mockImplementation(
79+(...args: Parameters<typeof mocks.loadOpenClawPlugins>) => mocks.loadOpenClawPlugins(...args),
80+);
7381mocks.applyPluginAutoEnable.mockImplementation((params) => ({
7482config:
7583params.config && typeof params.config === "object"
@@ -255,4 +263,26 @@ describe("ensurePluginRegistryLoaded", () => {
255263(mocks.loadOpenClawPlugins.mock.calls[0]?.[0] as { onlyPluginIds?: string[] }).onlyPluginIds,
256264).toBeUndefined();
257265});
266+267+it("reuses a compatible active registry instead of forcing a broad reload", () => {
268+const activeRegistry = createEmptyPluginRegistry();
269+mocks.resolveRuntimePluginRegistry.mockReturnValue(activeRegistry);
270+271+ensurePluginRegistryLoaded({
272+scope: "all",
273+config: { plugins: { allow: ["demo"] } } as never,
274+});
275+276+expect(mocks.resolveRuntimePluginRegistry).toHaveBeenCalledWith(
277+expect.objectContaining({
278+throwOnLoadError: true,
279+}),
280+);
281+expect(mocks.resolveRuntimePluginRegistry).toHaveBeenCalledWith(
282+expect.not.objectContaining({
283+onlyPluginIds: expect.any(Array),
284+}),
285+);
286+expect(mocks.loadOpenClawPlugins).not.toHaveBeenCalled();
287+});
258288});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。