resolveSkillAvailability function
SkillAvailabilityResolution
resolveSkillAvailability({
- required List<
Skill> skills, - required List<
(SkillToggleScope, SkillsConfig)> scopes,
Resolves the scope stack (shallow→deep: global, project) against the
discovered skills. Default on; the deepest scope mentioning a name
wins, matching the tools rule.
Implementation
SkillAvailabilityResolution resolveSkillAvailability({
required List<Skill> skills,
required List<(SkillToggleScope, SkillsConfig)> scopes,
}) {
final intent = <String, bool>{};
final intentScope = <String, SkillToggleScope>{};
final known = <String>{for (final skill in skills) skill.name.toLowerCase()};
final unknown = <String>{};
for (final (scope, config) in scopes) {
for (final entry in config.skills.entries) {
final name = entry.key.toLowerCase();
if (!known.contains(name)) {
unknown.add(entry.key);
continue;
}
intent[name] = entry.value;
intentScope[name] = scope;
}
}
return SkillAvailabilityResolution(
byName: {
for (final skill in skills)
skill.name: ResolvedSkillAvailability(
enabled: intent[skill.name.toLowerCase()] ?? true,
scope: intentScope[skill.name.toLowerCase()],
),
},
unknownIds: unknown,
);
}