@skillsmith/mcp-server 0.2.0 → 0.2.1

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 (89) hide show
  1. package/README.md +30 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/__tests__/test-utils.d.ts +1 -0
  4. package/dist/src/__tests__/test-utils.d.ts.map +1 -1
  5. package/dist/src/__tests__/test-utils.js +5 -1
  6. package/dist/src/__tests__/test-utils.js.map +1 -1
  7. package/dist/src/context.d.ts +40 -5
  8. package/dist/src/context.d.ts.map +1 -1
  9. package/dist/src/context.js +38 -4
  10. package/dist/src/context.js.map +1 -1
  11. package/dist/src/index.js +1 -1
  12. package/dist/src/middleware/degradation.d.ts +7 -1
  13. package/dist/src/middleware/degradation.d.ts.map +1 -1
  14. package/dist/src/middleware/degradation.js +4 -0
  15. package/dist/src/middleware/degradation.js.map +1 -1
  16. package/dist/src/middleware/index.d.ts +2 -1
  17. package/dist/src/middleware/index.d.ts.map +1 -1
  18. package/dist/src/middleware/index.js +2 -0
  19. package/dist/src/middleware/index.js.map +1 -1
  20. package/dist/src/middleware/license.d.ts +10 -2
  21. package/dist/src/middleware/license.d.ts.map +1 -1
  22. package/dist/src/middleware/license.js +13 -2
  23. package/dist/src/middleware/license.js.map +1 -1
  24. package/dist/src/middleware/quota.d.ts +182 -0
  25. package/dist/src/middleware/quota.d.ts.map +1 -0
  26. package/dist/src/middleware/quota.js +309 -0
  27. package/dist/src/middleware/quota.js.map +1 -0
  28. package/dist/src/middleware/toolFeatureMapping.d.ts +2 -2
  29. package/dist/src/middleware/toolFeatureMapping.d.ts.map +1 -1
  30. package/dist/src/middleware/toolFeatureMapping.js +6 -0
  31. package/dist/src/middleware/toolFeatureMapping.js.map +1 -1
  32. package/dist/src/tools/compare.js +2 -2
  33. package/dist/src/tools/compare.js.map +1 -1
  34. package/dist/src/tools/get-skill.d.ts +4 -13
  35. package/dist/src/tools/get-skill.d.ts.map +1 -1
  36. package/dist/src/tools/get-skill.js +55 -19
  37. package/dist/src/tools/get-skill.js.map +1 -1
  38. package/dist/src/tools/install.d.ts.map +1 -1
  39. package/dist/src/tools/install.js +13 -1
  40. package/dist/src/tools/install.js.map +1 -1
  41. package/dist/src/tools/recommend.d.ts +4 -6
  42. package/dist/src/tools/recommend.d.ts.map +1 -1
  43. package/dist/src/tools/recommend.js +73 -41
  44. package/dist/src/tools/recommend.js.map +1 -1
  45. package/dist/src/tools/search.d.ts +5 -12
  46. package/dist/src/tools/search.d.ts.map +1 -1
  47. package/dist/src/tools/search.js +65 -67
  48. package/dist/src/tools/search.js.map +1 -1
  49. package/dist/src/tools/suggest.d.ts +4 -4
  50. package/dist/src/tools/suggest.d.ts.map +1 -1
  51. package/dist/src/tools/suggest.js +1 -33
  52. package/dist/src/tools/suggest.js.map +1 -1
  53. package/dist/src/utils/validation.d.ts +29 -10
  54. package/dist/src/utils/validation.d.ts.map +1 -1
  55. package/dist/src/utils/validation.js +52 -19
  56. package/dist/src/utils/validation.js.map +1 -1
  57. package/dist/tests/e2e/compare.e2e.test.js +11 -1
  58. package/dist/tests/e2e/compare.e2e.test.js.map +1 -1
  59. package/dist/tests/e2e/install-flow.e2e.test.js +22 -2
  60. package/dist/tests/e2e/install-flow.e2e.test.js.map +1 -1
  61. package/dist/tests/e2e/recommend.e2e.test.js +12 -2
  62. package/dist/tests/e2e/recommend.e2e.test.js.map +1 -1
  63. package/dist/tests/e2e/skill-flow.e2e.test.js +35 -4
  64. package/dist/tests/e2e/skill-flow.e2e.test.js.map +1 -1
  65. package/dist/tests/e2e/suggest.e2e.test.js +22 -2
  66. package/dist/tests/e2e/suggest.e2e.test.js.map +1 -1
  67. package/dist/tests/integration/recommend.integration.test.js +2 -0
  68. package/dist/tests/integration/recommend.integration.test.js.map +1 -1
  69. package/dist/tests/integration/setup.d.ts +4 -1
  70. package/dist/tests/integration/setup.d.ts.map +1 -1
  71. package/dist/tests/integration/setup.js +8 -1
  72. package/dist/tests/integration/setup.js.map +1 -1
  73. package/dist/tests/performance/search-performance.test.js +6 -2
  74. package/dist/tests/performance/search-performance.test.js.map +1 -1
  75. package/dist/tests/recommend.test.js +2 -0
  76. package/dist/tests/recommend.test.js.map +1 -1
  77. package/package.json +8 -8
  78. package/dist/src/__tests__/compare.test.d.ts +0 -5
  79. package/dist/src/__tests__/compare.test.d.ts.map +0 -1
  80. package/dist/src/__tests__/compare.test.js +0 -254
  81. package/dist/src/__tests__/compare.test.js.map +0 -1
  82. package/dist/src/__tests__/recommend.test.d.ts +0 -5
  83. package/dist/src/__tests__/recommend.test.d.ts.map +0 -1
  84. package/dist/src/__tests__/recommend.test.js +0 -181
  85. package/dist/src/__tests__/recommend.test.js.map +0 -1
  86. package/dist/src/__tests__/validate.test.d.ts +0 -5
  87. package/dist/src/__tests__/validate.test.d.ts.map +0 -1
  88. package/dist/src/__tests__/validate.test.js +0 -303
  89. package/dist/src/__tests__/validate.test.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"recommend.test.js","sourceRoot":"","sources":["../../../src/__tests__/recommend.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Tests for SMI-742: MCP Skill Validate Tool
3
- */
4
- export {};
5
- //# sourceMappingURL=validate.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/validate.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,303 +0,0 @@
1
- /**
2
- * Tests for SMI-742: MCP Skill Validate Tool
3
- */
4
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
5
- import { promises as fs } from 'fs';
6
- import { join } from 'path';
7
- import { tmpdir } from 'os';
8
- import { executeValidate, formatValidationResults, validateInputSchema, } from '../tools/validate.js';
9
- import { SkillsmithError, ErrorCodes } from '@skillsmith/core';
10
- describe('Skill Validate Tool', () => {
11
- let testDir;
12
- beforeEach(async () => {
13
- // Create a temporary directory for test files
14
- testDir = await fs.mkdtemp(join(tmpdir(), 'skillsmith-validate-test-'));
15
- });
16
- afterEach(async () => {
17
- // Clean up test directory
18
- await fs.rm(testDir, { recursive: true, force: true });
19
- });
20
- describe('validateInputSchema', () => {
21
- it('should require skill_path', () => {
22
- expect(() => validateInputSchema.parse({})).toThrow();
23
- expect(() => validateInputSchema.parse({ skill_path: '' })).toThrow();
24
- });
25
- it('should accept valid skill_path', () => {
26
- const result = validateInputSchema.parse({
27
- skill_path: '/path/to/SKILL.md',
28
- });
29
- expect(result.skill_path).toBe('/path/to/SKILL.md');
30
- expect(result.strict).toBe(false); // default
31
- });
32
- it('should accept strict mode', () => {
33
- const result = validateInputSchema.parse({
34
- skill_path: '/path/to/skill',
35
- strict: true,
36
- });
37
- expect(result.strict).toBe(true);
38
- });
39
- it('should default strict to false', () => {
40
- const result = validateInputSchema.parse({
41
- skill_path: '/path/to/skill',
42
- });
43
- expect(result.strict).toBe(false);
44
- });
45
- });
46
- describe('executeValidate', () => {
47
- it('should validate a valid SKILL.md file', async () => {
48
- const skillContent = `---
49
- name: test-skill
50
- description: A test skill for validation
51
- author: test-author
52
- version: 1.0.0
53
- tags:
54
- - testing
55
- - validation
56
- ---
57
-
58
- # Test Skill
59
-
60
- This is a test skill.
61
- `;
62
- const filePath = join(testDir, 'SKILL.md');
63
- await fs.writeFile(filePath, skillContent);
64
- const result = await executeValidate({ skill_path: filePath });
65
- expect(result.valid).toBe(true);
66
- expect(result.errors.filter((e) => e.severity === 'error')).toHaveLength(0);
67
- expect(result.metadata).toBeDefined();
68
- expect(result.metadata?.name).toBe('test-skill');
69
- expect(result.metadata?.description).toBe('A test skill for validation');
70
- expect(result.timing.totalMs).toBeGreaterThanOrEqual(0);
71
- });
72
- it('should find SKILL.md in directory', async () => {
73
- const skillContent = `---
74
- name: dir-skill
75
- description: Skill in directory
76
- ---
77
- `;
78
- await fs.writeFile(join(testDir, 'SKILL.md'), skillContent);
79
- const result = await executeValidate({ skill_path: testDir });
80
- expect(result.valid).toBe(true);
81
- expect(result.path).toBe(join(testDir, 'SKILL.md'));
82
- expect(result.metadata?.name).toBe('dir-skill');
83
- });
84
- it('should return error for missing name field', async () => {
85
- const skillContent = `---
86
- description: A skill without a name
87
- ---
88
- `;
89
- const filePath = join(testDir, 'SKILL.md');
90
- await fs.writeFile(filePath, skillContent);
91
- const result = await executeValidate({ skill_path: filePath });
92
- expect(result.valid).toBe(false);
93
- expect(result.errors.some((e) => e.field === 'name' && e.severity === 'error')).toBe(true);
94
- });
95
- it('should warn for missing description in non-strict mode', async () => {
96
- const skillContent = `---
97
- name: no-description-skill
98
- ---
99
- `;
100
- const filePath = join(testDir, 'SKILL.md');
101
- await fs.writeFile(filePath, skillContent);
102
- const result = await executeValidate({ skill_path: filePath, strict: false });
103
- expect(result.valid).toBe(true); // Still valid in non-strict mode
104
- expect(result.errors.some((e) => e.field === 'description' && e.severity === 'warning')).toBe(true);
105
- });
106
- it('should error for missing description in strict mode', async () => {
107
- const skillContent = `---
108
- name: no-description-skill
109
- ---
110
- `;
111
- const filePath = join(testDir, 'SKILL.md');
112
- await fs.writeFile(filePath, skillContent);
113
- const result = await executeValidate({ skill_path: filePath, strict: true });
114
- expect(result.valid).toBe(false);
115
- expect(result.errors.some((e) => e.field === 'description' && e.severity === 'error')).toBe(true);
116
- });
117
- it('should error for name exceeding 64 characters', async () => {
118
- const longName = 'a'.repeat(65);
119
- const skillContent = `---
120
- name: ${longName}
121
- description: A skill with a very long name
122
- ---
123
- `;
124
- const filePath = join(testDir, 'SKILL.md');
125
- await fs.writeFile(filePath, skillContent);
126
- const result = await executeValidate({ skill_path: filePath });
127
- expect(result.valid).toBe(false);
128
- expect(result.errors.some((e) => e.field === 'name' && e.message.includes('exceeds maximum length'))).toBe(true);
129
- });
130
- it('should error for description exceeding 1024 characters', async () => {
131
- const longDesc = 'a'.repeat(1025);
132
- const skillContent = `---
133
- name: long-desc-skill
134
- description: ${longDesc}
135
- ---
136
- `;
137
- const filePath = join(testDir, 'SKILL.md');
138
- await fs.writeFile(filePath, skillContent);
139
- const result = await executeValidate({ skill_path: filePath });
140
- expect(result.valid).toBe(false);
141
- expect(result.errors.some((e) => e.field === 'description' && e.message.includes('exceeds maximum length'))).toBe(true);
142
- });
143
- it('should detect SSRF pattern in repository URL', async () => {
144
- const skillContent = `---
145
- name: ssrf-skill
146
- description: A skill with dangerous URL
147
- repository: file:///etc/passwd
148
- ---
149
- `;
150
- const filePath = join(testDir, 'SKILL.md');
151
- await fs.writeFile(filePath, skillContent);
152
- const result = await executeValidate({ skill_path: filePath });
153
- expect(result.valid).toBe(false);
154
- expect(result.errors.some((e) => e.field === 'repository' && e.message.includes('dangerous URL pattern'))).toBe(true);
155
- });
156
- it('should detect localhost in repository URL', async () => {
157
- const skillContent = `---
158
- name: localhost-skill
159
- description: A skill with localhost URL
160
- repository: http://localhost:8080/repo
161
- ---
162
- `;
163
- const filePath = join(testDir, 'SKILL.md');
164
- await fs.writeFile(filePath, skillContent);
165
- const result = await executeValidate({ skill_path: filePath });
166
- expect(result.valid).toBe(false);
167
- expect(result.errors.some((e) => e.field === 'repository' && e.message.includes('dangerous URL pattern'))).toBe(true);
168
- });
169
- it('should detect path traversal in values', async () => {
170
- const skillContent = `---
171
- name: traversal-skill
172
- description: ../../../etc/passwd
173
- ---
174
- `;
175
- const filePath = join(testDir, 'SKILL.md');
176
- await fs.writeFile(filePath, skillContent);
177
- const result = await executeValidate({ skill_path: filePath });
178
- expect(result.valid).toBe(false);
179
- expect(result.errors.some((e) => e.message.includes('path traversal'))).toBe(true);
180
- });
181
- it('should error for invalid frontmatter', async () => {
182
- const skillContent = `# No Frontmatter Skill
183
-
184
- This skill has no YAML frontmatter.
185
- `;
186
- const filePath = join(testDir, 'SKILL.md');
187
- await fs.writeFile(filePath, skillContent);
188
- const result = await executeValidate({ skill_path: filePath });
189
- expect(result.valid).toBe(false);
190
- expect(result.errors.some((e) => e.field === 'frontmatter')).toBe(true);
191
- });
192
- it('should throw for non-existent path', async () => {
193
- const fakePath = join(testDir, 'nonexistent', 'SKILL.md');
194
- try {
195
- await executeValidate({ skill_path: fakePath });
196
- expect.fail('Should have thrown an error');
197
- }
198
- catch (error) {
199
- expect(error).toBeInstanceOf(SkillsmithError);
200
- expect(error.code).toBe(ErrorCodes.SKILL_NOT_FOUND);
201
- }
202
- });
203
- it('should throw for path traversal in input path', async () => {
204
- try {
205
- await executeValidate({ skill_path: '../../../etc/passwd' });
206
- expect.fail('Should have thrown an error');
207
- }
208
- catch (error) {
209
- expect(error).toBeInstanceOf(SkillsmithError);
210
- expect(error.code).toBe(ErrorCodes.VALIDATION_INVALID_TYPE);
211
- }
212
- });
213
- it('should validate tags array correctly', async () => {
214
- const skillContent = `---
215
- name: tags-skill
216
- description: A skill with invalid tags
217
- tags: not-an-array
218
- ---
219
- `;
220
- const filePath = join(testDir, 'SKILL.md');
221
- await fs.writeFile(filePath, skillContent);
222
- const result = await executeValidate({ skill_path: filePath });
223
- expect(result.valid).toBe(false);
224
- expect(result.errors.some((e) => e.field === 'tags' && e.message.includes('array'))).toBe(true);
225
- });
226
- it('should validate tag length limits', async () => {
227
- const longTag = 'a'.repeat(33);
228
- const skillContent = `---
229
- name: long-tag-skill
230
- description: A skill with a very long tag
231
- tags:
232
- - ${longTag}
233
- ---
234
- `;
235
- const filePath = join(testDir, 'SKILL.md');
236
- await fs.writeFile(filePath, skillContent);
237
- const result = await executeValidate({ skill_path: filePath });
238
- expect(result.valid).toBe(false);
239
- expect(result.errors.some((e) => e.field.startsWith('tags[') && e.message.includes('exceeds'))).toBe(true);
240
- });
241
- });
242
- describe('formatValidationResults', () => {
243
- it('should format valid skill results', async () => {
244
- const skillContent = `---
245
- name: format-test-skill
246
- description: A skill for testing formatting
247
- author: tester
248
- version: 1.0.0
249
- tags: [testing, formatting]
250
- ---
251
- `;
252
- const filePath = join(testDir, 'SKILL.md');
253
- await fs.writeFile(filePath, skillContent);
254
- const result = await executeValidate({ skill_path: filePath });
255
- const formatted = formatValidationResults(result);
256
- expect(formatted).toContain('Skill Validation Results');
257
- expect(formatted).toContain('Status: VALID');
258
- expect(formatted).toContain('Metadata:');
259
- expect(formatted).toContain('Name: format-test-skill');
260
- expect(formatted).toContain('Author: tester');
261
- expect(formatted).toContain('Version: 1.0.0');
262
- });
263
- it('should format invalid skill results with errors', async () => {
264
- const skillContent = `---
265
- description: No name field
266
- ---
267
- `;
268
- const filePath = join(testDir, 'SKILL.md');
269
- await fs.writeFile(filePath, skillContent);
270
- const result = await executeValidate({ skill_path: filePath });
271
- const formatted = formatValidationResults(result);
272
- expect(formatted).toContain('Status: INVALID');
273
- expect(formatted).toContain('[ERROR]');
274
- expect(formatted).toContain('name');
275
- });
276
- it('should show warning count in formatted output', async () => {
277
- const skillContent = `---
278
- name: warning-skill
279
- ---
280
- `;
281
- const filePath = join(testDir, 'SKILL.md');
282
- await fs.writeFile(filePath, skillContent);
283
- const result = await executeValidate({ skill_path: filePath });
284
- const formatted = formatValidationResults(result);
285
- expect(formatted).toContain('warning(s)');
286
- expect(formatted).toContain('[WARN]');
287
- });
288
- it('should include timing information', async () => {
289
- const skillContent = `---
290
- name: timing-skill
291
- description: Test timing
292
- ---
293
- `;
294
- const filePath = join(testDir, 'SKILL.md');
295
- await fs.writeFile(filePath, skillContent);
296
- const result = await executeValidate({ skill_path: filePath });
297
- const formatted = formatValidationResults(result);
298
- expect(formatted).toContain('Completed in');
299
- expect(formatted).toContain('ms');
300
- });
301
- });
302
- });
303
- //# sourceMappingURL=validate.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate.test.js","sourceRoot":"","sources":["../../../src/__tests__/validate.test.ts"],"names":[],"mappings":"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"}