


























@@ -8,15 +8,16 @@ import {
88const providerDiscoveryMocks = vi.hoisted(() => ({
99loadInstalledPluginIndex: vi.fn(),
1010resolveBundledProviderCompatPluginIds: vi.fn(),
11-resolveInstalledPluginContributions: vi.fn(),
11+resolveInstalledPluginContributionOwners: vi.fn(),
1212resolveOwningPluginIdsForProvider: vi.fn(),
1313resolvePluginDiscoveryProviders: vi.fn(),
1414resolveProviderContractPluginIdsForProviderAlias: vi.fn(),
1515}));
16161717vi.mock("../../plugins/installed-plugin-index.js", () => ({
1818loadInstalledPluginIndex: providerDiscoveryMocks.loadInstalledPluginIndex,
19-resolveInstalledPluginContributions: providerDiscoveryMocks.resolveInstalledPluginContributions,
19+resolveInstalledPluginContributionOwners:
20+providerDiscoveryMocks.resolveInstalledPluginContributionOwners,
2021}));
21222223vi.mock("../../plugins/providers.js", () => ({
@@ -109,33 +110,22 @@ const catalogOnlyProvider = {
109110110111const defaultProviders = [chutesProvider, moonshotProvider, openaiProvider];
111112112-function createContributionMaps(params: {
113-providers?: ReadonlyMap<string, readonly string[]>;
114-cliBackends?: ReadonlyMap<string, readonly string[]>;
115-}) {
116-return {
117-providers: params.providers ?? new Map(),
118-channels: new Map(),
119-channelConfigs: new Map(),
120-setupProviders: new Map(),
121-cliBackends: params.cliBackends ?? new Map(),
122-modelCatalogProviders: new Map(),
123-commandAliases: new Map(),
124-contracts: new Map(),
125-};
126-}
127-128113describe("loadProviderCatalogModelsForList", () => {
129114beforeEach(() => {
130115vi.clearAllMocks();
131116providerDiscoveryMocks.loadInstalledPluginIndex.mockReturnValue({
132117plugins: [],
133118diagnostics: [],
134119});
135-providerDiscoveryMocks.resolveInstalledPluginContributions.mockReturnValue(
136-createContributionMaps({
137-providers: new Map(defaultProviders.map((provider) => [provider.id, [provider.pluginId]])),
138-}),
120+providerDiscoveryMocks.resolveInstalledPluginContributionOwners.mockImplementation(
121+(_index: unknown, contribution: string, matches: (contributionId: string) => boolean) => {
122+if (contribution !== "providers") {
123+return [];
124+}
125+return defaultProviders
126+.filter((provider) => matches(provider.id))
127+.map((provider) => provider.pluginId);
128+},
139129);
140130providerDiscoveryMocks.resolveBundledProviderCompatPluginIds.mockReturnValue([
141131"chutes",
@@ -215,6 +205,24 @@ describe("loadProviderCatalogModelsForList", () => {
215205expect(providerDiscoveryMocks.resolveOwningPluginIdsForProvider).not.toHaveBeenCalled();
216206});
217207208+it("does not fall back to legacy manifest ownership for disabled installed-index owners", async () => {
209+providerDiscoveryMocks.resolveInstalledPluginContributionOwners
210+.mockReturnValueOnce([])
211+.mockReturnValueOnce([])
212+.mockReturnValueOnce(["moonshot"])
213+.mockReturnValueOnce([]);
214+215+await expect(
216+resolveProviderCatalogPluginIdsForFilter({
217+cfg: baseParams.cfg,
218+env: baseParams.env,
219+providerFilter: "moonshot",
220+}),
221+).resolves.toEqual([]);
222+223+expect(providerDiscoveryMocks.resolveOwningPluginIdsForProvider).not.toHaveBeenCalled();
224+});
225+218226it("returns an empty catalog when a static provider catalog throws", async () => {
219227providerDiscoveryMocks.resolvePluginDiscoveryProviders.mockResolvedValueOnce([
220228{
@@ -272,9 +280,7 @@ describe("loadProviderCatalogModelsForList", () => {
272280});
273281274282it("does not skip registry for non-bundled static catalog owners", async () => {
275-providerDiscoveryMocks.resolveInstalledPluginContributions.mockReturnValueOnce(
276-createContributionMaps({}),
277-);
283+providerDiscoveryMocks.resolveInstalledPluginContributionOwners.mockReturnValueOnce([]);
278284providerDiscoveryMocks.resolveOwningPluginIdsForProvider.mockReturnValueOnce([
279285"workspace-static-provider",
280286]);
@@ -292,9 +298,7 @@ describe("loadProviderCatalogModelsForList", () => {
292298});
293299294300it("recognizes bundled provider hook aliases before the unknown-provider short-circuit", async () => {
295-providerDiscoveryMocks.resolveInstalledPluginContributions.mockReturnValueOnce(
296-createContributionMaps({}),
297-);
301+providerDiscoveryMocks.resolveInstalledPluginContributionOwners.mockReturnValueOnce([]);
298302299303await expect(
300304resolveProviderCatalogPluginIdsForFilter({
@@ -346,9 +350,7 @@ describe("loadProviderCatalogModelsForList", () => {
346350});
347351348352it("keeps unknown provider filters eligible for early empty results", async () => {
349-providerDiscoveryMocks.resolveInstalledPluginContributions.mockReturnValueOnce(
350-createContributionMaps({}),
351-);
353+providerDiscoveryMocks.resolveInstalledPluginContributionOwners.mockReturnValueOnce([]);
352354353355await expect(
354356resolveProviderCatalogPluginIdsForFilter({
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。