test(builtin-skills): batch 16 (3 files)
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
# src/features/builtin-skills/ — 10 Built-in Skill Files
|
# src/features/builtin-skills/ — Built-in Skill Files
|
||||||
|
|
||||||
**Generated:** 2026-05-15
|
**Generated:** 2026-05-15
|
||||||
|
|
||||||
@@ -11,7 +11,7 @@ Skills shipped inside the plugin (always available, no install). Registered via
|
|||||||
```
|
```
|
||||||
builtin-skills/
|
builtin-skills/
|
||||||
├── index.ts # Barrel exports
|
├── index.ts # Barrel exports
|
||||||
├── skills.ts # createBuiltinSkills() factory — registers all 10 below
|
├── skills.ts # createBuiltinSkills() factory
|
||||||
├── types.ts # BuiltinSkill interface
|
├── types.ts # BuiltinSkill interface
|
||||||
├── skills/
|
├── skills/
|
||||||
│ ├── git-master.ts # 1111 LOC
|
│ ├── git-master.ts # 1111 LOC
|
||||||
@@ -21,7 +21,6 @@ builtin-skills/
|
|||||||
│ ├── dev-browser.ts # Persistent page state
|
│ ├── dev-browser.ts # Persistent page state
|
||||||
│ ├── frontend-ui-ux.ts # Design-first UI guidance
|
│ ├── frontend-ui-ux.ts # Design-first UI guidance
|
||||||
│ ├── review-work.ts # 5-agent post-implementation review
|
│ ├── review-work.ts # 5-agent post-implementation review
|
||||||
│ ├── ai-slop-remover.ts # Remove AI-generated code patterns
|
|
||||||
│ ├── team-mode.ts # 12 team_* tool documentation (gated)
|
│ ├── team-mode.ts # 12 team_* tool documentation (gated)
|
||||||
│ ├── git-master-sections/ # Git-master prompt sub-sections
|
│ ├── git-master-sections/ # Git-master prompt sub-sections
|
||||||
│ └── index.ts # skill barrel
|
│ └── index.ts # skill barrel
|
||||||
@@ -42,7 +41,7 @@ builtin-skills/
|
|||||||
| `dev-browser` | 221 | — | Persistent page state browser for dev work |
|
| `dev-browser` | 221 | — | Persistent page state browser for dev work |
|
||||||
| `frontend-ui-ux` | 79 | — | Design-first UI development guidance |
|
| `frontend-ui-ux` | 79 | — | Design-first UI development guidance |
|
||||||
| `review-work` | ~500 | — | Post-implementation review orchestrator (5 parallel agents) |
|
| `review-work` | ~500 | — | Post-implementation review orchestrator (5 parallel agents) |
|
||||||
| `ai-slop-remover` | ~300 | — | Remove AI-generated code smells |
|
| `$omo:remove-ai-slops` | — | — | Remove AI-generated code smells |
|
||||||
| `team-mode` | — | — | **Conditional** — only loaded when `team_mode.enabled`; documents the 12 `team_*` tools and lifecycle |
|
| `team-mode` | — | — | **Conditional** — only loaded when `team_mode.enabled`; documents the 12 `team_*` tools and lifecycle |
|
||||||
|
|
||||||
## BROWSER VARIANT SELECTION
|
## BROWSER VARIANT SELECTION
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/// <reference path="../../../bun-test.d.ts" />
|
||||||
|
|
||||||
import { describe, test, expect } from "bun:test"
|
import { describe, test, expect } from "bun:test"
|
||||||
import { createBuiltinSkills } from "./skills"
|
import { createBuiltinSkills } from "./skills"
|
||||||
|
|
||||||
@@ -83,7 +85,7 @@ describe("createBuiltinSkills", () => {
|
|||||||
expect(agentBrowserSkill!.template).toContain("agent-browser snapshot")
|
expect(agentBrowserSkill!.template).toContain("agent-browser snapshot")
|
||||||
})
|
})
|
||||||
|
|
||||||
test("always includes frontend-ui-ux, git-master, review-work, and ai-slop-remover skills", () => {
|
test("always includes frontend-ui-ux, git-master, review-work, remove-ai-slops, and init-deep skills", () => {
|
||||||
// given - both provider options
|
// given - both provider options
|
||||||
|
|
||||||
// when
|
// when
|
||||||
@@ -96,11 +98,12 @@ describe("createBuiltinSkills", () => {
|
|||||||
expect(skills.find((s) => s.name === "frontend-ui-ux")).toBeDefined()
|
expect(skills.find((s) => s.name === "frontend-ui-ux")).toBeDefined()
|
||||||
expect(skills.find((s) => s.name === "git-master")).toBeDefined()
|
expect(skills.find((s) => s.name === "git-master")).toBeDefined()
|
||||||
expect(skills.find((s) => s.name === "review-work")).toBeDefined()
|
expect(skills.find((s) => s.name === "review-work")).toBeDefined()
|
||||||
expect(skills.find((s) => s.name === "ai-slop-remover")).toBeDefined()
|
expect(skills.find((s) => s.name === "remove-ai-slops")).toBeDefined()
|
||||||
|
expect(skills.find((s) => s.name === "init-deep")).toBeDefined()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
test("returns exactly 5 skills regardless of provider", () => {
|
test("returns exactly 6 skills regardless of provider", () => {
|
||||||
// given
|
// given
|
||||||
|
|
||||||
// when
|
// when
|
||||||
@@ -109,9 +112,9 @@ describe("createBuiltinSkills", () => {
|
|||||||
const devBrowserSkills = createBuiltinSkills({ browserProvider: "dev-browser" })
|
const devBrowserSkills = createBuiltinSkills({ browserProvider: "dev-browser" })
|
||||||
|
|
||||||
// then
|
// then
|
||||||
expect(defaultSkills).toHaveLength(5)
|
expect(defaultSkills).toHaveLength(6)
|
||||||
expect(agentBrowserSkills).toHaveLength(5)
|
expect(agentBrowserSkills).toHaveLength(6)
|
||||||
expect(devBrowserSkills).toHaveLength(5)
|
expect(devBrowserSkills).toHaveLength(6)
|
||||||
})
|
})
|
||||||
|
|
||||||
test("should exclude playwright when it is in disabledSkills", () => {
|
test("should exclude playwright when it is in disabledSkills", () => {
|
||||||
@@ -127,8 +130,9 @@ describe("createBuiltinSkills", () => {
|
|||||||
expect(skills.map((s) => s.name)).toContain("git-master")
|
expect(skills.map((s) => s.name)).toContain("git-master")
|
||||||
expect(skills.map((s) => s.name)).not.toContain("dev-browser")
|
expect(skills.map((s) => s.name)).not.toContain("dev-browser")
|
||||||
expect(skills.map((s) => s.name)).toContain("review-work")
|
expect(skills.map((s) => s.name)).toContain("review-work")
|
||||||
expect(skills.map((s) => s.name)).toContain("ai-slop-remover")
|
expect(skills.map((s) => s.name)).toContain("remove-ai-slops")
|
||||||
expect(skills.length).toBe(4)
|
expect(skills.map((s) => s.name)).toContain("init-deep")
|
||||||
|
expect(skills.length).toBe(5)
|
||||||
})
|
})
|
||||||
|
|
||||||
test("should exclude multiple skills when they are in disabledSkills", () => {
|
test("should exclude multiple skills when they are in disabledSkills", () => {
|
||||||
@@ -144,13 +148,14 @@ describe("createBuiltinSkills", () => {
|
|||||||
expect(skills.map((s) => s.name)).toContain("frontend-ui-ux")
|
expect(skills.map((s) => s.name)).toContain("frontend-ui-ux")
|
||||||
expect(skills.map((s) => s.name)).not.toContain("dev-browser")
|
expect(skills.map((s) => s.name)).not.toContain("dev-browser")
|
||||||
expect(skills.map((s) => s.name)).toContain("review-work")
|
expect(skills.map((s) => s.name)).toContain("review-work")
|
||||||
expect(skills.map((s) => s.name)).toContain("ai-slop-remover")
|
expect(skills.map((s) => s.name)).toContain("remove-ai-slops")
|
||||||
expect(skills.length).toBe(3)
|
expect(skills.map((s) => s.name)).toContain("init-deep")
|
||||||
|
expect(skills.length).toBe(4)
|
||||||
})
|
})
|
||||||
|
|
||||||
test("should return an empty array when all skills are disabled", () => {
|
test("should return an empty array when all skills are disabled", () => {
|
||||||
// #given
|
// #given
|
||||||
const options = { disabledSkills: new Set(["playwright", "frontend-ui-ux", "git-master", "review-work", "ai-slop-remover"]) }
|
const options = { disabledSkills: new Set(["playwright", "frontend-ui-ux", "git-master", "review-work", "remove-ai-slops", "init-deep"]) }
|
||||||
|
|
||||||
// #when
|
// #when
|
||||||
const skills = createBuiltinSkills(options)
|
const skills = createBuiltinSkills(options)
|
||||||
@@ -167,7 +172,22 @@ describe("createBuiltinSkills", () => {
|
|||||||
const skills = createBuiltinSkills(options)
|
const skills = createBuiltinSkills(options)
|
||||||
|
|
||||||
// #then
|
// #then
|
||||||
expect(skills.length).toBe(5)
|
expect(skills.length).toBe(6)
|
||||||
|
})
|
||||||
|
|
||||||
|
test("init-deep skill has correct structure", () => {
|
||||||
|
// #given - default options
|
||||||
|
|
||||||
|
// #when
|
||||||
|
const skills = createBuiltinSkills()
|
||||||
|
const initDeep = skills.find((s) => s.name === "init-deep")
|
||||||
|
|
||||||
|
// #then
|
||||||
|
expect(initDeep).toBeDefined()
|
||||||
|
expect(initDeep!.description).toContain("hierarchical AGENTS.md")
|
||||||
|
expect(initDeep!.argumentHint).toBe("[--create-new] [--max-depth=N]")
|
||||||
|
expect(initDeep!.template).toContain("Generate hierarchical AGENTS.md files")
|
||||||
|
expect(initDeep!.template).toContain("Discovery + Analysis")
|
||||||
})
|
})
|
||||||
|
|
||||||
test("review-work skill has correct structure", () => {
|
test("review-work skill has correct structure", () => {
|
||||||
@@ -202,18 +222,18 @@ describe("createBuiltinSkills", () => {
|
|||||||
expect(compatibilityIndex < opencodeExampleIndex).toBe(true)
|
expect(compatibilityIndex < opencodeExampleIndex).toBe(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
test("ai-slop-remover skill has correct structure", () => {
|
test("remove-ai-slops skill has correct structure", () => {
|
||||||
// #given - default options
|
// #given - default options
|
||||||
|
|
||||||
// #when
|
// #when
|
||||||
const skills = createBuiltinSkills()
|
const skills = createBuiltinSkills()
|
||||||
const aiSlopRemover = skills.find((s) => s.name === "ai-slop-remover")
|
const removeAiSlops = skills.find((s) => s.name === "remove-ai-slops")
|
||||||
|
|
||||||
// #then
|
// #then
|
||||||
expect(aiSlopRemover).toBeDefined()
|
expect(removeAiSlops).toBeDefined()
|
||||||
expect(aiSlopRemover!.description).toContain("AI-generated code smells")
|
expect(removeAiSlops!.description).toContain("AI-generated code smells")
|
||||||
expect(aiSlopRemover!.template).toContain("DETECTION CRITERIA")
|
expect(removeAiSlops!.template).toContain("Remove AI Slops Skill")
|
||||||
expect(aiSlopRemover!.template).toContain("SAFETY RULES")
|
expect(removeAiSlops!.template).toContain("$omo:remove-ai-slops")
|
||||||
})
|
})
|
||||||
|
|
||||||
test("returns playwright-cli skill when browserProvider is 'playwright-cli'", () => {
|
test("returns playwright-cli skill when browserProvider is 'playwright-cli'", () => {
|
||||||
|
|||||||
@@ -8,8 +8,9 @@ import {
|
|||||||
frontendUiUxSkill,
|
frontendUiUxSkill,
|
||||||
gitMasterSkill,
|
gitMasterSkill,
|
||||||
devBrowserSkill,
|
devBrowserSkill,
|
||||||
|
initDeepSkill,
|
||||||
|
removeAiSlopsSkill,
|
||||||
reviewWorkSkill,
|
reviewWorkSkill,
|
||||||
aiSlopRemoverSkill,
|
|
||||||
teamModeSkill,
|
teamModeSkill,
|
||||||
} from "./skills/index"
|
} from "./skills/index"
|
||||||
|
|
||||||
@@ -33,7 +34,7 @@ export function createBuiltinSkills(options: CreateBuiltinSkillsOptions = {}): B
|
|||||||
browserSkill = playwrightSkill
|
browserSkill = playwrightSkill
|
||||||
}
|
}
|
||||||
|
|
||||||
const skills = [browserSkill, frontendUiUxSkill, gitMasterSkill, reviewWorkSkill, aiSlopRemoverSkill]
|
const skills = [browserSkill, frontendUiUxSkill, gitMasterSkill, reviewWorkSkill, removeAiSlopsSkill, initDeepSkill]
|
||||||
|
|
||||||
if (teamModeEnabled && !disabledSkills?.has("team-mode")) {
|
if (teamModeEnabled && !disabledSkills?.has("team-mode")) {
|
||||||
skills.push(teamModeSkill)
|
skills.push(teamModeSkill)
|
||||||
|
|||||||
Reference in New Issue
Block a user