From 1a4b4efdd0f8967f585288cdc35181c58591b94e Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sat, 30 May 2026 19:12:04 +0900 Subject: [PATCH] test(builtin-skills): batch 16 (3 files) --- src/features/builtin-skills/AGENTS.md | 7 ++- src/features/builtin-skills/skills.test.ts | 56 +++++++++++++++------- src/features/builtin-skills/skills.ts | 5 +- 3 files changed, 44 insertions(+), 24 deletions(-) diff --git a/src/features/builtin-skills/AGENTS.md b/src/features/builtin-skills/AGENTS.md index 5083534ab..9aa18be4a 100644 --- a/src/features/builtin-skills/AGENTS.md +++ b/src/features/builtin-skills/AGENTS.md @@ -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 @@ -11,7 +11,7 @@ Skills shipped inside the plugin (always available, no install). Registered via ``` builtin-skills/ ├── index.ts # Barrel exports -├── skills.ts # createBuiltinSkills() factory — registers all 10 below +├── skills.ts # createBuiltinSkills() factory ├── types.ts # BuiltinSkill interface ├── skills/ │ ├── git-master.ts # 1111 LOC @@ -21,7 +21,6 @@ builtin-skills/ │ ├── dev-browser.ts # Persistent page state │ ├── frontend-ui-ux.ts # Design-first UI guidance │ ├── 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) │ ├── git-master-sections/ # Git-master prompt sub-sections │ └── index.ts # skill barrel @@ -42,7 +41,7 @@ builtin-skills/ | `dev-browser` | 221 | — | Persistent page state browser for dev work | | `frontend-ui-ux` | 79 | — | Design-first UI development guidance | | `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 | ## BROWSER VARIANT SELECTION diff --git a/src/features/builtin-skills/skills.test.ts b/src/features/builtin-skills/skills.test.ts index 5b17c6319..3d71d3736 100644 --- a/src/features/builtin-skills/skills.test.ts +++ b/src/features/builtin-skills/skills.test.ts @@ -1,3 +1,5 @@ +/// + import { describe, test, expect } from "bun:test" import { createBuiltinSkills } from "./skills" @@ -83,7 +85,7 @@ describe("createBuiltinSkills", () => { 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 // when @@ -96,11 +98,12 @@ describe("createBuiltinSkills", () => { 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 === "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 // when @@ -109,9 +112,9 @@ describe("createBuiltinSkills", () => { const devBrowserSkills = createBuiltinSkills({ browserProvider: "dev-browser" }) // then - expect(defaultSkills).toHaveLength(5) - expect(agentBrowserSkills).toHaveLength(5) - expect(devBrowserSkills).toHaveLength(5) + expect(defaultSkills).toHaveLength(6) + expect(agentBrowserSkills).toHaveLength(6) + expect(devBrowserSkills).toHaveLength(6) }) 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)).not.toContain("dev-browser") expect(skills.map((s) => s.name)).toContain("review-work") - expect(skills.map((s) => s.name)).toContain("ai-slop-remover") - expect(skills.length).toBe(4) + expect(skills.map((s) => s.name)).toContain("remove-ai-slops") + expect(skills.map((s) => s.name)).toContain("init-deep") + expect(skills.length).toBe(5) }) 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)).not.toContain("dev-browser") expect(skills.map((s) => s.name)).toContain("review-work") - expect(skills.map((s) => s.name)).toContain("ai-slop-remover") - expect(skills.length).toBe(3) + expect(skills.map((s) => s.name)).toContain("remove-ai-slops") + 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", () => { // #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 const skills = createBuiltinSkills(options) @@ -167,7 +172,22 @@ describe("createBuiltinSkills", () => { const skills = createBuiltinSkills(options) // #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", () => { @@ -202,18 +222,18 @@ describe("createBuiltinSkills", () => { expect(compatibilityIndex < opencodeExampleIndex).toBe(true) }) - test("ai-slop-remover skill has correct structure", () => { + test("remove-ai-slops skill has correct structure", () => { // #given - default options // #when const skills = createBuiltinSkills() - const aiSlopRemover = skills.find((s) => s.name === "ai-slop-remover") + const removeAiSlops = skills.find((s) => s.name === "remove-ai-slops") // #then - expect(aiSlopRemover).toBeDefined() - expect(aiSlopRemover!.description).toContain("AI-generated code smells") - expect(aiSlopRemover!.template).toContain("DETECTION CRITERIA") - expect(aiSlopRemover!.template).toContain("SAFETY RULES") + expect(removeAiSlops).toBeDefined() + expect(removeAiSlops!.description).toContain("AI-generated code smells") + expect(removeAiSlops!.template).toContain("Remove AI Slops Skill") + expect(removeAiSlops!.template).toContain("$omo:remove-ai-slops") }) test("returns playwright-cli skill when browserProvider is 'playwright-cli'", () => { diff --git a/src/features/builtin-skills/skills.ts b/src/features/builtin-skills/skills.ts index 8c544e186..a8c47b72d 100644 --- a/src/features/builtin-skills/skills.ts +++ b/src/features/builtin-skills/skills.ts @@ -8,8 +8,9 @@ import { frontendUiUxSkill, gitMasterSkill, devBrowserSkill, + initDeepSkill, + removeAiSlopsSkill, reviewWorkSkill, - aiSlopRemoverSkill, teamModeSkill, } from "./skills/index" @@ -33,7 +34,7 @@ export function createBuiltinSkills(options: CreateBuiltinSkillsOptions = {}): B browserSkill = playwrightSkill } - const skills = [browserSkill, frontendUiUxSkill, gitMasterSkill, reviewWorkSkill, aiSlopRemoverSkill] + const skills = [browserSkill, frontendUiUxSkill, gitMasterSkill, reviewWorkSkill, removeAiSlopsSkill, initDeepSkill] if (teamModeEnabled && !disabledSkills?.has("team-mode")) { skills.push(teamModeSkill)