Add discoverProjectAgentsSkills() for project-level .agents/skills/ and discoverGlobalAgentsSkills() for ~/.agents/skills/ — matching OpenCode's native skill discovery paths (https://opencode.ai/docs/skills/). Updated discoverAllSkills(), discoverSkills(), and createSkillContext() to include these new sources with correct priority ordering. Co-authored-by: dtateks <dtateks@users.noreply.github.com> Closes #1818
49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { describe, it, expect, beforeEach, afterEach, mock } from "bun:test"
|
|
import { mkdirSync, writeFileSync, rmSync } from "fs"
|
|
import { join } from "path"
|
|
import { tmpdir } from "os"
|
|
|
|
const TEST_DIR = join(tmpdir(), "agents-global-skills-test-" + Date.now())
|
|
const TEMP_HOME = join(TEST_DIR, "home")
|
|
|
|
describe("discoverGlobalAgentsSkills", () => {
|
|
beforeEach(() => {
|
|
mkdirSync(TEST_DIR, { recursive: true })
|
|
mkdirSync(TEMP_HOME, { recursive: true })
|
|
})
|
|
|
|
afterEach(() => {
|
|
mock.restore()
|
|
rmSync(TEST_DIR, { recursive: true, force: true })
|
|
})
|
|
|
|
it("#given a skill in ~/.agents/skills/ #when discoverGlobalAgentsSkills is called #then it discovers the skill", async () => {
|
|
//#given
|
|
const skillContent = `---
|
|
name: agent-global-skill
|
|
description: A skill from global .agents/skills directory
|
|
---
|
|
Skill body.
|
|
`
|
|
const agentsGlobalSkillsDir = join(TEMP_HOME, ".agents", "skills")
|
|
const skillDir = join(agentsGlobalSkillsDir, "agent-global-skill")
|
|
mkdirSync(skillDir, { recursive: true })
|
|
writeFileSync(join(skillDir, "SKILL.md"), skillContent)
|
|
|
|
mock.module("os", () => ({
|
|
homedir: () => TEMP_HOME,
|
|
tmpdir,
|
|
}))
|
|
|
|
//#when
|
|
const { discoverGlobalAgentsSkills } = await import("./loader")
|
|
const skills = await discoverGlobalAgentsSkills()
|
|
const skill = skills.find(s => s.name === "agent-global-skill")
|
|
|
|
//#then
|
|
expect(skill).toBeDefined()
|
|
expect(skill?.scope).toBe("user")
|
|
expect(skill?.definition.description).toContain("A skill from global .agents/skills directory")
|
|
})
|
|
})
|