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,560 @@
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 { randomUUID } from 'crypto';
8
+ import { existsSync } from 'fs';
9
+ import { join } from 'path';
10
+ import { ModelProvider, } from './types.js';
11
+ import { parseSkillFile, parseSkillContent } from './parser.js';
12
+ import { getConfig } from './config.js';
13
+ /**
14
+ * Anthropic model adapter
15
+ */
16
+ class AnthropicAdapter {
17
+ constructor() {
18
+ this.name = ModelProvider.ANTHROPIC;
19
+ }
20
+ createRequest(skillDef, input, modelConfig, context) {
21
+ const tools = skillDef.tools?.map(tool => ({
22
+ name: tool.name,
23
+ description: tool.description,
24
+ input_schema: tool.inputSchema,
25
+ })) || [];
26
+ const userMessage = this.buildUserMessage(skillDef, input);
27
+ return {
28
+ model: modelConfig.model,
29
+ max_tokens: modelConfig.maxTokens || 4096,
30
+ temperature: modelConfig.temperature || 0.7,
31
+ system: skillDef.systemPrompt,
32
+ messages: [
33
+ {
34
+ role: 'user',
35
+ content: userMessage,
36
+ },
37
+ ],
38
+ ...(tools.length > 0 && { tools }),
39
+ stream: context.streaming || false,
40
+ };
41
+ }
42
+ buildUserMessage(skillDef, input) {
43
+ let message = skillDef.instructions + '\n\n';
44
+ message += '## Input Data\n';
45
+ message += JSON.stringify(input, null, 2);
46
+ return message;
47
+ }
48
+ async executeRequest(request) {
49
+ const config = getConfig();
50
+ const apiKey = config.getApiKey(ModelProvider.ANTHROPIC);
51
+ if (!apiKey) {
52
+ throw new Error('Anthropic API key not configured. Set it with: skillkit config set-key anthropic <your-api-key>');
53
+ }
54
+ const response = await fetch('https://api.anthropic.com/v1/messages', {
55
+ method: 'POST',
56
+ headers: {
57
+ 'Content-Type': 'application/json',
58
+ 'x-api-key': apiKey,
59
+ 'anthropic-version': '2023-06-01',
60
+ },
61
+ body: JSON.stringify(request),
62
+ });
63
+ if (!response.ok) {
64
+ const error = await response.text();
65
+ throw new Error(`Anthropic API error: ${response.status} - ${error}`);
66
+ }
67
+ return response.json();
68
+ }
69
+ async parseResponse(response) {
70
+ const resp = response;
71
+ if (resp.content && Array.isArray(resp.content)) {
72
+ return resp.content
73
+ .map((block) => (block.type === 'text' ? block.text : ''))
74
+ .join('\n');
75
+ }
76
+ return '';
77
+ }
78
+ supportsStreaming() {
79
+ return true;
80
+ }
81
+ supportsTools() {
82
+ return true;
83
+ }
84
+ }
85
+ /**
86
+ * OpenAI model adapter
87
+ */
88
+ class OpenAIAdapter {
89
+ constructor() {
90
+ this.name = ModelProvider.OPENAI;
91
+ }
92
+ createRequest(skillDef, input, modelConfig, context) {
93
+ const tools = skillDef.tools?.map(tool => ({
94
+ type: 'function',
95
+ function: {
96
+ name: tool.name,
97
+ description: tool.description,
98
+ parameters: tool.inputSchema,
99
+ },
100
+ })) || [];
101
+ const userMessage = this.buildUserMessage(skillDef, input);
102
+ return {
103
+ model: modelConfig.model,
104
+ max_tokens: modelConfig.maxTokens || 4096,
105
+ temperature: modelConfig.temperature || 0.7,
106
+ system: skillDef.systemPrompt,
107
+ messages: [
108
+ {
109
+ role: 'user',
110
+ content: userMessage,
111
+ },
112
+ ],
113
+ ...(tools.length > 0 && { tools }),
114
+ stream: context.streaming || false,
115
+ };
116
+ }
117
+ buildUserMessage(skillDef, input) {
118
+ let message = skillDef.instructions + '\n\n';
119
+ message += '## Input Data\n';
120
+ message += JSON.stringify(input, null, 2);
121
+ return message;
122
+ }
123
+ async executeRequest(request) {
124
+ const config = getConfig();
125
+ const apiKey = config.getApiKey(ModelProvider.OPENAI);
126
+ if (!apiKey) {
127
+ throw new Error('OpenAI API key not configured. Set it with: skillkit config set-key openai <your-api-key>');
128
+ }
129
+ const baseUrl = request.baseUrl || 'https://api.openai.com/v1';
130
+ const response = await fetch(`${baseUrl}/chat/completions`, {
131
+ method: 'POST',
132
+ headers: {
133
+ 'Content-Type': 'application/json',
134
+ 'Authorization': `Bearer ${apiKey}`,
135
+ },
136
+ body: JSON.stringify(request),
137
+ });
138
+ if (!response.ok) {
139
+ const error = await response.text();
140
+ throw new Error(`OpenAI API error: ${response.status} - ${error}`);
141
+ }
142
+ return response.json();
143
+ }
144
+ async parseResponse(response) {
145
+ const resp = response;
146
+ if (resp.choices && resp.choices[0]?.message?.content) {
147
+ return resp.choices[0].message.content;
148
+ }
149
+ return '';
150
+ }
151
+ supportsStreaming() {
152
+ return true;
153
+ }
154
+ supportsTools() {
155
+ return true;
156
+ }
157
+ }
158
+ /**
159
+ * Google model adapter (basic implementation)
160
+ */
161
+ class GoogleAdapter {
162
+ constructor() {
163
+ this.name = ModelProvider.GOOGLE;
164
+ }
165
+ createRequest(skillDef, input, modelConfig, context) {
166
+ const userMessage = this.buildUserMessage(skillDef, input);
167
+ return {
168
+ model: modelConfig.model,
169
+ generationConfig: {
170
+ maxOutputTokens: modelConfig.maxTokens || 2048,
171
+ temperature: modelConfig.temperature || 0.7,
172
+ },
173
+ system_instruction: {
174
+ parts: [{ text: skillDef.systemPrompt }],
175
+ },
176
+ contents: [
177
+ {
178
+ role: 'user',
179
+ parts: [{ text: userMessage }],
180
+ },
181
+ ],
182
+ };
183
+ }
184
+ buildUserMessage(skillDef, input) {
185
+ let message = skillDef.instructions + '\n\n';
186
+ message += '## Input Data\n';
187
+ message += JSON.stringify(input, null, 2);
188
+ return message;
189
+ }
190
+ async executeRequest(request) {
191
+ const config = getConfig();
192
+ const apiKey = config.getApiKey(ModelProvider.GOOGLE);
193
+ if (!apiKey) {
194
+ throw new Error('Google API key not configured. Set it with: skillkit config set-key google <your-api-key>');
195
+ }
196
+ const model = request.model || 'gemini-2.0-flash';
197
+ const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`, {
198
+ method: 'POST',
199
+ headers: {
200
+ 'Content-Type': 'application/json',
201
+ },
202
+ body: JSON.stringify(request),
203
+ });
204
+ if (!response.ok) {
205
+ const error = await response.text();
206
+ throw new Error(`Google API error: ${response.status} - ${error}`);
207
+ }
208
+ return response.json();
209
+ }
210
+ async parseResponse(response) {
211
+ const resp = response;
212
+ if (resp.candidates && resp.candidates[0]?.content?.parts?.[0]?.text) {
213
+ return resp.candidates[0].content.parts[0].text;
214
+ }
215
+ return '';
216
+ }
217
+ supportsStreaming() {
218
+ return true;
219
+ }
220
+ supportsTools() {
221
+ return false;
222
+ }
223
+ }
224
+ /**
225
+ * Local/Ollama adapter
226
+ */
227
+ class LocalAdapter {
228
+ constructor() {
229
+ this.name = ModelProvider.OLLAMA;
230
+ }
231
+ createRequest(skillDef, input, modelConfig, context) {
232
+ const userMessage = this.buildUserMessage(skillDef, input);
233
+ const prompt = `${skillDef.systemPrompt}\n\n${userMessage}`;
234
+ return {
235
+ model: modelConfig.model,
236
+ prompt,
237
+ stream: context.streaming || false,
238
+ temperature: modelConfig.temperature || 0.7,
239
+ };
240
+ }
241
+ buildUserMessage(skillDef, input) {
242
+ let message = skillDef.instructions + '\n\n';
243
+ message += '## Input Data\n';
244
+ message += JSON.stringify(input, null, 2);
245
+ return message;
246
+ }
247
+ async executeRequest(request) {
248
+ const baseUrl = request.baseUrl || 'http://localhost:11434';
249
+ const response = await fetch(`${baseUrl}/api/generate`, {
250
+ method: 'POST',
251
+ headers: {
252
+ 'Content-Type': 'application/json',
253
+ },
254
+ body: JSON.stringify(request),
255
+ });
256
+ if (!response.ok) {
257
+ throw new Error(`Local model error: ${response.status}`);
258
+ }
259
+ return response.text();
260
+ }
261
+ async parseResponse(response) {
262
+ const text = response;
263
+ // Parse NDJSON responses from Ollama
264
+ const lines = text.split('\n').filter(line => line.trim());
265
+ return lines
266
+ .map(line => {
267
+ try {
268
+ const obj = JSON.parse(line);
269
+ return obj.response || '';
270
+ }
271
+ catch {
272
+ return '';
273
+ }
274
+ })
275
+ .join('');
276
+ }
277
+ supportsStreaming() {
278
+ return true;
279
+ }
280
+ supportsTools() {
281
+ return false;
282
+ }
283
+ }
284
+ /**
285
+ * Provider adapter registry
286
+ */
287
+ const adapters = new Map([
288
+ [ModelProvider.ANTHROPIC, new AnthropicAdapter()],
289
+ [ModelProvider.OPENAI, new OpenAIAdapter()],
290
+ [ModelProvider.GOOGLE, new GoogleAdapter()],
291
+ [ModelProvider.OLLAMA, new LocalAdapter()],
292
+ [ModelProvider.LOCAL, new LocalAdapter()],
293
+ ]);
294
+ /**
295
+ * Get provider adapter
296
+ */
297
+ function getAdapter(provider) {
298
+ const adapter = adapters.get(provider);
299
+ if (!adapter) {
300
+ throw new Error(`Unsupported provider: ${provider}`);
301
+ }
302
+ return adapter;
303
+ }
304
+ /**
305
+ * Main skill runner class
306
+ */
307
+ export class SkillRunner extends EventEmitter {
308
+ constructor(options = {}) {
309
+ super();
310
+ this.executionCache = new Map();
311
+ this.options = options;
312
+ this.config = getConfig();
313
+ }
314
+ /**
315
+ * Load a skill from file or registry
316
+ */
317
+ async loadSkill(skillPath) {
318
+ // Try as direct file path first
319
+ if (existsSync(skillPath)) {
320
+ return parseSkillFile(skillPath);
321
+ }
322
+ // Try in skills directory
323
+ const skillsDir = this.config.getSkillsDirectory();
324
+ const skillFile = join(skillsDir, skillPath, 'SKILL.md');
325
+ if (existsSync(skillFile)) {
326
+ return parseSkillFile(skillFile);
327
+ }
328
+ // Try as registry ID (download from ClawHub)
329
+ return this.downloadSkill(skillPath);
330
+ }
331
+ /**
332
+ * Download skill from ClawHub registry
333
+ */
334
+ async downloadSkill(skillId) {
335
+ const registryUrl = this.config.getConfig().clawHubUrl;
336
+ const response = await fetch(`${registryUrl}/skills/${skillId}`);
337
+ if (!response.ok) {
338
+ throw new Error(`Skill not found: ${skillId}`);
339
+ }
340
+ const data = await response.json();
341
+ const skillResponse = await fetch(data.downloadUrl);
342
+ if (!skillResponse.ok) {
343
+ throw new Error(`Failed to download skill: ${skillId}`);
344
+ }
345
+ const content = await skillResponse.text();
346
+ return parseSkillContent(content, skillId);
347
+ }
348
+ /**
349
+ * Execute a skill
350
+ */
351
+ async executeSkill(skillPath, input, options = {}) {
352
+ const executionId = randomUUID();
353
+ const startTime = new Date();
354
+ try {
355
+ // Load skill definition
356
+ const skill = await this.loadSkill(skillPath);
357
+ // Validate input
358
+ this.validateInput(skill, input);
359
+ // Determine model and provider
360
+ const provider = options.provider || this.config.getDefaultProvider();
361
+ const modelConfig = this.buildModelConfig(provider, options);
362
+ // Create execution context
363
+ const context = {
364
+ executionId,
365
+ skill,
366
+ input,
367
+ modelConfig,
368
+ provider,
369
+ startTime,
370
+ timeout: options.timeout || this.config.getTimeout(),
371
+ streaming: options.streaming || false,
372
+ onChunk: options.onChunk,
373
+ metadata: options.metadata,
374
+ };
375
+ this.emit('execution:start', { executionId, skillName: skill.metadata.name });
376
+ // Execute with timeout
377
+ const result = await this.executeWithTimeout(context);
378
+ this.emit('execution:complete', { executionId, skillName: skill.metadata.name });
379
+ return result;
380
+ }
381
+ catch (error) {
382
+ const duration = Date.now() - startTime.getTime();
383
+ const result = {
384
+ success: false,
385
+ status: 'failed',
386
+ error: error instanceof Error ? error.message : String(error),
387
+ output: undefined,
388
+ outputs: {},
389
+ modelUsed: options.model || 'unknown',
390
+ duration,
391
+ skill: undefined,
392
+ input,
393
+ executedAt: startTime,
394
+ };
395
+ this.emit('execution:error', { executionId, error });
396
+ return result;
397
+ }
398
+ }
399
+ /**
400
+ * Execute skill with timeout protection
401
+ */
402
+ async executeWithTimeout(context) {
403
+ return new Promise((resolve, reject) => {
404
+ const timeoutHandle = setTimeout(() => {
405
+ reject(new Error(`Skill execution timeout (${context.timeout}ms)`));
406
+ }, context.timeout);
407
+ this.executeInternal(context)
408
+ .then(result => {
409
+ clearTimeout(timeoutHandle);
410
+ resolve(result);
411
+ })
412
+ .catch(error => {
413
+ clearTimeout(timeoutHandle);
414
+ reject(error);
415
+ });
416
+ });
417
+ }
418
+ /**
419
+ * Internal execution logic
420
+ */
421
+ async executeInternal(context) {
422
+ const startTime = Date.now();
423
+ const adapter = getAdapter(context.provider);
424
+ try {
425
+ // Build request for model
426
+ const request = adapter.createRequest(context.skill, context.input, context.modelConfig, context);
427
+ // Execute request
428
+ const response = await adapter.executeRequest(request);
429
+ // Parse response
430
+ const output = await adapter.parseResponse(response);
431
+ // Try to parse as JSON
432
+ let outputObj = {};
433
+ try {
434
+ outputObj = JSON.parse(output);
435
+ }
436
+ catch {
437
+ outputObj = { result: output };
438
+ }
439
+ const duration = Date.now() - startTime;
440
+ return {
441
+ success: true,
442
+ status: 'completed',
443
+ output: outputObj,
444
+ outputs: outputObj,
445
+ modelUsed: context.modelConfig.model,
446
+ duration,
447
+ rawResponse: output,
448
+ skill: context.skill,
449
+ input: context.input,
450
+ executedAt: context.startTime,
451
+ };
452
+ }
453
+ catch (error) {
454
+ const duration = Date.now() - startTime;
455
+ return {
456
+ success: false,
457
+ status: 'failed',
458
+ error: error instanceof Error ? error.message : String(error),
459
+ output: undefined,
460
+ outputs: {},
461
+ modelUsed: context.modelConfig.model,
462
+ duration,
463
+ skill: context.skill,
464
+ input: context.input,
465
+ executedAt: context.startTime,
466
+ };
467
+ }
468
+ }
469
+ /**
470
+ * Validate input against skill definition
471
+ */
472
+ validateInput(skill, input) {
473
+ for (const inputDef of skill.inputs) {
474
+ if (inputDef.required && !(inputDef.name in input)) {
475
+ throw new Error(`Required input missing: ${inputDef.name}`);
476
+ }
477
+ }
478
+ }
479
+ /**
480
+ * Build model configuration
481
+ */
482
+ buildModelConfig(provider, options) {
483
+ const config = this.config.getModelConfig(provider);
484
+ return {
485
+ ...config,
486
+ ...(options.modelConfig || {}),
487
+ maxTokens: options.maxTokens || config.maxTokens || this.config.getMaxTokens(),
488
+ };
489
+ }
490
+ /**
491
+ * Execute batch of skills
492
+ */
493
+ async executeBatch(request) {
494
+ const startTime = Date.now();
495
+ const results = [];
496
+ let succeeded = 0;
497
+ let failed = 0;
498
+ for (let i = 0; i < request.inputs.length; i++) {
499
+ try {
500
+ const result = await this.executeSkill(request.skillPath, request.inputs[i], request.options);
501
+ if (result.success) {
502
+ succeeded++;
503
+ }
504
+ else {
505
+ failed++;
506
+ }
507
+ results.push(result);
508
+ }
509
+ catch (error) {
510
+ failed++;
511
+ results.push({
512
+ id: randomUUID(),
513
+ input: request.inputs[i],
514
+ error: error instanceof Error ? error : String(error),
515
+ stack: error instanceof Error ? error.stack : undefined,
516
+ });
517
+ if (!request.continueOnError) {
518
+ break;
519
+ }
520
+ }
521
+ }
522
+ return {
523
+ total: request.inputs.length,
524
+ succeeded,
525
+ failed,
526
+ results,
527
+ duration: Date.now() - startTime,
528
+ };
529
+ }
530
+ /**
531
+ * Clear execution cache
532
+ */
533
+ clearCache() {
534
+ this.executionCache.clear();
535
+ }
536
+ /**
537
+ * Get cache statistics
538
+ */
539
+ getCacheStats() {
540
+ return {
541
+ size: this.executionCache.size,
542
+ entries: this.executionCache.size,
543
+ };
544
+ }
545
+ }
546
+ /**
547
+ * Convenience function to execute a skill
548
+ */
549
+ export async function executeSkill(skillPath, input, options = {}) {
550
+ const runner = new SkillRunner();
551
+ return runner.executeSkill(skillPath, input, options);
552
+ }
553
+ /**
554
+ * Convenience function for batch execution
555
+ */
556
+ export async function executeBatch(request) {
557
+ const runner = new SkillRunner();
558
+ return runner.executeBatch(request);
559
+ }
560
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/core/runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,UAAU,EAAgB,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAW,MAAM,MAAM,CAAC;AACrC,OAAO,EAOL,aAAa,GAMd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,SAAS,EAAiB,MAAM,aAAa,CAAC;AAmBvD;;GAEG;AACH,MAAM,gBAAgB;IAAtB;QACE,SAAI,GAAG,aAAa,CAAC,SAAS,CAAC;IAkFjC,CAAC;IAhFC,aAAa,CACX,QAAyB,EACzB,KAA8B,EAC9B,WAAwB,EACxB,OAAyB;QAEzB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,WAAW;SAC/B,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE3D,OAAO;YACL,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,UAAU,EAAE,WAAW,CAAC,SAAS,IAAI,IAAI;YACzC,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,GAAG;YAC3C,MAAM,EAAE,QAAQ,CAAC,YAAY;YAC7B,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,WAAW;iBACrB;aACF;YACD,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAClC,MAAM,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;SACnC,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,QAAyB,EAAE,KAA8B;QAChF,IAAI,OAAO,GAAG,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC;QAC7C,OAAO,IAAI,iBAAiB,CAAC;QAC7B,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAgB;QACnC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAEzD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,iGAAiG,CAAC,CAAC;QACrH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,uCAAuC,EAAE;YACpE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,MAAM;gBACnB,mBAAmB,EAAE,YAAY;aAClC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,MAAM,KAAK,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAiB;QACnC,MAAM,IAAI,GAAG,QAAe,CAAC;QAC7B,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC,OAAO;iBAChB,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAC9D,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;GAEG;AACH,MAAM,aAAa;IAAnB;QACE,SAAI,GAAG,aAAa,CAAC,MAAM,CAAC;IAmF9B,CAAC;IAjFC,aAAa,CACX,QAAyB,EACzB,KAA8B,EAC9B,WAAwB,EACxB,OAAyB;QAEzB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,EAAE,UAAmB;YACzB,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,UAAU,EAAE,IAAI,CAAC,WAAW;aAC7B;SACF,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE3D,OAAO;YACL,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,UAAU,EAAE,WAAW,CAAC,SAAS,IAAI,IAAI;YACzC,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,GAAG;YAC3C,MAAM,EAAE,QAAQ,CAAC,YAAY;YAC7B,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,WAAW;iBACrB;aACF;YACD,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAClC,MAAM,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;SACnC,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,QAAyB,EAAE,KAA8B;QAChF,IAAI,OAAO,GAAG,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC;QAC7C,OAAO,IAAI,iBAAiB,CAAC;QAC7B,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAgB;QACnC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,2FAA2F,CAAC,CAAC;QAC/G,CAAC;QAED,MAAM,OAAO,GAAI,OAAe,CAAC,OAAO,IAAI,2BAA2B,CAAC;QACxE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,mBAAmB,EAAE;YAC1D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,MAAM,EAAE;aACpC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,MAAM,KAAK,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAiB;QACnC,MAAM,IAAI,GAAG,QAAe,CAAC;QAC7B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QACzC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;GAEG;AACH,MAAM,aAAa;IAAnB;QACE,SAAI,GAAG,aAAa,CAAC,MAAM,CAAC;IA8E9B,CAAC;IA5EC,aAAa,CACX,QAAyB,EACzB,KAA8B,EAC9B,WAAwB,EACxB,OAAyB;QAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE3D,OAAO;YACL,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,gBAAgB,EAAE;gBAChB,eAAe,EAAE,WAAW,CAAC,SAAS,IAAI,IAAI;gBAC9C,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,GAAG;aAC5C;YACD,kBAAkB,EAAE;gBAClB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC;aACzC;YACD,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;iBAC/B;aACF;SACF,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,QAAyB,EAAE,KAA8B;QAChF,IAAI,OAAO,GAAG,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC;QAC7C,OAAO,IAAI,iBAAiB,CAAC;QAC7B,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAgB;QACnC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,2FAA2F,CAAC,CAAC;QAC/G,CAAC;QAED,MAAM,KAAK,GAAI,OAAe,CAAC,KAAK,IAAI,kBAAkB,CAAC;QAC3D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,2DAA2D,KAAK,wBAAwB,MAAM,EAAE,EAChG;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,MAAM,KAAK,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAiB;QACnC,MAAM,IAAI,GAAG,QAAe,CAAC;QAC7B,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;YACrE,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa;QACX,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED;;GAEG;AACH,MAAM,YAAY;IAAlB;QACE,SAAI,GAAG,aAAa,CAAC,MAAM,CAAC;IAkE9B,CAAC;IAhEC,aAAa,CACX,QAAyB,EACzB,KAA8B,EAC9B,WAAwB,EACxB,OAAyB;QAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,OAAO,WAAW,EAAE,CAAC;QAE5D,OAAO;YACL,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;YAClC,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,GAAG;SAC5C,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,QAAyB,EAAE,KAA8B;QAChF,IAAI,OAAO,GAAG,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC;QAC7C,OAAO,IAAI,iBAAiB,CAAC;QAC7B,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAgB;QACnC,MAAM,OAAO,GAAI,OAAe,CAAC,OAAO,IAAI,wBAAwB,CAAC;QACrE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,eAAe,EAAE;YACtD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAiB;QACnC,MAAM,IAAI,GAAG,QAAkB,CAAC;QAChC,qCAAqC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,OAAO,KAAK;aACT,GAAG,CAAC,IAAI,CAAC,EAAE;YACV,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,OAAO,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;aACD,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa;QACX,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED;;GAEG;AACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAsC;IAC5D,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,gBAAgB,EAAE,CAAC;IACjD,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;IAC3C,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;IAC3C,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;IAC1C,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,YAAY,EAAE,CAAC;CAC1C,CAAC,CAAC;AAEH;;GAEG;AACH,SAAS,UAAU,CAAC,QAAuB;IACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,YAAY;IAK3C,YAAY,UAA8B,EAAE;QAC1C,KAAK,EAAE,CAAC;QAHF,mBAAc,GAAG,IAAI,GAAG,EAAgC,CAAC;QAI/D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,SAAiB;QAC/B,gCAAgC;QAChC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;QAED,0BAA0B;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACzD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;QAED,6CAA6C;QAC7C,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,OAAe;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC;QACvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,WAAW,OAAO,EAAE,CAAC,CAAC;QAEjE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6B,CAAC;QAC9D,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEpD,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;QAC3C,OAAO,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,SAAiB,EACjB,KAA8B,EAC9B,UAA4B,EAAE;QAE9B,MAAM,WAAW,GAAG,UAAU,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,wBAAwB;YACxB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAE9C,iBAAiB;YACjB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAEjC,+BAA+B;YAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;YACtE,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAE7D,2BAA2B;YAC3B,MAAM,OAAO,GAAqB;gBAChC,WAAW;gBACX,KAAK;gBACL,KAAK;gBACL,WAAW;gBACX,QAAQ;gBACR,SAAS;gBACT,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;gBACpD,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;gBACrC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC;YAEF,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAE9E,uBAAuB;YACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAEtD,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAEjF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;YAClD,MAAM,MAAM,GAAyB;gBACnC,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;gBACrC,QAAQ;gBACR,KAAK,EAAE,SAAgB;gBACvB,KAAK;gBACL,UAAU,EAAE,SAAS;aACtB,CAAC;YAEF,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;YAErD,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAAC,OAAyB;QACxD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;gBACpC,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC;YACtE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAEpB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;iBAC1B,IAAI,CAAC,MAAM,CAAC,EAAE;gBACb,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC5B,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC;iBACD,KAAK,CAAC,KAAK,CAAC,EAAE;gBACb,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC5B,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAAC,OAAyB;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE7C,IAAI,CAAC;YACH,0BAA0B;YAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CACnC,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,WAAW,EACnB,OAAO,CACR,CAAC;YAEF,kBAAkB;YAClB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAEvD,iBAAiB;YACjB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAErD,uBAAuB;YACvB,IAAI,SAAS,GAA4B,EAAE,CAAC;YAC5C,IAAI,CAAC;gBACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YACjC,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAExC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,SAAS;gBAClB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK;gBACpC,QAAQ;gBACR,WAAW,EAAE,MAAM;gBACnB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,UAAU,EAAE,OAAO,CAAC,SAAS;aAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAExC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK;gBACpC,QAAQ;gBACR,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,UAAU,EAAE,OAAO,CAAC,SAAS;aAC9B,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,KAAsB,EAAE,KAA8B;QAC1E,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACpC,IAAI,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,QAAuB,EAAE,OAAyB;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAEpD,OAAO;YACL,GAAG,MAAM;YACT,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;YAC9B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;SAC/E,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,OAA8B;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAmD,EAAE,CAAC;QACnE,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;gBAE9F,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,SAAS,EAAE,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,MAAM,EAAE,CAAC;gBACX,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,EAAE,CAAC;gBACT,OAAO,CAAC,IAAI,CAAC;oBACX,EAAE,EAAE,UAAU,EAAE;oBAChB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;oBACxB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;oBACrD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;iBACxD,CAAC,CAAC;gBAEH,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;oBAC7B,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;YAC5B,SAAS;YACT,MAAM;YACN,OAAO;YACP,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACjC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;YAC9B,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;SAClC,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAiB,EACjB,KAA8B,EAC9B,UAA4B,EAAE;IAE9B,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IACjC,OAAO,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA8B;IAC/D,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IACjC,OAAO,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}