fix(skill-loader): discover skills from parent config dir when using profiles
OPENCODE_CONFIG_DIR pointing to profiles/ subdirectory caused skills at ~/.config/opencode/skills/ to be invisible. Added getOpenCodeSkillDirs() with the same parent-dir fallback that getOpenCodeCommandDirs() uses.
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import { describe, expect, it, mock, beforeEach, afterEach } from "bun:test"
|
||||
import { join } from "node:path"
|
||||
|
||||
describe("opencode-command-dirs", () => {
|
||||
let originalEnv: string | undefined
|
||||
|
||||
beforeEach(() => {
|
||||
originalEnv = process.env.OPENCODE_CONFIG_DIR
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
if (originalEnv !== undefined) {
|
||||
process.env.OPENCODE_CONFIG_DIR = originalEnv
|
||||
} else {
|
||||
delete process.env.OPENCODE_CONFIG_DIR
|
||||
}
|
||||
})
|
||||
|
||||
describe("getOpenCodeSkillDirs", () => {
|
||||
describe("#given config dir inside profiles/", () => {
|
||||
describe("#when getOpenCodeSkillDirs is called", () => {
|
||||
it("#then returns both profile and parent skill dirs", async () => {
|
||||
process.env.OPENCODE_CONFIG_DIR = "/home/user/.config/opencode/profiles/opus"
|
||||
|
||||
const { getOpenCodeSkillDirs } = await import("./opencode-command-dirs")
|
||||
const dirs = getOpenCodeSkillDirs({ binary: "opencode" })
|
||||
|
||||
expect(dirs).toContain("/home/user/.config/opencode/profiles/opus/skills")
|
||||
expect(dirs).toContain("/home/user/.config/opencode/skills")
|
||||
expect(dirs).toHaveLength(2)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe("#given config dir NOT inside profiles/", () => {
|
||||
describe("#when getOpenCodeSkillDirs is called", () => {
|
||||
it("#then returns only the config dir skills", async () => {
|
||||
process.env.OPENCODE_CONFIG_DIR = "/home/user/.config/opencode"
|
||||
|
||||
const { getOpenCodeSkillDirs } = await import("./opencode-command-dirs")
|
||||
const dirs = getOpenCodeSkillDirs({ binary: "opencode" })
|
||||
|
||||
expect(dirs).toContain("/home/user/.config/opencode/skills")
|
||||
expect(dirs).toHaveLength(1)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe("getOpenCodeCommandDirs", () => {
|
||||
describe("#given config dir inside profiles/", () => {
|
||||
describe("#when getOpenCodeCommandDirs is called", () => {
|
||||
it("#then returns both profile and parent command dirs", async () => {
|
||||
process.env.OPENCODE_CONFIG_DIR = "/home/user/.config/opencode/profiles/opus"
|
||||
|
||||
const { getOpenCodeCommandDirs } = await import("./opencode-command-dirs")
|
||||
const dirs = getOpenCodeCommandDirs({ binary: "opencode" })
|
||||
|
||||
expect(dirs).toContain("/home/user/.config/opencode/profiles/opus/command")
|
||||
expect(dirs).toContain("/home/user/.config/opencode/command")
|
||||
expect(dirs).toHaveLength(2)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user