From 9ffb5b80ab3ecd7d85006c20f127162a97458899 Mon Sep 17 00:00:00 2001 From: Brian Madison Date: Mon, 13 Apr 2026 01:02:05 -0500 Subject: [PATCH 1/2] fix(installer): stop skill scanner from recursing into discovered skills Skills don't nest. Once the manifest generator finds a valid SKILL.md in a directory, it should not recurse into that skill's subdirectories looking for more skills. Template files (like bmb's setup-skill-template) inside a skill's assets/ would be incorrectly scanned and produce spurious errors. --- tools/installer/core/manifest-generator.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tools/installer/core/manifest-generator.js b/tools/installer/core/manifest-generator.js index 477142888..df8484d8b 100644 --- a/tools/installer/core/manifest-generator.js +++ b/tools/installer/core/manifest-generator.js @@ -193,11 +193,13 @@ class ManifestGenerator { } } - // Recurse into subdirectories - for (const entry of entries) { - if (!entry.isDirectory()) continue; - if (entry.name.startsWith('.') || entry.name.startsWith('_')) continue; - await walk(path.join(dir, entry.name)); + // Recurse into subdirectories — but not inside a discovered skill + if (!skillMeta) { + for (const entry of entries) { + if (!entry.isDirectory()) continue; + if (entry.name.startsWith('.') || entry.name.startsWith('_')) continue; + await walk(path.join(dir, entry.name)); + } } }; From 0f958cf71372970cac7ad89e1d6ea25068bfc002 Mon Sep 17 00:00:00 2001 From: Brian Madison Date: Mon, 13 Apr 2026 09:59:41 -0500 Subject: [PATCH 2/2] fix(installer): add missing sync and async methods to fs-native wrapper Closes #2256 --- tools/installer/fs-native.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/installer/fs-native.js b/tools/installer/fs-native.js index b6a4abfa5..1d84af98a 100644 --- a/tools/installer/fs-native.js +++ b/tools/installer/fs-native.js @@ -82,7 +82,9 @@ module.exports = { stat: fsp.stat, readdir: fsp.readdir, access: fsp.access, + realpath: fsp.realpath, rename: fsp.rename, + rmdir: fsp.rmdir, unlink: fsp.unlink, chmod: fsp.chmod, mkdir: fsp.mkdir, @@ -103,6 +105,9 @@ module.exports = { existsSync: fs.existsSync.bind(fs), readFileSync: fs.readFileSync.bind(fs), writeFileSync: fs.writeFileSync.bind(fs), + statSync: fs.statSync.bind(fs), + accessSync: fs.accessSync.bind(fs), + readdirSync: fs.readdirSync.bind(fs), createReadStream: fs.createReadStream.bind(fs), pathExistsSync: fs.existsSync.bind(fs),