@skillsmith/cli 0.2.0 → 0.2.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 +9 -3
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/commands/analyze.d.ts +13 -0
- package/dist/src/commands/analyze.d.ts.map +1 -0
- package/dist/src/commands/analyze.js +182 -0
- package/dist/src/commands/analyze.js.map +1 -0
- package/dist/src/commands/index.d.ts +2 -0
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +4 -0
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/recommend.d.ts +17 -0
- package/dist/src/commands/recommend.d.ts.map +1 -0
- package/dist/src/commands/recommend.js +510 -0
- package/dist/src/commands/recommend.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/utils/license.d.ts +43 -2
- package/dist/src/utils/license.d.ts.map +1 -1
- package/dist/src/utils/license.js +119 -4
- package/dist/src/utils/license.js.map +1 -1
- package/dist/tests/e2e/search.e2e.test.js +3 -2
- package/dist/tests/e2e/search.e2e.test.js.map +1 -1
- package/dist/tests/recommend.test.d.ts +10 -0
- package/dist/tests/recommend.test.d.ts.map +1 -0
- package/dist/tests/recommend.test.js +658 -0
- package/dist/tests/recommend.test.js.map +1 -0
- package/package.json +5 -5
- package/dist/src/cli.d.ts +0 -8
- package/dist/src/cli.d.ts.map +0 -1
- package/dist/src/cli.js +0 -38
- package/dist/src/cli.js.map +0 -1
- package/dist/src/cli.test.d.ts +0 -2
- package/dist/src/cli.test.d.ts.map +0 -1
- package/dist/src/cli.test.js +0 -33
- package/dist/src/cli.test.js.map +0 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1283: CLI Analyze Command
|
|
3
|
+
*
|
|
4
|
+
* Analyzes a codebase to understand its structure, frameworks, and dependencies.
|
|
5
|
+
* Returns context useful for skill recommendations.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
/**
|
|
9
|
+
* Create analyze command
|
|
10
|
+
*/
|
|
11
|
+
export declare function createAnalyzeCommand(): Command;
|
|
12
|
+
export default createAnalyzeCommand;
|
|
13
|
+
//# sourceMappingURL=analyze.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/commands/analyze.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA4KnC;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAkC9C;AAED,eAAe,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1283: CLI Analyze Command
|
|
3
|
+
*
|
|
4
|
+
* Analyzes a codebase to understand its structure, frameworks, and dependencies.
|
|
5
|
+
* Returns context useful for skill recommendations.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import { CodebaseAnalyzer } from '@skillsmith/core';
|
|
10
|
+
import { sanitizeError } from '../utils/sanitize.js';
|
|
11
|
+
/**
|
|
12
|
+
* Format analysis results for terminal display
|
|
13
|
+
*/
|
|
14
|
+
function formatAnalysisResults(context, analyzer) {
|
|
15
|
+
const lines = [];
|
|
16
|
+
lines.push('');
|
|
17
|
+
lines.push(chalk.bold.blue('=== Codebase Analysis ==='));
|
|
18
|
+
lines.push('');
|
|
19
|
+
// Stats
|
|
20
|
+
lines.push(`${chalk.bold('Files:')} ${context.stats.totalFiles} | ${chalk.bold('Lines:')} ${context.stats.totalLines.toLocaleString()}`);
|
|
21
|
+
lines.push(`${chalk.bold('Duration:')} ${context.metadata.durationMs}ms`);
|
|
22
|
+
lines.push('');
|
|
23
|
+
// File types
|
|
24
|
+
const fileTypes = Object.entries(context.stats.filesByExtension)
|
|
25
|
+
.sort((a, b) => b[1] - a[1])
|
|
26
|
+
.map(([ext, count]) => `${ext}: ${count}`)
|
|
27
|
+
.join(', ');
|
|
28
|
+
lines.push(`${chalk.bold('File types:')} ${fileTypes || 'None detected'}`);
|
|
29
|
+
lines.push('');
|
|
30
|
+
// Frameworks
|
|
31
|
+
if (context.frameworks.length > 0) {
|
|
32
|
+
lines.push(chalk.bold('Frameworks detected:'));
|
|
33
|
+
for (const fw of context.frameworks.slice(0, 5)) {
|
|
34
|
+
const confidence = Math.round(fw.confidence * 100);
|
|
35
|
+
const color = confidence >= 80 ? chalk.green : confidence >= 50 ? chalk.yellow : chalk.gray;
|
|
36
|
+
lines.push(` ${color('\u2022')} ${fw.name} (${color(`${confidence}%`)} confidence)`);
|
|
37
|
+
}
|
|
38
|
+
lines.push('');
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
lines.push(chalk.dim('No frameworks detected'));
|
|
42
|
+
lines.push('');
|
|
43
|
+
}
|
|
44
|
+
// Dependencies
|
|
45
|
+
const prodDeps = context.dependencies.filter((d) => !d.isDev);
|
|
46
|
+
const devDeps = context.dependencies.filter((d) => d.isDev);
|
|
47
|
+
if (prodDeps.length > 0) {
|
|
48
|
+
lines.push(`${chalk.bold('Dependencies')} (${prodDeps.length}):`);
|
|
49
|
+
lines.push(` ${prodDeps
|
|
50
|
+
.slice(0, 10)
|
|
51
|
+
.map((d) => d.name)
|
|
52
|
+
.join(', ')}`);
|
|
53
|
+
if (prodDeps.length > 10) {
|
|
54
|
+
lines.push(chalk.dim(` ... and ${prodDeps.length - 10} more`));
|
|
55
|
+
}
|
|
56
|
+
lines.push('');
|
|
57
|
+
}
|
|
58
|
+
if (devDeps.length > 0) {
|
|
59
|
+
lines.push(`${chalk.bold('Dev dependencies')} (${devDeps.length}):`);
|
|
60
|
+
lines.push(` ${devDeps
|
|
61
|
+
.slice(0, 10)
|
|
62
|
+
.map((d) => d.name)
|
|
63
|
+
.join(', ')}`);
|
|
64
|
+
if (devDeps.length > 10) {
|
|
65
|
+
lines.push(chalk.dim(` ... and ${devDeps.length - 10} more`));
|
|
66
|
+
}
|
|
67
|
+
lines.push('');
|
|
68
|
+
}
|
|
69
|
+
if (prodDeps.length === 0 && devDeps.length === 0) {
|
|
70
|
+
lines.push(chalk.dim('No dependencies found (no package.json)'));
|
|
71
|
+
lines.push('');
|
|
72
|
+
}
|
|
73
|
+
// Summary
|
|
74
|
+
lines.push(chalk.dim('---'));
|
|
75
|
+
const summary = analyzer.getSummary(context);
|
|
76
|
+
lines.push(`${chalk.bold('Summary:')} ${summary}`);
|
|
77
|
+
lines.push('');
|
|
78
|
+
return lines.join('\n');
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Format analysis results as JSON
|
|
82
|
+
*/
|
|
83
|
+
function formatAsJson(context) {
|
|
84
|
+
const frameworks = context.frameworks.slice(0, 10).map((f) => ({
|
|
85
|
+
name: f.name,
|
|
86
|
+
confidence: Math.round(f.confidence * 100),
|
|
87
|
+
}));
|
|
88
|
+
const dependencies = context.dependencies.slice(0, 20).map((d) => ({
|
|
89
|
+
name: d.name,
|
|
90
|
+
is_dev: d.isDev,
|
|
91
|
+
}));
|
|
92
|
+
// Get unique import modules (external only)
|
|
93
|
+
const uniqueImports = new Set();
|
|
94
|
+
for (const imp of context.imports) {
|
|
95
|
+
// Skip relative imports
|
|
96
|
+
if (!imp.module.startsWith('.') && !imp.module.startsWith('/')) {
|
|
97
|
+
// Get base package name (e.g., '@scope/pkg' or 'pkg')
|
|
98
|
+
const parts = imp.module.split('/');
|
|
99
|
+
const firstPart = parts[0];
|
|
100
|
+
const secondPart = parts[1];
|
|
101
|
+
if (firstPart !== undefined) {
|
|
102
|
+
const basePkg = imp.module.startsWith('@') && secondPart !== undefined
|
|
103
|
+
? `${firstPart}/${secondPart}`
|
|
104
|
+
: firstPart;
|
|
105
|
+
uniqueImports.add(basePkg);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const output = {
|
|
110
|
+
frameworks,
|
|
111
|
+
dependencies,
|
|
112
|
+
imports: Array.from(uniqueImports).slice(0, 50),
|
|
113
|
+
stats: {
|
|
114
|
+
total_files: context.stats.totalFiles,
|
|
115
|
+
total_lines: context.stats.totalLines,
|
|
116
|
+
file_types: context.stats.filesByExtension,
|
|
117
|
+
},
|
|
118
|
+
timing: {
|
|
119
|
+
duration_ms: context.metadata.durationMs,
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
return JSON.stringify(output, null, 2);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Run codebase analysis
|
|
126
|
+
*/
|
|
127
|
+
async function runAnalyze(targetPath, options) {
|
|
128
|
+
const analyzer = new CodebaseAnalyzer();
|
|
129
|
+
// Build analyze options - only add excludeDirs when defined (exactOptionalPropertyTypes)
|
|
130
|
+
const analyzeOptions = {
|
|
131
|
+
maxFiles: options.maxFiles,
|
|
132
|
+
includeDevDeps: options.includeDevDeps,
|
|
133
|
+
};
|
|
134
|
+
if (options.excludeDirs !== undefined) {
|
|
135
|
+
analyzeOptions.excludeDirs = options.excludeDirs;
|
|
136
|
+
}
|
|
137
|
+
const context = await analyzer.analyze(targetPath, analyzeOptions);
|
|
138
|
+
if (options.json) {
|
|
139
|
+
console.log(formatAsJson(context));
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
console.log(formatAnalysisResults(context, analyzer));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Create analyze command
|
|
147
|
+
*/
|
|
148
|
+
export function createAnalyzeCommand() {
|
|
149
|
+
const cmd = new Command('analyze')
|
|
150
|
+
.description('Analyze a codebase to detect frameworks, dependencies, and patterns')
|
|
151
|
+
.argument('[path]', 'Path to the codebase to analyze', '.')
|
|
152
|
+
.option('-m, --max-files <number>', 'Maximum files to analyze', '1000')
|
|
153
|
+
.option('-e, --exclude <dirs...>', 'Directories to exclude (in addition to defaults)')
|
|
154
|
+
.option('--no-dev-deps', 'Exclude dev dependencies from analysis')
|
|
155
|
+
.option('-j, --json', 'Output results as JSON')
|
|
156
|
+
.action(async (targetPath, opts) => {
|
|
157
|
+
try {
|
|
158
|
+
const maxFiles = parseInt(opts['max-files'], 10);
|
|
159
|
+
const excludeDirs = opts['exclude'];
|
|
160
|
+
const includeDevDeps = opts['devDeps'] !== false;
|
|
161
|
+
const json = opts['json'] === true;
|
|
162
|
+
await runAnalyze(targetPath, {
|
|
163
|
+
maxFiles,
|
|
164
|
+
excludeDirs,
|
|
165
|
+
includeDevDeps,
|
|
166
|
+
json,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
if (opts['json']) {
|
|
171
|
+
console.error(JSON.stringify({ error: sanitizeError(error) }));
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
console.error(chalk.red('Analysis error:'), sanitizeError(error));
|
|
175
|
+
}
|
|
176
|
+
process.exit(1);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
return cmd;
|
|
180
|
+
}
|
|
181
|
+
export default createAnalyzeCommand;
|
|
182
|
+
//# sourceMappingURL=analyze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/commands/analyze.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,4 +6,6 @@
|
|
|
6
6
|
export { createSearchCommand } from './search.js';
|
|
7
7
|
export { createListCommand, createUpdateCommand, createRemoveCommand } from './manage.js';
|
|
8
8
|
export { createInitCommand, createValidateCommand, createPublishCommand } from './author.js';
|
|
9
|
+
export { createAnalyzeCommand } from './analyze.js';
|
|
10
|
+
export { createRecommendCommand } from './recommend.js';
|
|
9
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGzF,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGzF,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAG5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAGnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -9,4 +9,8 @@ export { createSearchCommand } from './search.js';
|
|
|
9
9
|
export { createListCommand, createUpdateCommand, createRemoveCommand } from './manage.js';
|
|
10
10
|
// SMI-746: Skill Authoring
|
|
11
11
|
export { createInitCommand, createValidateCommand, createPublishCommand } from './author.js';
|
|
12
|
+
// SMI-1283: Codebase Analysis
|
|
13
|
+
export { createAnalyzeCommand } from './analyze.js';
|
|
14
|
+
// SMI-1299: Recommendations
|
|
15
|
+
export { createRecommendCommand } from './recommend.js';
|
|
12
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8BAA8B;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,4BAA4B;AAC5B,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEzF,2BAA2B;AAC3B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8BAA8B;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,4BAA4B;AAC5B,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEzF,2BAA2B;AAC3B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAE5F,8BAA8B;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAEnD,4BAA4B;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1299: CLI Recommend Command
|
|
3
|
+
*
|
|
4
|
+
* Analyzes a codebase and recommends relevant skills based on detected
|
|
5
|
+
* frameworks, dependencies, and patterns.
|
|
6
|
+
*
|
|
7
|
+
* References:
|
|
8
|
+
* - SMI-1283 (analyze command pattern)
|
|
9
|
+
* - packages/mcp-server/src/tools/recommend.ts (recommendation logic)
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
/**
|
|
13
|
+
* Create recommend command
|
|
14
|
+
*/
|
|
15
|
+
export declare function createRecommendCommand(): Command;
|
|
16
|
+
export default createRecommendCommand;
|
|
17
|
+
//# sourceMappingURL=recommend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recommend.d.ts","sourceRoot":"","sources":["../../../src/commands/recommend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA0lBnC;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CA+BhD;AAED,eAAe,sBAAsB,CAAA"}
|