mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-03-30 22:03:58 +00:00
132 lines
3.2 KiB
TypeScript
132 lines
3.2 KiB
TypeScript
import { test, expect } from "bun:test"
|
|
import { Skill } from "../../src/skill"
|
|
import { SystemPrompt } from "../../src/session/system"
|
|
import { Instance } from "../../src/project/instance"
|
|
import { tmpdir } from "../fixture/fixture"
|
|
import path from "path"
|
|
|
|
test("discovers skills from .opencode/skill/ directory", async () => {
|
|
await using tmp = await tmpdir({
|
|
git: true,
|
|
init: async (dir) => {
|
|
const skillDir = path.join(dir, ".opencode", "skill", "test-skill")
|
|
await Bun.write(
|
|
path.join(skillDir, "SKILL.md"),
|
|
`---
|
|
name: test-skill
|
|
description: A test skill for verification.
|
|
---
|
|
|
|
# Test Skill
|
|
|
|
Instructions here.
|
|
`,
|
|
)
|
|
},
|
|
})
|
|
|
|
await Instance.provide({
|
|
directory: tmp.path,
|
|
fn: async () => {
|
|
const skills = await Skill.all()
|
|
expect(skills.length).toBe(1)
|
|
expect(skills[0].name).toBe("test-skill")
|
|
expect(skills[0].description).toBe("A test skill for verification.")
|
|
expect(skills[0].location).toContain("skill/test-skill/SKILL.md")
|
|
},
|
|
})
|
|
})
|
|
|
|
test("discovers multiple skills from .opencode/skill/ directory", async () => {
|
|
await using tmp = await tmpdir({
|
|
git: true,
|
|
init: async (dir) => {
|
|
const skillDir = path.join(dir, ".opencode", "skill", "my-skill")
|
|
await Bun.write(
|
|
path.join(skillDir, "SKILL.md"),
|
|
`---
|
|
name: my-skill
|
|
description: Another test skill.
|
|
---
|
|
|
|
# My Skill
|
|
`,
|
|
)
|
|
},
|
|
})
|
|
|
|
await Instance.provide({
|
|
directory: tmp.path,
|
|
fn: async () => {
|
|
const skills = await Skill.all()
|
|
expect(skills.length).toBe(1)
|
|
expect(skills[0].name).toBe("my-skill")
|
|
},
|
|
})
|
|
})
|
|
|
|
test("skips skills with missing frontmatter", async () => {
|
|
await using tmp = await tmpdir({
|
|
git: true,
|
|
init: async (dir) => {
|
|
const skillDir = path.join(dir, ".opencode", "skill", "no-frontmatter")
|
|
await Bun.write(
|
|
path.join(skillDir, "SKILL.md"),
|
|
`# No Frontmatter
|
|
|
|
Just some content without YAML frontmatter.
|
|
`,
|
|
)
|
|
},
|
|
})
|
|
|
|
await Instance.provide({
|
|
directory: tmp.path,
|
|
fn: async () => {
|
|
const skills = await Skill.all()
|
|
expect(skills).toEqual([])
|
|
},
|
|
})
|
|
})
|
|
|
|
test("returns empty array when no skills exist", async () => {
|
|
await using tmp = await tmpdir({ git: true })
|
|
|
|
await Instance.provide({
|
|
directory: tmp.path,
|
|
fn: async () => {
|
|
const skills = await Skill.all()
|
|
expect(skills).toEqual([])
|
|
},
|
|
})
|
|
})
|
|
|
|
// test("discovers skills from .claude/skills/ directory", async () => {
|
|
// await using tmp = await tmpdir({
|
|
// git: true,
|
|
// init: async (dir) => {
|
|
// const skillDir = path.join(dir, ".claude", "skills", "claude-skill")
|
|
// await Bun.write(
|
|
// path.join(skillDir, "SKILL.md"),
|
|
// `---
|
|
// name: claude-skill
|
|
// description: A skill in the .claude/skills directory.
|
|
// ---
|
|
|
|
// # Claude Skill
|
|
// `,
|
|
// )
|
|
// },
|
|
// })
|
|
|
|
// await Instance.provide({
|
|
// directory: tmp.path,
|
|
// fn: async () => {
|
|
// const skills = await Skill.all()
|
|
// expect(skills.length).toBe(1)
|
|
// expect(skills[0].name).toBe("claude-skill")
|
|
// expect(skills[0].location).toContain(".claude/skills/claude-skill/SKILL.md")
|
|
// },
|
|
// })
|
|
// })
|