@skillsmith/mcp-server 0.4.9 → 0.4.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +16 -6
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/__tests__/get-skill.api-path.test.d.ts +10 -0
  4. package/dist/src/__tests__/get-skill.api-path.test.d.ts.map +1 -0
  5. package/dist/src/__tests__/get-skill.api-path.test.js +189 -0
  6. package/dist/src/__tests__/get-skill.api-path.test.js.map +1 -0
  7. package/dist/src/__tests__/test-utils.d.ts +25 -0
  8. package/dist/src/__tests__/test-utils.d.ts.map +1 -1
  9. package/dist/src/__tests__/test-utils.js +45 -0
  10. package/dist/src/__tests__/test-utils.js.map +1 -1
  11. package/dist/src/__tests__/utils/validation.test.js +32 -1
  12. package/dist/src/__tests__/utils/validation.test.js.map +1 -1
  13. package/dist/src/index.js +1 -1
  14. package/dist/src/index.js.map +1 -1
  15. package/dist/src/tools/analytics.d.ts +8 -8
  16. package/dist/src/tools/audit-tools.d.ts +6 -6
  17. package/dist/src/tools/compliance-tools.d.ts +2 -2
  18. package/dist/src/tools/get-skill.d.ts.map +1 -1
  19. package/dist/src/tools/get-skill.js +29 -2
  20. package/dist/src/tools/get-skill.js.map +1 -1
  21. package/dist/src/tools/integration-tools.d.ts +8 -8
  22. package/dist/src/tools/publish.types.d.ts +2 -2
  23. package/dist/src/tools/rbac-tools.d.ts +4 -4
  24. package/dist/src/tools/recommend.types.d.ts +3 -3
  25. package/dist/src/tools/registry-tools.d.ts +6 -6
  26. package/dist/src/tools/skill-diff.d.ts +2 -2
  27. package/dist/src/tools/sso-tools.d.ts +2 -2
  28. package/dist/src/tools/suggest.d.ts +4 -4
  29. package/dist/src/tools/team-workspace.d.ts +4 -4
  30. package/dist/src/tools/uninstall.d.ts +1 -1
  31. package/dist/src/utils/validation.d.ts +24 -0
  32. package/dist/src/utils/validation.d.ts.map +1 -1
  33. package/dist/src/utils/validation.js +38 -0
  34. package/dist/src/utils/validation.js.map +1 -1
  35. package/package.json +2 -2
  36. package/server.json +7 -3
@@ -0,0 +1,10 @@
1
+ /**
2
+ * SMI-4240: API-path tests for executeGetSkill
3
+ *
4
+ * These exercise the `!context.apiClient.isOffline()` branch of get-skill.ts,
5
+ * which the pre-existing get-skill.test.ts cannot reach (it seeds a local
6
+ * SQLite context in offline mode). The fixture-driven context comes from
7
+ * createApiMockContext — see test-utils.ts.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=get-skill.api-path.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-skill.api-path.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/get-skill.api-path.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * SMI-4240: API-path tests for executeGetSkill
3
+ *
4
+ * These exercise the `!context.apiClient.isOffline()` branch of get-skill.ts,
5
+ * which the pre-existing get-skill.test.ts cannot reach (it seeds a local
6
+ * SQLite context in offline mode). The fixture-driven context comes from
7
+ * createApiMockContext — see test-utils.ts.
8
+ */
9
+ import { afterEach, describe, expect, it } from 'vitest';
10
+ import { executeGetSkill } from '../tools/get-skill.js';
11
+ import { createApiMockContext } from './test-utils.js';
12
+ let context;
13
+ afterEach(() => {
14
+ context?.db.close();
15
+ context = undefined;
16
+ });
17
+ describe('executeGetSkill (API path)', () => {
18
+ describe('category mapping', () => {
19
+ it('prefers the API-provided category over tag inference', async () => {
20
+ // Tags are empty, but API says the skill is a database skill.
21
+ // Tag-inference alone would return "other" — the fix makes
22
+ // categories[] win.
23
+ context = createApiMockContext({
24
+ apiSkill: {
25
+ id: 'microsoft/azure-resource-manager-redis-dotnet',
26
+ name: 'azure-resource-manager-redis-dotnet',
27
+ author: 'microsoft',
28
+ trust_tier: 'verified',
29
+ tags: ['agent-skills', 'azure', 'sdk'],
30
+ },
31
+ categories: ['Database'],
32
+ });
33
+ const result = await executeGetSkill({ id: 'microsoft/azure-resource-manager-redis-dotnet' }, context);
34
+ expect(result.skill.category).toBe('database');
35
+ });
36
+ it('normalizes plural API category names to the singular enum form', async () => {
37
+ context = createApiMockContext({
38
+ apiSkill: {
39
+ id: 'x/y',
40
+ name: 'y',
41
+ trust_tier: 'community',
42
+ tags: [],
43
+ },
44
+ categories: ['integrations'], // DB uses plural; enum is singular
45
+ });
46
+ const result = await executeGetSkill({ id: 'x/y' }, context);
47
+ expect(result.skill.category).toBe('integration');
48
+ });
49
+ it('falls back to tag inference when API returns an empty categories array', async () => {
50
+ context = createApiMockContext({
51
+ apiSkill: {
52
+ id: 'x/y',
53
+ name: 'y',
54
+ trust_tier: 'community',
55
+ tags: ['jest', 'testing'],
56
+ },
57
+ categories: [],
58
+ });
59
+ const result = await executeGetSkill({ id: 'x/y' }, context);
60
+ expect(result.skill.category).toBe('testing');
61
+ });
62
+ it('falls back to tag inference when API returns an unmappable category', async () => {
63
+ context = createApiMockContext({
64
+ apiSkill: {
65
+ id: 'x/y',
66
+ name: 'y',
67
+ trust_tier: 'community',
68
+ tags: ['jest'],
69
+ },
70
+ categories: ['product'], // present in DB, not in SkillCategory enum
71
+ });
72
+ const result = await executeGetSkill({ id: 'x/y' }, context);
73
+ expect(result.skill.category).toBe('testing');
74
+ });
75
+ });
76
+ describe('security summary derivation', () => {
77
+ it('returns passed=true for a clean scanned skill', async () => {
78
+ context = createApiMockContext({
79
+ apiSkill: {
80
+ id: 'x/y',
81
+ name: 'y',
82
+ trust_tier: 'verified',
83
+ last_scanned_at: '2026-02-18T05:07:13.844Z',
84
+ security_score: 0,
85
+ security_findings: [],
86
+ quarantined: false,
87
+ },
88
+ });
89
+ const result = await executeGetSkill({ id: 'x/y' }, context);
90
+ expect(result.skill.security).toEqual({
91
+ passed: true,
92
+ riskScore: 0,
93
+ findingsCount: 0,
94
+ scannedAt: '2026-02-18T05:07:13.844Z',
95
+ });
96
+ });
97
+ it('returns passed=false for a quarantined skill', async () => {
98
+ context = createApiMockContext({
99
+ apiSkill: {
100
+ id: 'x/y',
101
+ name: 'y',
102
+ trust_tier: 'community',
103
+ last_scanned_at: '2026-02-18T05:07:13.844Z',
104
+ security_score: 85,
105
+ security_findings: [{}, {}, {}],
106
+ quarantined: true,
107
+ },
108
+ });
109
+ const result = await executeGetSkill({ id: 'x/y' }, context);
110
+ expect(result.skill.security?.passed).toBe(false);
111
+ expect(result.skill.security?.findingsCount).toBe(3);
112
+ expect(result.skill.security?.riskScore).toBe(85);
113
+ });
114
+ it('returns passed=null when a scan timestamp exists but no score', async () => {
115
+ context = createApiMockContext({
116
+ apiSkill: {
117
+ id: 'x/y',
118
+ name: 'y',
119
+ trust_tier: 'community',
120
+ last_scanned_at: '2026-02-18T05:07:13.844Z',
121
+ security_score: null,
122
+ security_findings: null,
123
+ quarantined: false,
124
+ },
125
+ });
126
+ const result = await executeGetSkill({ id: 'x/y' }, context);
127
+ expect(result.skill.security?.passed).toBeNull();
128
+ expect(result.skill.security?.riskScore).toBeNull();
129
+ expect(result.skill.security?.findingsCount).toBe(0);
130
+ });
131
+ it('omits security entirely when the skill has never been scanned', async () => {
132
+ context = createApiMockContext({
133
+ apiSkill: {
134
+ id: 'x/y',
135
+ name: 'y',
136
+ trust_tier: 'community',
137
+ last_scanned_at: null,
138
+ },
139
+ });
140
+ const result = await executeGetSkill({ id: 'x/y' }, context);
141
+ // The extension renders undefined and { passed: null } identically
142
+ // in getSecurityScanHtml, so omission is preferable to shipping a
143
+ // noisy placeholder object.
144
+ expect(result.skill.security).toBeUndefined();
145
+ });
146
+ it('derives findingsCount from the security_findings jsonb array', async () => {
147
+ context = createApiMockContext({
148
+ apiSkill: {
149
+ id: 'x/y',
150
+ name: 'y',
151
+ trust_tier: 'community',
152
+ last_scanned_at: '2026-02-18T05:07:13.844Z',
153
+ security_score: 30,
154
+ security_findings: [{ rule: 'hardcoded-secret' }, { rule: 'weak-hash' }],
155
+ },
156
+ });
157
+ const result = await executeGetSkill({ id: 'x/y' }, context);
158
+ expect(result.skill.security?.findingsCount).toBe(2);
159
+ });
160
+ });
161
+ describe('repository URL passthrough', () => {
162
+ it('maps repo_url to skill.repository', async () => {
163
+ const url = 'https://github.com/microsoft/skills/tree/main/.github/skills/azure-resource-manager-redis-dotnet';
164
+ context = createApiMockContext({
165
+ apiSkill: {
166
+ id: 'x/y',
167
+ name: 'y',
168
+ trust_tier: 'verified',
169
+ repo_url: url,
170
+ },
171
+ });
172
+ const result = await executeGetSkill({ id: 'x/y' }, context);
173
+ expect(result.skill.repository).toBe(url);
174
+ });
175
+ it('leaves skill.repository undefined when repo_url is null', async () => {
176
+ context = createApiMockContext({
177
+ apiSkill: {
178
+ id: 'x/y',
179
+ name: 'y',
180
+ trust_tier: 'community',
181
+ repo_url: null,
182
+ },
183
+ });
184
+ const result = await executeGetSkill({ id: 'x/y' }, context);
185
+ expect(result.skill.repository).toBeUndefined();
186
+ });
187
+ });
188
+ });
189
+ //# sourceMappingURL=get-skill.api-path.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-skill.api-path.test.js","sourceRoot":"","sources":["../../../src/__tests__/get-skill.api-path.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  /**
2
2
  * Test utilities for MCP server tests
3
3
  * @see SMI-792: Database initialization
4
+ * @see SMI-4240: createApiMockContext for API-path coverage
4
5
  */
6
+ import type { ApiSkill } from '@skillsmith/core';
5
7
  import { type ToolContext } from '../context.js';
6
8
  export type { ToolContext };
7
9
  /**
@@ -17,4 +19,27 @@ export declare function seedTestData(context: ToolContext): void;
17
19
  * Create a seeded test context
18
20
  */
19
21
  export declare function createSeededTestContext(): ToolContext;
22
+ /**
23
+ * SMI-4240: Minimal `ApiSkill` fields every mock fixture must provide.
24
+ * Anything not listed here is optional and filled with sensible defaults.
25
+ */
26
+ export type ApiSkillFixtureInput = Partial<ApiSkill> & Pick<ApiSkill, 'id' | 'name'> & {
27
+ trust_tier?: ApiSkill['trust_tier'];
28
+ };
29
+ /**
30
+ * SMI-4240: Create a ToolContext wired to an in-memory apiClient mock so
31
+ * get-skill / search / recommend tests can exercise the API path
32
+ * (`!isOffline()` branch) without touching the network.
33
+ *
34
+ * Pass a partial `ApiSkill`; defaults are filled in to satisfy the real
35
+ * response validators. If the test calls `apiClient.getSkill(id)` with
36
+ * an ID that doesn't match the fixture, the mock throws an Error whose
37
+ * message matches the API client's own "Skill not found" shape so the
38
+ * tool's fallback logic behaves identically to production.
39
+ */
40
+ export declare function createApiMockContext(opts: {
41
+ apiSkill: ApiSkillFixtureInput;
42
+ /** Category names joined by the edge function; defaults to `[]`. */
43
+ categories?: string[];
44
+ }): ToolContext;
20
45
  //# sourceMappingURL=test-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAEnE,YAAY,EAAE,WAAW,EAAE,CAAA;AAE3B;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CAK/C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAqEvD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,WAAW,CAIrD"}
1
+ {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAgC,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC9E,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAEnE,YAAY,EAAE,WAAW,EAAE,CAAA;AAE3B;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CAK/C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAqEvD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,WAAW,CAIrD;AAED;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC,GAClD,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,MAAM,CAAC,GAAG;IAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAA;CAAE,CAAA;AAEzE;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,QAAQ,EAAE,oBAAoB,CAAA;IAC9B,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB,GAAG,WAAW,CAsCd"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Test utilities for MCP server tests
3
3
  * @see SMI-792: Database initialization
4
+ * @see SMI-4240: createApiMockContext for API-path coverage
4
5
  */
5
6
  import { createToolContext } from '../context.js';
6
7
  /**
@@ -88,4 +89,48 @@ export function createSeededTestContext() {
88
89
  seedTestData(context);
89
90
  return context;
90
91
  }
92
+ /**
93
+ * SMI-4240: Create a ToolContext wired to an in-memory apiClient mock so
94
+ * get-skill / search / recommend tests can exercise the API path
95
+ * (`!isOffline()` branch) without touching the network.
96
+ *
97
+ * Pass a partial `ApiSkill`; defaults are filled in to satisfy the real
98
+ * response validators. If the test calls `apiClient.getSkill(id)` with
99
+ * an ID that doesn't match the fixture, the mock throws an Error whose
100
+ * message matches the API client's own "Skill not found" shape so the
101
+ * tool's fallback logic behaves identically to production.
102
+ */
103
+ export function createApiMockContext(opts) {
104
+ const context = createToolContext({
105
+ dbPath: ':memory:',
106
+ apiClientConfig: { offlineMode: false },
107
+ });
108
+ const fixture = {
109
+ id: opts.apiSkill.id,
110
+ name: opts.apiSkill.name,
111
+ description: opts.apiSkill.description ?? null,
112
+ author: opts.apiSkill.author ?? null,
113
+ repo_url: opts.apiSkill.repo_url ?? null,
114
+ quality_score: opts.apiSkill.quality_score ?? null,
115
+ trust_tier: opts.apiSkill.trust_tier ?? 'community',
116
+ tags: opts.apiSkill.tags ?? [],
117
+ stars: opts.apiSkill.stars ?? null,
118
+ created_at: opts.apiSkill.created_at ?? '2026-01-01T00:00:00.000Z',
119
+ updated_at: opts.apiSkill.updated_at ?? '2026-01-01T00:00:00.000Z',
120
+ categories: opts.categories ?? opts.apiSkill.categories ?? [],
121
+ security_score: opts.apiSkill.security_score,
122
+ last_scanned_at: opts.apiSkill.last_scanned_at,
123
+ security_findings: opts.apiSkill.security_findings,
124
+ quarantined: opts.apiSkill.quarantined,
125
+ };
126
+ const apiClient = context.apiClient;
127
+ apiClient.isOffline = () => false;
128
+ apiClient.getSkill = async (id) => {
129
+ if (id !== fixture.id) {
130
+ throw new Error(`[mock] Skill "${id}" not found`);
131
+ }
132
+ return { data: fixture };
133
+ };
134
+ return context;
135
+ }
91
136
  //# sourceMappingURL=test-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../../src/__tests__/test-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAoB,MAAM,eAAe,CAAA;AAInE;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,iBAAiB,CAAC;QACvB,MAAM,EAAE,UAAU;QAClB,eAAe,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;KACvC,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAoB;IAC/C,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAA;IAEnC,kBAAkB;IAClB,eAAe,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,kBAAkB;QACtB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,kEAAkE;QAC/E,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,kDAAkD;QAC3D,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,UAAU;QACrB,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,sBAAsB,EAAE,YAAY,CAAC;KAC9D,CAAC,CAAA;IAEF,eAAe,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,qBAAqB;QACzB,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,kDAAkD;QAC/D,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,qDAAqD;QAC9D,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,UAAU;QACrB,IAAI,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,CAAC;KACxD,CAAC,CAAA;IAEF,eAAe,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,uBAAuB;QAC3B,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,+CAA+C;QAC5D,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,qDAAqD;QAC9D,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC;KACjD,CAAC,CAAA;IAEF,eAAe,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,yBAAyB;QAC7B,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,yDAAyD;QACtE,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,uDAAuD;QAChE,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,CAAC;KACxD,CAAC,CAAA;IAEF,eAAe,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,0BAA0B;QAC9B,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,mDAAmD;QAChE,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,wDAAwD;QACjE,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,CAAC;KAC3D,CAAC,CAAA;IAEF,eAAe,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,oBAAoB;QACxB,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,0CAA0C;QACvD,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,kDAAkD;QAC3D,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,cAAc;QACzB,IAAI,EAAE,CAAC,eAAe,EAAE,SAAS,EAAE,KAAK,CAAC;KAC1C,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAA;IACnC,YAAY,CAAC,OAAO,CAAC,CAAA;IACrB,OAAO,OAAO,CAAA;AAChB,CAAC"}
1
+ {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../../src/__tests__/test-utils.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * Tests for validation functions to increase branch coverage.
5
5
  */
6
6
  import { describe, it, expect } from 'vitest';
7
- import { parseSkillId, mapTrustTierToDb, mapTrustTierFromDb, extractCategoryFromTags, } from '../../utils/validation.js';
7
+ import { parseSkillId, mapTrustTierToDb, mapTrustTierFromDb, extractCategoryFromTags, normalizeApiCategory, } from '../../utils/validation.js';
8
8
  describe('Validation Utilities', () => {
9
9
  describe('parseSkillId', () => {
10
10
  it('should parse 2-part skill ID (author/name)', () => {
@@ -78,5 +78,36 @@ describe('Validation Utilities', () => {
78
78
  expect(extractCategoryFromTags(['random', 'tags'])).toBe('other');
79
79
  });
80
80
  });
81
+ describe('normalizeApiCategory', () => {
82
+ it('should lowercase display-name categories', () => {
83
+ expect(normalizeApiCategory('Database')).toBe('database');
84
+ expect(normalizeApiCategory('Other')).toBe('other');
85
+ expect(normalizeApiCategory('Science')).toBe('science');
86
+ });
87
+ it('should replace slash with dash for compound enum values', () => {
88
+ expect(normalizeApiCategory('AI/ML')).toBe('ai-ml');
89
+ });
90
+ it('should strip trailing "s" when the singular form matches the enum (SMI-4240 schema drift)', () => {
91
+ // Production DB has "integrations" (plural) but enum has "integration" (singular).
92
+ expect(normalizeApiCategory('integrations')).toBe('integration');
93
+ expect(normalizeApiCategory('Integrations')).toBe('integration');
94
+ });
95
+ it('should return null for categories not in the enum', () => {
96
+ // "product" exists in production DB categories table but not in SkillCategory.
97
+ expect(normalizeApiCategory('product')).toBeNull();
98
+ expect(normalizeApiCategory('made-up-category')).toBeNull();
99
+ });
100
+ it('should return null for missing input (caller falls back to tag inference)', () => {
101
+ expect(normalizeApiCategory(undefined)).toBeNull();
102
+ expect(normalizeApiCategory(null)).toBeNull();
103
+ expect(normalizeApiCategory('')).toBeNull();
104
+ });
105
+ it('should not singularize enum values that legitimately end in "s" without producing false matches', () => {
106
+ // No current enum value ends in "s", but guard against regressions if one is added.
107
+ // If someone adds e.g. "docs" to the enum, this test ensures a direct match wins over stripping.
108
+ const result = normalizeApiCategory('development');
109
+ expect(result).toBe('development');
110
+ });
111
+ });
81
112
  });
82
113
  //# sourceMappingURL=validation.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.test.js","sourceRoot":"","sources":["../../../../src/__tests__/utils/validation.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.test.js","sourceRoot":"","sources":["../../../../src/__tests__/utils/validation.test.ts"],"names":[],"mappings":"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"}
package/dist/src/index.js CHANGED
@@ -46,7 +46,7 @@ import { checkForUpdates, formatUpdateNotification } from '@skillsmith/core';
46
46
  import { createLicenseMiddleware } from './middleware/license.js';
47
47
  import { createQuotaMiddleware } from './middleware/quota.js';
48
48
  // Package version - keep in sync with package.json
49
- const PACKAGE_VERSION = '0.4.9';
49
+ const PACKAGE_VERSION = '0.4.11';
50
50
  const PACKAGE_NAME = '@skillsmith/mcp-server';
51
51
  import { installBundledSkills, installUserDocs, getUserGuidePath, } from './onboarding/install-assets.js';
52
52
  // SMI-2679: Quota enforcement middleware — module-level singletons, initialized once
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -16,9 +16,9 @@ export { periodDays, generateDailyTrend } from './analytics.stub.js';
16
16
  export declare const teamAnalyticsDashboardInputSchema: z.ZodObject<{
17
17
  period: z.ZodDefault<z.ZodOptional<z.ZodEnum<["7d", "30d", "90d"]>>>;
18
18
  }, "strip", z.ZodTypeAny, {
19
- period: "7d" | "30d" | "90d";
19
+ period: "7d" | "90d" | "30d";
20
20
  }, {
21
- period?: "7d" | "30d" | "90d" | undefined;
21
+ period?: "7d" | "90d" | "30d" | undefined;
22
22
  }>;
23
23
  export type TeamAnalyticsDashboardInput = z.infer<typeof teamAnalyticsDashboardInputSchema>;
24
24
  export declare const teamUsageReportInputSchema: z.ZodObject<{
@@ -26,20 +26,20 @@ export declare const teamUsageReportInputSchema: z.ZodObject<{
26
26
  format: z.ZodDefault<z.ZodOptional<z.ZodEnum<["summary", "detailed"]>>>;
27
27
  }, "strip", z.ZodTypeAny, {
28
28
  format: "summary" | "detailed";
29
- period: "7d" | "30d" | "90d";
29
+ period: "7d" | "90d" | "30d";
30
30
  }, {
31
31
  format?: "summary" | "detailed" | undefined;
32
- period?: "7d" | "30d" | "90d" | undefined;
32
+ period?: "7d" | "90d" | "30d" | undefined;
33
33
  }>;
34
34
  export type TeamUsageReportInput = z.infer<typeof teamUsageReportInputSchema>;
35
35
  export declare const analyticsDashboardInputSchema: z.ZodObject<{
36
36
  period: z.ZodDefault<z.ZodOptional<z.ZodEnum<["7d", "30d", "90d"]>>>;
37
37
  includeRecommendations: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
38
38
  }, "strip", z.ZodTypeAny, {
39
- period: "7d" | "30d" | "90d";
39
+ period: "7d" | "90d" | "30d";
40
40
  includeRecommendations: boolean;
41
41
  }, {
42
- period?: "7d" | "30d" | "90d" | undefined;
42
+ period?: "7d" | "90d" | "30d" | undefined;
43
43
  includeRecommendations?: boolean | undefined;
44
44
  }>;
45
45
  export type AnalyticsDashboardInput = z.infer<typeof analyticsDashboardInputSchema>;
@@ -48,10 +48,10 @@ export declare const usageReportInputSchema: z.ZodObject<{
48
48
  format: z.ZodDefault<z.ZodOptional<z.ZodEnum<["summary", "detailed", "csv"]>>>;
49
49
  }, "strip", z.ZodTypeAny, {
50
50
  format: "summary" | "detailed" | "csv";
51
- period: "7d" | "30d" | "90d";
51
+ period: "7d" | "90d" | "30d";
52
52
  }, {
53
53
  format?: "summary" | "detailed" | "csv" | undefined;
54
- period?: "7d" | "30d" | "90d" | undefined;
54
+ period?: "7d" | "90d" | "30d" | undefined;
55
55
  }>;
56
56
  export type UsageReportInput = z.infer<typeof usageReportInputSchema>;
57
57
  export declare const teamAnalyticsDashboardToolSchema: {
@@ -38,20 +38,20 @@ export declare const auditQueryInputSchema: z.ZodObject<{
38
38
  limit: z.ZodOptional<z.ZodNumber>;
39
39
  }, "strip", z.ZodTypeAny, {
40
40
  limit?: number | undefined;
41
- result?: "warning" | "success" | "failure" | undefined;
42
- actor?: string | undefined;
43
- resource?: string | undefined;
44
41
  startDate?: string | undefined;
45
42
  endDate?: string | undefined;
46
43
  eventType?: string | undefined;
47
- }, {
48
- limit?: number | undefined;
49
- result?: "warning" | "success" | "failure" | undefined;
50
44
  actor?: string | undefined;
51
45
  resource?: string | undefined;
46
+ result?: "warning" | "success" | "failure" | undefined;
47
+ }, {
48
+ limit?: number | undefined;
52
49
  startDate?: string | undefined;
53
50
  endDate?: string | undefined;
54
51
  eventType?: string | undefined;
52
+ actor?: string | undefined;
53
+ resource?: string | undefined;
54
+ result?: "warning" | "success" | "failure" | undefined;
55
55
  }>;
56
56
  export type AuditQueryInput = z.infer<typeof auditQueryInputSchema>;
57
57
  export declare const siemExportInputSchema: z.ZodObject<{
@@ -18,11 +18,11 @@ export declare const complianceReportInputSchema: z.ZodObject<{
18
18
  includeUserActivity: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
19
19
  }, "strip", z.ZodTypeAny, {
20
20
  format: "json" | "soc2" | "cyclonedx";
21
- period: "30d" | "90d" | "365d";
21
+ period: "90d" | "30d" | "365d";
22
22
  includeUserActivity: boolean;
23
23
  }, {
24
24
  format: "json" | "soc2" | "cyclonedx";
25
- period?: "30d" | "90d" | "365d" | undefined;
25
+ period?: "90d" | "30d" | "365d" | undefined;
26
26
  includeUserActivity?: boolean | undefined;
27
27
  }>;
28
28
  export type ComplianceReportInput = z.infer<typeof complianceReportInputSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"get-skill.d.ts","sourceRoot":"","sources":["../../../src/tools/get-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAEL,KAAK,gBAAgB,EAOtB,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;EAE9B,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;CAa9B,CAAA;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,EAAE,EAAE,MAAM,CAAA;CACX;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,gBAAgB,CAAC,CA8J3B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CA0GrE"}
1
+ {"version":3,"file":"get-skill.d.ts","sourceRoot":"","sources":["../../../src/tools/get-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAEL,KAAK,gBAAgB,EAQtB,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAQhD;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;EAE9B,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;CAa9B,CAAA;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,EAAE,EAAE,MAAM,CAAA;CACX;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,gBAAgB,CAAC,CA6L3B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CA0GrE"}
@@ -23,7 +23,7 @@
23
23
  */
24
24
  import { z } from 'zod';
25
25
  import { TrustTierDescriptions, SkillsmithError, ErrorCodes, trackSkillView, } from '@skillsmith/core';
26
- import { isValidSkillId, mapTrustTierFromDb, extractCategoryFromTags } from '../utils/validation.js';
26
+ import { isValidSkillId, mapTrustTierFromDb, extractCategoryFromTags, normalizeApiCategory, } from '../utils/validation.js';
27
27
  /**
28
28
  * Zod schema for get-skill input validation
29
29
  */
@@ -89,6 +89,27 @@ export async function executeGetSkill(input, context) {
89
89
  // SMI-3672: Request content alongside metadata
90
90
  const apiResponse = await context.apiClient.getSkill(skillId, { includeContent: true });
91
91
  const apiSkill = apiResponse.data;
92
+ // SMI-4240: Derive security summary from the API response so the extension
93
+ // can render real scan status instead of falling back to "Not scanned"
94
+ // for every skill. Schema-confirmed via Wave 0: no dedicated
95
+ // security_findings_count column exists — count is derived from the
96
+ // security_findings jsonb array. Skills that have never been scanned
97
+ // return `undefined` (the extension treats undefined and { passed: null }
98
+ // identically in getSecurityScanHtml).
99
+ const security = apiSkill.last_scanned_at == null
100
+ ? undefined
101
+ : {
102
+ passed: apiSkill.quarantined === true
103
+ ? false
104
+ : apiSkill.security_score == null
105
+ ? null
106
+ : true,
107
+ riskScore: apiSkill.security_score ?? null,
108
+ findingsCount: Array.isArray(apiSkill.security_findings)
109
+ ? apiSkill.security_findings.length
110
+ : 0,
111
+ scannedAt: apiSkill.last_scanned_at,
112
+ };
92
113
  // Convert API skill to MCP skill format
93
114
  const skill = {
94
115
  id: apiSkill.id,
@@ -97,12 +118,18 @@ export async function executeGetSkill(input, context) {
97
118
  author: apiSkill.author || 'unknown',
98
119
  repository: apiSkill.repo_url || undefined,
99
120
  version: undefined,
100
- category: extractCategoryFromTags(apiSkill.tags),
121
+ // SMI-4240: Prefer the category joined from skill_categories by the API
122
+ // (populated by the indexer's classifier) over tag-based inference.
123
+ // normalizeApiCategory handles case/slash/pluralization drift between
124
+ // the DB categories table and the SkillCategory enum; null falls back
125
+ // to tag inference for skills where the API didn't return a category.
126
+ category: normalizeApiCategory(apiSkill.categories?.[0]) ?? extractCategoryFromTags(apiSkill.tags),
101
127
  trustTier: mapTrustTierFromDb(apiSkill.trust_tier),
102
128
  score: Math.round((apiSkill.quality_score ?? 0) * 100),
103
129
  scoreBreakdown: undefined,
104
130
  tags: apiSkill.tags || [],
105
131
  installCommand: 'claude skill add ' + apiSkill.id,
132
+ security,
106
133
  // SMI-1577: Handle optional date fields with sentinel value
107
134
  createdAt: apiSkill.created_at ?? '1970-01-01T00:00:00.000Z',
108
135
  updatedAt: apiSkill.updated_at ?? '1970-01-01T00:00:00.000Z',