skillshield 1.0.0

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 (167) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +400 -0
  3. package/dist/channels/discord.d.ts +18 -0
  4. package/dist/channels/discord.d.ts.map +1 -0
  5. package/dist/channels/discord.js +275 -0
  6. package/dist/channels/discord.js.map +1 -0
  7. package/dist/channels/index.d.ts +67 -0
  8. package/dist/channels/index.d.ts.map +1 -0
  9. package/dist/channels/index.js +127 -0
  10. package/dist/channels/index.js.map +1 -0
  11. package/dist/channels/slack.d.ts +20 -0
  12. package/dist/channels/slack.d.ts.map +1 -0
  13. package/dist/channels/slack.js +296 -0
  14. package/dist/channels/slack.js.map +1 -0
  15. package/dist/channels/telegram.d.ts +20 -0
  16. package/dist/channels/telegram.d.ts.map +1 -0
  17. package/dist/channels/telegram.js +223 -0
  18. package/dist/channels/telegram.js.map +1 -0
  19. package/dist/channels/whatsapp.d.ts +25 -0
  20. package/dist/channels/whatsapp.d.ts.map +1 -0
  21. package/dist/channels/whatsapp.js +187 -0
  22. package/dist/channels/whatsapp.js.map +1 -0
  23. package/dist/cli/commands/badge.d.ts +11 -0
  24. package/dist/cli/commands/badge.d.ts.map +1 -0
  25. package/dist/cli/commands/badge.js +98 -0
  26. package/dist/cli/commands/badge.js.map +1 -0
  27. package/dist/cli/commands/config.d.ts +3 -0
  28. package/dist/cli/commands/config.d.ts.map +1 -0
  29. package/dist/cli/commands/config.js +140 -0
  30. package/dist/cli/commands/config.js.map +1 -0
  31. package/dist/cli/commands/deploy.d.ts +3 -0
  32. package/dist/cli/commands/deploy.d.ts.map +1 -0
  33. package/dist/cli/commands/deploy.js +56 -0
  34. package/dist/cli/commands/deploy.js.map +1 -0
  35. package/dist/cli/commands/init.d.ts +3 -0
  36. package/dist/cli/commands/init.d.ts.map +1 -0
  37. package/dist/cli/commands/init.js +99 -0
  38. package/dist/cli/commands/init.js.map +1 -0
  39. package/dist/cli/commands/install.d.ts +3 -0
  40. package/dist/cli/commands/install.d.ts.map +1 -0
  41. package/dist/cli/commands/install.js +90 -0
  42. package/dist/cli/commands/install.js.map +1 -0
  43. package/dist/cli/commands/list.d.ts +3 -0
  44. package/dist/cli/commands/list.d.ts.map +1 -0
  45. package/dist/cli/commands/list.js +76 -0
  46. package/dist/cli/commands/list.js.map +1 -0
  47. package/dist/cli/commands/run.d.ts +3 -0
  48. package/dist/cli/commands/run.d.ts.map +1 -0
  49. package/dist/cli/commands/run.js +160 -0
  50. package/dist/cli/commands/run.js.map +1 -0
  51. package/dist/cli/commands/scan.d.ts +3 -0
  52. package/dist/cli/commands/scan.d.ts.map +1 -0
  53. package/dist/cli/commands/scan.js +133 -0
  54. package/dist/cli/commands/scan.js.map +1 -0
  55. package/dist/cli/commands/search.d.ts +3 -0
  56. package/dist/cli/commands/search.d.ts.map +1 -0
  57. package/dist/cli/commands/search.js +56 -0
  58. package/dist/cli/commands/search.js.map +1 -0
  59. package/dist/cli/index.d.ts +3 -0
  60. package/dist/cli/index.d.ts.map +1 -0
  61. package/dist/cli/index.js +70 -0
  62. package/dist/cli/index.js.map +1 -0
  63. package/dist/core/config.d.ts +167 -0
  64. package/dist/core/config.d.ts.map +1 -0
  65. package/dist/core/config.js +398 -0
  66. package/dist/core/config.js.map +1 -0
  67. package/dist/core/parser.d.ts +34 -0
  68. package/dist/core/parser.d.ts.map +1 -0
  69. package/dist/core/parser.js +462 -0
  70. package/dist/core/parser.js.map +1 -0
  71. package/dist/core/runtime.d.ts +68 -0
  72. package/dist/core/runtime.d.ts.map +1 -0
  73. package/dist/core/runtime.js +560 -0
  74. package/dist/core/runtime.js.map +1 -0
  75. package/dist/core/types.d.ts +525 -0
  76. package/dist/core/types.d.ts.map +1 -0
  77. package/dist/core/types.js +44 -0
  78. package/dist/core/types.js.map +1 -0
  79. package/dist/guard/index.d.ts +57 -0
  80. package/dist/guard/index.d.ts.map +1 -0
  81. package/dist/guard/index.js +238 -0
  82. package/dist/guard/index.js.map +1 -0
  83. package/dist/guard/patterns.d.ts +21 -0
  84. package/dist/guard/patterns.d.ts.map +1 -0
  85. package/dist/guard/patterns.js +797 -0
  86. package/dist/guard/patterns.js.map +1 -0
  87. package/dist/hub/index.d.ts +44 -0
  88. package/dist/hub/index.d.ts.map +1 -0
  89. package/dist/hub/index.js +144 -0
  90. package/dist/hub/index.js.map +1 -0
  91. package/dist/hub/registry.d.ts +52 -0
  92. package/dist/hub/registry.d.ts.map +1 -0
  93. package/dist/hub/registry.js +192 -0
  94. package/dist/hub/registry.js.map +1 -0
  95. package/dist/i18n/index.d.ts +19 -0
  96. package/dist/i18n/index.d.ts.map +1 -0
  97. package/dist/i18n/index.js +92 -0
  98. package/dist/i18n/index.js.map +1 -0
  99. package/dist/i18n/locales/en.d.ts +110 -0
  100. package/dist/i18n/locales/en.d.ts.map +1 -0
  101. package/dist/i18n/locales/en.js +123 -0
  102. package/dist/i18n/locales/en.js.map +1 -0
  103. package/dist/i18n/locales/es.d.ts +110 -0
  104. package/dist/i18n/locales/es.d.ts.map +1 -0
  105. package/dist/i18n/locales/es.js +123 -0
  106. package/dist/i18n/locales/es.js.map +1 -0
  107. package/dist/i18n/locales/pt.d.ts +110 -0
  108. package/dist/i18n/locales/pt.d.ts.map +1 -0
  109. package/dist/i18n/locales/pt.js +123 -0
  110. package/dist/i18n/locales/pt.js.map +1 -0
  111. package/dist/i18n/locales/zh.d.ts +110 -0
  112. package/dist/i18n/locales/zh.d.ts.map +1 -0
  113. package/dist/i18n/locales/zh.js +123 -0
  114. package/dist/i18n/locales/zh.js.map +1 -0
  115. package/dist/index.d.ts +168 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +275 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/router/index.d.ts +89 -0
  120. package/dist/router/index.d.ts.map +1 -0
  121. package/dist/router/index.js +292 -0
  122. package/dist/router/index.js.map +1 -0
  123. package/dist/router/providers.d.ts +48 -0
  124. package/dist/router/providers.d.ts.map +1 -0
  125. package/dist/router/providers.js +733 -0
  126. package/dist/router/providers.js.map +1 -0
  127. package/dist/runtime/executor.d.ts +96 -0
  128. package/dist/runtime/executor.d.ts.map +1 -0
  129. package/dist/runtime/executor.js +389 -0
  130. package/dist/runtime/executor.js.map +1 -0
  131. package/dist/sandbox/index.d.ts +52 -0
  132. package/dist/sandbox/index.d.ts.map +1 -0
  133. package/dist/sandbox/index.js +248 -0
  134. package/dist/sandbox/index.js.map +1 -0
  135. package/dist/security/skillguard.d.ts +25 -0
  136. package/dist/security/skillguard.d.ts.map +1 -0
  137. package/dist/security/skillguard.js +137 -0
  138. package/dist/security/skillguard.js.map +1 -0
  139. package/dist/tools/index.d.ts +55 -0
  140. package/dist/tools/index.d.ts.map +1 -0
  141. package/dist/tools/index.js +276 -0
  142. package/dist/tools/index.js.map +1 -0
  143. package/dist/tools/web-engine.d.ts +158 -0
  144. package/dist/tools/web-engine.d.ts.map +1 -0
  145. package/dist/tools/web-engine.js +802 -0
  146. package/dist/tools/web-engine.js.map +1 -0
  147. package/dist/tools/web-tools.d.ts +173 -0
  148. package/dist/tools/web-tools.d.ts.map +1 -0
  149. package/dist/tools/web-tools.js +251 -0
  150. package/dist/tools/web-tools.js.map +1 -0
  151. package/dist/utils/errors.d.ts +44 -0
  152. package/dist/utils/errors.d.ts.map +1 -0
  153. package/dist/utils/errors.js +130 -0
  154. package/dist/utils/errors.js.map +1 -0
  155. package/dist/utils/logger.d.ts +28 -0
  156. package/dist/utils/logger.d.ts.map +1 -0
  157. package/dist/utils/logger.js +121 -0
  158. package/dist/utils/logger.js.map +1 -0
  159. package/examples/basic-usage.ts +276 -0
  160. package/examples/code-reviewer.skill.md +83 -0
  161. package/examples/creative-writer.skill.md +80 -0
  162. package/examples/data-analyzer.skill.md +61 -0
  163. package/examples/hello-world.skill.md +36 -0
  164. package/examples/sample-skill.md +156 -0
  165. package/examples/summarizer.skill.md +62 -0
  166. package/examples/translator.skill.md +45 -0
  167. package/package.json +110 -0
@@ -0,0 +1,462 @@
1
+ /**
2
+ * SkillKit SKILL.md Parser
3
+ * Parses and validates SKILL.md files in both OpenClaw and ArtefactForge formats.
4
+ * This is the heart of SkillKit - it transforms markdown skill definitions into executable structures.
5
+ */
6
+ import { readFileSync } from 'fs';
7
+ import { resolve } from 'path';
8
+ import matter from 'gray-matter';
9
+ import { z } from 'zod';
10
+ import { ChannelType, } from './types.js';
11
+ /**
12
+ * Zod schemas for validation
13
+ */
14
+ const ModelRequirementsSchema = z.object({
15
+ minContextWindow: z.number().optional(),
16
+ requiresTools: z.boolean().optional(),
17
+ capabilities: z.array(z.string()).optional(),
18
+ recommended: z.string().optional(),
19
+ minSize: z.enum(['tiny', 'small', 'medium', 'large', 'xlarge']).optional(),
20
+ }).strict();
21
+ const SkillToolSchema = z.object({
22
+ name: z.string().min(1),
23
+ description: z.string(),
24
+ inputSchema: z.record(z.unknown()),
25
+ example: z.string().optional(),
26
+ securityLevel: z.enum(['public', 'restricted', 'admin']).optional(),
27
+ }).strict();
28
+ const SkillInputSchema = z.object({
29
+ name: z.string().min(1),
30
+ type: z.enum(['string', 'number', 'boolean', 'array', 'object']),
31
+ description: z.string(),
32
+ required: z.boolean(),
33
+ default: z.unknown().optional(),
34
+ schema: z.record(z.unknown()).optional(),
35
+ example: z.unknown().optional(),
36
+ }).strict();
37
+ const SkillOutputSchema = z.object({
38
+ name: z.string().min(1),
39
+ type: z.enum(['string', 'number', 'boolean', 'array', 'object', 'stream']),
40
+ description: z.string(),
41
+ schema: z.record(z.unknown()).optional(),
42
+ example: z.unknown().optional(),
43
+ }).strict();
44
+ const SkillExampleSchema = z.object({
45
+ title: z.string(),
46
+ input: z.record(z.unknown()),
47
+ expectedOutput: z.record(z.unknown()),
48
+ explanation: z.string().optional(),
49
+ }).strict();
50
+ const FrontmatterSchema = z.object({
51
+ name: z.string().min(1, 'Skill name is required'),
52
+ title: z.string().optional(),
53
+ description: z.string().min(1, 'Description is required'),
54
+ version: z.string().regex(/^\d+\.\d+\.\d+/, 'Version must follow semver format'),
55
+ author: z.string().min(1, 'Author is required'),
56
+ tags: z.array(z.string()).default([]),
57
+ license: z.string().optional(),
58
+ homepage: z.string().url().optional(),
59
+ modelRequirements: ModelRequirementsSchema.optional(),
60
+ estimatedRuntime: z.number().optional(),
61
+ channels: z.array(z.nativeEnum(ChannelType)).optional(),
62
+ requiresAuth: z.boolean().optional(),
63
+ costPerExecution: z.number().optional(),
64
+ custom: z.record(z.unknown()).optional(),
65
+ }).strict();
66
+ /**
67
+ * Parse frontmatter YAML
68
+ */
69
+ function parseFrontmatter(rawYaml) {
70
+ try {
71
+ // Simple YAML parser for our use case
72
+ const lines = rawYaml.split('\n');
73
+ const result = {};
74
+ let i = 0;
75
+ while (i < lines.length) {
76
+ const line = lines[i];
77
+ if (!line.trim() || line.startsWith('#')) {
78
+ i++;
79
+ continue;
80
+ }
81
+ const colonIndex = line.indexOf(':');
82
+ if (colonIndex === -1) {
83
+ i++;
84
+ continue;
85
+ }
86
+ const key = line.substring(0, colonIndex).trim();
87
+ let value = line.substring(colonIndex + 1).trim();
88
+ // Handle multiline values and arrays
89
+ if (value === '' && i + 1 < lines.length && lines[i + 1].startsWith(' ')) {
90
+ // Multiline value
91
+ const valueLines = [value];
92
+ i++;
93
+ while (i < lines.length && lines[i].startsWith(' ')) {
94
+ valueLines.push(lines[i].trim());
95
+ i++;
96
+ }
97
+ value = valueLines.join('\n').trim();
98
+ i--; // Back up one since we'll increment at loop end
99
+ }
100
+ else if (value.startsWith('[')) {
101
+ // Array parsing
102
+ let arrayStr = value;
103
+ while (!arrayStr.includes(']') && i + 1 < lines.length) {
104
+ i++;
105
+ arrayStr += ' ' + lines[i].trim();
106
+ }
107
+ try {
108
+ result[key] = JSON.parse(arrayStr);
109
+ }
110
+ catch {
111
+ result[key] = arrayStr;
112
+ }
113
+ }
114
+ else {
115
+ // Try to parse as JSON first
116
+ if (value === 'true') {
117
+ result[key] = true;
118
+ }
119
+ else if (value === 'false') {
120
+ result[key] = false;
121
+ }
122
+ else if (value === 'null') {
123
+ result[key] = null;
124
+ }
125
+ else if (/^\d+(\.\d+)?$/.test(value)) {
126
+ result[key] = parseFloat(value);
127
+ }
128
+ else {
129
+ result[key] = value;
130
+ }
131
+ }
132
+ i++;
133
+ }
134
+ return result;
135
+ }
136
+ catch (error) {
137
+ throw new Error(`Failed to parse YAML frontmatter: ${error instanceof Error ? error.message : String(error)}`);
138
+ }
139
+ }
140
+ /**
141
+ * Extract section from markdown body
142
+ */
143
+ function extractSection(body, sectionName) {
144
+ const regex = new RegExp(`## ${sectionName}\\s*\\n([\\s\\S]*?)(?=##|$)`, 'i');
145
+ const match = body.match(regex);
146
+ return match ? match[1].trim() : '';
147
+ }
148
+ /**
149
+ * Parse JSON array from markdown code block
150
+ */
151
+ function parseJsonCodeBlock(content) {
152
+ const jsonMatch = content.match(/```(?:json)?\s*([\s\S]*?)```/);
153
+ if (jsonMatch) {
154
+ try {
155
+ return JSON.parse(jsonMatch[1].trim());
156
+ }
157
+ catch (error) {
158
+ throw new Error(`Invalid JSON in code block: ${error instanceof Error ? error.message : String(error)}`);
159
+ }
160
+ }
161
+ return null;
162
+ }
163
+ /**
164
+ * Parse inputs section
165
+ */
166
+ function parseInputs(body) {
167
+ const inputsSection = extractSection(body, 'Inputs');
168
+ if (!inputsSection)
169
+ return [];
170
+ const inputs = [];
171
+ // Try to parse from JSON code block first
172
+ const jsonInputs = parseJsonCodeBlock(inputsSection);
173
+ if (Array.isArray(jsonInputs)) {
174
+ return jsonInputs.map(input => SkillInputSchema.parse(input));
175
+ }
176
+ // Fallback: parse from markdown table format
177
+ const tableLines = inputsSection.split('\n').filter(line => line.includes('|'));
178
+ for (const line of tableLines) {
179
+ const parts = line.split('|').map(p => p.trim()).filter(p => p);
180
+ if (parts.length >= 5 && !parts[0].includes('---')) {
181
+ inputs.push({
182
+ name: parts[0],
183
+ type: parts[1],
184
+ description: parts[2],
185
+ required: parts[3] === 'Yes' || parts[3] === 'true',
186
+ example: parts[4],
187
+ });
188
+ }
189
+ }
190
+ return inputs.map(input => SkillInputSchema.parse(input));
191
+ }
192
+ /**
193
+ * Parse outputs section
194
+ */
195
+ function parseOutputs(body) {
196
+ const outputsSection = extractSection(body, 'Outputs');
197
+ if (!outputsSection)
198
+ return [];
199
+ const outputs = [];
200
+ // Try to parse from JSON code block first
201
+ const jsonOutputs = parseJsonCodeBlock(outputsSection);
202
+ if (Array.isArray(jsonOutputs)) {
203
+ return jsonOutputs.map(output => SkillOutputSchema.parse(output));
204
+ }
205
+ // Fallback: parse from markdown table format
206
+ const tableLines = outputsSection.split('\n').filter(line => line.includes('|'));
207
+ for (const line of tableLines) {
208
+ const parts = line.split('|').map(p => p.trim()).filter(p => p);
209
+ if (parts.length >= 3 && !parts[0].includes('---')) {
210
+ outputs.push({
211
+ name: parts[0],
212
+ type: parts[1],
213
+ description: parts[2],
214
+ });
215
+ }
216
+ }
217
+ return outputs.map(output => SkillOutputSchema.parse(output));
218
+ }
219
+ /**
220
+ * Parse tools section
221
+ */
222
+ function parseTools(body) {
223
+ const toolsSection = extractSection(body, 'Tools');
224
+ if (!toolsSection)
225
+ return [];
226
+ const tools = [];
227
+ // Try to parse from JSON code block
228
+ const jsonTools = parseJsonCodeBlock(toolsSection);
229
+ if (Array.isArray(jsonTools)) {
230
+ return jsonTools.map(tool => SkillToolSchema.parse(tool));
231
+ }
232
+ // Parse tool definitions with schema blocks
233
+ const toolBlocks = toolsSection.match(/### \w+[\s\S]*?(?=###|$)/g) || [];
234
+ for (const block of toolBlocks) {
235
+ const lines = block.split('\n');
236
+ const title = lines[0].replace('###', '').trim();
237
+ const description = lines.slice(1).find(l => l.trim() && !l.includes('```'))?.trim() || '';
238
+ const schemaMatch = block.match(/```json\s*([\s\S]*?)```/);
239
+ let inputSchema = {};
240
+ if (schemaMatch) {
241
+ try {
242
+ inputSchema = JSON.parse(schemaMatch[1]);
243
+ }
244
+ catch {
245
+ // Keep empty schema
246
+ }
247
+ }
248
+ tools.push({
249
+ name: title,
250
+ description,
251
+ inputSchema,
252
+ });
253
+ }
254
+ return tools.map(tool => SkillToolSchema.parse(tool));
255
+ }
256
+ /**
257
+ * Parse examples section
258
+ */
259
+ function parseExamples(body) {
260
+ const examplesSection = extractSection(body, 'Examples');
261
+ if (!examplesSection)
262
+ return [];
263
+ const examples = [];
264
+ // Try to parse from JSON code block first
265
+ const jsonExamples = parseJsonCodeBlock(examplesSection);
266
+ if (Array.isArray(jsonExamples)) {
267
+ return jsonExamples.map(ex => SkillExampleSchema.parse(ex));
268
+ }
269
+ // Parse example blocks
270
+ const exampleBlocks = examplesSection.match(/### .+?[\s\S]*?(?=###|$)/g) || [];
271
+ for (const block of exampleBlocks) {
272
+ const lines = block.split('\n');
273
+ const title = lines[0].replace('###', '').trim();
274
+ const inputMatch = block.match(/#### Input[\s\S]*?```json\s*([\s\S]*?)```/);
275
+ const outputMatch = block.match(/#### Output[\s\S]*?```json\s*([\s\S]*?)```/);
276
+ try {
277
+ const input = inputMatch ? JSON.parse(inputMatch[1]) : {};
278
+ const expectedOutput = outputMatch ? JSON.parse(outputMatch[1]) : {};
279
+ examples.push({
280
+ title,
281
+ input,
282
+ expectedOutput,
283
+ });
284
+ }
285
+ catch {
286
+ // Skip malformed examples
287
+ continue;
288
+ }
289
+ }
290
+ return examples.map(ex => SkillExampleSchema.parse(ex));
291
+ }
292
+ /**
293
+ * Parse system prompt section (# System Prompt or ## System Prompt)
294
+ */
295
+ function parseSystemPrompt(body) {
296
+ const match = body.match(/^#+ System Prompt\s*\n([\s\S]*?)(?=^#+[^#]|$)/m);
297
+ return match ? match[1].trim() : '';
298
+ }
299
+ /**
300
+ * Parse instructions section (# Instructions or ## Instructions)
301
+ */
302
+ function parseInstructions(body) {
303
+ const match = body.match(/^#+ Instructions\s*\n([\s\S]*?)(?=^#+[^#]|$)/m);
304
+ return match ? match[1].trim() : '';
305
+ }
306
+ /**
307
+ * Validate parsed skill definition
308
+ */
309
+ export function validateSkill(skill) {
310
+ const errors = [];
311
+ // Check required fields
312
+ if (!skill.metadata.name || skill.metadata.name.length === 0) {
313
+ errors.push('Skill name is required');
314
+ }
315
+ if (!skill.metadata.description || skill.metadata.description.length === 0) {
316
+ errors.push('Skill description is required');
317
+ }
318
+ if (!skill.metadata.author || skill.metadata.author.length === 0) {
319
+ errors.push('Skill author is required');
320
+ }
321
+ if (!skill.metadata.version) {
322
+ errors.push('Skill version is required');
323
+ }
324
+ else if (!/^\d+\.\d+\.\d+/.test(skill.metadata.version)) {
325
+ errors.push('Version must follow semver format (x.y.z)');
326
+ }
327
+ // Validate system prompt and instructions
328
+ if (!skill.systemPrompt || skill.systemPrompt.length === 0) {
329
+ errors.push('System prompt is required');
330
+ }
331
+ if (!skill.instructions || skill.instructions.length === 0) {
332
+ errors.push('Instructions are required');
333
+ }
334
+ // Validate inputs/outputs
335
+ const inputNames = new Set();
336
+ for (const input of skill.inputs) {
337
+ if (inputNames.has(input.name)) {
338
+ errors.push(`Duplicate input name: ${input.name}`);
339
+ }
340
+ inputNames.add(input.name);
341
+ }
342
+ const outputNames = new Set();
343
+ for (const output of skill.outputs) {
344
+ if (outputNames.has(output.name)) {
345
+ errors.push(`Duplicate output name: ${output.name}`);
346
+ }
347
+ outputNames.add(output.name);
348
+ }
349
+ // Validate tools
350
+ const toolNames = new Set();
351
+ for (const tool of skill.tools || []) {
352
+ if (toolNames.has(tool.name)) {
353
+ errors.push(`Duplicate tool name: ${tool.name}`);
354
+ }
355
+ toolNames.add(tool.name);
356
+ }
357
+ return {
358
+ valid: errors.length === 0,
359
+ errors,
360
+ };
361
+ }
362
+ /**
363
+ * Main parser function - parse SKILL.md file
364
+ */
365
+ export function parseSkillFile(filePath) {
366
+ const absolutePath = resolve(filePath);
367
+ const content = readFileSync(absolutePath, 'utf-8');
368
+ return parseSkillContent(content, absolutePath);
369
+ }
370
+ /**
371
+ * Parse SKILL.md content from string
372
+ */
373
+ export function parseSkillContent(content, filePath) {
374
+ // Use gray-matter to split frontmatter and body
375
+ const { data: rawFrontmatter, content: body } = matter(content);
376
+ // Validate and transform frontmatter
377
+ let frontmatter;
378
+ try {
379
+ frontmatter = FrontmatterSchema.parse(rawFrontmatter);
380
+ }
381
+ catch (error) {
382
+ if (error instanceof z.ZodError) {
383
+ const messages = error.errors.map(e => `${e.path.join('.')}: ${e.message}`);
384
+ throw new Error(`Invalid frontmatter: ${messages.join('; ')}`);
385
+ }
386
+ throw error;
387
+ }
388
+ // Extract sections
389
+ const systemPrompt = parseSystemPrompt(body);
390
+ const instructions = parseInstructions(body);
391
+ const inputs = parseInputs(body);
392
+ const outputs = parseOutputs(body);
393
+ const tools = parseTools(body);
394
+ const examples = parseExamples(body);
395
+ // Build skill definition
396
+ const skill = {
397
+ metadata: {
398
+ name: frontmatter.name,
399
+ title: frontmatter.title || frontmatter.name,
400
+ description: frontmatter.description,
401
+ version: frontmatter.version,
402
+ author: frontmatter.author,
403
+ tags: frontmatter.tags || [],
404
+ license: frontmatter.license,
405
+ homepage: frontmatter.homepage,
406
+ modelRequirements: frontmatter.modelRequirements,
407
+ estimatedRuntime: frontmatter.estimatedRuntime,
408
+ channels: frontmatter.channels,
409
+ requiresAuth: frontmatter.requiresAuth,
410
+ costPerExecution: frontmatter.costPerExecution,
411
+ custom: frontmatter.custom,
412
+ },
413
+ systemPrompt,
414
+ instructions,
415
+ inputs,
416
+ outputs,
417
+ tools: tools.length > 0 ? tools : undefined,
418
+ examples,
419
+ body,
420
+ filepath: filePath,
421
+ rawFrontmatter: JSON.stringify(rawFrontmatter),
422
+ parsedAt: new Date(),
423
+ };
424
+ // Validate the skill
425
+ const validation = validateSkill(skill);
426
+ if (!validation.valid) {
427
+ throw new Error(`Skill validation failed:\n${validation.errors.join('\n')}`);
428
+ }
429
+ return skill;
430
+ }
431
+ /**
432
+ * Get skill name from file path
433
+ */
434
+ export function getSkillNameFromPath(filePath) {
435
+ return filePath.split('/').pop()?.replace(/\.md$/i, '') || 'unknown';
436
+ }
437
+ /**
438
+ * Extract metadata from SKILL.md without full parsing (lightweight)
439
+ */
440
+ export function extractMetadata(content) {
441
+ const { data } = matter(content);
442
+ return {
443
+ name: data.name || undefined,
444
+ description: data.description || undefined,
445
+ version: data.version || undefined,
446
+ author: data.author || undefined,
447
+ tags: data.tags || [],
448
+ };
449
+ }
450
+ /**
451
+ * Check if content looks like valid SKILL.md
452
+ */
453
+ export function isValidSkillFormat(content) {
454
+ const { data, content: body } = matter(content);
455
+ // Must have required frontmatter
456
+ if (!data.name || !data.description || !data.author || !data.version) {
457
+ return false;
458
+ }
459
+ // Must have some instruction content
460
+ return body.includes('## Instructions') || body.includes('# Instructions');
461
+ }
462
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * SkillKit Runtime Engine
3
+ * Execution engine that ties together parsing, configuration, and model interaction.
4
+ * Handles skill loading, model selection, execution, and tool calling.
5
+ */
6
+ import { EventEmitter } from 'events';
7
+ import { SkillDefinition, SkillExecutionResult, ExecutionOptions, BatchExecutionRequest, BatchExecutionResult, SkillRunnerOptions } from './types.js';
8
+ /**
9
+ * Main skill runner class
10
+ */
11
+ export declare class SkillRunner extends EventEmitter {
12
+ private config;
13
+ private options;
14
+ private executionCache;
15
+ constructor(options?: SkillRunnerOptions);
16
+ /**
17
+ * Load a skill from file or registry
18
+ */
19
+ loadSkill(skillPath: string): Promise<SkillDefinition>;
20
+ /**
21
+ * Download skill from ClawHub registry
22
+ */
23
+ private downloadSkill;
24
+ /**
25
+ * Execute a skill
26
+ */
27
+ executeSkill(skillPath: string, input: Record<string, unknown>, options?: ExecutionOptions): Promise<SkillExecutionResult>;
28
+ /**
29
+ * Execute skill with timeout protection
30
+ */
31
+ private executeWithTimeout;
32
+ /**
33
+ * Internal execution logic
34
+ */
35
+ private executeInternal;
36
+ /**
37
+ * Validate input against skill definition
38
+ */
39
+ private validateInput;
40
+ /**
41
+ * Build model configuration
42
+ */
43
+ private buildModelConfig;
44
+ /**
45
+ * Execute batch of skills
46
+ */
47
+ executeBatch(request: BatchExecutionRequest): Promise<BatchExecutionResult>;
48
+ /**
49
+ * Clear execution cache
50
+ */
51
+ clearCache(): void;
52
+ /**
53
+ * Get cache statistics
54
+ */
55
+ getCacheStats(): {
56
+ size: number;
57
+ entries: number;
58
+ };
59
+ }
60
+ /**
61
+ * Convenience function to execute a skill
62
+ */
63
+ export declare function executeSkill(skillPath: string, input: Record<string, unknown>, options?: ExecutionOptions): Promise<SkillExecutionResult>;
64
+ /**
65
+ * Convenience function for batch execution
66
+ */
67
+ export declare function executeBatch(request: BatchExecutionRequest): Promise<BatchExecutionResult>;
68
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/core/runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,OAAO,EACL,eAAe,EACf,oBAAoB,EAIpB,gBAAgB,EAIhB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAwXpB;;GAEG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,cAAc,CAA2C;gBAErD,OAAO,GAAE,kBAAuB;IAM5C;;OAEG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAiB5D;;OAEG;YACW,aAAa;IAmB3B;;OAEG;IACG,YAAY,CAChB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC;IA0DhC;;OAEG;YACW,kBAAkB;IAkBhC;;OAEG;YACW,eAAe;IA2D7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAyCjF;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,aAAa,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAMnD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CAG/B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAGhG"}