* Transforms markdown files to handle "skill" commands in legacy /commands/ folder. * When a SKILL.md file exists in a directory, only that file is loaded * and it takes the name of its parent directory.
(files: MarkdownFile[])
| 491 | * and it takes the name of its parent directory. |
| 492 | */ |
| 493 | function transformSkillFiles(files: MarkdownFile[]): MarkdownFile[] { |
| 494 | const filesByDir = new Map<string, MarkdownFile[]>() |
| 495 | |
| 496 | for (const file of files) { |
| 497 | const dir = dirname(file.filePath) |
| 498 | const dirFiles = filesByDir.get(dir) ?? [] |
| 499 | dirFiles.push(file) |
| 500 | filesByDir.set(dir, dirFiles) |
| 501 | } |
| 502 | |
| 503 | const result: MarkdownFile[] = [] |
| 504 | |
| 505 | for (const [dir, dirFiles] of filesByDir) { |
| 506 | const skillFiles = dirFiles.filter(f => isSkillFile(f.filePath)) |
| 507 | if (skillFiles.length > 0) { |
| 508 | const skillFile = skillFiles[0]! |
| 509 | if (skillFiles.length > 1) { |
| 510 | logForDebugging( |
| 511 | `Multiple skill files found in ${dir}, using ${basename(skillFile.filePath)}`, |
| 512 | ) |
| 513 | } |
| 514 | result.push(skillFile) |
| 515 | } else { |
| 516 | result.push(...dirFiles) |
| 517 | } |
| 518 | } |
| 519 | |
| 520 | return result |
| 521 | } |
| 522 | |
| 523 | function buildNamespace(targetDir: string, baseDir: string): string { |
| 524 | const normalizedBaseDir = baseDir.endsWith(pathSep) |
no test coverage detected