@skillsmith/cli 0.3.0 → 0.3.2

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 (107) hide show
  1. package/README.md +158 -0
  2. package/assets/skillsmith-skill/SKILL.md +235 -0
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/src/commands/author/index.d.ts +16 -0
  5. package/dist/src/commands/author/index.d.ts.map +1 -0
  6. package/dist/src/commands/author/index.js +18 -0
  7. package/dist/src/commands/author/index.js.map +1 -0
  8. package/dist/src/commands/author/init.d.ts +47 -0
  9. package/dist/src/commands/author/init.d.ts.map +1 -0
  10. package/dist/src/commands/author/init.js +346 -0
  11. package/dist/src/commands/author/init.js.map +1 -0
  12. package/dist/src/commands/author/mcp-init.d.ts +20 -0
  13. package/dist/src/commands/author/mcp-init.d.ts.map +1 -0
  14. package/dist/src/commands/author/mcp-init.js +183 -0
  15. package/dist/src/commands/author/mcp-init.js.map +1 -0
  16. package/dist/src/commands/author/subagent.d.ts +22 -0
  17. package/dist/src/commands/author/subagent.d.ts.map +1 -0
  18. package/dist/src/commands/author/subagent.js +166 -0
  19. package/dist/src/commands/author/subagent.js.map +1 -0
  20. package/dist/src/commands/author/transform.d.ts +22 -0
  21. package/dist/src/commands/author/transform.d.ts.map +1 -0
  22. package/dist/src/commands/author/transform.js +141 -0
  23. package/dist/src/commands/author/transform.js.map +1 -0
  24. package/dist/src/commands/author/utils.d.ts +27 -0
  25. package/dist/src/commands/author/utils.d.ts.map +1 -0
  26. package/dist/src/commands/author/utils.js +118 -0
  27. package/dist/src/commands/author/utils.js.map +1 -0
  28. package/dist/src/commands/index.d.ts +3 -1
  29. package/dist/src/commands/index.d.ts.map +1 -1
  30. package/dist/src/commands/index.js +6 -1
  31. package/dist/src/commands/index.js.map +1 -1
  32. package/dist/src/commands/install-skill.d.ts +13 -0
  33. package/dist/src/commands/install-skill.d.ts.map +1 -0
  34. package/dist/src/commands/install-skill.js +137 -0
  35. package/dist/src/commands/install-skill.js.map +1 -0
  36. package/dist/src/commands/manage.d.ts +4 -1
  37. package/dist/src/commands/manage.d.ts.map +1 -1
  38. package/dist/src/commands/manage.js +56 -10
  39. package/dist/src/commands/manage.js.map +1 -1
  40. package/dist/src/commands/merge.d.ts +17 -0
  41. package/dist/src/commands/merge.d.ts.map +1 -0
  42. package/dist/src/commands/merge.js +160 -0
  43. package/dist/src/commands/merge.js.map +1 -0
  44. package/dist/src/commands/recommend.d.ts +1 -4
  45. package/dist/src/commands/recommend.d.ts.map +1 -1
  46. package/dist/src/commands/recommend.helpers.d.ts +58 -0
  47. package/dist/src/commands/recommend.helpers.d.ts.map +1 -0
  48. package/dist/src/commands/recommend.helpers.js +428 -0
  49. package/dist/src/commands/recommend.helpers.js.map +1 -0
  50. package/dist/src/commands/recommend.js +50 -372
  51. package/dist/src/commands/recommend.js.map +1 -1
  52. package/dist/src/commands/recommend.types.d.ts +66 -0
  53. package/dist/src/commands/recommend.types.d.ts.map +1 -0
  54. package/dist/src/commands/recommend.types.js +14 -0
  55. package/dist/src/commands/recommend.types.js.map +1 -0
  56. package/dist/src/commands/search.d.ts.map +1 -1
  57. package/dist/src/commands/search.js +133 -18
  58. package/dist/src/commands/search.js.map +1 -1
  59. package/dist/src/commands/sync.d.ts.map +1 -1
  60. package/dist/src/commands/sync.js +6 -46
  61. package/dist/src/commands/sync.js.map +1 -1
  62. package/dist/src/config.d.ts +5 -0
  63. package/dist/src/config.d.ts.map +1 -1
  64. package/dist/src/config.js +7 -0
  65. package/dist/src/config.js.map +1 -1
  66. package/dist/src/import.d.ts +1 -0
  67. package/dist/src/import.d.ts.map +1 -1
  68. package/dist/src/import.js +20 -5
  69. package/dist/src/import.js.map +1 -1
  70. package/dist/src/index.d.ts +1 -0
  71. package/dist/src/index.d.ts.map +1 -1
  72. package/dist/src/index.js +11 -1
  73. package/dist/src/index.js.map +1 -1
  74. package/dist/src/utils/formatters.d.ts +39 -0
  75. package/dist/src/utils/formatters.d.ts.map +1 -0
  76. package/dist/src/utils/formatters.js +69 -0
  77. package/dist/src/utils/formatters.js.map +1 -0
  78. package/dist/src/utils/license.test.js +6 -1
  79. package/dist/src/utils/license.test.js.map +1 -1
  80. package/dist/src/utils/node-version.d.ts +41 -0
  81. package/dist/src/utils/node-version.d.ts.map +1 -0
  82. package/dist/src/utils/node-version.js +123 -0
  83. package/dist/src/utils/node-version.js.map +1 -0
  84. package/dist/tests/author.test.js +45 -45
  85. package/dist/tests/author.test.js.map +1 -1
  86. package/dist/tests/e2e/search.e2e.test.js +62 -6
  87. package/dist/tests/e2e/search.e2e.test.js.map +1 -1
  88. package/dist/tests/e2e/utils/hardcoded-detector.d.ts.map +1 -1
  89. package/dist/tests/e2e/utils/hardcoded-detector.js +44 -3
  90. package/dist/tests/e2e/utils/hardcoded-detector.js.map +1 -1
  91. package/dist/tests/install-skill.test.d.ts +8 -0
  92. package/dist/tests/install-skill.test.d.ts.map +1 -0
  93. package/dist/tests/install-skill.test.js +409 -0
  94. package/dist/tests/install-skill.test.js.map +1 -0
  95. package/dist/tests/manage.test.js +284 -8
  96. package/dist/tests/manage.test.js.map +1 -1
  97. package/dist/tests/node-version.test.d.ts +8 -0
  98. package/dist/tests/node-version.test.d.ts.map +1 -0
  99. package/dist/tests/node-version.test.js +200 -0
  100. package/dist/tests/node-version.test.js.map +1 -0
  101. package/dist/tests/recommend.test.js +94 -0
  102. package/dist/tests/recommend.test.js.map +1 -1
  103. package/package.json +3 -2
  104. package/dist/src/commands/author.d.ts +0 -90
  105. package/dist/src/commands/author.d.ts.map +0 -1
  106. package/dist/src/commands/author.js +0 -902
  107. package/dist/src/commands/author.js.map +0 -1
@@ -0,0 +1,16 @@
1
+ /**
2
+ * SMI-746: Skill Authoring Commands
3
+ * SMI-1389: Subagent Generation Command
4
+ * SMI-1390: Transform Command
5
+ * SMI-1433: MCP Server Scaffolding
6
+ * SMI-1487: Refactored into modular structure
7
+ *
8
+ * Provides CLI commands for creating, validating, publishing skills,
9
+ * and generating companion subagents.
10
+ */
11
+ export { createInitCommand, createValidateCommand, createPublishCommand, initSkill, validateSkill, publishSkill, type InitOptions, VALID_CATEGORIES, } from './init.js';
12
+ export { createSubagentCommand, generateSubagent, type SubagentOptions } from './subagent.js';
13
+ export { createTransformCommand, transformSkill, type TransformOptions } from './transform.js';
14
+ export { createMcpInitCommand, initMcpServer, type McpInitOptions } from './mcp-init.js';
15
+ export { printValidationResult, fileExists, ensureAgentsDirectory, extractTriggerPhrases, validateSubagentDefinition, } from './utils.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/author/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,SAAS,EACT,aAAa,EACb,YAAY,EACZ,KAAK,WAAW,EAChB,gBAAgB,GACjB,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAE7F,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAE9F,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAGxF,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,YAAY,CAAA"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * SMI-746: Skill Authoring Commands
3
+ * SMI-1389: Subagent Generation Command
4
+ * SMI-1390: Transform Command
5
+ * SMI-1433: MCP Server Scaffolding
6
+ * SMI-1487: Refactored into modular structure
7
+ *
8
+ * Provides CLI commands for creating, validating, publishing skills,
9
+ * and generating companion subagents.
10
+ */
11
+ // Re-export command creators
12
+ export { createInitCommand, createValidateCommand, createPublishCommand, initSkill, validateSkill, publishSkill, VALID_CATEGORIES, } from './init.js';
13
+ export { createSubagentCommand, generateSubagent } from './subagent.js';
14
+ export { createTransformCommand, transformSkill } from './transform.js';
15
+ export { createMcpInitCommand, initMcpServer } from './mcp-init.js';
16
+ // Re-export utilities that may be useful externally
17
+ export { printValidationResult, fileExists, ensureAgentsDirectory, extractTriggerPhrases, validateSubagentDefinition, } from './utils.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/author/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,6BAA6B;AAC7B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,SAAS,EACT,aAAa,EACb,YAAY,EAEZ,gBAAgB,GACjB,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAwB,MAAM,eAAe,CAAA;AAE7F,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAyB,MAAM,gBAAgB,CAAA;AAE9F,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAuB,MAAM,eAAe,CAAA;AAExF,oDAAoD;AACpD,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,YAAY,CAAA"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * SMI-746: Skill Initialization Commands
3
+ * SMI-1473: Non-interactive init command flags
4
+ *
5
+ * Commands for creating, validating, and publishing skills.
6
+ */
7
+ import { Command } from 'commander';
8
+ /**
9
+ * SMI-1473: Options for non-interactive init command
10
+ */
11
+ export interface InitOptions {
12
+ description?: string | undefined;
13
+ author?: string | undefined;
14
+ category?: string | undefined;
15
+ yes?: boolean | undefined;
16
+ }
17
+ /**
18
+ * Valid categories for skill initialization
19
+ */
20
+ export declare const VALID_CATEGORIES: string[];
21
+ /**
22
+ * Initialize a new skill directory
23
+ */
24
+ export declare function initSkill(name: string | undefined, targetPath: string, options?: InitOptions): Promise<void>;
25
+ /**
26
+ * Validate a local SKILL.md file
27
+ */
28
+ export declare function validateSkill(skillPath: string): Promise<boolean>;
29
+ /**
30
+ * Prepare skill for publishing
31
+ * @returns true if publishing succeeded, false if validation failed
32
+ */
33
+ export declare function publishSkill(skillPath: string): Promise<boolean>;
34
+ /**
35
+ * Create init command
36
+ * SMI-1473: Added non-interactive flags for E2E testing
37
+ */
38
+ export declare function createInitCommand(): Command;
39
+ /**
40
+ * Create validate command
41
+ */
42
+ export declare function createValidateCommand(): Command;
43
+ /**
44
+ * Create publish command
45
+ */
46
+ export declare function createPublishCommand(): Command;
47
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/commands/author/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAanC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1B;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,UAO5B,CAAA;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CA6If;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA0DvE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAqFtE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CA6B3C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAa/C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAa9C"}
@@ -0,0 +1,346 @@
1
+ /**
2
+ * SMI-746: Skill Initialization Commands
3
+ * SMI-1473: Non-interactive init command flags
4
+ *
5
+ * Commands for creating, validating, and publishing skills.
6
+ */
7
+ import { Command } from 'commander';
8
+ import { input, confirm, select } from '@inquirer/prompts';
9
+ import chalk from 'chalk';
10
+ import ora from 'ora';
11
+ import { mkdir, writeFile, readFile, stat } from 'fs/promises';
12
+ import { dirname, join, resolve } from 'path';
13
+ import { createHash } from 'crypto';
14
+ import { SkillParser } from '@skillsmith/core';
15
+ import { SKILL_MD_TEMPLATE, README_MD_TEMPLATE } from '../../templates/index.js';
16
+ import { sanitizeError } from '../../utils/sanitize.js';
17
+ import { printValidationResult } from './utils.js';
18
+ /**
19
+ * Valid categories for skill initialization
20
+ */
21
+ export const VALID_CATEGORIES = [
22
+ 'development',
23
+ 'productivity',
24
+ 'communication',
25
+ 'data',
26
+ 'security',
27
+ 'other',
28
+ ];
29
+ /**
30
+ * Initialize a new skill directory
31
+ */
32
+ export async function initSkill(name, targetPath, options = {}) {
33
+ // Interactive prompts if name not provided
34
+ const skillName = name ||
35
+ (await input({
36
+ message: 'Skill name:',
37
+ validate: (value) => {
38
+ if (!value.trim())
39
+ return 'Name is required';
40
+ if (!/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(value)) {
41
+ return 'Name must start with a letter and contain only letters, numbers, hyphens, and underscores';
42
+ }
43
+ return true;
44
+ },
45
+ }));
46
+ // Use provided options or prompt interactively
47
+ const description = options.description ||
48
+ (await input({
49
+ message: 'Description:',
50
+ default: `A Claude skill for ${skillName}`,
51
+ }));
52
+ const author = options.author ||
53
+ (await input({
54
+ message: 'Author:',
55
+ default: process.env['USER'] || 'author',
56
+ }));
57
+ // Validate category if provided via CLI
58
+ if (options.category && !VALID_CATEGORIES.includes(options.category)) {
59
+ console.error(chalk.red(`Invalid category: ${options.category}. Valid categories: ${VALID_CATEGORIES.join(', ')}`));
60
+ process.exit(1);
61
+ }
62
+ const category = options.category ||
63
+ (await select({
64
+ message: 'Category:',
65
+ choices: [
66
+ { name: 'Development', value: 'development' },
67
+ { name: 'Productivity', value: 'productivity' },
68
+ { name: 'Communication', value: 'communication' },
69
+ { name: 'Data', value: 'data' },
70
+ { name: 'Security', value: 'security' },
71
+ { name: 'Other', value: 'other' },
72
+ ],
73
+ }));
74
+ const skillDir = resolve(targetPath, skillName);
75
+ // Check if directory already exists
76
+ try {
77
+ await stat(skillDir);
78
+ // Skip confirmation if --yes flag is set
79
+ if (!options.yes) {
80
+ const overwrite = await confirm({
81
+ message: `Directory ${skillDir} already exists. Overwrite?`,
82
+ default: false,
83
+ });
84
+ if (!overwrite) {
85
+ console.log(chalk.yellow('Initialization cancelled'));
86
+ return;
87
+ }
88
+ }
89
+ }
90
+ catch {
91
+ // Directory doesn't exist, continue
92
+ }
93
+ const spinner = ora('Creating skill structure...').start();
94
+ try {
95
+ // Create directory structure
96
+ await mkdir(skillDir, { recursive: true });
97
+ await mkdir(join(skillDir, 'scripts'), { recursive: true });
98
+ await mkdir(join(skillDir, 'resources'), { recursive: true });
99
+ // Generate SKILL.md from template
100
+ const skillMdContent = SKILL_MD_TEMPLATE.replace(/\{\{name\}\}/g, skillName)
101
+ .replace(/\{\{description\}\}/g, description)
102
+ .replace(/\{\{author\}\}/g, author)
103
+ .replace(/\{\{category\}\}/g, category)
104
+ .replace(/\{\{date\}\}/g, new Date().toISOString().split('T')[0] || '');
105
+ await writeFile(join(skillDir, 'SKILL.md'), skillMdContent, 'utf-8');
106
+ // Generate README.md from template
107
+ const readmeContent = README_MD_TEMPLATE.replace(/\{\{name\}\}/g, skillName).replace(/\{\{description\}\}/g, description);
108
+ await writeFile(join(skillDir, 'README.md'), readmeContent, 'utf-8');
109
+ // Create placeholder script
110
+ const placeholderScript = `#!/usr/bin/env node
111
+ /**
112
+ * ${skillName} - Example Script
113
+ *
114
+ * Add your skill's automation scripts here.
115
+ */
116
+
117
+ console.log('${skillName} script executed');
118
+ `;
119
+ await writeFile(join(skillDir, 'scripts', 'example.js'), placeholderScript, 'utf-8');
120
+ // Create .gitignore
121
+ const gitignore = `# Dependencies
122
+ node_modules/
123
+
124
+ # Build output
125
+ dist/
126
+
127
+ # Environment
128
+ .env
129
+ .env.local
130
+
131
+ # OS files
132
+ .DS_Store
133
+ Thumbs.db
134
+ `;
135
+ await writeFile(join(skillDir, '.gitignore'), gitignore, 'utf-8');
136
+ spinner.succeed(`Created skill at ${skillDir}`);
137
+ console.log(chalk.bold('\nNext steps:'));
138
+ console.log(chalk.dim(` 1. cd ${skillDir}`));
139
+ console.log(chalk.dim(' 2. Edit SKILL.md to customize your skill'));
140
+ console.log(chalk.dim(' 3. Add scripts to the scripts/ directory'));
141
+ console.log(chalk.dim(' 4. Run skillsmith validate to check your skill'));
142
+ console.log(chalk.dim(' 5. Run skillsmith publish to prepare for sharing'));
143
+ console.log();
144
+ }
145
+ catch (error) {
146
+ spinner.fail(`Failed to create skill: ${sanitizeError(error)}`);
147
+ throw error;
148
+ }
149
+ }
150
+ /**
151
+ * Validate a local SKILL.md file
152
+ */
153
+ export 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
+ export 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 = dirname(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
+ * SMI-1473: Added non-interactive flags for E2E testing
284
+ */
285
+ export function createInitCommand() {
286
+ return new Command('init')
287
+ .description('Initialize a new skill directory')
288
+ .argument('[name]', 'Skill name')
289
+ .option('-p, --path <path>', 'Target directory', '.')
290
+ .option('-d, --description <description>', 'Skill description (non-interactive)')
291
+ .option('-a, --author <author>', 'Skill author (non-interactive)')
292
+ .option('-c, --category <category>', 'Skill category: development|productivity|communication|data|security|other (non-interactive)')
293
+ .option('-y, --yes', 'Auto-confirm overwrite (non-interactive)')
294
+ .action(async (name, opts) => {
295
+ const targetPath = opts['path'] || '.';
296
+ try {
297
+ await initSkill(name, targetPath, {
298
+ description: opts['description'],
299
+ author: opts['author'],
300
+ category: opts['category'],
301
+ yes: opts['yes'],
302
+ });
303
+ }
304
+ catch (error) {
305
+ console.error(chalk.red('Error initializing skill:'), sanitizeError(error));
306
+ process.exit(1);
307
+ }
308
+ });
309
+ }
310
+ /**
311
+ * Create validate command
312
+ */
313
+ export function createValidateCommand() {
314
+ return new Command('validate')
315
+ .description('Validate a local SKILL.md file')
316
+ .argument('[path]', 'Path to SKILL.md or skill directory', '.')
317
+ .action(async (skillPath) => {
318
+ try {
319
+ const valid = await validateSkill(skillPath);
320
+ process.exit(valid ? 0 : 1);
321
+ }
322
+ catch (error) {
323
+ console.error(chalk.red('Error validating skill:'), sanitizeError(error));
324
+ process.exit(1);
325
+ }
326
+ });
327
+ }
328
+ /**
329
+ * Create publish command
330
+ */
331
+ export function createPublishCommand() {
332
+ return new Command('publish')
333
+ .description('Prepare skill for sharing')
334
+ .argument('[path]', 'Path to skill directory', '.')
335
+ .action(async (skillPath) => {
336
+ try {
337
+ const success = await publishSkill(skillPath);
338
+ process.exit(success ? 0 : 1);
339
+ }
340
+ catch (error) {
341
+ console.error(chalk.red('Error publishing skill:'), sanitizeError(error));
342
+ process.exit(1);
343
+ }
344
+ });
345
+ }
346
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../src/commands/author/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * SMI-1433: MCP Server Scaffolding
3
+ *
4
+ * Initialize new MCP server projects with proper structure.
5
+ */
6
+ import { Command } from 'commander';
7
+ export interface McpInitOptions {
8
+ output?: string | undefined;
9
+ tools?: string | undefined;
10
+ force?: boolean | undefined;
11
+ }
12
+ /**
13
+ * SMI-1433: Initialize a new MCP server project
14
+ */
15
+ export declare function initMcpServer(name: string | undefined, options: McpInitOptions): Promise<void>;
16
+ /**
17
+ * Create mcp-init command
18
+ */
19
+ export declare function createMcpInitCommand(): Command;
20
+ //# sourceMappingURL=mcp-init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-init.d.ts","sourceRoot":"","sources":["../../../../src/commands/author/mcp-init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAUnC,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC5B;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAkKf;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAqB9C"}