fix(skill-context): filter dev-browser as provider-gated
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -85,4 +85,68 @@ describe("createSkillContext", () => {
|
|||||||
getSystemMcpServerNamesSpy.mockRestore()
|
getSystemMcpServerNamesSpy.mockRestore()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("excludes discovered dev-browser skill when browser provider is playwright", async () => {
|
||||||
|
// given
|
||||||
|
const discoveredDevBrowserSkill = {
|
||||||
|
name: "dev-browser",
|
||||||
|
definition: { description: "Discovered dev-browser skill" },
|
||||||
|
scope: "user" as const,
|
||||||
|
}
|
||||||
|
|
||||||
|
const discoverConfigSourceSkillsSpy = spyOn(
|
||||||
|
skillLoader,
|
||||||
|
"discoverConfigSourceSkills",
|
||||||
|
).mockResolvedValue([])
|
||||||
|
const discoverUserClaudeSkillsSpy = spyOn(
|
||||||
|
skillLoader,
|
||||||
|
"discoverUserClaudeSkills",
|
||||||
|
).mockResolvedValue([discoveredDevBrowserSkill])
|
||||||
|
const discoverProjectClaudeSkillsSpy = spyOn(
|
||||||
|
skillLoader,
|
||||||
|
"discoverProjectClaudeSkills",
|
||||||
|
).mockResolvedValue([])
|
||||||
|
const discoverOpencodeGlobalSkillsSpy = spyOn(
|
||||||
|
skillLoader,
|
||||||
|
"discoverOpencodeGlobalSkills",
|
||||||
|
).mockResolvedValue([])
|
||||||
|
const discoverProjectAgentsSkillsSpy = spyOn(
|
||||||
|
skillLoader,
|
||||||
|
"discoverProjectAgentsSkills",
|
||||||
|
).mockResolvedValue([])
|
||||||
|
const discoverGlobalAgentsSkillsSpy = spyOn(
|
||||||
|
skillLoader,
|
||||||
|
"discoverGlobalAgentsSkills",
|
||||||
|
).mockResolvedValue([])
|
||||||
|
const getSystemMcpServerNamesSpy = spyOn(
|
||||||
|
mcpLoader,
|
||||||
|
"getSystemMcpServerNames",
|
||||||
|
).mockReturnValue(new Set<string>())
|
||||||
|
|
||||||
|
const pluginConfig = OhMyOpenCodeConfigSchema.parse({
|
||||||
|
browser_automation_engine: { provider: "playwright" },
|
||||||
|
})
|
||||||
|
|
||||||
|
try {
|
||||||
|
// when
|
||||||
|
const result = await createSkillContext({
|
||||||
|
directory: testDirectory,
|
||||||
|
pluginConfig,
|
||||||
|
})
|
||||||
|
|
||||||
|
// then
|
||||||
|
expect(result.browserProvider).toBe("playwright")
|
||||||
|
expect(result.mergedSkills.some((skill) => skill.name === "playwright")).toBe(true)
|
||||||
|
expect(result.mergedSkills.some((skill) => skill.name === "dev-browser")).toBe(false)
|
||||||
|
expect(result.availableSkills.some((skill) => skill.name === "dev-browser")).toBe(false)
|
||||||
|
} finally {
|
||||||
|
discoverConfigSourceSkillsSpy.mockRestore()
|
||||||
|
discoverUserClaudeSkillsSpy.mockRestore()
|
||||||
|
discoverProjectClaudeSkillsSpy.mockRestore()
|
||||||
|
discoverOpencodeGlobalSkillsSpy.mockRestore()
|
||||||
|
discoverProjectAgentsSkillsSpy.mockRestore()
|
||||||
|
discoverGlobalAgentsSkillsSpy.mockRestore()
|
||||||
|
getSystemMcpServerNamesSpy.mockRestore()
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ export type SkillContext = {
|
|||||||
disabledSkills: Set<string>
|
disabledSkills: Set<string>
|
||||||
}
|
}
|
||||||
|
|
||||||
const PROVIDER_GATED_SKILL_NAMES = new Set(["agent-browser", "playwright"])
|
const PROVIDER_GATED_SKILL_NAMES = new Set(["agent-browser", "dev-browser", "playwright"])
|
||||||
|
|
||||||
function mapScopeToLocation(scope: SkillScope): AvailableSkill["location"] {
|
function mapScopeToLocation(scope: SkillScope): AvailableSkill["location"] {
|
||||||
if (scope === "user" || scope === "opencode") return "user"
|
if (scope === "user" || scope === "opencode") return "user"
|
||||||
|
|||||||
Reference in New Issue
Block a user