@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.
Files changed (37) hide show
  1. package/README.md +9 -3
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/commands/analyze.d.ts +13 -0
  4. package/dist/src/commands/analyze.d.ts.map +1 -0
  5. package/dist/src/commands/analyze.js +182 -0
  6. package/dist/src/commands/analyze.js.map +1 -0
  7. package/dist/src/commands/index.d.ts +2 -0
  8. package/dist/src/commands/index.d.ts.map +1 -1
  9. package/dist/src/commands/index.js +4 -0
  10. package/dist/src/commands/index.js.map +1 -1
  11. package/dist/src/commands/recommend.d.ts +17 -0
  12. package/dist/src/commands/recommend.d.ts.map +1 -0
  13. package/dist/src/commands/recommend.js +510 -0
  14. package/dist/src/commands/recommend.js.map +1 -0
  15. package/dist/src/index.d.ts +1 -0
  16. package/dist/src/index.d.ts.map +1 -1
  17. package/dist/src/index.js +7 -2
  18. package/dist/src/index.js.map +1 -1
  19. package/dist/src/utils/license.d.ts +43 -2
  20. package/dist/src/utils/license.d.ts.map +1 -1
  21. package/dist/src/utils/license.js +119 -4
  22. package/dist/src/utils/license.js.map +1 -1
  23. package/dist/tests/e2e/search.e2e.test.js +3 -2
  24. package/dist/tests/e2e/search.e2e.test.js.map +1 -1
  25. package/dist/tests/recommend.test.d.ts +10 -0
  26. package/dist/tests/recommend.test.d.ts.map +1 -0
  27. package/dist/tests/recommend.test.js +658 -0
  28. package/dist/tests/recommend.test.js.map +1 -0
  29. package/package.json +5 -5
  30. package/dist/src/cli.d.ts +0 -8
  31. package/dist/src/cli.d.ts.map +0 -1
  32. package/dist/src/cli.js +0 -38
  33. package/dist/src/cli.js.map +0 -1
  34. package/dist/src/cli.test.d.ts +0 -2
  35. package/dist/src/cli.test.d.ts.map +0 -1
  36. package/dist/src/cli.test.js +0 -33
  37. 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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,gBAAgB,EAA4C,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD;;GAEG;AACH,SAAS,qBAAqB,CAAC,OAAwB,EAAE,QAA0B;IACjF,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAA;IACxD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,QAAQ;IACR,KAAK,CAAC,IAAI,CACR,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAC7H,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAA;IACzE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,aAAa;IACb,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC;SAC7D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC;SACzC,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,IAAI,eAAe,EAAE,CAAC,CAAA;IAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,aAAa;IACb,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAA;QAC9C,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAChD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,CAAA;YAClD,MAAM,KAAK,GAAG,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;YAC3F,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,UAAU,GAAG,CAAC,cAAc,CAAC,CAAA;QACvF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAA;QAC/C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IAED,eAAe;IACf,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAE3D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAA;QACjE,KAAK,CAAC,IAAI,CACR,KAAK,QAAQ;aACV,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAClB,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAA;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;QACjE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,OAAO,CAAC,MAAM,IAAI,CAAC,CAAA;QACpE,KAAK,CAAC,IAAI,CACR,KAAK,OAAO;aACT,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAClB,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAA;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;QAChE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAA;QAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IAED,UAAU;IACV,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;IAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IAC5C,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC,CAAA;IAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,OAAwB;IAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC;QAC5E,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC;KAC3C,CAAC,CAAC,CAAA;IAEH,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjE,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,KAAK;KAChB,CAAC,CAAC,CAAA;IAEH,4CAA4C;IAC5C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAA;IACvC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAClC,wBAAwB;QACxB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/D,sDAAsD;YACtD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACnC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YAC1B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YAC3B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,MAAM,OAAO,GACX,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,KAAK,SAAS;oBACpD,CAAC,CAAC,GAAG,SAAS,IAAI,UAAU,EAAE;oBAC9B,CAAC,CAAC,SAAS,CAAA;gBACf,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG;QACb,UAAU;QACV,YAAY;QACZ,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAC/C,KAAK,EAAE;YACL,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;YACrC,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;YACrC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB;SAC3C;QACD,MAAM,EAAE;YACN,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,UAAU;SACzC;KACF,CAAA;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AACxC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,UAAU,CACvB,UAAkB,EAClB,OAKC;IAED,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAA;IAEvC,yFAAyF;IACzF,MAAM,cAAc,GAA8C;QAChE,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAA;IACD,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACtC,cAAc,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;IAClD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;IAElE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAA;IACpC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;IACvD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;SAC/B,WAAW,CAAC,qEAAqE,CAAC;SAClF,QAAQ,CAAC,QAAQ,EAAE,iCAAiC,EAAE,GAAG,CAAC;SAC1D,MAAM,CAAC,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,CAAC;SACtE,MAAM,CAAC,yBAAyB,EAAE,kDAAkD,CAAC;SACrF,MAAM,CAAC,eAAe,EAAE,wCAAwC,CAAC;SACjE,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;SAC9C,MAAM,CACL,KAAK,EAAE,UAAkB,EAAE,IAA6D,EAAE,EAAE;QAC1F,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAW,EAAE,EAAE,CAAC,CAAA;YAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAyB,CAAA;YAC3D,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,CAAA;YAChD,MAAM,IAAI,GAAI,IAAI,CAAC,MAAM,CAAa,KAAK,IAAI,CAAA;YAE/C,MAAM,UAAU,CAAC,UAAU,EAAE;gBAC3B,QAAQ;gBACR,WAAW;gBACX,cAAc;gBACd,IAAI;aACL,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;YAChE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;YACnE,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,CACF,CAAA;IAEH,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,eAAe,oBAAoB,CAAA"}
@@ -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"}