@codemcp/agentskills-core 0.0.4

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 (50) hide show
  1. package/LICENSE +19 -0
  2. package/dist/__tests__/package-config.test.d.ts +2 -0
  3. package/dist/__tests__/package-config.test.d.ts.map +1 -0
  4. package/dist/__tests__/package-config.test.js +251 -0
  5. package/dist/__tests__/package-config.test.js.map +1 -0
  6. package/dist/__tests__/parser.test.d.ts +2 -0
  7. package/dist/__tests__/parser.test.d.ts.map +1 -0
  8. package/dist/__tests__/parser.test.js +613 -0
  9. package/dist/__tests__/parser.test.js.map +1 -0
  10. package/dist/__tests__/registry.test.d.ts +2 -0
  11. package/dist/__tests__/registry.test.d.ts.map +1 -0
  12. package/dist/__tests__/registry.test.js +415 -0
  13. package/dist/__tests__/registry.test.js.map +1 -0
  14. package/dist/__tests__/skill-installer.test.d.ts +2 -0
  15. package/dist/__tests__/skill-installer.test.d.ts.map +1 -0
  16. package/dist/__tests__/skill-installer.test.js +229 -0
  17. package/dist/__tests__/skill-installer.test.js.map +1 -0
  18. package/dist/__tests__/validator.test.d.ts +2 -0
  19. package/dist/__tests__/validator.test.d.ts.map +1 -0
  20. package/dist/__tests__/validator.test.js +284 -0
  21. package/dist/__tests__/validator.test.js.map +1 -0
  22. package/dist/index.d.ts +7 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +6 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/installer.d.ts +89 -0
  27. package/dist/installer.d.ts.map +1 -0
  28. package/dist/installer.js +469 -0
  29. package/dist/installer.js.map +1 -0
  30. package/dist/package-config.d.ts +52 -0
  31. package/dist/package-config.d.ts.map +1 -0
  32. package/dist/package-config.js +267 -0
  33. package/dist/package-config.js.map +1 -0
  34. package/dist/parser.d.ts +59 -0
  35. package/dist/parser.d.ts.map +1 -0
  36. package/dist/parser.js +154 -0
  37. package/dist/parser.js.map +1 -0
  38. package/dist/registry.d.ts +72 -0
  39. package/dist/registry.d.ts.map +1 -0
  40. package/dist/registry.js +180 -0
  41. package/dist/registry.js.map +1 -0
  42. package/dist/types.d.ts +202 -0
  43. package/dist/types.d.ts.map +1 -0
  44. package/dist/types.js +8 -0
  45. package/dist/types.js.map +1 -0
  46. package/dist/validator.d.ts +27 -0
  47. package/dist/validator.d.ts.map +1 -0
  48. package/dist/validator.js +165 -0
  49. package/dist/validator.js.map +1 -0
  50. package/package.json +56 -0
@@ -0,0 +1,415 @@
1
+ import { describe, it, expect, afterEach } from "vitest";
2
+ import { promises as fs } from "fs";
3
+ import { join } from "path";
4
+ import { tmpdir } from "os";
5
+ import { SkillRegistry } from "../registry.js";
6
+ /**
7
+ * Test suite for simplified SkillRegistry (TDD RED phase)
8
+ *
9
+ * New simplified model:
10
+ * - Single directory path (not SkillSource array)
11
+ * - Expects <skill-name>/SKILL.md structure (exactly 2 levels deep)
12
+ * - STRICT: Throws errors on misconfiguration (fail fast)
13
+ * - No multi-source, no priority, no partial failures
14
+ *
15
+ * Test coverage (~22 tests):
16
+ * 1. Basic Loading (5 tests)
17
+ * 2. Strict Error Handling (8 tests)
18
+ * 3. Directory Structure (4 tests)
19
+ * 4. Edge Cases (3 tests)
20
+ * 5. State Management (2 tests)
21
+ */
22
+ /**
23
+ * Helper: Create a temp directory for test isolation
24
+ */
25
+ async function createTempDir() {
26
+ const tempPath = join(tmpdir(), `skill-registry-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
27
+ await fs.mkdir(tempPath, { recursive: true });
28
+ return tempPath;
29
+ }
30
+ /**
31
+ * Helper: Clean up temp directory
32
+ */
33
+ async function cleanupTempDir(path) {
34
+ try {
35
+ await fs.rm(path, { recursive: true, force: true });
36
+ }
37
+ catch (error) {
38
+ // Ignore cleanup errors
39
+ }
40
+ }
41
+ /**
42
+ * Helper: Create a skill with SKILL.md in subdirectory
43
+ */
44
+ async function createSkill(baseDir, skillName, content) {
45
+ const skillDir = join(baseDir, skillName);
46
+ await fs.mkdir(skillDir, { recursive: true });
47
+ const skillPath = join(skillDir, "SKILL.md");
48
+ await fs.writeFile(skillPath, content, "utf-8");
49
+ return skillPath;
50
+ }
51
+ /**
52
+ * Helper: Create nested directories (scripts/, references/)
53
+ */
54
+ async function createNestedDir(skillDir, nestedDirName) {
55
+ const nestedPath = join(skillDir, nestedDirName);
56
+ await fs.mkdir(nestedPath, { recursive: true });
57
+ return nestedPath;
58
+ }
59
+ /**
60
+ * Helper: Get basic skill content
61
+ */
62
+ function getBasicSkillContent(name, description) {
63
+ return `---
64
+ name: ${name}
65
+ description: ${description}
66
+ ---
67
+
68
+ # ${name}
69
+
70
+ This is a test skill.
71
+ `;
72
+ }
73
+ /**
74
+ * Helper: Get invalid skill content (missing required field)
75
+ */
76
+ function getInvalidSkillContent(missingField) {
77
+ if (missingField === "name") {
78
+ return `---
79
+ description: A skill without a name
80
+ ---
81
+
82
+ # Invalid Skill
83
+
84
+ This skill is missing the name field.
85
+ `;
86
+ }
87
+ else {
88
+ return `---
89
+ name: invalid-skill
90
+ ---
91
+
92
+ # Invalid Skill
93
+
94
+ This skill is missing the description field.
95
+ `;
96
+ }
97
+ }
98
+ describe("SkillRegistry - Simplified Model", () => {
99
+ let tempDirs = [];
100
+ /**
101
+ * Clean up all temp directories after each test
102
+ */
103
+ afterEach(async () => {
104
+ for (const dir of tempDirs) {
105
+ await cleanupTempDir(dir);
106
+ }
107
+ tempDirs = [];
108
+ });
109
+ describe("Basic Loading", () => {
110
+ it("should load skills from valid directory structure", async () => {
111
+ // Arrange
112
+ const registry = new SkillRegistry();
113
+ const tempDir = await createTempDir();
114
+ tempDirs.push(tempDir);
115
+ await createSkill(tempDir, "test-skill-1", getBasicSkillContent("test-skill-1", "First test skill"));
116
+ await createSkill(tempDir, "test-skill-2", getBasicSkillContent("test-skill-2", "Second test skill"));
117
+ // Act
118
+ const result = await registry.loadSkills(tempDir);
119
+ // Assert
120
+ expect(result.loaded).toBe(2);
121
+ expect(result.skillsDir).toBe(tempDir);
122
+ expect(result.timestamp).toBeInstanceOf(Date);
123
+ });
124
+ it("should get skill by name", async () => {
125
+ // Arrange
126
+ const registry = new SkillRegistry();
127
+ const tempDir = await createTempDir();
128
+ tempDirs.push(tempDir);
129
+ await createSkill(tempDir, "test-skill-1", getBasicSkillContent("test-skill-1", "First test skill"));
130
+ await registry.loadSkills(tempDir);
131
+ // Act
132
+ const skill = registry.getSkill("test-skill-1");
133
+ // Assert
134
+ expect(skill).toBeDefined();
135
+ expect(skill?.metadata.name).toBe("test-skill-1");
136
+ expect(skill?.metadata.description).toBe("First test skill");
137
+ expect(skill?.body).toContain("# test-skill-1");
138
+ });
139
+ it("should get all skills", async () => {
140
+ // Arrange
141
+ const registry = new SkillRegistry();
142
+ const tempDir = await createTempDir();
143
+ tempDirs.push(tempDir);
144
+ await createSkill(tempDir, "test-skill-1", getBasicSkillContent("test-skill-1", "First test skill"));
145
+ await createSkill(tempDir, "test-skill-2", getBasicSkillContent("test-skill-2", "Second test skill"));
146
+ await registry.loadSkills(tempDir);
147
+ // Act
148
+ const skills = registry.getAllSkills();
149
+ // Assert
150
+ expect(skills).toHaveLength(2);
151
+ const names = skills.map((s) => s.metadata.name);
152
+ expect(names).toContain("test-skill-1");
153
+ expect(names).toContain("test-skill-2");
154
+ });
155
+ it("should get skill metadata", async () => {
156
+ // Arrange
157
+ const registry = new SkillRegistry();
158
+ const tempDir = await createTempDir();
159
+ tempDirs.push(tempDir);
160
+ await createSkill(tempDir, "test-skill-1", getBasicSkillContent("test-skill-1", "First test skill"));
161
+ await registry.loadSkills(tempDir);
162
+ // Act
163
+ const metadata = registry.getSkillMetadata("test-skill-1");
164
+ // Assert
165
+ expect(metadata).toBeDefined();
166
+ expect(metadata?.name).toBe("test-skill-1");
167
+ expect(metadata?.description).toBe("First test skill");
168
+ });
169
+ it("should get registry state", async () => {
170
+ // Arrange
171
+ const registry = new SkillRegistry();
172
+ const tempDir = await createTempDir();
173
+ tempDirs.push(tempDir);
174
+ await createSkill(tempDir, "test-skill-1", getBasicSkillContent("test-skill-1", "First test skill"));
175
+ await createSkill(tempDir, "test-skill-2", getBasicSkillContent("test-skill-2", "Second test skill"));
176
+ // Act
177
+ await registry.loadSkills(tempDir);
178
+ const state = registry.getState();
179
+ // Assert
180
+ expect(state.skillCount).toBe(2);
181
+ expect(state.skillsDir).toBe(tempDir);
182
+ expect(state.lastLoaded).toBeInstanceOf(Date);
183
+ });
184
+ });
185
+ describe("Strict Error Handling", () => {
186
+ it("should throw if skillsDir does not exist", async () => {
187
+ // Arrange
188
+ const registry = new SkillRegistry();
189
+ const nonExistentPath = join(tmpdir(), "non-existent-dir-" + Date.now());
190
+ // Act & Assert
191
+ await expect(registry.loadSkills(nonExistentPath)).rejects.toThrow();
192
+ });
193
+ it("should throw if skillsDir is a file (not directory)", async () => {
194
+ // Arrange
195
+ const registry = new SkillRegistry();
196
+ const tempDir = await createTempDir();
197
+ tempDirs.push(tempDir);
198
+ const filePath = join(tempDir, "not-a-directory.txt");
199
+ await fs.writeFile(filePath, "This is a file", "utf-8");
200
+ // Act & Assert
201
+ await expect(registry.loadSkills(filePath)).rejects.toThrow();
202
+ });
203
+ it("should throw if subdirectory missing SKILL.md", async () => {
204
+ // Arrange
205
+ const registry = new SkillRegistry();
206
+ const tempDir = await createTempDir();
207
+ tempDirs.push(tempDir);
208
+ // Create subdirectory without SKILL.md
209
+ const skillDir = join(tempDir, "incomplete-skill");
210
+ await fs.mkdir(skillDir, { recursive: true });
211
+ await fs.writeFile(join(skillDir, "README.md"), "# README", "utf-8");
212
+ // Act & Assert
213
+ await expect(registry.loadSkills(tempDir)).rejects.toThrow();
214
+ });
215
+ it("should throw if SKILL.md has invalid frontmatter", async () => {
216
+ // Arrange
217
+ const registry = new SkillRegistry();
218
+ const tempDir = await createTempDir();
219
+ tempDirs.push(tempDir);
220
+ const skillDir = join(tempDir, "invalid-skill");
221
+ await fs.mkdir(skillDir, { recursive: true });
222
+ await fs.writeFile(join(skillDir, "SKILL.md"), "---\ninvalid: yaml: content:\n---\n\n# Invalid", "utf-8");
223
+ // Act & Assert
224
+ await expect(registry.loadSkills(tempDir)).rejects.toThrow();
225
+ });
226
+ it("should throw if SKILL.md missing required fields", async () => {
227
+ // Arrange
228
+ const registry = new SkillRegistry();
229
+ const tempDir = await createTempDir();
230
+ tempDirs.push(tempDir);
231
+ await createSkill(tempDir, "invalid-skill", getInvalidSkillContent("name"));
232
+ // Act & Assert
233
+ await expect(registry.loadSkills(tempDir)).rejects.toThrow();
234
+ });
235
+ it("should throw if validation fails (invalid name format)", async () => {
236
+ // Arrange
237
+ const registry = new SkillRegistry();
238
+ const tempDir = await createTempDir();
239
+ tempDirs.push(tempDir);
240
+ await createSkill(tempDir, "invalid-skill", getBasicSkillContent("Invalid Skill!", "Invalid name with spaces and exclamation"));
241
+ // Act & Assert
242
+ await expect(registry.loadSkills(tempDir)).rejects.toThrow();
243
+ });
244
+ it("should throw if subdirectory is empty", async () => {
245
+ // Arrange
246
+ const registry = new SkillRegistry();
247
+ const tempDir = await createTempDir();
248
+ tempDirs.push(tempDir);
249
+ // Create empty subdirectory
250
+ const emptyDir = join(tempDir, "empty-skill");
251
+ await fs.mkdir(emptyDir, { recursive: true });
252
+ // Act & Assert
253
+ await expect(registry.loadSkills(tempDir)).rejects.toThrow();
254
+ });
255
+ it("should throw if SKILL.md is empty", async () => {
256
+ // Arrange
257
+ const registry = new SkillRegistry();
258
+ const tempDir = await createTempDir();
259
+ tempDirs.push(tempDir);
260
+ const skillDir = join(tempDir, "empty-skill");
261
+ await fs.mkdir(skillDir, { recursive: true });
262
+ await fs.writeFile(join(skillDir, "SKILL.md"), "", "utf-8");
263
+ // Act & Assert
264
+ await expect(registry.loadSkills(tempDir)).rejects.toThrow();
265
+ });
266
+ });
267
+ describe("Directory Structure", () => {
268
+ it("should load from skill-name/SKILL.md pattern", async () => {
269
+ // Arrange
270
+ const registry = new SkillRegistry();
271
+ const tempDir = await createTempDir();
272
+ tempDirs.push(tempDir);
273
+ await createSkill(tempDir, "my-skill", getBasicSkillContent("my-skill", "A test skill"));
274
+ // Act
275
+ const result = await registry.loadSkills(tempDir);
276
+ // Assert
277
+ expect(result.loaded).toBe(1);
278
+ const skill = registry.getSkill("my-skill");
279
+ expect(skill).toBeDefined();
280
+ });
281
+ it("should ignore nested directories (scripts/, references/)", async () => {
282
+ // Arrange
283
+ const registry = new SkillRegistry();
284
+ const tempDir = await createTempDir();
285
+ tempDirs.push(tempDir);
286
+ // Create valid skill
287
+ const skillDir = join(tempDir, "my-skill");
288
+ await createSkill(tempDir, "my-skill", getBasicSkillContent("my-skill", "A test skill"));
289
+ // Create nested directories with files
290
+ await createNestedDir(skillDir, "scripts");
291
+ await fs.writeFile(join(skillDir, "scripts", "helper.sh"), "#!/bin/bash", "utf-8");
292
+ await createNestedDir(skillDir, "references");
293
+ await fs.writeFile(join(skillDir, "references", "doc.md"), "# Documentation", "utf-8");
294
+ // Act
295
+ const result = await registry.loadSkills(tempDir);
296
+ // Assert
297
+ expect(result.loaded).toBe(1);
298
+ const skills = registry.getAllSkills();
299
+ expect(skills).toHaveLength(1);
300
+ });
301
+ it("should handle multiple skills in separate subdirectories", async () => {
302
+ // Arrange
303
+ const registry = new SkillRegistry();
304
+ const tempDir = await createTempDir();
305
+ tempDirs.push(tempDir);
306
+ await createSkill(tempDir, "skill-one", getBasicSkillContent("skill-one", "First skill"));
307
+ await createSkill(tempDir, "skill-two", getBasicSkillContent("skill-two", "Second skill"));
308
+ await createSkill(tempDir, "skill-three", getBasicSkillContent("skill-three", "Third skill"));
309
+ // Act
310
+ const result = await registry.loadSkills(tempDir);
311
+ // Assert
312
+ expect(result.loaded).toBe(3);
313
+ expect(registry.getSkill("skill-one")).toBeDefined();
314
+ expect(registry.getSkill("skill-two")).toBeDefined();
315
+ expect(registry.getSkill("skill-three")).toBeDefined();
316
+ });
317
+ it("should return empty registry for empty skillsDir (no subdirectories)", async () => {
318
+ // Arrange
319
+ const registry = new SkillRegistry();
320
+ const tempDir = await createTempDir();
321
+ tempDirs.push(tempDir);
322
+ // Act
323
+ const result = await registry.loadSkills(tempDir);
324
+ // Assert
325
+ expect(result.loaded).toBe(0);
326
+ expect(result.skillsDir).toBe(tempDir);
327
+ expect(registry.getAllSkills()).toEqual([]);
328
+ });
329
+ });
330
+ describe("Edge Cases", () => {
331
+ it("should ignore hidden subdirectories (.git/)", async () => {
332
+ // Arrange
333
+ const registry = new SkillRegistry();
334
+ const tempDir = await createTempDir();
335
+ tempDirs.push(tempDir);
336
+ // Create valid skill
337
+ await createSkill(tempDir, "my-skill", getBasicSkillContent("my-skill", "A test skill"));
338
+ // Create hidden directory with SKILL.md
339
+ const hiddenDir = join(tempDir, ".git");
340
+ await fs.mkdir(hiddenDir, { recursive: true });
341
+ await fs.writeFile(join(hiddenDir, "SKILL.md"), getBasicSkillContent("hidden-skill", "Hidden skill"), "utf-8");
342
+ // Act
343
+ const result = await registry.loadSkills(tempDir);
344
+ // Assert
345
+ expect(result.loaded).toBe(1);
346
+ expect(registry.getSkill("my-skill")).toBeDefined();
347
+ expect(registry.getSkill("hidden-skill")).toBeUndefined();
348
+ });
349
+ it("should ignore non-directory files in skillsDir", async () => {
350
+ // Arrange
351
+ const registry = new SkillRegistry();
352
+ const tempDir = await createTempDir();
353
+ tempDirs.push(tempDir);
354
+ // Create valid skill
355
+ await createSkill(tempDir, "my-skill", getBasicSkillContent("my-skill", "A test skill"));
356
+ // Create files in root skillsDir
357
+ await fs.writeFile(join(tempDir, "README.md"), "# README", "utf-8");
358
+ await fs.writeFile(join(tempDir, "notes.txt"), "Notes", "utf-8");
359
+ // Act
360
+ const result = await registry.loadSkills(tempDir);
361
+ // Assert
362
+ expect(result.loaded).toBe(1);
363
+ expect(registry.getSkill("my-skill")).toBeDefined();
364
+ });
365
+ it("should verify skill name from directory name matches SKILL.md name", async () => {
366
+ // Arrange
367
+ const registry = new SkillRegistry();
368
+ const tempDir = await createTempDir();
369
+ tempDirs.push(tempDir);
370
+ // Create skill with mismatched directory and metadata name
371
+ const skillDir = join(tempDir, "directory-name");
372
+ await fs.mkdir(skillDir, { recursive: true });
373
+ await fs.writeFile(join(skillDir, "SKILL.md"), getBasicSkillContent("different-name", "Mismatched name"), "utf-8");
374
+ // Act & Assert
375
+ // Should throw because directory name doesn't match skill name
376
+ await expect(registry.loadSkills(tempDir)).rejects.toThrow();
377
+ });
378
+ });
379
+ describe("State Management", () => {
380
+ it("should record timestamp on load", async () => {
381
+ // Arrange
382
+ const registry = new SkillRegistry();
383
+ const tempDir = await createTempDir();
384
+ tempDirs.push(tempDir);
385
+ await createSkill(tempDir, "test-skill", getBasicSkillContent("test-skill", "Test skill"));
386
+ const beforeLoad = new Date();
387
+ // Act
388
+ const result = await registry.loadSkills(tempDir);
389
+ const state = registry.getState();
390
+ const afterLoad = new Date();
391
+ // Assert
392
+ expect(result.timestamp).toBeInstanceOf(Date);
393
+ expect(state.lastLoaded).toBeInstanceOf(Date);
394
+ expect(result.timestamp.getTime()).toBeGreaterThanOrEqual(beforeLoad.getTime());
395
+ expect(result.timestamp.getTime()).toBeLessThanOrEqual(afterLoad.getTime());
396
+ });
397
+ it("should reflect loaded skills count and directory in state", async () => {
398
+ // Arrange
399
+ const registry = new SkillRegistry();
400
+ const tempDir = await createTempDir();
401
+ tempDirs.push(tempDir);
402
+ await createSkill(tempDir, "skill-1", getBasicSkillContent("skill-1", "First skill"));
403
+ await createSkill(tempDir, "skill-2", getBasicSkillContent("skill-2", "Second skill"));
404
+ await createSkill(tempDir, "skill-3", getBasicSkillContent("skill-3", "Third skill"));
405
+ // Act
406
+ await registry.loadSkills(tempDir);
407
+ const state = registry.getState();
408
+ // Assert
409
+ expect(state.skillCount).toBe(3);
410
+ expect(state.skillsDir).toBe(tempDir);
411
+ expect(state.lastLoaded).toBeInstanceOf(Date);
412
+ });
413
+ });
414
+ });
415
+ //# sourceMappingURL=registry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../src/__tests__/registry.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=skill-installer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-installer.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/skill-installer.test.ts"],"names":[],"mappings":""}