@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.
- package/LICENSE +19 -0
- package/dist/__tests__/package-config.test.d.ts +2 -0
- package/dist/__tests__/package-config.test.d.ts.map +1 -0
- package/dist/__tests__/package-config.test.js +251 -0
- package/dist/__tests__/package-config.test.js.map +1 -0
- package/dist/__tests__/parser.test.d.ts +2 -0
- package/dist/__tests__/parser.test.d.ts.map +1 -0
- package/dist/__tests__/parser.test.js +613 -0
- package/dist/__tests__/parser.test.js.map +1 -0
- package/dist/__tests__/registry.test.d.ts +2 -0
- package/dist/__tests__/registry.test.d.ts.map +1 -0
- package/dist/__tests__/registry.test.js +415 -0
- package/dist/__tests__/registry.test.js.map +1 -0
- package/dist/__tests__/skill-installer.test.d.ts +2 -0
- package/dist/__tests__/skill-installer.test.d.ts.map +1 -0
- package/dist/__tests__/skill-installer.test.js +229 -0
- package/dist/__tests__/skill-installer.test.js.map +1 -0
- package/dist/__tests__/validator.test.d.ts +2 -0
- package/dist/__tests__/validator.test.d.ts.map +1 -0
- package/dist/__tests__/validator.test.js +284 -0
- package/dist/__tests__/validator.test.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/installer.d.ts +89 -0
- package/dist/installer.d.ts.map +1 -0
- package/dist/installer.js +469 -0
- package/dist/installer.js.map +1 -0
- package/dist/package-config.d.ts +52 -0
- package/dist/package-config.d.ts.map +1 -0
- package/dist/package-config.js +267 -0
- package/dist/package-config.js.map +1 -0
- package/dist/parser.d.ts +59 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +154 -0
- package/dist/parser.js.map +1 -0
- package/dist/registry.d.ts +72 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +180 -0
- package/dist/registry.js.map +1 -0
- package/dist/types.d.ts +202 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/validator.d.ts +27 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +165 -0
- package/dist/validator.js.map +1 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"skill-installer.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/skill-installer.test.ts"],"names":[],"mappings":""}
|