




















@@ -51,12 +51,14 @@ function createManifestPlugin(id: string): PluginManifestRecord {
5151function createManifestPluginWithoutDiscovery(params: {
5252id: string;
5353providerAuthEnvVars?: Record<string, string[]>;
54+setupProviders?: NonNullable<PluginManifestRecord["setup"]>["providers"];
5455}): PluginManifestRecord {
5556const { providerDiscoverySource: _providerDiscoverySource, ...plugin } = createManifestPlugin(
5657params.id,
5758);
5859return {
5960 ...plugin,
61+ ...(params.setupProviders ? { setup: { providers: params.setupProviders } } : {}),
6062 ...(params.providerAuthEnvVars ? { providerAuthEnvVars: params.providerAuthEnvVars } : {}),
6163};
6264}
@@ -184,6 +186,36 @@ describe("resolvePluginDiscoveryProvidersRuntime", () => {
184186expect(params.onlyPluginIds).toEqual(["deepseek", "kilocode"]);
185187});
186188189+it("falls back to full provider plugins when setup provider env vars are configured", () => {
190+const codexEntryProvider = createProvider({ id: "codex", mode: "catalog" });
191+const fullProviders = [createProvider({ id: "kilocode", mode: "catalog" })];
192+mocks.resolveDiscoveredProviderPluginIds.mockReturnValue(["codex", "kilocode"]);
193+mocks.loadPluginMetadataSnapshot.mockReturnValue({
194+index: { plugins: [] },
195+manifestRegistry: {
196+plugins: [
197+createManifestPlugin("codex"),
198+createManifestPluginWithoutDiscovery({
199+id: "kilocode",
200+setupProviders: [{ id: "kilocode", envVars: ["KILOCODE_API_KEY"] }],
201+}),
202+],
203+diagnostics: [],
204+},
205+});
206+mocks.loadSource.mockReturnValue(codexEntryProvider);
207+mocks.resolvePluginProviders.mockReturnValue(fullProviders);
208+209+expect(
210+resolvePluginDiscoveryProvidersRuntime({
211+env: { KILOCODE_API_KEY: "sk-test" } as NodeJS.ProcessEnv,
212+}),
213+).toEqual([{ ...codexEntryProvider, pluginId: "codex" }, ...fullProviders]);
214+expect(mocks.resolvePluginProviders).toHaveBeenCalledTimes(1);
215+const params = requireResolvePluginProvidersParams();
216+expect(params.onlyPluginIds).toEqual(["kilocode"]);
217+});
218+187219it("shares one metadata snapshot between provider id discovery and entry loading", () => {
188220const registry = { plugins: [] };
189221const manifestRegistry = {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。