fix(#105): corrige le contexte plugin pour hello-plugin

Ajoute logger, subscriptions et commandes scindées au contexte plugin
activé. Les plugins full-trust s'attendent à ce shape public.
This commit is contained in:
2026-07-29 17:59:14 +02:00
parent 3f27eb878b
commit 2c3a46e690
22 changed files with 1082 additions and 12 deletions

View File

@ -117,6 +117,47 @@ describe("loadPlugins", () => {
expect((globalThis as Record<string, unknown>).__ranCommand).toBe(true);
});
it("loads plugins built against the public SDK context shape", async () => {
const bundle = dataUrl(`
export function activate(ctx) {
ctx.logger.info("hello");
const disposable = ctx.commands.registerCommand("hello-plugin.sayHello", () => {
globalThis.__helloCommandRan = true;
return "Hello from IdeA";
});
ctx.subscriptions.push(disposable);
}
`);
const { registry, failures } = await loadPlugins(
[
entry({
id: "com.example.hello-plugin",
displayName: "Hello Plugin",
bundleUrl: bundle,
contributes: {
...emptyContributes(),
menuItems: [
{
id: "hello-plugin.sayHello.item",
targetMenuId: "plugin:hello-plugin.menu",
label: "Say Hello",
command: "hello-plugin.sayHello",
},
],
},
}),
],
gateways,
);
expect(failures).toEqual([]);
await registry.runCommand("com.example.hello-plugin", "hello-plugin.sayHello");
expect((globalThis as Record<string, unknown>).__helloCommandRan).toBe(true);
await registry.remove("com.example.hello-plugin");
expect(registry.get("com.example.hello-plugin")).toBeUndefined();
});
it("calls dispose() on removal (best-effort)", async () => {
const bundle = dataUrl(`
export function activate(ctx) {