@skillsmith/core 0.5.3 → 0.5.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 (177) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/activation/ActivationManager.d.ts +7 -0
  4. package/dist/src/activation/ActivationManager.d.ts.map +1 -1
  5. package/dist/src/activation/ActivationManager.js +13 -4
  6. package/dist/src/activation/ActivationManager.js.map +1 -1
  7. package/dist/src/analysis/adapters/python.d.ts +16 -11
  8. package/dist/src/analysis/adapters/python.d.ts.map +1 -1
  9. package/dist/src/analysis/adapters/python.js +46 -61
  10. package/dist/src/analysis/adapters/python.js.map +1 -1
  11. package/dist/src/analysis/router.test.d.ts +2 -0
  12. package/dist/src/analysis/router.test.d.ts.map +1 -0
  13. package/dist/src/analysis/router.test.js +411 -0
  14. package/dist/src/analysis/router.test.js.map +1 -0
  15. package/dist/src/analysis/tree-sitter/manager.d.ts.map +1 -1
  16. package/dist/src/analysis/tree-sitter/manager.js +12 -5
  17. package/dist/src/analysis/tree-sitter/manager.js.map +1 -1
  18. package/dist/src/analysis/tree-sitter/pythonExtractor.d.ts +45 -0
  19. package/dist/src/analysis/tree-sitter/pythonExtractor.d.ts.map +1 -0
  20. package/dist/src/analysis/tree-sitter/pythonExtractor.js +264 -0
  21. package/dist/src/analysis/tree-sitter/pythonExtractor.js.map +1 -0
  22. package/dist/src/analysis/tree-sitter/pythonExtractor.test.d.ts +12 -0
  23. package/dist/src/analysis/tree-sitter/pythonExtractor.test.d.ts.map +1 -0
  24. package/dist/src/analysis/tree-sitter/pythonExtractor.test.js +74 -0
  25. package/dist/src/analysis/tree-sitter/pythonExtractor.test.js.map +1 -0
  26. package/dist/src/analysis/tree-sitter/pythonIncremental.d.ts +93 -0
  27. package/dist/src/analysis/tree-sitter/pythonIncremental.d.ts.map +1 -0
  28. package/dist/src/analysis/tree-sitter/pythonIncremental.hardening.test.d.ts +22 -0
  29. package/dist/src/analysis/tree-sitter/pythonIncremental.hardening.test.d.ts.map +1 -0
  30. package/dist/src/analysis/tree-sitter/pythonIncremental.hardening.test.js +229 -0
  31. package/dist/src/analysis/tree-sitter/pythonIncremental.hardening.test.js.map +1 -0
  32. package/dist/src/analysis/tree-sitter/pythonIncremental.js +287 -0
  33. package/dist/src/analysis/tree-sitter/pythonIncremental.js.map +1 -0
  34. package/dist/src/analysis/tree-sitter/pythonIncremental.test.d.ts +17 -0
  35. package/dist/src/analysis/tree-sitter/pythonIncremental.test.d.ts.map +1 -0
  36. package/dist/src/analysis/tree-sitter/pythonIncremental.test.js +142 -0
  37. package/dist/src/analysis/tree-sitter/pythonIncremental.test.js.map +1 -0
  38. package/dist/src/analysis/tree-sitter/queries/python.d.ts +43 -0
  39. package/dist/src/analysis/tree-sitter/queries/python.d.ts.map +1 -0
  40. package/dist/src/analysis/tree-sitter/queries/python.js +88 -0
  41. package/dist/src/analysis/tree-sitter/queries/python.js.map +1 -0
  42. package/dist/src/analysis/tree-sitter/queryExtractionMatchesOrExceedsRegex.test.d.ts +13 -0
  43. package/dist/src/analysis/tree-sitter/queryExtractionMatchesOrExceedsRegex.test.d.ts.map +1 -0
  44. package/dist/src/analysis/tree-sitter/queryExtractionMatchesOrExceedsRegex.test.js +174 -0
  45. package/dist/src/analysis/tree-sitter/queryExtractionMatchesOrExceedsRegex.test.js.map +1 -0
  46. package/dist/src/analytics/ROIDashboardService.csv.d.ts +11 -0
  47. package/dist/src/analytics/ROIDashboardService.csv.d.ts.map +1 -0
  48. package/dist/src/analytics/ROIDashboardService.csv.js +43 -0
  49. package/dist/src/analytics/ROIDashboardService.csv.js.map +1 -0
  50. package/dist/src/analytics/ROIDashboardService.d.ts +64 -3
  51. package/dist/src/analytics/ROIDashboardService.d.ts.map +1 -1
  52. package/dist/src/analytics/ROIDashboardService.js +116 -45
  53. package/dist/src/analytics/ROIDashboardService.js.map +1 -1
  54. package/dist/src/api/schemas.d.ts +70 -319
  55. package/dist/src/api/schemas.d.ts.map +1 -1
  56. package/dist/src/benchmarks/incrementalParseBenchmark.d.ts +18 -0
  57. package/dist/src/benchmarks/incrementalParseBenchmark.d.ts.map +1 -0
  58. package/dist/src/benchmarks/incrementalParseBenchmark.js +121 -0
  59. package/dist/src/benchmarks/incrementalParseBenchmark.js.map +1 -0
  60. package/dist/src/billing/GDPRComplianceService.test.d.ts +2 -0
  61. package/dist/src/billing/GDPRComplianceService.test.d.ts.map +1 -0
  62. package/dist/src/billing/GDPRComplianceService.test.js +405 -0
  63. package/dist/src/billing/GDPRComplianceService.test.js.map +1 -0
  64. package/dist/src/index.d.ts +4 -3
  65. package/dist/src/index.d.ts.map +1 -1
  66. package/dist/src/index.js +2 -2
  67. package/dist/src/index.js.map +1 -1
  68. package/dist/src/indexer/SkillParser.coverage.test.d.ts +10 -0
  69. package/dist/src/indexer/SkillParser.coverage.test.d.ts.map +1 -0
  70. package/dist/src/indexer/SkillParser.coverage.test.js +76 -0
  71. package/dist/src/indexer/SkillParser.coverage.test.js.map +1 -0
  72. package/dist/src/indexer/SkillParser.test.d.ts +2 -0
  73. package/dist/src/indexer/SkillParser.test.d.ts.map +1 -0
  74. package/dist/src/indexer/SkillParser.test.js +375 -0
  75. package/dist/src/indexer/SkillParser.test.js.map +1 -0
  76. package/dist/src/scripts/validation/types.d.ts +14 -24
  77. package/dist/src/scripts/validation/types.d.ts.map +1 -1
  78. package/dist/src/services/skill-config-schema.d.ts +4 -36
  79. package/dist/src/services/skill-config-schema.d.ts.map +1 -1
  80. package/dist/src/sources/LocalFilesystemAdapter.d.ts +104 -10
  81. package/dist/src/sources/LocalFilesystemAdapter.d.ts.map +1 -1
  82. package/dist/src/sources/LocalFilesystemAdapter.helpers.d.ts +92 -0
  83. package/dist/src/sources/LocalFilesystemAdapter.helpers.d.ts.map +1 -0
  84. package/dist/src/sources/LocalFilesystemAdapter.helpers.js +157 -0
  85. package/dist/src/sources/LocalFilesystemAdapter.helpers.js.map +1 -0
  86. package/dist/src/sources/LocalFilesystemAdapter.js +218 -159
  87. package/dist/src/sources/LocalFilesystemAdapter.js.map +1 -1
  88. package/dist/src/sources/LocalFilesystemAdapter.scan.d.ts +78 -0
  89. package/dist/src/sources/LocalFilesystemAdapter.scan.d.ts.map +1 -0
  90. package/dist/src/sources/LocalFilesystemAdapter.scan.js +118 -0
  91. package/dist/src/sources/LocalFilesystemAdapter.scan.js.map +1 -0
  92. package/dist/src/sources/index.d.ts +1 -1
  93. package/dist/src/sources/index.d.ts.map +1 -1
  94. package/dist/src/sources/index.js.map +1 -1
  95. package/dist/src/sources/types.d.ts +28 -0
  96. package/dist/src/sources/types.d.ts.map +1 -1
  97. package/dist/src/telemetry/tracer-imports.d.ts +13 -0
  98. package/dist/src/telemetry/tracer-imports.d.ts.map +1 -0
  99. package/dist/src/telemetry/tracer-imports.js +26 -0
  100. package/dist/src/telemetry/tracer-imports.js.map +1 -0
  101. package/dist/src/telemetry/tracer.d.ts.map +1 -1
  102. package/dist/src/telemetry/tracer.js +18 -21
  103. package/dist/src/telemetry/tracer.js.map +1 -1
  104. package/dist/src/utils/rate-limit.d.ts +39 -0
  105. package/dist/src/utils/rate-limit.d.ts.map +1 -0
  106. package/dist/src/utils/rate-limit.js +48 -0
  107. package/dist/src/utils/rate-limit.js.map +1 -0
  108. package/dist/src/utils/rate-limit.test.d.ts +11 -0
  109. package/dist/src/utils/rate-limit.test.d.ts.map +1 -0
  110. package/dist/src/utils/rate-limit.test.js +86 -0
  111. package/dist/src/utils/rate-limit.test.js.map +1 -0
  112. package/dist/src/webhooks/WebhookDeadLetterRepository.d.ts +178 -0
  113. package/dist/src/webhooks/WebhookDeadLetterRepository.d.ts.map +1 -0
  114. package/dist/src/webhooks/WebhookDeadLetterRepository.js +196 -0
  115. package/dist/src/webhooks/WebhookDeadLetterRepository.js.map +1 -0
  116. package/dist/src/webhooks/WebhookQueue.d.ts +1 -0
  117. package/dist/src/webhooks/WebhookQueue.d.ts.map +1 -1
  118. package/dist/src/webhooks/WebhookQueue.js +19 -0
  119. package/dist/src/webhooks/WebhookQueue.js.map +1 -1
  120. package/dist/src/webhooks/WebhookQueue.types.d.ts +11 -0
  121. package/dist/src/webhooks/WebhookQueue.types.d.ts.map +1 -1
  122. package/dist/src/webhooks/index.d.ts +1 -0
  123. package/dist/src/webhooks/index.d.ts.map +1 -1
  124. package/dist/src/webhooks/index.js +2 -0
  125. package/dist/src/webhooks/index.js.map +1 -1
  126. package/dist/src/webhooks/webhook-schemas.d.ts +117 -1212
  127. package/dist/src/webhooks/webhook-schemas.d.ts.map +1 -1
  128. package/dist/tests/ActivationManager.test.d.ts +13 -0
  129. package/dist/tests/ActivationManager.test.d.ts.map +1 -0
  130. package/dist/tests/ActivationManager.test.js +218 -0
  131. package/dist/tests/ActivationManager.test.js.map +1 -0
  132. package/dist/tests/LocalFilesystemAdapter.coverage.test.d.ts +13 -0
  133. package/dist/tests/LocalFilesystemAdapter.coverage.test.d.ts.map +1 -0
  134. package/dist/tests/LocalFilesystemAdapter.coverage.test.js +314 -0
  135. package/dist/tests/LocalFilesystemAdapter.coverage.test.js.map +1 -0
  136. package/dist/tests/LocalFilesystemAdapter.security.test.d.ts +18 -0
  137. package/dist/tests/LocalFilesystemAdapter.security.test.d.ts.map +1 -0
  138. package/dist/tests/LocalFilesystemAdapter.security.test.js +344 -0
  139. package/dist/tests/LocalFilesystemAdapter.security.test.js.map +1 -0
  140. package/dist/tests/LocalFilesystemAdapter.test.d.ts +12 -0
  141. package/dist/tests/LocalFilesystemAdapter.test.d.ts.map +1 -0
  142. package/dist/tests/LocalFilesystemAdapter.test.js +301 -0
  143. package/dist/tests/LocalFilesystemAdapter.test.js.map +1 -0
  144. package/dist/tests/ROIDashboardService.coverage.test.d.ts +9 -0
  145. package/dist/tests/ROIDashboardService.coverage.test.d.ts.map +1 -0
  146. package/dist/tests/ROIDashboardService.coverage.test.js +118 -0
  147. package/dist/tests/ROIDashboardService.coverage.test.js.map +1 -0
  148. package/dist/tests/ROIDashboardService.test.js +87 -0
  149. package/dist/tests/ROIDashboardService.test.js.map +1 -1
  150. package/dist/tests/ScraperAdapters.gitlab-coverage.test.d.ts +14 -0
  151. package/dist/tests/ScraperAdapters.gitlab-coverage.test.d.ts.map +1 -0
  152. package/dist/tests/ScraperAdapters.gitlab-coverage.test.js +169 -0
  153. package/dist/tests/ScraperAdapters.gitlab-coverage.test.js.map +1 -0
  154. package/dist/tests/ScraperAdapters.test.d.ts +5 -1
  155. package/dist/tests/ScraperAdapters.test.d.ts.map +1 -1
  156. package/dist/tests/ScraperAdapters.test.js +6 -336
  157. package/dist/tests/ScraperAdapters.test.js.map +1 -1
  158. package/dist/tests/WebhookDeadLetterRepository.test.d.ts +2 -0
  159. package/dist/tests/WebhookDeadLetterRepository.test.d.ts.map +1 -0
  160. package/dist/tests/WebhookDeadLetterRepository.test.js +333 -0
  161. package/dist/tests/WebhookDeadLetterRepository.test.js.map +1 -0
  162. package/dist/tests/WebhookHandler.test.js +93 -1
  163. package/dist/tests/WebhookHandler.test.js.map +1 -1
  164. package/dist/tests/WebhookQueue.coverage.test.d.ts +19 -0
  165. package/dist/tests/WebhookQueue.coverage.test.d.ts.map +1 -0
  166. package/dist/tests/WebhookQueue.coverage.test.js +190 -0
  167. package/dist/tests/WebhookQueue.coverage.test.js.map +1 -0
  168. package/dist/tests/billing/GDPRCompliance.test.d.ts +2 -2
  169. package/dist/tests/billing/GDPRCompliance.test.js +221 -36
  170. package/dist/tests/billing/GDPRCompliance.test.js.map +1 -1
  171. package/dist/tests/telemetry.test.js +126 -0
  172. package/dist/tests/telemetry.test.js.map +1 -1
  173. package/dist/tests/webhooks/WebhookDeadLetterRepository.test.d.ts +10 -0
  174. package/dist/tests/webhooks/WebhookDeadLetterRepository.test.d.ts.map +1 -0
  175. package/dist/tests/webhooks/WebhookDeadLetterRepository.test.js +109 -0
  176. package/dist/tests/webhooks/WebhookDeadLetterRepository.test.js.map +1 -0
  177. package/package.json +8 -3
@@ -0,0 +1,375 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import SkillParser from './SkillParser.js';
3
+ // ---------------------------------------------------------------------------
4
+ // Helpers
5
+ // ---------------------------------------------------------------------------
6
+ function makeSkillMd(frontmatter, body = '# My Skill\n\nDoes things.') {
7
+ return `---\n${frontmatter}\n---\n\n${body}`;
8
+ }
9
+ const MINIMAL_VALID = makeSkillMd('name: my-skill');
10
+ const FULL_VALID = makeSkillMd([
11
+ 'name: full-skill',
12
+ 'description: A thorough skill with all recommended fields present.',
13
+ 'author: acme',
14
+ 'version: 1.2.3',
15
+ 'license: MIT',
16
+ 'tags:',
17
+ ' - typescript',
18
+ ' - testing',
19
+ ' - vitest',
20
+ 'category: testing',
21
+ 'repository: https://github.com/acme/full-skill',
22
+ ].join('\n'));
23
+ // ---------------------------------------------------------------------------
24
+ // extractFrontmatter
25
+ // ---------------------------------------------------------------------------
26
+ describe('SkillParser.extractFrontmatter', () => {
27
+ const parser = new SkillParser();
28
+ it('returns null when content does not start with ---', () => {
29
+ expect(parser.extractFrontmatter('name: foo\n---')).toBeNull();
30
+ });
31
+ it('returns null when there is no closing --- delimiter', () => {
32
+ expect(parser.extractFrontmatter('---\nname: foo\n')).toBeNull();
33
+ });
34
+ it('returns null for an empty string', () => {
35
+ expect(parser.extractFrontmatter('')).toBeNull();
36
+ });
37
+ it('parses a simple key-value pair', () => {
38
+ const result = parser.extractFrontmatter(makeSkillMd('name: my-skill'));
39
+ expect(result?.name).toBe('my-skill');
40
+ });
41
+ it('parses double-quoted string values', () => {
42
+ const result = parser.extractFrontmatter(makeSkillMd('name: "quoted skill"'));
43
+ expect(result?.name).toBe('quoted skill');
44
+ });
45
+ it('parses single-quoted string values', () => {
46
+ const result = parser.extractFrontmatter(makeSkillMd("name: 'single quoted'"));
47
+ expect(result?.name).toBe('single quoted');
48
+ });
49
+ it('parses boolean true', () => {
50
+ const result = parser.extractFrontmatter(makeSkillMd('name: x\ndeprecated: true'));
51
+ expect(result?.deprecated).toBe(true);
52
+ });
53
+ it('parses boolean false', () => {
54
+ const result = parser.extractFrontmatter(makeSkillMd('name: x\ndeprecated: false'));
55
+ expect(result?.deprecated).toBe(false);
56
+ });
57
+ it('parses a numeric value', () => {
58
+ const result = parser.extractFrontmatter(makeSkillMd('name: x\nsome_count: 42'));
59
+ expect(result?.some_count).toBe(42);
60
+ });
61
+ it('parses a block-style array', () => {
62
+ const result = parser.extractFrontmatter(makeSkillMd('name: x\ntags:\n - alpha\n - beta\n - gamma'));
63
+ expect(result?.tags).toEqual(['alpha', 'beta', 'gamma']);
64
+ });
65
+ it('parses an inline array', () => {
66
+ const result = parser.extractFrontmatter(makeSkillMd('name: x\ntags: [alpha, beta, gamma]'));
67
+ expect(result?.tags).toEqual(['alpha', 'beta', 'gamma']);
68
+ });
69
+ it('ignores YAML comments', () => {
70
+ const result = parser.extractFrontmatter(makeSkillMd('# this is a comment\nname: commented-skill'));
71
+ expect(result?.name).toBe('commented-skill');
72
+ });
73
+ it('preserves unicode characters in string values', () => {
74
+ const result = parser.extractFrontmatter(makeSkillMd('name: "日本語スキル"'));
75
+ expect(result?.name).toBe('日本語スキル');
76
+ });
77
+ it('preserves unknown extra keys', () => {
78
+ const result = parser.extractFrontmatter(makeSkillMd('name: x\ncustom_field: hello'));
79
+ expect(result?.custom_field).toBe('hello');
80
+ });
81
+ it('coerces a numeric name to a string', () => {
82
+ const result = parser.extractFrontmatter(makeSkillMd('name: 123'));
83
+ expect(typeof result?.name).toBe('string');
84
+ expect(result?.name).toBe('123');
85
+ });
86
+ });
87
+ // ---------------------------------------------------------------------------
88
+ // validate
89
+ // ---------------------------------------------------------------------------
90
+ describe('SkillParser.validate', () => {
91
+ it('is valid for a frontmatter object with a name', () => {
92
+ const parser = new SkillParser();
93
+ const result = parser.validate({ name: 'my-skill' });
94
+ expect(result.valid).toBe(true);
95
+ expect(result.errors).toHaveLength(0);
96
+ });
97
+ it('returns an error when name is missing and requireName is true (default)', () => {
98
+ const parser = new SkillParser();
99
+ const result = parser.validate({});
100
+ expect(result.valid).toBe(false);
101
+ expect(result.errors).toContain('Missing required field: name');
102
+ });
103
+ it('does not error on missing name when requireName is false', () => {
104
+ const parser = new SkillParser({ requireName: false });
105
+ const result = parser.validate({});
106
+ expect(result.valid).toBe(true);
107
+ });
108
+ it('returns an error when description is required but missing', () => {
109
+ const parser = new SkillParser({ requireDescription: true });
110
+ const result = parser.validate({ name: 'x' });
111
+ expect(result.valid).toBe(false);
112
+ expect(result.errors).toContain('Missing required field: description');
113
+ });
114
+ it('does not error when description is provided and required', () => {
115
+ const parser = new SkillParser({ requireDescription: true });
116
+ const result = parser.validate({ name: 'x', description: 'A skill.' });
117
+ expect(result.valid).toBe(true);
118
+ });
119
+ it('emits a warning when description is absent', () => {
120
+ const parser = new SkillParser();
121
+ const result = parser.validate({ name: 'x' });
122
+ expect(result.warnings.some((w) => w.includes('description'))).toBe(true);
123
+ });
124
+ it('emits a warning when version is absent', () => {
125
+ const parser = new SkillParser();
126
+ const result = parser.validate({ name: 'x' });
127
+ expect(result.warnings.some((w) => w.includes('version'))).toBe(true);
128
+ });
129
+ it('emits a warning when tags are absent', () => {
130
+ const parser = new SkillParser();
131
+ const result = parser.validate({ name: 'x' });
132
+ expect(result.warnings.some((w) => w.includes('tags'))).toBe(true);
133
+ });
134
+ it('emits a deprecation warning when composes is present', () => {
135
+ const parser = new SkillParser();
136
+ const result = parser.validate({
137
+ name: 'x',
138
+ composes: ['other-skill'],
139
+ });
140
+ expect(result.warnings.some((w) => w.includes('composes'))).toBe(true);
141
+ });
142
+ it('merges errors and warnings from a custom validator', () => {
143
+ const parser = new SkillParser({
144
+ customValidator: () => ({
145
+ valid: false,
146
+ errors: ['custom error'],
147
+ warnings: ['custom warning'],
148
+ }),
149
+ });
150
+ const result = parser.validate({ name: 'x' });
151
+ expect(result.errors).toContain('custom error');
152
+ expect(result.warnings).toContain('custom warning');
153
+ expect(result.valid).toBe(false);
154
+ });
155
+ it('is valid when custom validator passes', () => {
156
+ const parser = new SkillParser({
157
+ customValidator: () => ({ valid: true, errors: [], warnings: [] }),
158
+ });
159
+ const result = parser.validate({ name: 'x' });
160
+ expect(result.valid).toBe(true);
161
+ });
162
+ });
163
+ // ---------------------------------------------------------------------------
164
+ // parse
165
+ // ---------------------------------------------------------------------------
166
+ describe('SkillParser.parse', () => {
167
+ const parser = new SkillParser();
168
+ it('returns null for content without a frontmatter block', () => {
169
+ expect(parser.parse('# Just a heading\n\nNo frontmatter here.')).toBeNull();
170
+ });
171
+ it('returns null when required name field is absent', () => {
172
+ expect(parser.parse(makeSkillMd('description: no name here'))).toBeNull();
173
+ });
174
+ it('returns ParsedSkillMetadata for valid minimal content', () => {
175
+ const result = parser.parse(MINIMAL_VALID);
176
+ expect(result).not.toBeNull();
177
+ expect(result?.name).toBe('my-skill');
178
+ });
179
+ it('maps all optional fields correctly', () => {
180
+ const result = parser.parse(FULL_VALID);
181
+ expect(result.name).toBe('full-skill');
182
+ expect(result.description).toBe('A thorough skill with all recommended fields present.');
183
+ expect(result.author).toBe('acme');
184
+ expect(result.version).toBe('1.2.3');
185
+ expect(result.license).toBe('MIT');
186
+ expect(result.tags).toEqual(['typescript', 'testing', 'vitest']);
187
+ expect(result.category).toBe('testing');
188
+ expect(result.repository).toBe('https://github.com/acme/full-skill');
189
+ });
190
+ it('sets absent optional fields to null', () => {
191
+ const result = parser.parse(MINIMAL_VALID);
192
+ expect(result.description).toBeNull();
193
+ expect(result.author).toBeNull();
194
+ expect(result.version).toBeNull();
195
+ expect(result.license).toBeNull();
196
+ expect(result.category).toBeNull();
197
+ expect(result.repository).toBeNull();
198
+ });
199
+ it('sets tags to an empty array when absent', () => {
200
+ const result = parser.parse(MINIMAL_VALID);
201
+ expect(result.tags).toEqual([]);
202
+ });
203
+ it('preserves rawContent in the result', () => {
204
+ const result = parser.parse(MINIMAL_VALID);
205
+ expect(result.rawContent).toBe(MINIMAL_VALID);
206
+ });
207
+ it('includes the original frontmatter object in the result', () => {
208
+ const result = parser.parse(MINIMAL_VALID);
209
+ expect(result.frontmatter.name).toBe('my-skill');
210
+ });
211
+ });
212
+ // ---------------------------------------------------------------------------
213
+ // parseWithValidation
214
+ // ---------------------------------------------------------------------------
215
+ describe('SkillParser.parseWithValidation', () => {
216
+ const parser = new SkillParser();
217
+ it('returns failed validation when frontmatter is missing', () => {
218
+ const { metadata, validation, frontmatter } = parser.parseWithValidation('No frontmatter here.');
219
+ expect(metadata).toBeNull();
220
+ expect(frontmatter).toBeNull();
221
+ expect(validation.valid).toBe(false);
222
+ expect(validation.errors.length).toBeGreaterThan(0);
223
+ });
224
+ it('returns null metadata and errors when validation fails', () => {
225
+ const { metadata, validation } = parser.parseWithValidation(makeSkillMd('description: missing name'));
226
+ expect(metadata).toBeNull();
227
+ expect(validation.valid).toBe(false);
228
+ });
229
+ it('returns non-null metadata and the frontmatter when valid', () => {
230
+ const { metadata, validation, frontmatter } = parser.parseWithValidation(MINIMAL_VALID);
231
+ expect(metadata).not.toBeNull();
232
+ expect(validation.valid).toBe(true);
233
+ expect(frontmatter?.name).toBe('my-skill');
234
+ });
235
+ it('includes warnings alongside a successful parse', () => {
236
+ const { validation } = parser.parseWithValidation(MINIMAL_VALID);
237
+ expect(validation.warnings.length).toBeGreaterThan(0);
238
+ });
239
+ });
240
+ // ---------------------------------------------------------------------------
241
+ // extractBody
242
+ // ---------------------------------------------------------------------------
243
+ describe('SkillParser.extractBody', () => {
244
+ const parser = new SkillParser();
245
+ it('returns content after the closing --- delimiter', () => {
246
+ const content = '---\nname: x\n---\n\n# Body\n\nSome content.';
247
+ expect(parser.extractBody(content)).toBe('# Body\n\nSome content.');
248
+ });
249
+ it('returns the full content when no frontmatter delimiter is present', () => {
250
+ const content = '# Just a body\n\nNo frontmatter.';
251
+ expect(parser.extractBody(content)).toBe(content);
252
+ });
253
+ it('returns an empty string when there is no body after the frontmatter', () => {
254
+ const content = '---\nname: x\n---';
255
+ expect(parser.extractBody(content)).toBe('');
256
+ });
257
+ });
258
+ // ---------------------------------------------------------------------------
259
+ // inferTrustTier
260
+ // ---------------------------------------------------------------------------
261
+ describe('SkillParser.inferTrustTier', () => {
262
+ const parser = new SkillParser();
263
+ function makeMetadata(overrides) {
264
+ return {
265
+ name: 'test-skill',
266
+ description: null,
267
+ author: null,
268
+ version: null,
269
+ tags: [],
270
+ category: null,
271
+ license: null,
272
+ repository: null,
273
+ rawContent: '',
274
+ frontmatter: { name: 'test-skill' },
275
+ ...overrides,
276
+ };
277
+ }
278
+ it('returns verified for an anthropic author', () => {
279
+ expect(parser.inferTrustTier(makeMetadata({ author: 'anthropic' }))).toBe('verified');
280
+ });
281
+ it('returns verified for a skillsmith author', () => {
282
+ expect(parser.inferTrustTier(makeMetadata({ author: 'skillsmith' }))).toBe('verified');
283
+ });
284
+ it('is case-insensitive for verified author matching', () => {
285
+ expect(parser.inferTrustTier(makeMetadata({ author: 'Anthropic' }))).toBe('verified');
286
+ });
287
+ it('returns community when metadata score is 3 or more', () => {
288
+ const metadata = makeMetadata({
289
+ author: 'acme',
290
+ // description > 50 chars, 3+ tags, version, license = score 4
291
+ description: 'A well-documented skill that exceeds the fifty character threshold.',
292
+ tags: ['a', 'b', 'c'],
293
+ version: '1.0.0',
294
+ license: 'MIT',
295
+ });
296
+ expect(parser.inferTrustTier(metadata)).toBe('community');
297
+ });
298
+ it('returns experimental when metadata score is exactly 1', () => {
299
+ const metadata = makeMetadata({
300
+ author: 'acme',
301
+ version: '1.0.0',
302
+ // description null, no tags, no license = score 1
303
+ });
304
+ expect(parser.inferTrustTier(metadata)).toBe('experimental');
305
+ });
306
+ it('returns unknown when there is no meaningful metadata', () => {
307
+ expect(parser.inferTrustTier(makeMetadata({ author: 'acme' }))).toBe('unknown');
308
+ });
309
+ });
310
+ // ---------------------------------------------------------------------------
311
+ // SkillParser.parseDependencyBlock (static)
312
+ // ---------------------------------------------------------------------------
313
+ describe('SkillParser.parseDependencyBlock', () => {
314
+ it('returns undefined when there is no dependencies key', () => {
315
+ expect(SkillParser.parseDependencyBlock('name: x\nversion: 1.0.0')).toBeUndefined();
316
+ });
317
+ it('returns undefined when dependencies is not an object', () => {
318
+ expect(SkillParser.parseDependencyBlock('dependencies: some-string')).toBeUndefined();
319
+ });
320
+ it('returns a parsed array when dependencies has a flat array item', () => {
321
+ // The built-in parser is best-effort; nested objects need js-yaml.
322
+ // A flat array under dependencies is the simplest case it can handle.
323
+ const yaml = 'dependencies:\n - some-skill';
324
+ const result = SkillParser.parseDependencyBlock(yaml);
325
+ expect(result).toEqual(['some-skill']);
326
+ });
327
+ });
328
+ // ---------------------------------------------------------------------------
329
+ // SkillParser.checkReferences (static)
330
+ // ---------------------------------------------------------------------------
331
+ describe('SkillParser.checkReferences', () => {
332
+ it('returns empty warnings and matches for clean content', () => {
333
+ const { warnings, matches } = SkillParser.checkReferences('# A clean skill\n\nNo refs here.');
334
+ expect(warnings).toHaveLength(0);
335
+ expect(matches).toHaveLength(0);
336
+ });
337
+ it('detects a Docker container name', () => {
338
+ const { matches } = SkillParser.checkReferences('Run `docker exec myproject-dev-1 npm test`.');
339
+ expect(matches.some((m) => m.pattern === 'Docker container name')).toBe(true);
340
+ });
341
+ it('detects an npm package scope', () => {
342
+ const { matches } = SkillParser.checkReferences('Install `@skillsmith-tools/helper` first.');
343
+ expect(matches.some((m) => m.pattern === 'npm package scope')).toBe(true);
344
+ });
345
+ it('detects a GitHub repo reference', () => {
346
+ const { matches } = SkillParser.checkReferences('See github.com/acme-corp/my-repo for details.');
347
+ expect(matches.some((m) => m.pattern === 'GitHub repo reference')).toBe(true);
348
+ });
349
+ it('detects a project URL', () => {
350
+ const { matches } = SkillParser.checkReferences('Documentation at https://myproject.app/docs/guide.');
351
+ expect(matches.some((m) => m.pattern === 'Project URL')).toBe(true);
352
+ });
353
+ it('includes the correct line number in match results', () => {
354
+ const content = 'Line one.\nSee github.com/acme-corp/my-repo here.\nLine three.';
355
+ const { matches } = SkillParser.checkReferences(content);
356
+ const ghMatch = matches.find((m) => m.pattern === 'GitHub repo reference');
357
+ expect(ghMatch?.line).toBe(2);
358
+ });
359
+ it('truncates matched text longer than 80 characters', () => {
360
+ const longUrl = 'https://very-long-project.app/' + 'x'.repeat(100) + '/';
361
+ const { matches } = SkillParser.checkReferences(`See ${longUrl} for info.`);
362
+ const urlMatch = matches.find((m) => m.pattern === 'Project URL');
363
+ expect(urlMatch).toBeDefined();
364
+ expect(urlMatch.text.length).toBeLessThanOrEqual(83); // 80 chars + '...'
365
+ });
366
+ it('applies custom patterns alongside the defaults', () => {
367
+ const { matches } = SkillParser.checkReferences('The secret token is abc-123.', [/abc-\d+/g]);
368
+ expect(matches.some((m) => m.pattern === 'Custom pattern')).toBe(true);
369
+ });
370
+ it('includes a summary warning when matches are found', () => {
371
+ const { warnings } = SkillParser.checkReferences('See github.com/acme-corp/my-repo for details.');
372
+ expect(warnings.length).toBeGreaterThan(0);
373
+ });
374
+ });
375
+ //# sourceMappingURL=SkillParser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillParser.test.js","sourceRoot":"","sources":["../../../src/indexer/SkillParser.test.ts"],"names":[],"mappings":"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"}
@@ -103,7 +103,12 @@ export interface DuplicatesReport {
103
103
  };
104
104
  duplicates: DuplicateEntry[];
105
105
  }
106
- export declare const TrustTierSchema: z.ZodEnum<["verified", "community", "experimental", "unknown"]>;
106
+ export declare const TrustTierSchema: z.ZodEnum<{
107
+ verified: "verified";
108
+ community: "community";
109
+ experimental: "experimental";
110
+ unknown: "unknown";
111
+ }>;
107
112
  export declare const ValidatedSkillSchema: z.ZodObject<{
108
113
  id: z.ZodString;
109
114
  name: z.ZodString;
@@ -111,28 +116,13 @@ export declare const ValidatedSkillSchema: z.ZodObject<{
111
116
  author: z.ZodString;
112
117
  repo_url: z.ZodNullable<z.ZodString>;
113
118
  quality_score: z.ZodNumber;
114
- trust_tier: z.ZodEnum<["verified", "community", "experimental", "unknown"]>;
115
- tags: z.ZodArray<z.ZodString, "many">;
119
+ trust_tier: z.ZodEnum<{
120
+ verified: "verified";
121
+ community: "community";
122
+ experimental: "experimental";
123
+ unknown: "unknown";
124
+ }>;
125
+ tags: z.ZodArray<z.ZodString>;
116
126
  source: z.ZodString;
117
- }, "strip", z.ZodTypeAny, {
118
- source: string;
119
- id: string;
120
- name: string;
121
- description: string;
122
- author: string;
123
- tags: string[];
124
- repo_url: string | null;
125
- quality_score: number;
126
- trust_tier: "verified" | "community" | "experimental" | "unknown";
127
- }, {
128
- source: string;
129
- id: string;
130
- name: string;
131
- description: string;
132
- author: string;
133
- tags: string[];
134
- repo_url: string | null;
135
- quality_score: number;
136
- trust_tier: "verified" | "community" | "experimental" | "unknown";
137
- }>;
127
+ }, z.core.$strip>;
138
128
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/scripts/validation/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB,eAAO,MAAM,MAAM;IACjB,8BAA8B;;IAE9B,+BAA+B;;IAE/B,4DAA4D;;IAE5D,6BAA6B;8BAMxB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAC3B,wBAAwB;;CAEhB,CAAA;AAMV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjE,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,SAAS,CAAA;IACrB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,0CAA0C;AAC1C,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,0CAA0C;AAC1C,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;IAC5B,QAAQ,EAAE,aAAa,CAAA;IACvB,MAAM,EAAE,oBAAoB,EAAE,CAAA;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,iCAAiC;AACjC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,cAAc,CAAA;IACpB,SAAS,EAAE,cAAc,CAAA;IACzB,MAAM,EAAE,UAAU,GAAG,qBAAqB,CAAA;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,gCAAgC;AAChC,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAA;QACnB,YAAY,EAAE,MAAM,CAAA;QACpB,cAAc,EAAE,MAAM,CAAA;QACtB,kBAAkB,EAAE,MAAM,CAAA;QAC1B,kBAAkB,EAAE,MAAM,CAAA;QAC1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACxC,CAAA;IACD,MAAM,EAAE,KAAK,CAAC;QACZ,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;QAC9B,MAAM,EAAE,oBAAoB,EAAE,CAAA;KAC/B,CAAC,CAAA;IACF,QAAQ,EAAE,KAAK,CAAC;QACd,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;QAC9B,QAAQ,EAAE,MAAM,EAAE,CAAA;KACnB,CAAC,CAAA;IACF,KAAK,EAAE,KAAK,CAAC;QACX,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;QAC9B,KAAK,EAAE,MAAM,EAAE,CAAA;KAChB,CAAC,CAAA;CACH;AAED,wBAAwB;AACxB,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE;QACP,gBAAgB,EAAE,MAAM,CAAA;QACxB,WAAW,EAAE,MAAM,CAAA;QACnB,sBAAsB,EAAE,MAAM,CAAA;KAC/B,CAAA;IACD,UAAU,EAAE,cAAc,EAAE,CAAA;CAC7B;AAMD,eAAO,MAAM,eAAe,iEAAmC,CAAA;AAE/D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAa/B,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/scripts/validation/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB,eAAO,MAAM,MAAM;IACjB,8BAA8B;;IAE9B,+BAA+B;;IAE/B,4DAA4D;;IAE5D,6BAA6B;8BAMxB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAC3B,wBAAwB;;CAEhB,CAAA;AAMV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjE,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,SAAS,CAAA;IACrB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,0CAA0C;AAC1C,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,0CAA0C;AAC1C,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;IAC5B,QAAQ,EAAE,aAAa,CAAA;IACvB,MAAM,EAAE,oBAAoB,EAAE,CAAA;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,iCAAiC;AACjC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,cAAc,CAAA;IACpB,SAAS,EAAE,cAAc,CAAA;IACzB,MAAM,EAAE,UAAU,GAAG,qBAAqB,CAAA;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,gCAAgC;AAChC,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAA;QACnB,YAAY,EAAE,MAAM,CAAA;QACpB,cAAc,EAAE,MAAM,CAAA;QACtB,kBAAkB,EAAE,MAAM,CAAA;QAC1B,kBAAkB,EAAE,MAAM,CAAA;QAC1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACxC,CAAA;IACD,MAAM,EAAE,KAAK,CAAC;QACZ,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;QAC9B,MAAM,EAAE,oBAAoB,EAAE,CAAA;KAC/B,CAAC,CAAA;IACF,QAAQ,EAAE,KAAK,CAAC;QACd,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;QAC9B,QAAQ,EAAE,MAAM,EAAE,CAAA;KACnB,CAAC,CAAA;IACF,KAAK,EAAE,KAAK,CAAC;QACX,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;QAC9B,KAAK,EAAE,MAAM,EAAE,CAAA;KAChB,CAAC,CAAA;CACH;AAED,wBAAwB;AACxB,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE;QACP,gBAAgB,EAAE,MAAM,CAAA;QACxB,WAAW,EAAE,MAAM,CAAA;QACnB,sBAAsB,EAAE,MAAM,CAAA;KAC/B,CAAA;IACD,UAAU,EAAE,cAAc,EAAE,CAAA;CAC7B;AAMD,eAAO,MAAM,eAAe;;;;;EAAmC,CAAA;AAE/D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;iBAa/B,CAAA"}
@@ -13,45 +13,13 @@ import { z } from 'zod';
13
13
  * Switch to .strict() after publishing the schema spec.
14
14
  */
15
15
  export declare const SkillConfigSchema: z.ZodObject<{
16
- /** Skill display name override */
17
16
  displayName: z.ZodOptional<z.ZodString>;
18
- /** Version constraint */
19
17
  version: z.ZodOptional<z.ZodString>;
20
- /** Configuration presets (values must be primitives) */
21
- presets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
22
- /** Custom settings (values must be primitives) */
23
- settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
24
- /** MCP server requirements */
25
- mcpServers: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
26
- /** Minimum Claude Code version */
18
+ presets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
19
+ settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
20
+ mcpServers: z.ZodOptional<z.ZodArray<z.ZodString>>;
27
21
  minClaudeCodeVersion: z.ZodOptional<z.ZodString>;
28
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
29
- /** Skill display name override */
30
- displayName: z.ZodOptional<z.ZodString>;
31
- /** Version constraint */
32
- version: z.ZodOptional<z.ZodString>;
33
- /** Configuration presets (values must be primitives) */
34
- presets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
35
- /** Custom settings (values must be primitives) */
36
- settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
37
- /** MCP server requirements */
38
- mcpServers: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
39
- /** Minimum Claude Code version */
40
- minClaudeCodeVersion: z.ZodOptional<z.ZodString>;
41
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
42
- /** Skill display name override */
43
- displayName: z.ZodOptional<z.ZodString>;
44
- /** Version constraint */
45
- version: z.ZodOptional<z.ZodString>;
46
- /** Configuration presets (values must be primitives) */
47
- presets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
48
- /** Custom settings (values must be primitives) */
49
- settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
50
- /** MCP server requirements */
51
- mcpServers: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
52
- /** Minimum Claude Code version */
53
- minClaudeCodeVersion: z.ZodOptional<z.ZodString>;
54
- }, z.ZodTypeAny, "passthrough">>;
22
+ }, z.core.$loose>;
55
23
  export type SkillConfig = z.infer<typeof SkillConfigSchema>;
56
24
  export interface ConfigValidationResult {
57
25
  valid: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"skill-config-schema.d.ts","sourceRoot":"","sources":["../../../src/services/skill-config-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;IAE1B,kCAAkC;;IAElC,yBAAyB;;IAEzB,wDAAwD;;IAIxD,kDAAkD;;IAIlD,8BAA8B;;IAE9B,kCAAkC;;;IAdlC,kCAAkC;;IAElC,yBAAyB;;IAEzB,wDAAwD;;IAIxD,kDAAkD;;IAIlD,8BAA8B;;IAE9B,kCAAkC;;;IAdlC,kCAAkC;;IAElC,yBAAyB;;IAEzB,wDAAwD;;IAIxD,kDAAkD;;IAIlD,8BAA8B;;IAE9B,kCAAkC;;gCAGtB,CAAA;AAEhB,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAW3D,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,uCAAuC;IACvC,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB,CA+B3E"}
1
+ {"version":3,"file":"skill-config-schema.d.ts","sourceRoot":"","sources":["../../../src/services/skill-config-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;iBAmBd,CAAA;AAEhB,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAW3D,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,uCAAuC;IACvC,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB,CA+B3E"}