@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.
- package/dist/commands/cache.d.ts +6 -0
- package/dist/commands/cache.d.ts.map +1 -0
- package/dist/commands/cache.js +145 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/config.d.ts +6 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +128 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/create.d.ts +7 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +449 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/feedback.d.ts +6 -0
- package/dist/commands/feedback.d.ts.map +1 -0
- package/dist/commands/feedback.js +137 -0
- package/dist/commands/feedback.js.map +1 -0
- package/dist/commands/get.d.ts +6 -0
- package/dist/commands/get.d.ts.map +1 -0
- package/dist/commands/get.js +122 -0
- package/dist/commands/get.js.map +1 -0
- package/dist/commands/index.d.ts +13 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +13 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/publish.d.ts +7 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +593 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/scan.d.ts +6 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +165 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/search.d.ts +6 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +80 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/validate.d.ts +7 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +328 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/package.json +51 -0
- package/src/commands/cache.ts +166 -0
- package/src/commands/config.ts +142 -0
- package/src/commands/create.ts +490 -0
- package/src/commands/feedback.ts +161 -0
- package/src/commands/get.ts +141 -0
- package/src/commands/index.ts +13 -0
- package/src/commands/publish.ts +688 -0
- package/src/commands/scan.ts +190 -0
- package/src/commands/search.ts +92 -0
- package/src/commands/validate.ts +391 -0
- package/src/index.ts +118 -0
- 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 @@
|
|
|
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 @@
|
|
|
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"}
|