@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,613 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
+ import { promises as fs } from "fs";
3
+ import { join } from "path";
4
+ import { tmpdir } from "os";
5
+ import { parseSkill, parseSkillContent } from "../parser.js";
6
+ /**
7
+ * Comprehensive test suite for SkillParser component
8
+ *
9
+ * Following TDD approach from agentic-knowledge:
10
+ * - Minimal mocking (use real file system with temp directories)
11
+ * - Test-driven interface design
12
+ * - Clear test structure with arrange-act-assert
13
+ *
14
+ * Coverage:
15
+ * 1. Valid skill parsing (basic, full, Claude Code extensions)
16
+ * 2. Invalid/malformed skills (missing frontmatter, invalid YAML, missing fields)
17
+ * 3. Edge cases (long descriptions, special characters, nested metadata)
18
+ * 4. File system handling (non-existent files, read errors)
19
+ */
20
+ const FIXTURES_DIR = join(__dirname, "fixtures", "skills");
21
+ describe("SkillParser", () => {
22
+ describe("parseSkillContent - Valid Skills", () => {
23
+ it("should parse a basic skill with name and description", async () => {
24
+ // Arrange
25
+ const content = await fs.readFile(join(FIXTURES_DIR, "basic-skill.md"), "utf-8");
26
+ // Act
27
+ const result = parseSkillContent(content);
28
+ // Assert
29
+ expect(result.success).toBe(true);
30
+ if (result.success) {
31
+ expect(result.skill.metadata.name).toBe("test-skill");
32
+ expect(result.skill.metadata.description).toBe("A simple test skill for basic parsing");
33
+ expect(result.skill.body).toContain("# Test Skill");
34
+ expect(result.skill.body).toContain("Use this skill to test");
35
+ // Optional fields should be undefined
36
+ expect(result.skill.metadata.license).toBeUndefined();
37
+ expect(result.skill.metadata.compatibility).toBeUndefined();
38
+ expect(result.skill.metadata.allowedTools).toBeUndefined();
39
+ }
40
+ });
41
+ it("should parse a skill with all optional fields", async () => {
42
+ // Arrange
43
+ const content = await fs.readFile(join(FIXTURES_DIR, "full-skill.md"), "utf-8");
44
+ // Act
45
+ const result = parseSkillContent(content);
46
+ // Assert
47
+ expect(result.success).toBe(true);
48
+ if (result.success) {
49
+ const { metadata, body } = result.skill;
50
+ // Required fields
51
+ expect(metadata.name).toBe("full-feature-skill");
52
+ expect(metadata.description).toBe("A skill with all optional fields populated");
53
+ // Optional standard fields
54
+ expect(metadata.license).toBe("MIT");
55
+ expect(metadata.compatibility).toBe("claude-3.5-sonnet");
56
+ expect(metadata.allowedTools).toEqual([
57
+ "bash",
58
+ "read_file",
59
+ "write_file"
60
+ ]);
61
+ // Metadata object
62
+ expect(metadata.metadata).toBeDefined();
63
+ expect(metadata.metadata?.author).toBe("Test Author");
64
+ expect(metadata.metadata?.version).toBe("1.0.0");
65
+ expect(metadata.metadata?.tags).toEqual([
66
+ "testing",
67
+ "example"
68
+ ]);
69
+ // Body content
70
+ expect(body).toContain("# Full Feature Skill");
71
+ expect(body).toContain("$ARGUMENTS");
72
+ expect(body).toContain("${CLAUDE_SESSION_ID}");
73
+ }
74
+ });
75
+ it("should parse Claude Code extensions", async () => {
76
+ // Arrange
77
+ const content = await fs.readFile(join(FIXTURES_DIR, "claude-code-extensions.md"), "utf-8");
78
+ // Act
79
+ const result = parseSkillContent(content);
80
+ // Assert
81
+ expect(result.success).toBe(true);
82
+ if (result.success) {
83
+ const { metadata } = result.skill;
84
+ // Claude Code specific fields
85
+ expect(metadata.disableModelInvocation).toBe(true);
86
+ expect(metadata.userInvocable).toBe(false);
87
+ expect(metadata.argumentHint).toBe("<input-file> <output-file>");
88
+ expect(metadata.context).toBe("fork");
89
+ expect(metadata.agent).toBe("custom-agent");
90
+ expect(metadata.model).toBe("claude-3-5-sonnet-20250219");
91
+ // Hooks object
92
+ expect(metadata.hooks).toBeDefined();
93
+ expect(metadata.hooks?.["pre-execution"]).toBe("setup");
94
+ expect(metadata.hooks?.["post-execution"]).toBe("teardown");
95
+ expect(metadata.hooks?.["on-error"]).toBe("rollback");
96
+ }
97
+ });
98
+ it("should handle skill with nested metadata structures", async () => {
99
+ // Arrange
100
+ const content = await fs.readFile(join(FIXTURES_DIR, "nested-metadata.md"), "utf-8");
101
+ // Act
102
+ const result = parseSkillContent(content);
103
+ // Assert
104
+ expect(result.success).toBe(true);
105
+ if (result.success) {
106
+ const { metadata } = result.skill;
107
+ expect(metadata.metadata).toBeDefined();
108
+ expect(metadata.metadata?.level1?.level2?.level3?.deeply).toBe("nested");
109
+ expect(metadata.metadata?.level1?.level2?.level3?.values).toEqual(["item1", "item2"]);
110
+ expect(metadata.metadata?.array).toHaveLength(2);
111
+ expect(metadata.metadata?.mixed?.string).toBe("value");
112
+ expect(metadata.metadata?.mixed?.number).toBe(42);
113
+ expect(metadata.metadata?.mixed?.boolean).toBe(true);
114
+ expect(metadata.metadata?.mixed?.null).toBeNull();
115
+ }
116
+ });
117
+ it("should handle special characters in fields", async () => {
118
+ // Arrange
119
+ const content = await fs.readFile(join(FIXTURES_DIR, "special-characters.md"), "utf-8");
120
+ // Act
121
+ const result = parseSkillContent(content);
122
+ // Assert
123
+ expect(result.success).toBe(true);
124
+ if (result.success) {
125
+ const { metadata, body } = result.skill;
126
+ expect(metadata.description).toContain("émojis 🚀");
127
+ expect(metadata.description).toContain('quotes "nested"');
128
+ expect(metadata.description).toContain("symbols <>&");
129
+ expect(metadata.metadata?.unicode).toContain("日本語");
130
+ expect(metadata.metadata?.symbols).toContain("!@#$%^&*()");
131
+ expect(metadata.metadata?.quotes).toContain('single and "double"');
132
+ expect(body).toContain("你好世界 🌍");
133
+ expect(body).toContain("<script>");
134
+ }
135
+ });
136
+ it("should handle very long descriptions", async () => {
137
+ // Arrange
138
+ const content = await fs.readFile(join(FIXTURES_DIR, "long-description.md"), "utf-8");
139
+ // Act
140
+ const result = parseSkillContent(content);
141
+ // Assert
142
+ expect(result.success).toBe(true);
143
+ if (result.success) {
144
+ const { metadata } = result.skill;
145
+ expect(metadata.description).toContain("very long description");
146
+ expect(metadata.description).toContain("Lorem ipsum");
147
+ expect(metadata.description.length).toBeGreaterThan(500);
148
+ }
149
+ });
150
+ it("should handle empty optional fields", async () => {
151
+ // Arrange
152
+ const content = await fs.readFile(join(FIXTURES_DIR, "empty-optional-fields.md"), "utf-8");
153
+ // Act
154
+ const result = parseSkillContent(content);
155
+ // Assert
156
+ expect(result.success).toBe(true);
157
+ if (result.success) {
158
+ const { metadata } = result.skill;
159
+ // Empty strings should be preserved as empty strings
160
+ expect(metadata.license).toBe("");
161
+ expect(metadata.compatibility).toBe("");
162
+ // Empty objects/arrays should be preserved
163
+ expect(metadata.metadata).toEqual({});
164
+ expect(metadata.allowedTools).toEqual([]);
165
+ }
166
+ });
167
+ it("should handle skill with only frontmatter (no body)", async () => {
168
+ // Arrange
169
+ const content = await fs.readFile(join(FIXTURES_DIR, "only-frontmatter.md"), "utf-8");
170
+ // Act
171
+ const result = parseSkillContent(content);
172
+ // Assert
173
+ expect(result.success).toBe(true);
174
+ if (result.success) {
175
+ expect(result.skill.metadata.name).toBe("only-frontmatter");
176
+ expect(result.skill.body).toBe("");
177
+ }
178
+ });
179
+ });
180
+ describe("parseSkillContent - Invalid/Malformed Skills", () => {
181
+ it("should fail when frontmatter is missing", async () => {
182
+ // Arrange
183
+ const content = await fs.readFile(join(FIXTURES_DIR, "missing-frontmatter.md"), "utf-8");
184
+ // Act
185
+ const result = parseSkillContent(content);
186
+ // Assert
187
+ expect(result.success).toBe(false);
188
+ if (!result.success) {
189
+ expect(result.error.code).toBe("MISSING_FRONTMATTER");
190
+ expect(result.error.message).toContain("frontmatter");
191
+ }
192
+ });
193
+ it("should fail when YAML syntax is invalid", async () => {
194
+ // Arrange
195
+ const content = await fs.readFile(join(FIXTURES_DIR, "invalid-yaml.md"), "utf-8");
196
+ // Act
197
+ const result = parseSkillContent(content);
198
+ // Assert
199
+ expect(result.success).toBe(false);
200
+ if (!result.success) {
201
+ expect(result.error.code).toBe("INVALID_YAML");
202
+ expect(result.error.message).toContain("YAML");
203
+ }
204
+ });
205
+ it("should fail when required field 'name' is missing", async () => {
206
+ // Arrange
207
+ const content = await fs.readFile(join(FIXTURES_DIR, "missing-name.md"), "utf-8");
208
+ // Act
209
+ const result = parseSkillContent(content);
210
+ // Assert
211
+ expect(result.success).toBe(false);
212
+ if (!result.success) {
213
+ expect(result.error.code).toBe("MISSING_REQUIRED_FIELD");
214
+ expect(result.error.field).toBe("name");
215
+ expect(result.error.message).toContain("name");
216
+ expect(result.error.message).toContain("required");
217
+ }
218
+ });
219
+ it("should fail when required field 'description' is missing", async () => {
220
+ // Arrange
221
+ const content = await fs.readFile(join(FIXTURES_DIR, "missing-description.md"), "utf-8");
222
+ // Act
223
+ const result = parseSkillContent(content);
224
+ // Assert
225
+ expect(result.success).toBe(false);
226
+ if (!result.success) {
227
+ expect(result.error.code).toBe("MISSING_REQUIRED_FIELD");
228
+ expect(result.error.field).toBe("description");
229
+ expect(result.error.message).toContain("description");
230
+ expect(result.error.message).toContain("required");
231
+ }
232
+ });
233
+ it("should fail when file is empty", async () => {
234
+ // Arrange
235
+ const content = await fs.readFile(join(FIXTURES_DIR, "empty.md"), "utf-8");
236
+ // Act
237
+ const result = parseSkillContent(content);
238
+ // Assert
239
+ expect(result.success).toBe(false);
240
+ if (!result.success) {
241
+ expect(result.error.code).toBe("EMPTY_FILE");
242
+ expect(result.error.message).toContain("empty");
243
+ }
244
+ });
245
+ });
246
+ describe("parseSkill - File System Handling", () => {
247
+ let tempDir;
248
+ beforeEach(async () => {
249
+ // Create a temporary directory for each test
250
+ tempDir = join(tmpdir(), `skill-parser-test-${Date.now()}`);
251
+ await fs.mkdir(tempDir, { recursive: true });
252
+ });
253
+ afterEach(async () => {
254
+ // Clean up temporary directory
255
+ try {
256
+ await fs.rm(tempDir, { recursive: true, force: true });
257
+ }
258
+ catch {
259
+ // Ignore cleanup errors
260
+ }
261
+ });
262
+ it("should successfully parse a valid skill file", async () => {
263
+ // Arrange
264
+ const skillPath = join(tempDir, "test-skill.md");
265
+ const content = `---
266
+ name: file-test-skill
267
+ description: Testing file system parsing
268
+ ---
269
+
270
+ # File Test Skill
271
+
272
+ Testing parseSkill function with real file.
273
+ `;
274
+ await fs.writeFile(skillPath, content, "utf-8");
275
+ // Act
276
+ const result = await parseSkill(skillPath);
277
+ // Assert
278
+ expect(result.success).toBe(true);
279
+ if (result.success) {
280
+ expect(result.skill.metadata.name).toBe("file-test-skill");
281
+ expect(result.skill.metadata.description).toBe("Testing file system parsing");
282
+ expect(result.skill.body).toContain("# File Test Skill");
283
+ }
284
+ });
285
+ it("should fail when file does not exist", async () => {
286
+ // Arrange
287
+ const nonExistentPath = join(tempDir, "does-not-exist.md");
288
+ // Act
289
+ const result = await parseSkill(nonExistentPath);
290
+ // Assert
291
+ expect(result.success).toBe(false);
292
+ if (!result.success) {
293
+ expect(result.error.code).toBe("FILE_NOT_FOUND");
294
+ expect(result.error.message).toContain(nonExistentPath);
295
+ }
296
+ });
297
+ it("should fail gracefully on file read error", async () => {
298
+ // Arrange
299
+ const directoryPath = join(tempDir, "is-a-directory");
300
+ await fs.mkdir(directoryPath, { recursive: true });
301
+ // Act - trying to read a directory as a file
302
+ const result = await parseSkill(directoryPath);
303
+ // Assert
304
+ expect(result.success).toBe(false);
305
+ if (!result.success) {
306
+ expect(result.error.code).toBe("FILE_READ_ERROR");
307
+ expect(result.error.message).toContain("read");
308
+ }
309
+ });
310
+ it("should handle permission errors gracefully", async () => {
311
+ // Arrange
312
+ const restrictedPath = join(tempDir, "restricted.md");
313
+ await fs.writeFile(restrictedPath, "test content", "utf-8");
314
+ // Make file unreadable (skip on Windows where chmod doesn't work the same)
315
+ if (process.platform !== "win32") {
316
+ await fs.chmod(restrictedPath, 0o000);
317
+ // Act
318
+ const result = await parseSkill(restrictedPath);
319
+ // Assert
320
+ expect(result.success).toBe(false);
321
+ if (!result.success) {
322
+ expect(result.error.code).toBe("FILE_READ_ERROR");
323
+ }
324
+ // Cleanup: restore permissions so we can delete the file
325
+ await fs.chmod(restrictedPath, 0o644);
326
+ }
327
+ });
328
+ it("should handle invalid UTF-8 encoding gracefully", async () => {
329
+ // Arrange
330
+ const invalidUtf8Path = join(tempDir, "invalid-utf8.md");
331
+ // Write invalid UTF-8 bytes
332
+ const buffer = Buffer.from([
333
+ 0xff,
334
+ 0xfe, // Invalid UTF-8 sequence
335
+ 0x2d,
336
+ 0x2d,
337
+ 0x2d,
338
+ 0x0a // ---\n
339
+ ]);
340
+ await fs.writeFile(invalidUtf8Path, buffer);
341
+ // Act
342
+ const result = await parseSkill(invalidUtf8Path);
343
+ // Assert
344
+ // Should either fail with encoding error or attempt to parse
345
+ // (behavior depends on Node.js version and platform)
346
+ expect(result).toBeDefined();
347
+ expect(typeof result.success).toBe("boolean");
348
+ });
349
+ });
350
+ describe("parseSkillContent - Type Definitions", () => {
351
+ it("should return properly typed Skill object", async () => {
352
+ // Arrange
353
+ const content = await fs.readFile(join(FIXTURES_DIR, "full-skill.md"), "utf-8");
354
+ // Act
355
+ const result = parseSkillContent(content);
356
+ // Assert - Test TypeScript types at runtime
357
+ expect(result.success).toBe(true);
358
+ if (result.success) {
359
+ const { skill } = result;
360
+ // Skill shape
361
+ expect(skill).toHaveProperty("metadata");
362
+ expect(skill).toHaveProperty("body");
363
+ expect(typeof skill.body).toBe("string");
364
+ // Metadata shape
365
+ const { metadata } = skill;
366
+ expect(typeof metadata.name).toBe("string");
367
+ expect(typeof metadata.description).toBe("string");
368
+ // Optional fields
369
+ if (metadata.license !== undefined) {
370
+ expect(typeof metadata.license).toBe("string");
371
+ }
372
+ if (metadata.compatibility !== undefined) {
373
+ expect(typeof metadata.compatibility).toBe("string");
374
+ }
375
+ if (metadata.allowedTools !== undefined) {
376
+ expect(Array.isArray(metadata.allowedTools)).toBe(true);
377
+ }
378
+ if (metadata.metadata !== undefined) {
379
+ expect(typeof metadata.metadata).toBe("object");
380
+ }
381
+ // Claude Code extensions
382
+ if (metadata.disableModelInvocation !== undefined) {
383
+ expect(typeof metadata.disableModelInvocation).toBe("boolean");
384
+ }
385
+ if (metadata.userInvocable !== undefined) {
386
+ expect(typeof metadata.userInvocable).toBe("boolean");
387
+ }
388
+ if (metadata.argumentHint !== undefined) {
389
+ expect(typeof metadata.argumentHint).toBe("string");
390
+ }
391
+ if (metadata.context !== undefined) {
392
+ expect(typeof metadata.context).toBe("string");
393
+ }
394
+ if (metadata.agent !== undefined) {
395
+ expect(typeof metadata.agent).toBe("string");
396
+ }
397
+ if (metadata.model !== undefined) {
398
+ expect(typeof metadata.model).toBe("string");
399
+ }
400
+ if (metadata.hooks !== undefined) {
401
+ expect(typeof metadata.hooks).toBe("object");
402
+ }
403
+ }
404
+ });
405
+ it("should return properly typed ParseError on failure", async () => {
406
+ // Arrange
407
+ const content = await fs.readFile(join(FIXTURES_DIR, "missing-name.md"), "utf-8");
408
+ // Act
409
+ const result = parseSkillContent(content);
410
+ // Assert
411
+ expect(result.success).toBe(false);
412
+ if (!result.success) {
413
+ const { error } = result;
414
+ expect(error).toHaveProperty("code");
415
+ expect(error).toHaveProperty("message");
416
+ expect(typeof error.code).toBe("string");
417
+ expect(typeof error.message).toBe("string");
418
+ // Field property exists for field-specific errors
419
+ if (error.code === "MISSING_REQUIRED_FIELD") {
420
+ expect(error).toHaveProperty("field");
421
+ expect(typeof error.field).toBe("string");
422
+ }
423
+ }
424
+ });
425
+ });
426
+ describe("parseSkillContent - Edge Cases", () => {
427
+ it("should handle frontmatter with no body whitespace", () => {
428
+ // Arrange
429
+ const content = `---
430
+ name: no-whitespace
431
+ description: Testing no whitespace after frontmatter
432
+ ---`;
433
+ // Act
434
+ const result = parseSkillContent(content);
435
+ // Assert
436
+ expect(result.success).toBe(true);
437
+ if (result.success) {
438
+ expect(result.skill.body).toBe("");
439
+ }
440
+ });
441
+ it("should handle frontmatter with extra whitespace", () => {
442
+ // Arrange
443
+ const content = `---
444
+ name: extra-whitespace
445
+ description: Testing extra whitespace
446
+
447
+
448
+ ---
449
+
450
+
451
+ # Body Content
452
+
453
+ With extra spacing.
454
+ `;
455
+ // Act
456
+ const result = parseSkillContent(content);
457
+ // Assert
458
+ expect(result.success).toBe(true);
459
+ if (result.success) {
460
+ expect(result.skill.metadata.name).toBe("extra-whitespace");
461
+ expect(result.skill.body).toContain("# Body Content");
462
+ }
463
+ });
464
+ it("should handle CRLF line endings", () => {
465
+ // Arrange
466
+ const content = "---\r\nname: crlf-test\r\ndescription: Testing CRLF line endings\r\n---\r\n\r\n# Content\r\n";
467
+ // Act
468
+ const result = parseSkillContent(content);
469
+ // Assert
470
+ expect(result.success).toBe(true);
471
+ if (result.success) {
472
+ expect(result.skill.metadata.name).toBe("crlf-test");
473
+ }
474
+ });
475
+ it("should handle mixed line endings", () => {
476
+ // Arrange
477
+ const content = "---\r\nname: mixed-test\ndescription: Testing mixed line endings\r\n---\n\n# Content\r\n";
478
+ // Act
479
+ const result = parseSkillContent(content);
480
+ // Assert
481
+ expect(result.success).toBe(true);
482
+ if (result.success) {
483
+ expect(result.skill.metadata.name).toBe("mixed-test");
484
+ }
485
+ });
486
+ it("should preserve markdown formatting in body", () => {
487
+ // Arrange
488
+ const content = `---
489
+ name: markdown-test
490
+ description: Testing markdown preservation
491
+ ---
492
+
493
+ # Heading 1
494
+ ## Heading 2
495
+
496
+ **Bold** and *italic* text.
497
+
498
+ - List item 1
499
+ - List item 2
500
+
501
+ \`\`\`typescript
502
+ const code = "preserved";
503
+ \`\`\`
504
+
505
+ > Quote block
506
+
507
+ [Link](https://example.com)
508
+ `;
509
+ // Act
510
+ const result = parseSkillContent(content);
511
+ // Assert
512
+ expect(result.success).toBe(true);
513
+ if (result.success) {
514
+ expect(result.skill.body).toContain("# Heading 1");
515
+ expect(result.skill.body).toContain("**Bold**");
516
+ expect(result.skill.body).toContain("```typescript");
517
+ expect(result.skill.body).toContain("> Quote block");
518
+ expect(result.skill.body).toContain("[Link]");
519
+ }
520
+ });
521
+ it("should handle frontmatter delimiter in body", () => {
522
+ // Arrange
523
+ const content = `---
524
+ name: delimiter-in-body
525
+ description: Testing delimiter in body content
526
+ ---
527
+
528
+ # Content
529
+
530
+ This body contains a triple dash:
531
+ ---
532
+
533
+ And continues after it.
534
+ `;
535
+ // Act
536
+ const result = parseSkillContent(content);
537
+ // Assert
538
+ expect(result.success).toBe(true);
539
+ if (result.success) {
540
+ expect(result.skill.body).toContain("triple dash:");
541
+ expect(result.skill.body).toContain("---");
542
+ expect(result.skill.body).toContain("continues after");
543
+ }
544
+ });
545
+ it("should handle numeric field values", () => {
546
+ // Arrange
547
+ const content = `---
548
+ name: numeric-fields
549
+ description: Testing numeric field values
550
+ metadata:
551
+ version: 1.0
552
+ count: 42
553
+ rating: 4.5
554
+ ---
555
+
556
+ # Numeric Fields
557
+ `;
558
+ // Act
559
+ const result = parseSkillContent(content);
560
+ // Assert
561
+ expect(result.success).toBe(true);
562
+ if (result.success) {
563
+ expect(result.skill.metadata.metadata?.version).toBe(1.0);
564
+ expect(result.skill.metadata.metadata?.count).toBe(42);
565
+ expect(result.skill.metadata.metadata?.rating).toBe(4.5);
566
+ }
567
+ });
568
+ it("should handle boolean field values", () => {
569
+ // Arrange
570
+ const content = `---
571
+ name: boolean-fields
572
+ description: Testing boolean field values
573
+ disable-model-invocation: true
574
+ user-invocable: false
575
+ metadata:
576
+ enabled: true
577
+ disabled: false
578
+ ---
579
+
580
+ # Boolean Fields
581
+ `;
582
+ // Act
583
+ const result = parseSkillContent(content);
584
+ // Assert
585
+ expect(result.success).toBe(true);
586
+ if (result.success) {
587
+ expect(result.skill.metadata.disableModelInvocation).toBe(true);
588
+ expect(result.skill.metadata.userInvocable).toBe(false);
589
+ expect(result.skill.metadata.metadata?.enabled).toBe(true);
590
+ expect(result.skill.metadata.metadata?.disabled).toBe(false);
591
+ }
592
+ });
593
+ });
594
+ describe("Immutability", () => {
595
+ it("should return immutable Skill object", async () => {
596
+ // Arrange
597
+ const content = await fs.readFile(join(FIXTURES_DIR, "basic-skill.md"), "utf-8");
598
+ const result = parseSkillContent(content);
599
+ // Act & Assert
600
+ expect(result.success).toBe(true);
601
+ if (result.success) {
602
+ const { skill } = result;
603
+ // Attempt to modify should not affect original
604
+ // (TypeScript should prevent this at compile time)
605
+ const metadataCopy = { ...skill.metadata };
606
+ metadataCopy.name = "modified";
607
+ expect(skill.metadata.name).toBe("test-skill");
608
+ expect(skill.metadata.name).not.toBe("modified");
609
+ }
610
+ });
611
+ });
612
+ });
613
+ //# sourceMappingURL=parser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.test.js","sourceRoot":"","sources":["../../src/__tests__/parser.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=registry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/registry.test.ts"],"names":[],"mappings":""}