@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.
- package/README.md +158 -0
- package/assets/skillsmith-skill/SKILL.md +235 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/commands/author/index.d.ts +16 -0
- package/dist/src/commands/author/index.d.ts.map +1 -0
- package/dist/src/commands/author/index.js +18 -0
- package/dist/src/commands/author/index.js.map +1 -0
- package/dist/src/commands/author/init.d.ts +47 -0
- package/dist/src/commands/author/init.d.ts.map +1 -0
- package/dist/src/commands/author/init.js +346 -0
- package/dist/src/commands/author/init.js.map +1 -0
- package/dist/src/commands/author/mcp-init.d.ts +20 -0
- package/dist/src/commands/author/mcp-init.d.ts.map +1 -0
- package/dist/src/commands/author/mcp-init.js +183 -0
- package/dist/src/commands/author/mcp-init.js.map +1 -0
- package/dist/src/commands/author/subagent.d.ts +22 -0
- package/dist/src/commands/author/subagent.d.ts.map +1 -0
- package/dist/src/commands/author/subagent.js +166 -0
- package/dist/src/commands/author/subagent.js.map +1 -0
- package/dist/src/commands/author/transform.d.ts +22 -0
- package/dist/src/commands/author/transform.d.ts.map +1 -0
- package/dist/src/commands/author/transform.js +141 -0
- package/dist/src/commands/author/transform.js.map +1 -0
- package/dist/src/commands/author/utils.d.ts +27 -0
- package/dist/src/commands/author/utils.d.ts.map +1 -0
- package/dist/src/commands/author/utils.js +118 -0
- package/dist/src/commands/author/utils.js.map +1 -0
- package/dist/src/commands/index.d.ts +3 -1
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +6 -1
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/install-skill.d.ts +13 -0
- package/dist/src/commands/install-skill.d.ts.map +1 -0
- package/dist/src/commands/install-skill.js +137 -0
- package/dist/src/commands/install-skill.js.map +1 -0
- package/dist/src/commands/manage.d.ts +4 -1
- package/dist/src/commands/manage.d.ts.map +1 -1
- package/dist/src/commands/manage.js +56 -10
- package/dist/src/commands/manage.js.map +1 -1
- package/dist/src/commands/merge.d.ts +17 -0
- package/dist/src/commands/merge.d.ts.map +1 -0
- package/dist/src/commands/merge.js +160 -0
- package/dist/src/commands/merge.js.map +1 -0
- package/dist/src/commands/recommend.d.ts +1 -4
- package/dist/src/commands/recommend.d.ts.map +1 -1
- package/dist/src/commands/recommend.helpers.d.ts +58 -0
- package/dist/src/commands/recommend.helpers.d.ts.map +1 -0
- package/dist/src/commands/recommend.helpers.js +428 -0
- package/dist/src/commands/recommend.helpers.js.map +1 -0
- package/dist/src/commands/recommend.js +50 -372
- package/dist/src/commands/recommend.js.map +1 -1
- package/dist/src/commands/recommend.types.d.ts +66 -0
- package/dist/src/commands/recommend.types.d.ts.map +1 -0
- package/dist/src/commands/recommend.types.js +14 -0
- package/dist/src/commands/recommend.types.js.map +1 -0
- package/dist/src/commands/search.d.ts.map +1 -1
- package/dist/src/commands/search.js +133 -18
- package/dist/src/commands/search.js.map +1 -1
- package/dist/src/commands/sync.d.ts.map +1 -1
- package/dist/src/commands/sync.js +6 -46
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/config.d.ts +5 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +7 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/import.d.ts +1 -0
- package/dist/src/import.d.ts.map +1 -1
- package/dist/src/import.js +20 -5
- package/dist/src/import.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +11 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/utils/formatters.d.ts +39 -0
- package/dist/src/utils/formatters.d.ts.map +1 -0
- package/dist/src/utils/formatters.js +69 -0
- package/dist/src/utils/formatters.js.map +1 -0
- package/dist/src/utils/license.test.js +6 -1
- package/dist/src/utils/license.test.js.map +1 -1
- package/dist/src/utils/node-version.d.ts +41 -0
- package/dist/src/utils/node-version.d.ts.map +1 -0
- package/dist/src/utils/node-version.js +123 -0
- package/dist/src/utils/node-version.js.map +1 -0
- package/dist/tests/author.test.js +45 -45
- package/dist/tests/author.test.js.map +1 -1
- package/dist/tests/e2e/search.e2e.test.js +62 -6
- package/dist/tests/e2e/search.e2e.test.js.map +1 -1
- package/dist/tests/e2e/utils/hardcoded-detector.d.ts.map +1 -1
- package/dist/tests/e2e/utils/hardcoded-detector.js +44 -3
- package/dist/tests/e2e/utils/hardcoded-detector.js.map +1 -1
- package/dist/tests/install-skill.test.d.ts +8 -0
- package/dist/tests/install-skill.test.d.ts.map +1 -0
- package/dist/tests/install-skill.test.js +409 -0
- package/dist/tests/install-skill.test.js.map +1 -0
- package/dist/tests/manage.test.js +284 -8
- package/dist/tests/manage.test.js.map +1 -1
- package/dist/tests/node-version.test.d.ts +8 -0
- package/dist/tests/node-version.test.d.ts.map +1 -0
- package/dist/tests/node-version.test.js +200 -0
- package/dist/tests/node-version.test.js.map +1 -0
- package/dist/tests/recommend.test.js +94 -0
- package/dist/tests/recommend.test.js.map +1 -1
- package/package.json +3 -2
- package/dist/src/commands/author.d.ts +0 -90
- package/dist/src/commands/author.d.ts.map +0 -1
- package/dist/src/commands/author.js +0 -902
- 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":"AAAA;;;;;GAKG;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,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAYlD;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,aAAa;IACb,cAAc;IACd,eAAe;IACf,MAAM;IACN,UAAU;IACV,OAAO;CACR,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAwB,EACxB,UAAkB,EAClB,UAAuB,EAAE;IAEzB,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,+CAA+C;IAC/C,MAAM,WAAW,GACf,OAAO,CAAC,WAAW;QACnB,CAAC,MAAM,KAAK,CAAC;YACX,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,sBAAsB,SAAS,EAAE;SAC3C,CAAC,CAAC,CAAA;IAEL,MAAM,MAAM,GACV,OAAO,CAAC,MAAM;QACd,CAAC,MAAM,KAAK,CAAC;YACX,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,QAAQ;SACzC,CAAC,CAAC,CAAA;IAEL,wCAAwC;IACxC,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrE,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,qBAAqB,OAAO,CAAC,QAAQ,uBAAuB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1F,CACF,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ;QAChB,CAAC,MAAM,MAAM,CAAC;YACZ,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;gBAC7C,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;gBAC/C,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE;gBACjD,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;gBAC/B,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;gBACvC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;aAClC;SACF,CAAC,CAAC,CAAA;IAEL,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IAE/C,oCAAoC;IACpC,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAA;QACpB,yCAAyC;QACzC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;gBAC9B,OAAO,EAAE,aAAa,QAAQ,6BAA6B;gBAC3D,OAAO,EAAE,KAAK;aACf,CAAC,CAAA;YACF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAA;gBACrD,OAAM;YACR,CAAC;QACH,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,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB;IACnD,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,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAiB;IAClD,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,OAAO,CAAC,OAAO,CAAC,CAAA;YAC5B,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;;;GAGG;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,iCAAiC,EAAE,qCAAqC,CAAC;SAChF,MAAM,CAAC,uBAAuB,EAAE,gCAAgC,CAAC;SACjE,MAAM,CACL,2BAA2B,EAC3B,8FAA8F,CAC/F;SACA,MAAM,CAAC,WAAW,EAAE,0CAA0C,CAAC;SAC/D,MAAM,CACL,KAAK,EAAE,IAAwB,EAAE,IAAkD,EAAE,EAAE;QACrF,MAAM,UAAU,GAAI,IAAI,CAAC,MAAM,CAAY,IAAI,GAAG,CAAA;QAElD,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE;gBAChC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAuB;gBACtD,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAuB;gBAC5C,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAuB;gBAChD,GAAG,EAAE,IAAI,CAAC,KAAK,CAAwB;aACxC,CAAC,CAAA;QACJ,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,CACF,CAAA;AACL,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"}
|
|
@@ -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"}
|