From 91dc7512fb0c79b77c91edcefff60cb554f5d148 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 9 Jun 2026 05:35:21 +0000 Subject: [PATCH 1/3] Initial plan From 74efb392f426a74435f1a89980e0afee73cff350 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 9 Jun 2026 05:36:54 +0000 Subject: [PATCH 2/3] fix: update skills data loader to find skills in both skills/ and .claude/skills/ dirs --- docs/data/skills.data.js | 66 +++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/docs/data/skills.data.js b/docs/data/skills.data.js index 99b6c4881..80c810d88 100644 --- a/docs/data/skills.data.js +++ b/docs/data/skills.data.js @@ -37,41 +37,45 @@ function parseFrontmatter(content) { export default { async load() { - const skillsDir = join(__dirname, "../../.claude/skills"); const repoRoot = join(__dirname, "../.."); + const skillsDirs = [ + join(repoRoot, "skills"), + join(repoRoot, ".claude/skills"), + ]; const skills = []; - - try { - const skillDirs = readdirSync(skillsDir, { withFileTypes: true }) - .filter(dirent => dirent.isDirectory()) - .map(dirent => dirent.name); - - for (const skillDir of skillDirs) { - const skillPath = join(skillsDir, skillDir, "SKILL.md"); - try { - const content = readFileSync(skillPath, "utf-8"); - const { frontmatter, content: body } = parseFrontmatter(content); - - skills.push({ - id: skillDir, - name: frontmatter.name || skillDir, - description: frontmatter.description || "", - content: body, - skillPath: relative(repoRoot, skillPath).replaceAll("\\", "/"), - path: skillPath, - }); - } catch (err) { - console.warn(`Failed to read skill ${skillDir}:`, err.message); + + for (const skillsDir of skillsDirs) { + try { + const skillDirs = readdirSync(skillsDir, { withFileTypes: true }) + .filter(dirent => dirent.isDirectory()) + .map(dirent => dirent.name); + + for (const skillDir of skillDirs) { + const skillPath = join(skillsDir, skillDir, "SKILL.md"); + try { + const content = readFileSync(skillPath, "utf-8"); + const { frontmatter, content: body } = parseFrontmatter(content); + + skills.push({ + id: skillDir, + name: frontmatter.name || skillDir, + description: frontmatter.description || "", + content: body, + skillPath: relative(repoRoot, skillPath).replaceAll("\\", "/"), + path: skillPath, + }); + } catch (err) { + console.warn(`Failed to read skill ${skillDir}:`, err.message); + } } + } catch (err) { + console.warn(`Failed to read skills directory ${skillsDir}:`, err.message); } - - // Sort skills by name - skills.sort((a, b) => a.name.localeCompare(b.name)); - - return skills; - } catch (err) { - console.error("Failed to load skills:", err); - return []; } + + // Sort skills by name + skills.sort((a, b) => a.name.localeCompare(b.name)); + + return skills; }, }; From a7b3cd85b1a481b45c121797d00a0b77508b1f46 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 9 Jun 2026 05:37:24 +0000 Subject: [PATCH 3/3] fix: use relative path as skill ID to avoid duplicates across directories --- docs/data/skills.data.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/data/skills.data.js b/docs/data/skills.data.js index 80c810d88..da9041b9a 100644 --- a/docs/data/skills.data.js +++ b/docs/data/skills.data.js @@ -56,8 +56,9 @@ export default { const content = readFileSync(skillPath, "utf-8"); const { frontmatter, content: body } = parseFrontmatter(content); + const relDir = relative(repoRoot, join(skillsDir, skillDir)).replaceAll("\\", "/"); skills.push({ - id: skillDir, + id: relDir, name: frontmatter.name || skillDir, description: frontmatter.description || "", content: body,