chore(lean): defer skill-manifest resolver cleanup to follow-up

This commit is contained in:
Dicky Moore 2026-03-08 17:38:50 +00:00
parent c56af3296e
commit 6714253197
1 changed files with 31 additions and 6 deletions

View File

@ -37,7 +37,7 @@ function getCanonicalId(manifest, filename) {
/**
* Resolve a manifest entry for a source filename.
* Strict by default: supports single-entry manifests and exact filename keys only.
* Handles single-entry manifests and extension fallbacks.
* @param {Object|null} manifest - Loaded manifest
* @param {string} filename - Source filename
* @returns {Object|null} Manifest entry object
@ -48,6 +48,12 @@ function resolveManifestEntry(manifest, filename) {
if (manifest.__single) return manifest.__single;
// Multi-entry: look up by filename directly
if (manifest[filename]) return manifest[filename];
// Fallback: try alternate extensions for compiled files
const baseName = filename.replace(/\.(md|xml)$/i, '');
const agentKey = `${baseName}.agent.yaml`;
if (manifest[agentKey]) return manifest[agentKey];
const xmlKey = `${baseName}.xml`;
if (manifest[xmlKey]) return manifest[xmlKey];
return null;
}
@ -58,8 +64,18 @@ function resolveManifestEntry(manifest, filename) {
* @returns {string|null} type or null
*/
function getArtifactType(manifest, filename) {
const manifestEntry = resolveManifestEntry(manifest, filename);
return manifestEntry?.type || null;
if (!manifest) return null;
// Single-entry manifest applies to all files in the directory
if (manifest.__single) return manifest.__single.type || null;
// Multi-entry: look up by filename directly
if (manifest[filename]) return manifest[filename].type || null;
// Fallback: try alternate extensions for compiled files
const baseName = filename.replace(/\.(md|xml)$/i, '');
const agentKey = `${baseName}.agent.yaml`;
if (manifest[agentKey]) return manifest[agentKey].type || null;
const xmlKey = `${baseName}.xml`;
if (manifest[xmlKey]) return manifest[xmlKey].type || null;
return null;
}
/**
@ -69,9 +85,18 @@ function getArtifactType(manifest, filename) {
* @returns {boolean} install_to_bmad value (defaults to true)
*/
function getInstallToBmad(manifest, filename) {
const manifestEntry = resolveManifestEntry(manifest, filename);
if (!manifestEntry) return true;
return manifestEntry.install_to_bmad !== false;
if (!manifest) return true;
// Single-entry manifest applies to all files in the directory
if (manifest.__single) return manifest.__single.install_to_bmad !== false;
// Multi-entry: look up by filename directly
if (manifest[filename]) return manifest[filename].install_to_bmad !== false;
// Fallback: try alternate extensions for compiled files
const baseName = filename.replace(/\.(md|xml)$/i, '');
const agentKey = `${baseName}.agent.yaml`;
if (manifest[agentKey]) return manifest[agentKey].install_to_bmad !== false;
const xmlKey = `${baseName}.xml`;
if (manifest[xmlKey]) return manifest[xmlKey].install_to_bmad !== false;
return true;
}
module.exports = { loadSkillManifest, getCanonicalId, getArtifactType, getInstallToBmad };