@skillsmith/cli 0.1.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 (110) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/src/commands/author.d.ts +33 -0
  3. package/dist/src/commands/author.d.ts.map +1 -0
  4. package/dist/src/commands/author.js +337 -0
  5. package/dist/src/commands/author.js.map +1 -0
  6. package/dist/src/commands/index.d.ts +9 -0
  7. package/dist/src/commands/index.d.ts.map +1 -0
  8. package/dist/src/commands/index.js +12 -0
  9. package/dist/src/commands/index.js.map +1 -0
  10. package/dist/src/commands/manage.d.ts +37 -0
  11. package/dist/src/commands/manage.d.ts.map +1 -0
  12. package/dist/src/commands/manage.js +308 -0
  13. package/dist/src/commands/manage.js.map +1 -0
  14. package/dist/src/commands/search.d.ts +12 -0
  15. package/dist/src/commands/search.d.ts.map +1 -0
  16. package/dist/src/commands/search.js +316 -0
  17. package/dist/src/commands/search.js.map +1 -0
  18. package/dist/src/config.d.ts +19 -0
  19. package/dist/src/config.d.ts.map +1 -0
  20. package/dist/src/config.js +21 -0
  21. package/dist/src/config.js.map +1 -0
  22. package/dist/src/import.d.ts +29 -0
  23. package/dist/src/import.d.ts.map +1 -0
  24. package/dist/src/import.js +255 -0
  25. package/dist/src/import.js.map +1 -0
  26. package/dist/src/index.d.ts +16 -0
  27. package/dist/src/index.d.ts.map +1 -0
  28. package/dist/src/index.js +65 -0
  29. package/dist/src/index.js.map +1 -0
  30. package/dist/src/templates/index.d.ts +8 -0
  31. package/dist/src/templates/index.d.ts.map +1 -0
  32. package/dist/src/templates/index.js +8 -0
  33. package/dist/src/templates/index.js.map +1 -0
  34. package/dist/src/templates/readme.md.template.d.ts +8 -0
  35. package/dist/src/templates/readme.md.template.d.ts.map +1 -0
  36. package/dist/src/templates/readme.md.template.js +86 -0
  37. package/dist/src/templates/readme.md.template.js.map +1 -0
  38. package/dist/src/templates/skill.md.template.d.ts +8 -0
  39. package/dist/src/templates/skill.md.template.d.ts.map +1 -0
  40. package/dist/src/templates/skill.md.template.js +99 -0
  41. package/dist/src/templates/skill.md.template.js.map +1 -0
  42. package/dist/src/utils/license.d.ts +82 -0
  43. package/dist/src/utils/license.d.ts.map +1 -0
  44. package/dist/src/utils/license.js +282 -0
  45. package/dist/src/utils/license.js.map +1 -0
  46. package/dist/src/utils/license.test.d.ts +7 -0
  47. package/dist/src/utils/license.test.d.ts.map +1 -0
  48. package/dist/src/utils/license.test.js +303 -0
  49. package/dist/src/utils/license.test.js.map +1 -0
  50. package/dist/src/utils/sanitize.d.ts +30 -0
  51. package/dist/src/utils/sanitize.d.ts.map +1 -0
  52. package/dist/src/utils/sanitize.js +45 -0
  53. package/dist/src/utils/sanitize.js.map +1 -0
  54. package/dist/tests/author.test.d.ts +5 -0
  55. package/dist/tests/author.test.d.ts.map +1 -0
  56. package/dist/tests/author.test.js +149 -0
  57. package/dist/tests/author.test.js.map +1 -0
  58. package/dist/tests/e2e/author.e2e.test.d.ts +9 -0
  59. package/dist/tests/e2e/author.e2e.test.d.ts.map +1 -0
  60. package/dist/tests/e2e/author.e2e.test.js +346 -0
  61. package/dist/tests/e2e/author.e2e.test.js.map +1 -0
  62. package/dist/tests/e2e/import.e2e.test.d.ts +10 -0
  63. package/dist/tests/e2e/import.e2e.test.d.ts.map +1 -0
  64. package/dist/tests/e2e/import.e2e.test.js +213 -0
  65. package/dist/tests/e2e/import.e2e.test.js.map +1 -0
  66. package/dist/tests/e2e/manage.e2e.test.d.ts +9 -0
  67. package/dist/tests/e2e/manage.e2e.test.d.ts.map +1 -0
  68. package/dist/tests/e2e/manage.e2e.test.js +277 -0
  69. package/dist/tests/e2e/manage.e2e.test.js.map +1 -0
  70. package/dist/tests/e2e/search.e2e.test.d.ts +10 -0
  71. package/dist/tests/e2e/search.e2e.test.d.ts.map +1 -0
  72. package/dist/tests/e2e/search.e2e.test.js +267 -0
  73. package/dist/tests/e2e/search.e2e.test.js.map +1 -0
  74. package/dist/tests/e2e/test-config.d.ts +39 -0
  75. package/dist/tests/e2e/test-config.d.ts.map +1 -0
  76. package/dist/tests/e2e/test-config.js +44 -0
  77. package/dist/tests/e2e/test-config.js.map +1 -0
  78. package/dist/tests/e2e/utils/baseline-collector.d.ts +107 -0
  79. package/dist/tests/e2e/utils/baseline-collector.d.ts.map +1 -0
  80. package/dist/tests/e2e/utils/baseline-collector.js +211 -0
  81. package/dist/tests/e2e/utils/baseline-collector.js.map +1 -0
  82. package/dist/tests/e2e/utils/hardcoded-detector.d.ts +46 -0
  83. package/dist/tests/e2e/utils/hardcoded-detector.d.ts.map +1 -0
  84. package/dist/tests/e2e/utils/hardcoded-detector.js +197 -0
  85. package/dist/tests/e2e/utils/hardcoded-detector.js.map +1 -0
  86. package/dist/tests/e2e/utils/index.d.ts +8 -0
  87. package/dist/tests/e2e/utils/index.d.ts.map +1 -0
  88. package/dist/tests/e2e/utils/index.js +8 -0
  89. package/dist/tests/e2e/utils/index.js.map +1 -0
  90. package/dist/tests/e2e/utils/linear-reporter.d.ts +60 -0
  91. package/dist/tests/e2e/utils/linear-reporter.d.ts.map +1 -0
  92. package/dist/tests/e2e/utils/linear-reporter.js +223 -0
  93. package/dist/tests/e2e/utils/linear-reporter.js.map +1 -0
  94. package/dist/tests/import.test.d.ts +5 -0
  95. package/dist/tests/import.test.d.ts.map +1 -0
  96. package/dist/tests/import.test.js +11 -0
  97. package/dist/tests/import.test.js.map +1 -0
  98. package/dist/tests/manage.test.d.ts +5 -0
  99. package/dist/tests/manage.test.d.ts.map +1 -0
  100. package/dist/tests/manage.test.js +135 -0
  101. package/dist/tests/manage.test.js.map +1 -0
  102. package/dist/tests/search.test.d.ts +5 -0
  103. package/dist/tests/search.test.d.ts.map +1 -0
  104. package/dist/tests/search.test.js +91 -0
  105. package/dist/tests/search.test.js.map +1 -0
  106. package/dist/vitest.config.d.ts +3 -0
  107. package/dist/vitest.config.d.ts.map +1 -0
  108. package/dist/vitest.config.js +9 -0
  109. package/dist/vitest.config.js.map +1 -0
  110. package/package.json +62 -0
@@ -0,0 +1,337 @@
1
+ /**
2
+ * SMI-746: Skill Authoring Commands
3
+ *
4
+ * Provides CLI commands for creating, validating, and publishing skills.
5
+ */
6
+ import { Command } from 'commander';
7
+ import { input, confirm, select } from '@inquirer/prompts';
8
+ import chalk from 'chalk';
9
+ import ora from 'ora';
10
+ import { mkdir, writeFile, readFile, stat } from 'fs/promises';
11
+ import { join, resolve } from 'path';
12
+ import { createHash } from 'crypto';
13
+ import { SkillParser } from '@skillsmith/core';
14
+ import { SKILL_MD_TEMPLATE, README_MD_TEMPLATE } from '../templates/index.js';
15
+ import { sanitizeError } from '../utils/sanitize.js';
16
+ /**
17
+ * Initialize a new skill directory
18
+ */
19
+ async function initSkill(name, targetPath) {
20
+ // Interactive prompts if name not provided
21
+ const skillName = name ||
22
+ (await input({
23
+ message: 'Skill name:',
24
+ validate: (value) => {
25
+ if (!value.trim())
26
+ return 'Name is required';
27
+ if (!/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(value)) {
28
+ return 'Name must start with a letter and contain only letters, numbers, hyphens, and underscores';
29
+ }
30
+ return true;
31
+ },
32
+ }));
33
+ const description = await input({
34
+ message: 'Description:',
35
+ default: `A Claude skill for ${skillName}`,
36
+ });
37
+ const author = await input({
38
+ message: 'Author:',
39
+ default: process.env['USER'] || 'author',
40
+ });
41
+ const category = await select({
42
+ message: 'Category:',
43
+ choices: [
44
+ { name: 'Development', value: 'development' },
45
+ { name: 'Productivity', value: 'productivity' },
46
+ { name: 'Communication', value: 'communication' },
47
+ { name: 'Data', value: 'data' },
48
+ { name: 'Security', value: 'security' },
49
+ { name: 'Other', value: 'other' },
50
+ ],
51
+ });
52
+ const skillDir = resolve(targetPath, skillName);
53
+ // Check if directory already exists
54
+ try {
55
+ await stat(skillDir);
56
+ const overwrite = await confirm({
57
+ message: `Directory ${skillDir} already exists. Overwrite?`,
58
+ default: false,
59
+ });
60
+ if (!overwrite) {
61
+ console.log(chalk.yellow('Initialization cancelled'));
62
+ return;
63
+ }
64
+ }
65
+ catch {
66
+ // Directory doesn't exist, continue
67
+ }
68
+ const spinner = ora('Creating skill structure...').start();
69
+ try {
70
+ // Create directory structure
71
+ await mkdir(skillDir, { recursive: true });
72
+ await mkdir(join(skillDir, 'scripts'), { recursive: true });
73
+ await mkdir(join(skillDir, 'resources'), { recursive: true });
74
+ // Generate SKILL.md from template
75
+ const skillMdContent = SKILL_MD_TEMPLATE.replace(/\{\{name\}\}/g, skillName)
76
+ .replace(/\{\{description\}\}/g, description)
77
+ .replace(/\{\{author\}\}/g, author)
78
+ .replace(/\{\{category\}\}/g, category)
79
+ .replace(/\{\{date\}\}/g, new Date().toISOString().split('T')[0] || '');
80
+ await writeFile(join(skillDir, 'SKILL.md'), skillMdContent, 'utf-8');
81
+ // Generate README.md from template
82
+ const readmeContent = README_MD_TEMPLATE.replace(/\{\{name\}\}/g, skillName).replace(/\{\{description\}\}/g, description);
83
+ await writeFile(join(skillDir, 'README.md'), readmeContent, 'utf-8');
84
+ // Create placeholder script
85
+ const placeholderScript = `#!/usr/bin/env node
86
+ /**
87
+ * ${skillName} - Example Script
88
+ *
89
+ * Add your skill's automation scripts here.
90
+ */
91
+
92
+ console.log('${skillName} script executed');
93
+ `;
94
+ await writeFile(join(skillDir, 'scripts', 'example.js'), placeholderScript, 'utf-8');
95
+ // Create .gitignore
96
+ const gitignore = `# Dependencies
97
+ node_modules/
98
+
99
+ # Build output
100
+ dist/
101
+
102
+ # Environment
103
+ .env
104
+ .env.local
105
+
106
+ # OS files
107
+ .DS_Store
108
+ Thumbs.db
109
+ `;
110
+ await writeFile(join(skillDir, '.gitignore'), gitignore, 'utf-8');
111
+ spinner.succeed(`Created skill at ${skillDir}`);
112
+ console.log(chalk.bold('\nNext steps:'));
113
+ console.log(chalk.dim(` 1. cd ${skillDir}`));
114
+ console.log(chalk.dim(' 2. Edit SKILL.md to customize your skill'));
115
+ console.log(chalk.dim(' 3. Add scripts to the scripts/ directory'));
116
+ console.log(chalk.dim(' 4. Run skillsmith validate to check your skill'));
117
+ console.log(chalk.dim(' 5. Run skillsmith publish to prepare for sharing'));
118
+ console.log();
119
+ }
120
+ catch (error) {
121
+ spinner.fail(`Failed to create skill: ${sanitizeError(error)}`);
122
+ throw error;
123
+ }
124
+ }
125
+ /**
126
+ * Pretty print validation errors and warnings
127
+ */
128
+ function printValidationResult(result, filePath) {
129
+ console.log(chalk.bold(`\nValidation Result for ${filePath}:\n`));
130
+ if (result.valid) {
131
+ console.log(chalk.green.bold(' VALID'));
132
+ }
133
+ else {
134
+ console.log(chalk.red.bold(' INVALID'));
135
+ }
136
+ if (result.errors.length > 0) {
137
+ console.log(chalk.red.bold('\nErrors:'));
138
+ for (const error of result.errors) {
139
+ console.log(chalk.red(` - ${error}`));
140
+ }
141
+ }
142
+ if (result.warnings.length > 0) {
143
+ console.log(chalk.yellow.bold('\nWarnings:'));
144
+ for (const warning of result.warnings) {
145
+ console.log(chalk.yellow(` - ${warning}`));
146
+ }
147
+ }
148
+ console.log();
149
+ }
150
+ /**
151
+ * Validate a local SKILL.md file
152
+ */
153
+ async function validateSkill(skillPath) {
154
+ const spinner = ora('Validating skill...').start();
155
+ try {
156
+ // Resolve path
157
+ let filePath = resolve(skillPath);
158
+ // Check if it's a directory, look for SKILL.md
159
+ try {
160
+ const stats = await stat(filePath);
161
+ if (stats.isDirectory()) {
162
+ filePath = join(filePath, 'SKILL.md');
163
+ }
164
+ }
165
+ catch {
166
+ // If path doesn't exist, try adding SKILL.md
167
+ if (!filePath.endsWith('.md')) {
168
+ filePath = join(filePath, 'SKILL.md');
169
+ }
170
+ }
171
+ // Read file
172
+ const content = await readFile(filePath, 'utf-8');
173
+ // Parse and validate
174
+ const parser = new SkillParser({ requireName: true });
175
+ const { validation, metadata, frontmatter } = parser.parseWithValidation(content);
176
+ spinner.stop();
177
+ printValidationResult(validation, filePath);
178
+ if (metadata) {
179
+ console.log(chalk.bold('Parsed Metadata:'));
180
+ console.log(chalk.dim(` Name: ${metadata.name}`));
181
+ console.log(chalk.dim(` Description: ${metadata.description || 'N/A'}`));
182
+ console.log(chalk.dim(` Author: ${metadata.author || 'N/A'}`));
183
+ console.log(chalk.dim(` Version: ${metadata.version || 'N/A'}`));
184
+ console.log(chalk.dim(` Tags: ${metadata.tags.join(', ') || 'None'}`));
185
+ console.log(chalk.dim(` Trust Tier: ${parser.inferTrustTier(metadata)}`));
186
+ console.log();
187
+ }
188
+ if (frontmatter) {
189
+ console.log(chalk.bold('Frontmatter Fields:'));
190
+ for (const [key, value] of Object.entries(frontmatter)) {
191
+ if (value !== undefined && value !== null) {
192
+ const displayValue = Array.isArray(value) ? value.join(', ') : String(value);
193
+ console.log(chalk.dim(` ${key}: ${displayValue}`));
194
+ }
195
+ }
196
+ console.log();
197
+ }
198
+ return validation.valid;
199
+ }
200
+ catch (error) {
201
+ spinner.fail(`Validation failed: ${sanitizeError(error)}`);
202
+ return false;
203
+ }
204
+ }
205
+ /**
206
+ * Prepare skill for publishing
207
+ * @returns true if publishing succeeded, false if validation failed
208
+ */
209
+ async function publishSkill(skillPath) {
210
+ const spinner = ora('Preparing skill for publishing...').start();
211
+ try {
212
+ // Resolve path
213
+ let dirPath = resolve(skillPath || '.');
214
+ // Check if it's a file, get directory
215
+ try {
216
+ const stats = await stat(dirPath);
217
+ if (!stats.isDirectory()) {
218
+ dirPath = join(dirPath, '..');
219
+ }
220
+ }
221
+ catch {
222
+ // Path doesn't exist
223
+ spinner.fail(`Directory not found: ${dirPath}`);
224
+ return false;
225
+ }
226
+ const skillMdPath = join(dirPath, 'SKILL.md');
227
+ // Validate first
228
+ spinner.text = 'Validating skill...';
229
+ const content = await readFile(skillMdPath, 'utf-8');
230
+ const parser = new SkillParser({ requireName: true });
231
+ const { validation, metadata } = parser.parseWithValidation(content);
232
+ if (!validation.valid) {
233
+ spinner.fail('Skill validation failed');
234
+ printValidationResult(validation, skillMdPath);
235
+ return false;
236
+ }
237
+ if (!metadata) {
238
+ spinner.fail('Could not parse skill metadata');
239
+ return false;
240
+ }
241
+ // Generate checksum
242
+ spinner.text = 'Generating checksum...';
243
+ const checksum = createHash('sha256').update(content).digest('hex');
244
+ // Create publish info
245
+ const publishInfo = {
246
+ name: metadata.name,
247
+ version: metadata.version || '1.0.0',
248
+ checksum,
249
+ publishedAt: new Date().toISOString(),
250
+ trustTier: parser.inferTrustTier(metadata),
251
+ };
252
+ // Write publish manifest
253
+ const manifestPath = join(dirPath, '.skillsmith-publish.json');
254
+ await writeFile(manifestPath, JSON.stringify(publishInfo, null, 2), 'utf-8');
255
+ spinner.succeed('Skill prepared for publishing');
256
+ console.log(chalk.bold('\nPublish Information:'));
257
+ console.log(chalk.dim(` Name: ${publishInfo.name}`));
258
+ console.log(chalk.dim(` Version: ${publishInfo.version}`));
259
+ console.log(chalk.dim(` Checksum: ${publishInfo.checksum.slice(0, 16)}...`));
260
+ console.log(chalk.dim(` Trust Tier: ${publishInfo.trustTier}`));
261
+ console.log();
262
+ console.log(chalk.bold('To share this skill:'));
263
+ console.log(chalk.cyan('\n Option 1: GitHub'));
264
+ console.log(chalk.dim(' 1. Push to a GitHub repository'));
265
+ console.log(chalk.dim(' 2. Add topic "claude-skill" to the repository'));
266
+ console.log(chalk.dim(' 3. The skill will be automatically discovered'));
267
+ console.log(chalk.cyan('\n Option 2: Manual Installation'));
268
+ console.log(chalk.dim(` 1. Share the ${dirPath} directory`));
269
+ console.log(chalk.dim(' 2. Users can copy to ~/.claude/skills/'));
270
+ console.log(chalk.cyan('\n Option 3: Archive'));
271
+ console.log(chalk.dim(` 1. Create archive: tar -czf ${metadata.name}.tar.gz ${dirPath}`));
272
+ console.log(chalk.dim(' 2. Share the archive'));
273
+ console.log();
274
+ return true;
275
+ }
276
+ catch (error) {
277
+ spinner.fail(`Publishing failed: ${sanitizeError(error)}`);
278
+ return false;
279
+ }
280
+ }
281
+ /**
282
+ * Create init command
283
+ */
284
+ export function createInitCommand() {
285
+ return new Command('init')
286
+ .description('Initialize a new skill directory')
287
+ .argument('[name]', 'Skill name')
288
+ .option('-p, --path <path>', 'Target directory', '.')
289
+ .action(async (name, opts) => {
290
+ const targetPath = opts['path'] || '.';
291
+ try {
292
+ await initSkill(name, targetPath);
293
+ }
294
+ catch (error) {
295
+ console.error(chalk.red('Error initializing skill:'), sanitizeError(error));
296
+ process.exit(1);
297
+ }
298
+ });
299
+ }
300
+ /**
301
+ * Create validate command
302
+ */
303
+ export function createValidateCommand() {
304
+ return new Command('validate')
305
+ .description('Validate a local SKILL.md file')
306
+ .argument('[path]', 'Path to SKILL.md or skill directory', '.')
307
+ .action(async (skillPath) => {
308
+ try {
309
+ const valid = await validateSkill(skillPath);
310
+ process.exit(valid ? 0 : 1);
311
+ }
312
+ catch (error) {
313
+ console.error(chalk.red('Error validating skill:'), sanitizeError(error));
314
+ process.exit(1);
315
+ }
316
+ });
317
+ }
318
+ /**
319
+ * Create publish command
320
+ */
321
+ export function createPublishCommand() {
322
+ return new Command('publish')
323
+ .description('Prepare skill for sharing')
324
+ .argument('[path]', 'Path to skill directory', '.')
325
+ .action(async (skillPath) => {
326
+ try {
327
+ const success = await publishSkill(skillPath);
328
+ process.exit(success ? 0 : 1);
329
+ }
330
+ catch (error) {
331
+ console.error(chalk.red('Error publishing skill:'), sanitizeError(error));
332
+ process.exit(1);
333
+ }
334
+ });
335
+ }
336
+ export { initSkill, validateSkill, publishSkill };
337
+ //# sourceMappingURL=author.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"author.js","sourceRoot":"","sources":["../../../src/commands/author.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,WAAW,EAAyB,MAAM,kBAAkB,CAAA;AAErE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD;;GAEG;AACH,KAAK,UAAU,SAAS,CAAC,IAAwB,EAAE,UAAkB;IACnE,2CAA2C;IAC3C,MAAM,SAAS,GACb,IAAI;QACJ,CAAC,MAAM,KAAK,CAAC;YACX,OAAO,EAAE,aAAa;YACtB,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;oBAAE,OAAO,kBAAkB,CAAA;gBAC5C,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC5C,OAAO,2FAA2F,CAAA;gBACpG,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC;SACF,CAAC,CAAC,CAAA;IAEL,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC;QAC9B,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE,sBAAsB,SAAS,EAAE;KAC3C,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC;QACzB,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,QAAQ;KACzC,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;QAC5B,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;YAC7C,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;YAC/C,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE;YACjD,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;YAC/B,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;YACvC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;SAClC;KACF,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IAE/C,oCAAoC;IACpC,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAA;QACpB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;YAC9B,OAAO,EAAE,aAAa,QAAQ,6BAA6B;YAC3D,OAAO,EAAE,KAAK;SACf,CAAC,CAAA;QACF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAA;YACrD,OAAM;QACR,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,6BAA6B,CAAC,CAAC,KAAK,EAAE,CAAA;IAE1D,IAAI,CAAC;QACH,6BAA6B;QAC7B,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1C,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3D,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAE7D,kCAAkC;QAClC,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC;aACzE,OAAO,CAAC,sBAAsB,EAAE,WAAW,CAAC;aAC5C,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC;aAClC,OAAO,CAAC,mBAAmB,EAAE,QAAQ,CAAC;aACtC,OAAO,CAAC,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QAEzE,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;QAEpE,mCAAmC;QACnC,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,OAAO,CAClF,sBAAsB,EACtB,WAAW,CACZ,CAAA;QAED,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,CAAA;QAEpE,4BAA4B;QAC5B,MAAM,iBAAiB,GAAG;;KAEzB,SAAS;;;;;eAKC,SAAS;CACvB,CAAA;QACG,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAA;QAEpF,oBAAoB;QACpB,MAAM,SAAS,GAAG;;;;;;;;;;;;;CAarB,CAAA;QACG,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QAEjE,OAAO,CAAC,OAAO,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAA;QAE/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAA;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC,CAAA;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAA;QACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAA;QACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC,CAAA;QAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC,CAAA;QAC5E,OAAO,CAAC,GAAG,EAAE,CAAA;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,2BAA2B,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC/D,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,MAAwB,EAAE,QAAgB;IACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,QAAQ,KAAK,CAAC,CAAC,CAAA;IAEjE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;IAC1C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAA;QACxC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;QAC7C,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAA;AACf,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,SAAiB;IAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAA;IAElD,IAAI,CAAC;QACH,eAAe;QACf,IAAI,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;QAEjC,+CAA+C;QAC/C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAA;YAClC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;YACvC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;YAC7C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;YACvC,CAAC;QACH,CAAC;QAED,YAAY;QACZ,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAEjD,qBAAqB;QACrB,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;QACrD,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QAEjF,OAAO,CAAC,IAAI,EAAE,CAAA;QAEd,qBAAqB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAE3C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAA;YAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,QAAQ,CAAC,WAAW,IAAI,KAAK,EAAE,CAAC,CAAC,CAAA;YACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAA;YAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,QAAQ,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAA;YACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAA;YACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;YAC1E,OAAO,CAAC,GAAG,EAAE,CAAA;QACf,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAA;YAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBAC1C,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;oBAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,YAAY,EAAE,CAAC,CAAC,CAAA;gBACrD,CAAC;YACH,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAA;QACf,CAAC;QAED,OAAO,UAAU,CAAC,KAAK,CAAA;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,sBAAsB,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC1D,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,YAAY,CAAC,SAAiB;IAC3C,MAAM,OAAO,GAAG,GAAG,CAAC,mCAAmC,CAAC,CAAC,KAAK,EAAE,CAAA;IAEhE,IAAI,CAAC;QACH,eAAe;QACf,IAAI,OAAO,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,CAAA;QAEvC,sCAAsC;QACtC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAA;YACjC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzB,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;YACrB,OAAO,CAAC,IAAI,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAA;YAC/C,OAAO,KAAK,CAAA;QACd,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QAE7C,iBAAiB;QACjB,OAAO,CAAC,IAAI,GAAG,qBAAqB,CAAA;QAEpC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACpD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;QACrD,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QAEpE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;YACvC,qBAAqB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;YAC9C,OAAO,KAAK,CAAA;QACd,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;YAC9C,OAAO,KAAK,CAAA;QACd,CAAC;QAED,oBAAoB;QACpB,OAAO,CAAC,IAAI,GAAG,wBAAwB,CAAA;QACvC,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAEnE,sBAAsB;QACtB,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,OAAO;YACpC,QAAQ;YACR,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC;SAC3C,CAAA;QAED,yBAAyB;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAA;QAC9D,MAAM,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QAE5E,OAAO,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAA;QAEhD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAA;QACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;QAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QAChE,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAA;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAA;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAA;QAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAA;QACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAA;QAEzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAA;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,OAAO,YAAY,CAAC,CAAC,CAAA;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAA;QAElE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAA;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,QAAQ,CAAC,IAAI,WAAW,OAAO,EAAE,CAAC,CAAC,CAAA;QAC1F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAA;QAChD,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,sBAAsB,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC1D,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;SAChC,MAAM,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,GAAG,CAAC;SACpD,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,IAAwC,EAAE,EAAE;QACnF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAA;QAEtC,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;YAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;SAC3B,WAAW,CAAC,gCAAgC,CAAC;SAC7C,QAAQ,CAAC,QAAQ,EAAE,qCAAqC,EAAE,GAAG,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAA;YAC5C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;SAC1B,WAAW,CAAC,2BAA2B,CAAC;SACxC,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,EAAE,GAAG,CAAC;SAClD,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,CAAA;YAC7C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * CLI Commands
3
+ *
4
+ * Export all CLI commands for registration.
5
+ */
6
+ export { createSearchCommand } from './search.js';
7
+ export { createListCommand, createUpdateCommand, createRemoveCommand } from './manage.js';
8
+ export { createInitCommand, createValidateCommand, createPublishCommand } from './author.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGzF,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * CLI Commands
3
+ *
4
+ * Export all CLI commands for registration.
5
+ */
6
+ // SMI-744: Interactive Search
7
+ export { createSearchCommand } from './search.js';
8
+ // SMI-745: Skill Management
9
+ export { createListCommand, createUpdateCommand, createRemoveCommand } from './manage.js';
10
+ // SMI-746: Skill Authoring
11
+ export { createInitCommand, createValidateCommand, createPublishCommand } from './author.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8BAA8B;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,4BAA4B;AAC5B,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEzF,2BAA2B;AAC3B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * SMI-745: Skill Management Commands
3
+ *
4
+ * Provides CLI commands for listing, updating, and removing installed skills.
5
+ */
6
+ import { Command } from 'commander';
7
+ import { type TrustTier } from '@skillsmith/core';
8
+ interface InstalledSkill {
9
+ name: string;
10
+ path: string;
11
+ version: string | null;
12
+ trustTier: TrustTier;
13
+ installDate: string;
14
+ hasUpdates: boolean;
15
+ }
16
+ /**
17
+ * Get list of installed skills from ~/.claude/skills
18
+ */
19
+ declare function getInstalledSkills(): Promise<InstalledSkill[]>;
20
+ /**
21
+ * Display skills in a table format
22
+ */
23
+ declare function displaySkillsTable(skills: InstalledSkill[]): void;
24
+ /**
25
+ * Create list command
26
+ */
27
+ export declare function createListCommand(): Command;
28
+ /**
29
+ * Create update command
30
+ */
31
+ export declare function createUpdateCommand(): Command;
32
+ /**
33
+ * Create remove command
34
+ */
35
+ export declare function createRemoveCommand(): Command;
36
+ export { getInstalledSkills, displaySkillsTable };
37
+ //# sourceMappingURL=manage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage.d.ts","sourceRoot":"","sources":["../../../src/commands/manage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAA;AAazB,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,SAAS,EAAE,SAAS,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;CACpB;AAED;;GAEG;AACH,iBAAe,kBAAkB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CA8C7D;AAED;;GAEG;AACH,iBAAS,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAgC1D;AAgLD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAa3C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAuB7C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAkB7C;AAED,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAA"}