@open-skills-hub/cli 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 (57) hide show
  1. package/dist/commands/cache.d.ts +6 -0
  2. package/dist/commands/cache.d.ts.map +1 -0
  3. package/dist/commands/cache.js +145 -0
  4. package/dist/commands/cache.js.map +1 -0
  5. package/dist/commands/config.d.ts +6 -0
  6. package/dist/commands/config.d.ts.map +1 -0
  7. package/dist/commands/config.js +128 -0
  8. package/dist/commands/config.js.map +1 -0
  9. package/dist/commands/create.d.ts +7 -0
  10. package/dist/commands/create.d.ts.map +1 -0
  11. package/dist/commands/create.js +449 -0
  12. package/dist/commands/create.js.map +1 -0
  13. package/dist/commands/feedback.d.ts +6 -0
  14. package/dist/commands/feedback.d.ts.map +1 -0
  15. package/dist/commands/feedback.js +137 -0
  16. package/dist/commands/feedback.js.map +1 -0
  17. package/dist/commands/get.d.ts +6 -0
  18. package/dist/commands/get.d.ts.map +1 -0
  19. package/dist/commands/get.js +122 -0
  20. package/dist/commands/get.js.map +1 -0
  21. package/dist/commands/index.d.ts +13 -0
  22. package/dist/commands/index.d.ts.map +1 -0
  23. package/dist/commands/index.js +13 -0
  24. package/dist/commands/index.js.map +1 -0
  25. package/dist/commands/publish.d.ts +7 -0
  26. package/dist/commands/publish.d.ts.map +1 -0
  27. package/dist/commands/publish.js +593 -0
  28. package/dist/commands/publish.js.map +1 -0
  29. package/dist/commands/scan.d.ts +6 -0
  30. package/dist/commands/scan.d.ts.map +1 -0
  31. package/dist/commands/scan.js +165 -0
  32. package/dist/commands/scan.js.map +1 -0
  33. package/dist/commands/search.d.ts +6 -0
  34. package/dist/commands/search.d.ts.map +1 -0
  35. package/dist/commands/search.js +80 -0
  36. package/dist/commands/search.js.map +1 -0
  37. package/dist/commands/validate.d.ts +7 -0
  38. package/dist/commands/validate.d.ts.map +1 -0
  39. package/dist/commands/validate.js +328 -0
  40. package/dist/commands/validate.js.map +1 -0
  41. package/dist/index.d.ts +6 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +107 -0
  44. package/dist/index.js.map +1 -0
  45. package/package.json +51 -0
  46. package/src/commands/cache.ts +166 -0
  47. package/src/commands/config.ts +142 -0
  48. package/src/commands/create.ts +490 -0
  49. package/src/commands/feedback.ts +161 -0
  50. package/src/commands/get.ts +141 -0
  51. package/src/commands/index.ts +13 -0
  52. package/src/commands/publish.ts +688 -0
  53. package/src/commands/scan.ts +190 -0
  54. package/src/commands/search.ts +92 -0
  55. package/src/commands/validate.ts +391 -0
  56. package/src/index.ts +118 -0
  57. package/tsconfig.json +13 -0
@@ -0,0 +1,449 @@
1
+ /**
2
+ * Open Skills Hub CLI - Create Command
3
+ * Creates a new skill from template
4
+ */
5
+ import { Command } from 'commander';
6
+ import chalk from 'chalk';
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import inquirer from 'inquirer';
10
+ import { isValidSkillName } from '@open-skills-hub/core';
11
+ function generateSkillMd(options) {
12
+ const frontmatter = [
13
+ '---',
14
+ `name: ${options.name}`,
15
+ `description: ${options.description}`,
16
+ ];
17
+ if (options.license) {
18
+ frontmatter.push(`license: ${options.license}`);
19
+ }
20
+ if (options.derivedFrom) {
21
+ frontmatter.push(`derivedFrom:`);
22
+ frontmatter.push(` name: ${options.derivedFrom.split('@')[0]}`);
23
+ frontmatter.push(` version: ${options.derivedFrom.split('@')[1] || '1.0.0'}`);
24
+ }
25
+ frontmatter.push(`metadata:`);
26
+ if (options.author) {
27
+ frontmatter.push(` author: ${options.author}`);
28
+ }
29
+ frontmatter.push(` version: "1.0.0"`);
30
+ frontmatter.push('---');
31
+ const body = `
32
+ # ${toTitleCase(options.name)}
33
+
34
+ ${options.description}
35
+
36
+ ## Overview
37
+
38
+ This skill helps with [describe the main purpose].
39
+
40
+ ## When to Use
41
+
42
+ Use this skill when:
43
+ - [Condition 1]
44
+ - [Condition 2]
45
+ - [Condition 3]
46
+
47
+ ## Instructions
48
+
49
+ ### Step 1: [First Step]
50
+
51
+ [Describe what to do]
52
+
53
+ ### Step 2: [Second Step]
54
+
55
+ [Describe what to do]
56
+
57
+ ## Examples
58
+
59
+ ### Example 1
60
+
61
+ **Input:**
62
+ \`\`\`
63
+ [Example input]
64
+ \`\`\`
65
+
66
+ **Output:**
67
+ \`\`\`
68
+ [Example output]
69
+ \`\`\`
70
+
71
+ ## Notes
72
+
73
+ - [Important note 1]
74
+ - [Important note 2]
75
+ `;
76
+ return frontmatter.join('\n') + '\n' + body;
77
+ }
78
+ function generateReadme(options) {
79
+ return `# ${toTitleCase(options.name)}
80
+
81
+ ${options.description}
82
+
83
+ ## Installation
84
+
85
+ \`\`\`bash
86
+ skills use ${options.name}
87
+ \`\`\`
88
+
89
+ ## Usage
90
+
91
+ This skill can be activated when [describe activation conditions].
92
+
93
+ ## Structure
94
+
95
+ \`\`\`
96
+ ${options.name}/
97
+ ├── SKILL.md # Skill definition
98
+ ${options.template !== 'basic' ? `├── scripts/ # Executable scripts
99
+ ` : ''}${options.template === 'advanced' ? `├── references/ # Reference documentation
100
+ ├── assets/ # Static resources
101
+ ` : ''}└── README.md # This file
102
+ \`\`\`
103
+
104
+ ## License
105
+
106
+ ${options.license || 'MIT'}
107
+ `;
108
+ }
109
+ function generateLicense(license, author) {
110
+ const year = new Date().getFullYear();
111
+ if (license === 'MIT') {
112
+ return `MIT License
113
+
114
+ Copyright (c) ${year} ${author}
115
+
116
+ Permission is hereby granted, free of charge, to any person obtaining a copy
117
+ of this software and associated documentation files (the "Software"), to deal
118
+ in the Software without restriction, including without limitation the rights
119
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
120
+ copies of the Software, and to permit persons to whom the Software is
121
+ furnished to do so, subject to the following conditions:
122
+
123
+ The above copyright notice and this permission notice shall be included in all
124
+ copies or substantial portions of the Software.
125
+
126
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
127
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
128
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
129
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
130
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
131
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
132
+ SOFTWARE.
133
+ `;
134
+ }
135
+ if (license === 'Apache-2.0') {
136
+ return `Apache License
137
+ Version 2.0, January 2004
138
+ http://www.apache.org/licenses/
139
+
140
+ Copyright ${year} ${author}
141
+
142
+ Licensed under the Apache License, Version 2.0 (the "License");
143
+ you may not use this file except in compliance with the License.
144
+ You may obtain a copy of the License at
145
+
146
+ http://www.apache.org/licenses/LICENSE-2.0
147
+
148
+ Unless required by applicable law or agreed to in writing, software
149
+ distributed under the License is distributed on an "AS IS" BASIS,
150
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
151
+ See the License for the specific language governing permissions and
152
+ limitations under the License.
153
+ `;
154
+ }
155
+ return `Copyright (c) ${year} ${author}
156
+
157
+ ${license}
158
+ `;
159
+ }
160
+ function generateSampleScript() {
161
+ return `#!/usr/bin/env python3
162
+ """
163
+ Sample Script for ${'{skill_name}'}
164
+
165
+ Usage:
166
+ python main.py <input> [options]
167
+
168
+ Description:
169
+ This script demonstrates the basic structure for skill scripts.
170
+ """
171
+
172
+ import sys
173
+ import argparse
174
+
175
+
176
+ def main():
177
+ parser = argparse.ArgumentParser(description='Sample skill script')
178
+ parser.add_argument('input', help='Input file or data')
179
+ parser.add_argument('--output', '-o', help='Output file (default: stdout)')
180
+ parser.add_argument('--verbose', '-v', action='store_true', help='Verbose output')
181
+
182
+ args = parser.parse_args()
183
+
184
+ try:
185
+ # TODO: Implement your logic here
186
+ result = process(args.input, verbose=args.verbose)
187
+
188
+ if args.output:
189
+ with open(args.output, 'w') as f:
190
+ f.write(result)
191
+ else:
192
+ print(result)
193
+
194
+ except Exception as e:
195
+ print(f"Error: {e}", file=sys.stderr)
196
+ sys.exit(1)
197
+
198
+
199
+ def process(input_data: str, verbose: bool = False) -> str:
200
+ """
201
+ Process the input data.
202
+
203
+ Args:
204
+ input_data: The input to process
205
+ verbose: Whether to print verbose output
206
+
207
+ Returns:
208
+ Processed result as string
209
+ """
210
+ if verbose:
211
+ print(f"Processing: {input_data}", file=sys.stderr)
212
+
213
+ # TODO: Implement actual processing logic
214
+ return f"Processed: {input_data}"
215
+
216
+
217
+ if __name__ == '__main__':
218
+ main()
219
+ `;
220
+ }
221
+ function generateReference() {
222
+ return `# Reference Documentation
223
+
224
+ ## API Reference
225
+
226
+ ### Functions
227
+
228
+ #### \`process(input, options)\`
229
+
230
+ Processes the input data according to the specified options.
231
+
232
+ **Parameters:**
233
+ - \`input\` (string): The input data to process
234
+ - \`options\` (object): Processing options
235
+ - \`verbose\` (boolean): Enable verbose output
236
+
237
+ **Returns:**
238
+ - \`string\`: The processed result
239
+
240
+ **Example:**
241
+ \`\`\`python
242
+ result = process("hello", {"verbose": True})
243
+ \`\`\`
244
+
245
+ ## Configuration
246
+
247
+ ### Environment Variables
248
+
249
+ | Variable | Description | Default |
250
+ |----------|-------------|---------|
251
+ | \`DEBUG\` | Enable debug mode | \`false\` |
252
+
253
+ ## Troubleshooting
254
+
255
+ ### Common Issues
256
+
257
+ #### Issue 1: [Description]
258
+
259
+ **Solution:** [How to fix]
260
+
261
+ #### Issue 2: [Description]
262
+
263
+ **Solution:** [How to fix]
264
+ `;
265
+ }
266
+ function toTitleCase(str) {
267
+ return str
268
+ .split('-')
269
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
270
+ .join(' ');
271
+ }
272
+ function validateSkillName(name) {
273
+ if (!name)
274
+ return 'Name is required';
275
+ if (name.length > 64)
276
+ return 'Name must be 64 characters or less';
277
+ if (!isValidSkillName(name)) {
278
+ return 'Name must be lowercase letters, numbers, and hyphens only';
279
+ }
280
+ if (name.startsWith('-') || name.endsWith('-')) {
281
+ return 'Name cannot start or end with a hyphen';
282
+ }
283
+ if (name.includes('--')) {
284
+ return 'Name cannot contain consecutive hyphens';
285
+ }
286
+ return true;
287
+ }
288
+ export const createCommand = new Command('create')
289
+ .description('Create a new skill from template')
290
+ .argument('[name]', 'Skill name (lowercase, hyphens allowed)')
291
+ .option('-t, --template <template>', 'Template type: basic, with-scripts, advanced', 'basic')
292
+ .option('-d, --description <description>', 'Skill description')
293
+ .option('-l, --license <license>', 'License (MIT, Apache-2.0, etc.)')
294
+ .option('-a, --author <author>', 'Author name')
295
+ .option('--from <skill>', 'Derive from existing skill (name@version)')
296
+ .option('-y, --yes', 'Skip prompts and use defaults')
297
+ .option('-o, --output <path>', 'Output directory (default: current directory)')
298
+ .action(async (nameArg, options) => {
299
+ let skillOptions;
300
+ if (options.yes && nameArg) {
301
+ // Non-interactive mode
302
+ const validation = validateSkillName(nameArg);
303
+ if (validation !== true) {
304
+ console.log(chalk.red(`Error: ${validation}`));
305
+ process.exit(1);
306
+ }
307
+ skillOptions = {
308
+ name: nameArg,
309
+ description: options.description || `A skill for ${nameArg}`,
310
+ license: options.license || 'MIT',
311
+ author: options.author || process.env.USER || 'anonymous',
312
+ template: options.template,
313
+ derivedFrom: options.from,
314
+ };
315
+ }
316
+ else {
317
+ // Interactive mode
318
+ console.log(chalk.cyan('\n📦 Create New Skill\n'));
319
+ const answers = await inquirer.prompt([
320
+ {
321
+ type: 'input',
322
+ name: 'name',
323
+ message: 'Skill name:',
324
+ default: nameArg,
325
+ validate: validateSkillName,
326
+ },
327
+ {
328
+ type: 'input',
329
+ name: 'description',
330
+ message: 'Description:',
331
+ default: options.description,
332
+ validate: (input) => {
333
+ if (!input)
334
+ return 'Description is required';
335
+ if (input.length > 1024)
336
+ return 'Description must be 1024 characters or less';
337
+ return true;
338
+ },
339
+ },
340
+ {
341
+ type: 'list',
342
+ name: 'template',
343
+ message: 'Template:',
344
+ default: options.template,
345
+ choices: [
346
+ { name: 'Basic (SKILL.md only)', value: 'basic' },
347
+ { name: 'With Scripts (includes scripts/)', value: 'with-scripts' },
348
+ { name: 'Advanced (full structure)', value: 'advanced' },
349
+ ],
350
+ },
351
+ {
352
+ type: 'input',
353
+ name: 'license',
354
+ message: 'License:',
355
+ default: options.license || 'MIT',
356
+ },
357
+ {
358
+ type: 'input',
359
+ name: 'author',
360
+ message: 'Author:',
361
+ default: options.author || process.env.USER || '',
362
+ },
363
+ {
364
+ type: 'input',
365
+ name: 'derivedFrom',
366
+ message: 'Derived from (leave empty for none):',
367
+ default: options.from || '',
368
+ },
369
+ ]);
370
+ skillOptions = {
371
+ name: answers.name,
372
+ description: answers.description,
373
+ license: answers.license,
374
+ author: answers.author,
375
+ template: answers.template,
376
+ derivedFrom: answers.derivedFrom || undefined,
377
+ };
378
+ }
379
+ // Determine output directory
380
+ const outputBase = options.output || process.cwd();
381
+ const skillDir = path.join(outputBase, skillOptions.name);
382
+ // Check if directory exists
383
+ if (fs.existsSync(skillDir)) {
384
+ console.log(chalk.red(`\nError: Directory already exists: ${skillDir}`));
385
+ process.exit(1);
386
+ }
387
+ // Create directory structure
388
+ console.log(chalk.cyan(`\nCreating skill in ${skillDir}...\n`));
389
+ fs.mkdirSync(skillDir, { recursive: true });
390
+ // Create SKILL.md
391
+ const skillMdContent = generateSkillMd(skillOptions);
392
+ fs.writeFileSync(path.join(skillDir, 'SKILL.md'), skillMdContent);
393
+ console.log(chalk.green(' ✓ SKILL.md'));
394
+ // Create README.md
395
+ const readmeContent = generateReadme(skillOptions);
396
+ fs.writeFileSync(path.join(skillDir, 'README.md'), readmeContent);
397
+ console.log(chalk.green(' ✓ README.md'));
398
+ // Create LICENSE.txt
399
+ if (skillOptions.license) {
400
+ const licenseContent = generateLicense(skillOptions.license, skillOptions.author || 'Anonymous');
401
+ fs.writeFileSync(path.join(skillDir, 'LICENSE.txt'), licenseContent);
402
+ console.log(chalk.green(' ✓ LICENSE.txt'));
403
+ }
404
+ // Create template-specific directories
405
+ if (skillOptions.template === 'with-scripts' || skillOptions.template === 'advanced') {
406
+ const scriptsDir = path.join(skillDir, 'scripts');
407
+ fs.mkdirSync(scriptsDir, { recursive: true });
408
+ const sampleScript = generateSampleScript().replace('{skill_name}', skillOptions.name);
409
+ fs.writeFileSync(path.join(scriptsDir, 'main.py'), sampleScript);
410
+ console.log(chalk.green(' ✓ scripts/main.py'));
411
+ }
412
+ if (skillOptions.template === 'advanced') {
413
+ // Create references directory
414
+ const refsDir = path.join(skillDir, 'references');
415
+ fs.mkdirSync(refsDir, { recursive: true });
416
+ const referenceContent = generateReference();
417
+ fs.writeFileSync(path.join(refsDir, 'REFERENCE.md'), referenceContent);
418
+ console.log(chalk.green(' ✓ references/REFERENCE.md'));
419
+ // Create assets directory
420
+ const assetsDir = path.join(skillDir, 'assets');
421
+ fs.mkdirSync(assetsDir, { recursive: true });
422
+ fs.writeFileSync(path.join(assetsDir, '.gitkeep'), '');
423
+ console.log(chalk.green(' ✓ assets/'));
424
+ }
425
+ // Print success message
426
+ console.log(chalk.green('\n✓ Skill created successfully!\n'));
427
+ console.log(' ' + chalk.cyan(skillOptions.name) + '/');
428
+ console.log(' ├── SKILL.md');
429
+ console.log(' ├── README.md');
430
+ if (skillOptions.license) {
431
+ console.log(' ├── LICENSE.txt');
432
+ }
433
+ if (skillOptions.template === 'with-scripts' || skillOptions.template === 'advanced') {
434
+ console.log(' ├── scripts/');
435
+ console.log(' │ └── main.py');
436
+ }
437
+ if (skillOptions.template === 'advanced') {
438
+ console.log(' ├── references/');
439
+ console.log(' │ └── REFERENCE.md');
440
+ console.log(' └── assets/');
441
+ }
442
+ console.log(chalk.cyan('\nNext steps:'));
443
+ console.log(` cd ${skillOptions.name}`);
444
+ console.log(' # Edit SKILL.md with your skill content');
445
+ console.log(' skills validate .');
446
+ console.log(' skills publish .');
447
+ console.log('');
448
+ });
449
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Open Skills Hub CLI - Feedback Command
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare const feedbackCommand: Command;
6
+ //# sourceMappingURL=feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/commands/feedback.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,eAAe,SA8IxB,CAAC"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Open Skills Hub CLI - Feedback Command
3
+ */
4
+ import { Command } from 'commander';
5
+ import chalk from 'chalk';
6
+ import ora from 'ora';
7
+ import inquirer from 'inquirer';
8
+ import { getStorage, generateUUID, now, parseSkillFullName, buildSkillFullName, } from '@open-skills-hub/core';
9
+ export const feedbackCommand = new Command('feedback')
10
+ .description('Submit feedback for a skill')
11
+ .argument('<name>', 'Skill name')
12
+ .option('-v, --version <version>', 'Skill version')
13
+ .option('-r, --rating <rating>', 'Rating (1-5)')
14
+ .option('-t, --type <type>', 'Feedback type: success, failure, suggestion, bug', 'success')
15
+ .option('-c, --comment <comment>', 'Feedback comment')
16
+ .option('-i, --interactive', 'Interactive mode')
17
+ .action(async (name, options) => {
18
+ const spinner = ora('Loading skill info...').start();
19
+ try {
20
+ const storage = await getStorage();
21
+ await storage.initialize();
22
+ // Parse name
23
+ const { scope, name: skillName } = parseSkillFullName(name);
24
+ const fullName = buildSkillFullName(skillName, scope);
25
+ // Get skill
26
+ const skill = await storage.getSkillByName(fullName);
27
+ if (!skill) {
28
+ spinner.fail(`Skill '${fullName}' not found`);
29
+ process.exit(1);
30
+ }
31
+ // Get version
32
+ let version;
33
+ if (options.version) {
34
+ version = await storage.getVersion(skill.id, options.version);
35
+ if (!version) {
36
+ spinner.fail(`Version '${options.version}' not found`);
37
+ process.exit(1);
38
+ }
39
+ }
40
+ else {
41
+ version = await storage.getLatestVersion(skill.id);
42
+ if (!version) {
43
+ spinner.fail('No versions found');
44
+ process.exit(1);
45
+ }
46
+ }
47
+ spinner.succeed(`Found ${fullName}@${version.version}`);
48
+ // Interactive mode
49
+ let rating = options.rating ? parseInt(options.rating, 10) : undefined;
50
+ let feedbackType = options.type;
51
+ let comment = options.comment;
52
+ if (options.interactive) {
53
+ const answers = await inquirer.prompt([
54
+ {
55
+ type: 'list',
56
+ name: 'type',
57
+ message: 'What type of feedback?',
58
+ choices: [
59
+ { name: '✓ Success - It worked well', value: 'success' },
60
+ { name: '✗ Failure - It didn\'t work', value: 'failure' },
61
+ { name: '💡 Suggestion - I have an idea', value: 'suggestion' },
62
+ { name: '🐛 Bug - Something is broken', value: 'bug' },
63
+ ],
64
+ default: feedbackType,
65
+ },
66
+ {
67
+ type: 'list',
68
+ name: 'rating',
69
+ message: 'How would you rate this skill?',
70
+ choices: [
71
+ { name: '⭐⭐⭐⭐⭐ (5) - Excellent', value: 5 },
72
+ { name: '⭐⭐⭐⭐ (4) - Good', value: 4 },
73
+ { name: '⭐⭐⭐ (3) - Average', value: 3 },
74
+ { name: '⭐⭐ (2) - Below average', value: 2 },
75
+ { name: '⭐ (1) - Poor', value: 1 },
76
+ ],
77
+ default: rating ?? 4,
78
+ },
79
+ {
80
+ type: 'input',
81
+ name: 'comment',
82
+ message: 'Any additional comments? (optional)',
83
+ default: comment,
84
+ },
85
+ ]);
86
+ feedbackType = answers.type;
87
+ rating = answers.rating;
88
+ comment = answers.comment || undefined;
89
+ }
90
+ // Validate rating
91
+ if (!rating || rating < 1 || rating > 5) {
92
+ console.log(chalk.red('Rating must be between 1 and 5'));
93
+ process.exit(1);
94
+ }
95
+ // Submit feedback
96
+ const submitSpinner = ora('Submitting feedback...').start();
97
+ const feedback = {
98
+ id: generateUUID(),
99
+ skillId: skill.id,
100
+ skillVersion: version.version,
101
+ feedbackType: feedbackType,
102
+ rating,
103
+ comment,
104
+ context: {},
105
+ status: 'pending',
106
+ createdAt: now(),
107
+ };
108
+ await storage.createFeedback(feedback);
109
+ // Update skill rating
110
+ const feedbacks = await storage.getFeedbacks(skill.id, { limit: 1000 });
111
+ const ratings = feedbacks.items.map(f => f.rating).filter((r) => r !== undefined);
112
+ const averageRating = ratings.length > 0
113
+ ? ratings.reduce((sum, r) => sum + r, 0) / ratings.length
114
+ : 0;
115
+ await storage.updateSkill(skill.id, {
116
+ rating: {
117
+ average: Math.round(averageRating * 10) / 10,
118
+ count: ratings.length,
119
+ },
120
+ });
121
+ submitSpinner.succeed('Feedback submitted');
122
+ console.log('\n' + chalk.gray('─'.repeat(50)));
123
+ console.log(chalk.bold.green('✓ Thank you for your feedback!\n'));
124
+ console.log(` ${chalk.cyan('Skill:')} ${fullName}@${version.version}`);
125
+ console.log(` ${chalk.cyan('Type:')} ${feedbackType}`);
126
+ console.log(` ${chalk.cyan('Rating:')} ${'⭐'.repeat(rating)} (${rating}/5)`);
127
+ if (comment) {
128
+ console.log(` ${chalk.cyan('Comment:')} ${comment}`);
129
+ }
130
+ console.log(chalk.gray('─'.repeat(50)) + '\n');
131
+ await storage.close();
132
+ }
133
+ catch (error) {
134
+ throw error;
135
+ }
136
+ });
137
+ //# sourceMappingURL=feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/commands/feedback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Open Skills Hub CLI - Get Command
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare const getCommand: Command;
6
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../src/commands/get.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,UAAU,SA0HnB,CAAC"}