diff --git a/extensions/diffs/README.md b/extensions/diffs/README.md index a415a502f68..028835cf561 100644 --- a/extensions/diffs/README.md +++ b/extensions/diffs/README.md @@ -16,6 +16,8 @@ The tool can return: - `details.filePath`: a local rendered artifact path when file rendering is requested - `details.fileFormat`: the rendered file format (`png` or `pdf`) +When the plugin is enabled, it also ships a companion skill from `skills/` that guides when to use `diffs`. This guidance is delivered through normal skill loading, not unconditional prompt-hook injection on every turn. + This means an agent can: - call `diffs` with `mode=view`, then pass `details.viewerUrl` to `canvas present` diff --git a/src/agents/skills.loadworkspaceskillentries.test.ts b/src/agents/skills.loadworkspaceskillentries.test.ts index 4104db09ea9..456355e4ea7 100644 --- a/src/agents/skills.loadworkspaceskillentries.test.ts +++ b/src/agents/skills.loadworkspaceskillentries.test.ts @@ -139,4 +139,20 @@ describe("loadWorkspaceSkillEntries", () => { expect(entries.map((entry) => entry.skill.name)).toContain("diffs"); }); + + it("excludes diffs plugin skill when the plugin is disabled", async () => { + const { workspaceDir, managedDir, bundledDir } = await setupWorkspaceWithDiffsPlugin(); + + const entries = loadWorkspaceSkillEntries(workspaceDir, { + config: { + plugins: { + entries: { diffs: { enabled: false } }, + }, + }, + managedSkillsDir: managedDir, + bundledSkillsDir: bundledDir, + }); + + expect(entries.map((entry) => entry.skill.name)).not.toContain("diffs"); + }); });