diff --git a/src/commands/models/list.provider-catalog.test.ts b/src/commands/models/list.provider-catalog.test.ts index 2a3487d38af..a90376372dd 100644 --- a/src/commands/models/list.provider-catalog.test.ts +++ b/src/commands/models/list.provider-catalog.test.ts @@ -187,6 +187,23 @@ describe("loadProviderCatalogModelsForList", () => { ); }); + it("does not skip registry for non-bundled static catalog owners", async () => { + providerDiscoveryMocks.resolveOwningPluginIdsForProvider.mockReturnValueOnce([ + "workspace-static-provider", + ]); + providerDiscoveryMocks.resolveBundledProviderCompatPluginIds.mockReturnValueOnce(["moonshot"]); + + await expect( + hasProviderStaticCatalogForFilter({ + cfg: baseParams.cfg, + env: baseParams.env, + providerFilter: "workspace-static-provider", + }), + ).resolves.toBe(false); + + expect(providerDiscoveryMocks.resolvePluginDiscoveryProviders).not.toHaveBeenCalled(); + }); + it("recognizes bundled provider hook aliases before the unknown-provider short-circuit", async () => { await expect( resolveProviderCatalogPluginIdsForFilter({ diff --git a/src/commands/models/list.provider-catalog.ts b/src/commands/models/list.provider-catalog.ts index d06cc097442..815bd4caae7 100644 --- a/src/commands/models/list.provider-catalog.ts +++ b/src/commands/models/list.provider-catalog.ts @@ -62,18 +62,31 @@ export async function hasProviderStaticCatalogForFilter(params: { env?: NodeJS.ProcessEnv; providerFilter: string; }): Promise { + const env = params.env ?? process.env; const providerFilter = normalizeProviderId(params.providerFilter); if (!providerFilter) { return false; } - const pluginIds = await resolveProviderCatalogPluginIdsForFilter(params); + const pluginIds = await resolveProviderCatalogPluginIdsForFilter({ + ...params, + env, + }); if (!pluginIds || pluginIds.length === 0) { return false; } + const bundledPluginIds = resolveBundledProviderCompatPluginIds({ + config: params.cfg, + env, + }); + const bundledPluginIdSet = new Set(bundledPluginIds); + const scopedPluginIds = pluginIds.filter((pluginId) => bundledPluginIdSet.has(pluginId)); + if (scopedPluginIds.length === 0) { + return false; + } const providers = await resolvePluginDiscoveryProviders({ config: params.cfg, - env: params.env, - onlyPluginIds: pluginIds, + env, + onlyPluginIds: scopedPluginIds, includeUntrustedWorkspacePlugins: false, requireCompleteDiscoveryEntryCoverage: true, discoveryEntriesOnly: true,