

























@@ -3,14 +3,19 @@ import type { PluginManifestRecord } from "./manifest-registry.js";
33import type { ProviderPlugin } from "./types.js";
4455const mocks = vi.hoisted(() => ({
6-loadPluginManifestRegistry: vi.fn(),
6+loadPluginRegistrySnapshot: vi.fn(),
7+loadPluginManifestRegistryForInstalledIndex: vi.fn(),
78resolveDiscoveredProviderPluginIds: vi.fn(),
89resolvePluginProviders: vi.fn(),
910loadSource: vi.fn(),
1011}));
111212-vi.mock("./manifest-registry.js", () => ({
13-loadPluginManifestRegistry: mocks.loadPluginManifestRegistry,
13+vi.mock("./plugin-registry.js", () => ({
14+loadPluginRegistrySnapshot: mocks.loadPluginRegistrySnapshot,
15+}));
16+17+vi.mock("./manifest-registry-installed.js", () => ({
18+loadPluginManifestRegistryForInstalledIndex: mocks.loadPluginManifestRegistryForInstalledIndex,
1419}));
15201621vi.mock("./providers.js", () => ({
@@ -77,8 +82,9 @@ function createProvider(params: { id: string; mode: "static" | "catalog" }): Pro
7782describe("resolvePluginDiscoveryProvidersRuntime", () => {
7883beforeEach(() => {
7984vi.clearAllMocks();
85+mocks.loadPluginRegistrySnapshot.mockReturnValue({ plugins: [] });
8086mocks.resolveDiscoveredProviderPluginIds.mockReturnValue(["deepseek"]);
81-mocks.loadPluginManifestRegistry.mockReturnValue({
87+mocks.loadPluginManifestRegistryForInstalledIndex.mockReturnValue({
8288plugins: [createManifestPlugin("deepseek")],
8389diagnostics: [],
8490});
@@ -110,7 +116,7 @@ describe("resolvePluginDiscoveryProvidersRuntime", () => {
110116"kilocode",
111117"unused",
112118]);
113-mocks.loadPluginManifestRegistry.mockReturnValue({
119+mocks.loadPluginManifestRegistryForInstalledIndex.mockReturnValue({
114120plugins: [
115121createManifestPlugin("codex"),
116122createManifestPlugin("deepseek"),
@@ -144,6 +150,35 @@ describe("resolvePluginDiscoveryProvidersRuntime", () => {
144150);
145151});
146152153+it("shares one registry snapshot and manifest registry between provider id discovery and entry loading", () => {
154+const registry = { plugins: [] };
155+const manifestRegistry = {
156+plugins: [createManifestPlugin("deepseek")],
157+diagnostics: [],
158+};
159+mocks.loadPluginRegistrySnapshot.mockReturnValue(registry);
160+mocks.loadPluginManifestRegistryForInstalledIndex.mockReturnValue(manifestRegistry);
161+mocks.loadSource.mockReturnValue(createProvider({ id: "deepseek", mode: "catalog" }));
162+163+resolvePluginDiscoveryProvidersRuntime({ config: {}, env: {} as NodeJS.ProcessEnv });
164+165+expect(mocks.loadPluginRegistrySnapshot).toHaveBeenCalledOnce();
166+expect(mocks.loadPluginManifestRegistryForInstalledIndex).toHaveBeenCalledWith({
167+index: registry,
168+config: {},
169+workspaceDir: undefined,
170+env: {},
171+includeDisabled: true,
172+});
173+expect(mocks.loadPluginManifestRegistryForInstalledIndex).toHaveBeenCalledOnce();
174+expect(mocks.resolveDiscoveredProviderPluginIds).toHaveBeenCalledWith(
175+expect.objectContaining({
176+ registry,
177+ manifestRegistry,
178+}),
179+);
180+});
181+147182it("returns static-only discovery entries for callers that explicitly request them", () => {
148183const staticProvider = createProvider({ id: "deepseek", mode: "static" });
149184mocks.loadSource.mockReturnValue(staticProvider);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。