feat(skills): add refresh summary for discovery health

This commit is contained in:
William Valentin
2026-02-12 17:02:23 -08:00
parent 2d753321b3
commit fc3d2ab4d8
3 changed files with 98 additions and 2 deletions
+27
View File
@@ -7,6 +7,8 @@ import {
toSkillListRows,
renderSkillsTable,
renderSkillInfo,
summarizeSkillsRefresh,
renderSkillsRefreshSummary,
installSkillFromDirectory,
uninstallSkillByName,
} from './skills.js';
@@ -102,6 +104,31 @@ describe('skills CLI helpers', () => {
expect(output).toContain('Unavailable reasons: Required binary not found');
});
it('summarizes refresh counts across status and tiers', () => {
const summary = summarizeSkillsRefresh([
buildSkill({ manifest: { name: 'a', description: 'a', version: '1.0.0', tier: 'bundled' } }),
buildSkill({ manifest: { name: 'b', description: 'b', version: '1.0.0', tier: 'managed' } }),
buildSkill({ available: false, manifest: { name: 'c', description: 'c', version: '1.0.0', tier: 'workspace' } }),
]);
expect(summary.total).toBe(3);
expect(summary.available).toBe(2);
expect(summary.unavailable).toBe(1);
expect(summary.tiers).toEqual({ bundled: 1, managed: 1, workspace: 1 });
});
it('renders refresh summary text', () => {
const output = renderSkillsRefreshSummary({
total: 4,
available: 3,
unavailable: 1,
tiers: { bundled: 2, managed: 1, workspace: 1 },
});
expect(output).toContain('Refreshed 4 skills');
expect(output).toContain('By tier: bundled=2, managed=1, workspace=1');
});
it('installs a local skill directory', () => {
const root = mkdtempSync(join(tmpdir(), 'flynn-skills-cli-'));
const sourceDir = join(root, 'source-skill');