fix(plugins): honor descriptor-only setup flag

Honor explicit setup.requiresRuntime: false as a descriptor-only setup contract while preserving omitted values as the legacy setup-api fallback path.
This commit is contained in:
Vincent Koc
2026-04-24 11:02:38 -07:00
committed by GitHub
parent a16f8dff15
commit 7418adf875
5 changed files with 49 additions and 4 deletions

View File

@@ -349,6 +349,39 @@ describe("setup-registry getJiti", () => {
expect(mocks.createJiti.mock.calls[0]?.[0]).toBe(path.join(pluginRoot, "setup-api.js"));
});
it("treats explicit descriptor-only setup as a runtime cutoff", () => {
const pluginRoot = makeTempDir();
fs.writeFileSync(
path.join(pluginRoot, "setup-api.js"),
"export default { register(api) { api.registerProvider({ id: 'openai', label: 'OpenAI', auth: [] }); api.registerCliBackend({ id: 'codex-cli', config: { command: 'codex' } }); } };\n",
"utf-8",
);
mocks.loadPluginManifestRegistry.mockReturnValue({
plugins: [
{
id: "openai",
rootDir: pluginRoot,
setup: {
providers: [{ id: "openai" }],
cliBackends: ["codex-cli"],
requiresRuntime: false,
},
},
],
diagnostics: [],
});
expect(resolvePluginSetupProvider({ provider: "openai", env: {} })).toBeUndefined();
expect(resolvePluginSetupCliBackend({ backend: "codex-cli", env: {} })).toBeUndefined();
expect(resolvePluginSetupRegistry({ env: {} })).toEqual({
providers: [],
cliBackends: [],
configMigrations: [],
autoEnableProbes: [],
});
expect(mocks.createJiti).not.toHaveBeenCalled();
});
it("does not load setup-api modules from the current working directory", () => {
const pluginRoot = makeTempDir();
const workspaceRoot = makeTempDir();