fix(installer): descriptive error when module definition missing after clone (#2377)
* fix(installer): throw descriptive error when module definition missing after clone When a stable tag predates a module restructure (e.g. baut v1.14.0 had payload/source dirs, but the registry pointed to skills/module.yaml which only exists on main), findExternalModuleSource silently returned the configured but non-existent path. This caused a confusing ENOENT inside getFileList/copyModuleWithFiltering rather than a clear error. Now throws with the version that was cloned and a --next hint when the install channel was stable, so users know exactly how to recover. Closes #2372 * style: fix prettier formatting in external-manager.js * style: apply prettier formatting
This commit is contained in:
parent
c48b6f3069
commit
724867d48d
|
|
@ -524,8 +524,20 @@ class ExternalModuleManager {
|
||||||
return path.dirname(rootCandidate);
|
return path.dirname(rootCandidate);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nothing found: return configured path (preserves old behavior for error messaging)
|
// Nothing found: the cloned ref does not contain a recognizable module structure.
|
||||||
return path.dirname(configuredPath);
|
// This happens when a stable tag predates a module restructure (e.g. the repo
|
||||||
|
// moved files from payload/ to skills/ after the tag was cut). Returning a
|
||||||
|
// non-existent path silently causes a confusing ENOENT deep inside copyModuleWithFiltering;
|
||||||
|
// throw a descriptive error here instead so the user knows what happened and how to recover.
|
||||||
|
const resolution = ExternalModuleManager._resolutions.get(moduleCode);
|
||||||
|
const versionHint = resolution?.version ? `version ${resolution.version}` : 'the cloned version';
|
||||||
|
const channelHint =
|
||||||
|
resolution?.channel === 'stable' ? ` Try reinstalling with \`--next=${moduleCode}\` to use the latest main branch instead.` : '';
|
||||||
|
throw new Error(
|
||||||
|
`Module '${moduleCode}' was downloaded but its module definition was not found. ` +
|
||||||
|
`Expected '${moduleDefinitionPath}' to exist in ${versionHint}, but it is missing. ` +
|
||||||
|
`The repository may have been restructured after this release was tagged.${channelHint}`,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
cachedModules = null;
|
cachedModules = null;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue