@stackguide/mcp-server 3.2.0 → 3.8.1
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 +315 -9
- package/dist/config/persistence.d.ts +16 -0
- package/dist/config/persistence.d.ts.map +1 -1
- package/dist/config/persistence.js +53 -0
- package/dist/config/persistence.js.map +1 -1
- package/dist/handlers/analyze.d.ts +11 -0
- package/dist/handlers/analyze.d.ts.map +1 -0
- package/dist/handlers/analyze.js +274 -0
- package/dist/handlers/analyze.js.map +1 -0
- package/dist/handlers/config.d.ts +1 -8
- package/dist/handlers/config.d.ts.map +1 -1
- package/dist/handlers/config.js +7 -1
- package/dist/handlers/config.js.map +1 -1
- package/dist/handlers/context.d.ts +1 -5
- package/dist/handlers/context.d.ts.map +1 -1
- package/dist/handlers/context.js +7 -1
- package/dist/handlers/context.js.map +1 -1
- package/dist/handlers/cursor.d.ts +1 -7
- package/dist/handlers/cursor.d.ts.map +1 -1
- package/dist/handlers/cursor.js +7 -1
- package/dist/handlers/cursor.js.map +1 -1
- package/dist/handlers/custom-rule.d.ts +1 -11
- package/dist/handlers/custom-rule.d.ts.map +1 -1
- package/dist/handlers/custom-rule.js +7 -1
- package/dist/handlers/custom-rule.js.map +1 -1
- package/dist/handlers/docs.d.ts +1 -8
- package/dist/handlers/docs.d.ts.map +1 -1
- package/dist/handlers/docs.js +7 -1
- package/dist/handlers/docs.js.map +1 -1
- package/dist/handlers/generate.d.ts +1 -13
- package/dist/handlers/generate.d.ts.map +1 -1
- package/dist/handlers/generate.js +6 -3
- package/dist/handlers/generate.js.map +1 -1
- package/dist/handlers/health.d.ts +1 -8
- package/dist/handlers/health.d.ts.map +1 -1
- package/dist/handlers/health.js +11 -3
- package/dist/handlers/health.js.map +1 -1
- package/dist/handlers/help.d.ts +1 -5
- package/dist/handlers/help.d.ts.map +1 -1
- package/dist/handlers/help.js +7 -1
- package/dist/handlers/help.js.map +1 -1
- package/dist/handlers/index.d.ts +1 -0
- package/dist/handlers/index.d.ts.map +1 -1
- package/dist/handlers/index.js +1 -0
- package/dist/handlers/index.js.map +1 -1
- package/dist/handlers/knowledge.d.ts +1 -8
- package/dist/handlers/knowledge.d.ts.map +1 -1
- package/dist/handlers/knowledge.js +7 -1
- package/dist/handlers/knowledge.js.map +1 -1
- package/dist/handlers/prompts.d.ts +31 -0
- package/dist/handlers/prompts.d.ts.map +1 -0
- package/dist/handlers/prompts.js +225 -0
- package/dist/handlers/prompts.js.map +1 -0
- package/dist/handlers/resources.d.ts +27 -0
- package/dist/handlers/resources.d.ts.map +1 -0
- package/dist/handlers/resources.js +210 -0
- package/dist/handlers/resources.js.map +1 -0
- package/dist/handlers/review.d.ts.map +1 -1
- package/dist/handlers/review.js +18 -1
- package/dist/handlers/review.js.map +1 -1
- package/dist/handlers/rules.d.ts +1 -9
- package/dist/handlers/rules.d.ts.map +1 -1
- package/dist/handlers/rules.js +7 -1
- package/dist/handlers/rules.js.map +1 -1
- package/dist/handlers/setup.d.ts +1 -0
- package/dist/handlers/setup.d.ts.map +1 -1
- package/dist/handlers/setup.js +42 -0
- package/dist/handlers/setup.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -417
- package/dist/index.js.map +1 -1
- package/dist/router/index.d.ts +69 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +151 -0
- package/dist/router/index.js.map +1 -0
- package/dist/services/ast/analyzer.d.ts +55 -0
- package/dist/services/ast/analyzer.d.ts.map +1 -0
- package/dist/services/ast/analyzer.js +268 -0
- package/dist/services/ast/analyzer.js.map +1 -0
- package/dist/services/ast/index.d.ts +10 -0
- package/dist/services/ast/index.d.ts.map +1 -0
- package/dist/services/ast/index.js +12 -0
- package/dist/services/ast/index.js.map +1 -0
- package/dist/services/ast/rules.d.ts +13 -0
- package/dist/services/ast/rules.d.ts.map +1 -0
- package/dist/services/ast/rules.js +358 -0
- package/dist/services/ast/rules.js.map +1 -0
- package/dist/services/ast/treeSitterParser.d.ts +54 -0
- package/dist/services/ast/treeSitterParser.d.ts.map +1 -0
- package/dist/services/ast/treeSitterParser.js +394 -0
- package/dist/services/ast/treeSitterParser.js.map +1 -0
- package/dist/services/ast/types.d.ts +167 -0
- package/dist/services/ast/types.d.ts.map +1 -0
- package/dist/services/ast/types.js +35 -0
- package/dist/services/ast/types.js.map +1 -0
- package/dist/services/codeAnalyzer.d.ts.map +1 -1
- package/dist/services/codeAnalyzer.js +43 -3
- package/dist/services/codeAnalyzer.js.map +1 -1
- package/dist/services/httpClient.d.ts +45 -0
- package/dist/services/httpClient.d.ts.map +1 -0
- package/dist/services/httpClient.js +309 -0
- package/dist/services/httpClient.js.map +1 -0
- package/dist/services/intelligence/configGenerator.d.ts +28 -0
- package/dist/services/intelligence/configGenerator.d.ts.map +1 -0
- package/dist/services/intelligence/configGenerator.js +404 -0
- package/dist/services/intelligence/configGenerator.js.map +1 -0
- package/dist/services/intelligence/dependencyAdvisor.d.ts +24 -0
- package/dist/services/intelligence/dependencyAdvisor.d.ts.map +1 -0
- package/dist/services/intelligence/dependencyAdvisor.js +404 -0
- package/dist/services/intelligence/dependencyAdvisor.js.map +1 -0
- package/dist/services/intelligence/index.d.ts +12 -0
- package/dist/services/intelligence/index.d.ts.map +1 -0
- package/dist/services/intelligence/index.js +16 -0
- package/dist/services/intelligence/index.js.map +1 -0
- package/dist/services/intelligence/projectFs.d.ts +11 -0
- package/dist/services/intelligence/projectFs.d.ts.map +1 -0
- package/dist/services/intelligence/projectFs.js +30 -0
- package/dist/services/intelligence/projectFs.js.map +1 -0
- package/dist/services/intelligence/projectIntelligence.d.ts +26 -0
- package/dist/services/intelligence/projectIntelligence.d.ts.map +1 -0
- package/dist/services/intelligence/projectIntelligence.js +344 -0
- package/dist/services/intelligence/projectIntelligence.js.map +1 -0
- package/dist/services/intelligence/structureAnalyzer.d.ts +27 -0
- package/dist/services/intelligence/structureAnalyzer.d.ts.map +1 -0
- package/dist/services/intelligence/structureAnalyzer.js +286 -0
- package/dist/services/intelligence/structureAnalyzer.js.map +1 -0
- package/dist/services/intelligence/templates.d.ts +22 -0
- package/dist/services/intelligence/templates.d.ts.map +1 -0
- package/dist/services/intelligence/templates.js +521 -0
- package/dist/services/intelligence/templates.js.map +1 -0
- package/dist/services/intelligence/types.d.ts +222 -0
- package/dist/services/intelligence/types.d.ts.map +1 -0
- package/dist/services/intelligence/types.js +7 -0
- package/dist/services/intelligence/types.js.map +1 -0
- package/dist/services/projectFs.d.ts +85 -0
- package/dist/services/projectFs.d.ts.map +1 -0
- package/dist/services/projectFs.js +287 -0
- package/dist/services/projectFs.js.map +1 -0
- package/dist/services/rulesEngine.d.ts +255 -0
- package/dist/services/rulesEngine.d.ts.map +1 -0
- package/dist/services/rulesEngine.js +483 -0
- package/dist/services/rulesEngine.js.map +1 -0
- package/dist/services/webDocumentation.d.ts +9 -0
- package/dist/services/webDocumentation.d.ts.map +1 -1
- package/dist/services/webDocumentation.js +144 -1
- package/dist/services/webDocumentation.js.map +1 -1
- package/dist/storage/index.d.ts +7 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +7 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/sqlite.d.ts +92 -0
- package/dist/storage/sqlite.d.ts.map +1 -0
- package/dist/storage/sqlite.js +471 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/storage/types.d.ts +147 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +13 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/tools/definitions.d.ts +87 -0
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +34 -0
- package/dist/tools/definitions.js.map +1 -1
- package/dist/utils/logger.d.ts +11 -2
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +30 -2
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/validation.d.ts +3 -3
- package/dist/validation/index.d.ts +8 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +19 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/schemas.d.ts +341 -0
- package/dist/validation/schemas.d.ts.map +1 -0
- package/dist/validation/schemas.js +244 -0
- package/dist/validation/schemas.js.map +1 -0
- package/package.json +9 -2
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Structure Analyzer
|
|
3
|
+
* Analyzes project structure and suggests improvements
|
|
4
|
+
* @version 3.3.0
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'fs';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import { getFrameworkTemplate } from './templates.js';
|
|
9
|
+
/**
|
|
10
|
+
* Analyze project structure against framework template
|
|
11
|
+
*/
|
|
12
|
+
export function analyzeStructure(projectPath, projectType) {
|
|
13
|
+
const template = getFrameworkTemplate(projectType);
|
|
14
|
+
const existingDirs = [];
|
|
15
|
+
const existingFiles = [];
|
|
16
|
+
const missingDirs = [];
|
|
17
|
+
const missingFiles = [];
|
|
18
|
+
const improvements = [];
|
|
19
|
+
// Scan existing structure
|
|
20
|
+
const scannedDirs = scanDirectory(projectPath, 3); // Max depth 3
|
|
21
|
+
existingDirs.push(...scannedDirs.dirs);
|
|
22
|
+
existingFiles.push(...scannedDirs.files);
|
|
23
|
+
if (template) {
|
|
24
|
+
// Check required directories
|
|
25
|
+
for (const dir of template.requiredDirs) {
|
|
26
|
+
const fullPath = path.join(projectPath, dir);
|
|
27
|
+
if (!fs.existsSync(fullPath)) {
|
|
28
|
+
missingDirs.push({
|
|
29
|
+
path: dir,
|
|
30
|
+
purpose: getDirPurpose(dir, projectType),
|
|
31
|
+
priority: 'high'
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Check optional directories
|
|
36
|
+
for (const dir of template.optionalDirs) {
|
|
37
|
+
const fullPath = path.join(projectPath, dir);
|
|
38
|
+
if (!fs.existsSync(fullPath)) {
|
|
39
|
+
missingDirs.push({
|
|
40
|
+
path: dir,
|
|
41
|
+
purpose: getDirPurpose(dir, projectType),
|
|
42
|
+
priority: 'medium'
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Check required files
|
|
47
|
+
for (const file of template.requiredFiles) {
|
|
48
|
+
const fullPath = path.join(projectPath, file);
|
|
49
|
+
if (!fs.existsSync(fullPath)) {
|
|
50
|
+
missingFiles.push({
|
|
51
|
+
path: file,
|
|
52
|
+
purpose: getFilePurpose(file),
|
|
53
|
+
priority: 'high'
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Check optional files
|
|
58
|
+
for (const file of template.optionalFiles) {
|
|
59
|
+
const fullPath = path.join(projectPath, file);
|
|
60
|
+
if (!fs.existsSync(fullPath)) {
|
|
61
|
+
missingFiles.push({
|
|
62
|
+
path: file,
|
|
63
|
+
purpose: getFilePurpose(file),
|
|
64
|
+
priority: 'low'
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Detect common structure issues
|
|
70
|
+
improvements.push(...detectStructureIssues(projectPath, existingDirs, existingFiles, projectType));
|
|
71
|
+
// Calculate structure score
|
|
72
|
+
const structureScore = calculateStructureScore(missingDirs.filter(d => d.priority === 'high').length, missingFiles.filter(f => f.priority === 'high').length, improvements.filter(i => i.priority === 'high').length);
|
|
73
|
+
return {
|
|
74
|
+
rootPath: projectPath,
|
|
75
|
+
projectType,
|
|
76
|
+
structureScore,
|
|
77
|
+
existingDirs,
|
|
78
|
+
missingDirs,
|
|
79
|
+
existingFiles,
|
|
80
|
+
missingFiles,
|
|
81
|
+
improvements
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Scan directory recursively
|
|
86
|
+
*/
|
|
87
|
+
function scanDirectory(dirPath, maxDepth, currentDepth = 0) {
|
|
88
|
+
const dirs = [];
|
|
89
|
+
const files = [];
|
|
90
|
+
if (currentDepth >= maxDepth || !fs.existsSync(dirPath)) {
|
|
91
|
+
return { dirs, files };
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
const entries = fs.readdirSync(dirPath, { withFileTypes: true });
|
|
95
|
+
for (const entry of entries) {
|
|
96
|
+
// Skip common non-source directories
|
|
97
|
+
if (shouldSkipEntry(entry.name))
|
|
98
|
+
continue;
|
|
99
|
+
const relativePath = currentDepth === 0 ? entry.name : entry.name;
|
|
100
|
+
if (entry.isDirectory()) {
|
|
101
|
+
dirs.push(relativePath);
|
|
102
|
+
// Recurse
|
|
103
|
+
const subPath = path.join(dirPath, entry.name);
|
|
104
|
+
const subResult = scanDirectory(subPath, maxDepth, currentDepth + 1);
|
|
105
|
+
dirs.push(...subResult.dirs.map(d => path.join(relativePath, d)));
|
|
106
|
+
files.push(...subResult.files.map(f => path.join(relativePath, f)));
|
|
107
|
+
}
|
|
108
|
+
else if (entry.isFile()) {
|
|
109
|
+
files.push(relativePath);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// Permission denied or other error
|
|
115
|
+
}
|
|
116
|
+
return { dirs, files };
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Check if entry should be skipped
|
|
120
|
+
*/
|
|
121
|
+
function shouldSkipEntry(name) {
|
|
122
|
+
const skipPatterns = [
|
|
123
|
+
'node_modules',
|
|
124
|
+
'.git',
|
|
125
|
+
'.next',
|
|
126
|
+
'.nuxt',
|
|
127
|
+
'dist',
|
|
128
|
+
'build',
|
|
129
|
+
'coverage',
|
|
130
|
+
'__pycache__',
|
|
131
|
+
'.venv',
|
|
132
|
+
'venv',
|
|
133
|
+
'target',
|
|
134
|
+
'.idea',
|
|
135
|
+
'.vscode'
|
|
136
|
+
];
|
|
137
|
+
return skipPatterns.includes(name) || name.startsWith('.');
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get directory purpose description
|
|
141
|
+
*/
|
|
142
|
+
function getDirPurpose(dir, projectType) {
|
|
143
|
+
const purposes = {
|
|
144
|
+
'src': 'Source code root directory',
|
|
145
|
+
'src/components': 'Reusable UI components',
|
|
146
|
+
'src/hooks': 'Custom React hooks',
|
|
147
|
+
'src/utils': 'Utility functions and helpers',
|
|
148
|
+
'src/types': 'TypeScript type definitions',
|
|
149
|
+
'src/services': 'API and business logic services',
|
|
150
|
+
'src/contexts': 'React context providers',
|
|
151
|
+
'src/styles': 'CSS/SCSS stylesheets',
|
|
152
|
+
'src/stores': 'State management stores',
|
|
153
|
+
'src/composables': 'Vue composables',
|
|
154
|
+
'src/views': 'Page-level components',
|
|
155
|
+
'src/routes': 'Route handlers',
|
|
156
|
+
'src/middleware': 'Express/Koa middleware',
|
|
157
|
+
'src/controllers': 'MVC controllers',
|
|
158
|
+
'src/models': 'Data models',
|
|
159
|
+
'src/config': 'Configuration files',
|
|
160
|
+
'src/modules': 'NestJS modules',
|
|
161
|
+
'src/common': 'Shared utilities and types',
|
|
162
|
+
'src/guards': 'Auth guards',
|
|
163
|
+
'src/interceptors': 'Request/response interceptors',
|
|
164
|
+
'src/filters': 'Exception filters',
|
|
165
|
+
'src/pipes': 'Validation pipes',
|
|
166
|
+
'src/decorators': 'Custom decorators',
|
|
167
|
+
'tests': 'Test files',
|
|
168
|
+
'test': 'Test files',
|
|
169
|
+
'public': 'Static assets',
|
|
170
|
+
'app': 'Application code (Next.js/FastAPI)',
|
|
171
|
+
'app/api': 'API routes',
|
|
172
|
+
'app/models': 'Data models',
|
|
173
|
+
'app/schemas': 'Pydantic schemas',
|
|
174
|
+
'app/core': 'Core functionality',
|
|
175
|
+
'app/db': 'Database configuration',
|
|
176
|
+
'cmd': 'Go command entry points',
|
|
177
|
+
'internal': 'Private Go packages',
|
|
178
|
+
'pkg': 'Public Go packages',
|
|
179
|
+
'api': 'API definitions',
|
|
180
|
+
'configs': 'Configuration files',
|
|
181
|
+
'scripts': 'Build/deployment scripts',
|
|
182
|
+
'docs': 'Documentation'
|
|
183
|
+
};
|
|
184
|
+
return purposes[dir] || `Standard ${projectType} directory`;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get file purpose description
|
|
188
|
+
*/
|
|
189
|
+
function getFilePurpose(file) {
|
|
190
|
+
const purposes = {
|
|
191
|
+
'package.json': 'Node.js project manifest',
|
|
192
|
+
'tsconfig.json': 'TypeScript configuration',
|
|
193
|
+
'next.config.js': 'Next.js configuration',
|
|
194
|
+
'nest-cli.json': 'NestJS CLI configuration',
|
|
195
|
+
'.eslintrc.js': 'ESLint configuration',
|
|
196
|
+
'.eslintrc.json': 'ESLint configuration',
|
|
197
|
+
'eslint.config.js': 'ESLint flat configuration',
|
|
198
|
+
'.prettierrc': 'Prettier configuration',
|
|
199
|
+
'.editorconfig': 'Editor settings',
|
|
200
|
+
'.gitignore': 'Git ignore patterns',
|
|
201
|
+
'.env': 'Environment variables',
|
|
202
|
+
'.env.local': 'Local environment variables',
|
|
203
|
+
'README.md': 'Project documentation',
|
|
204
|
+
'Dockerfile': 'Docker container definition',
|
|
205
|
+
'docker-compose.yml': 'Docker compose configuration',
|
|
206
|
+
'manage.py': 'Django management script',
|
|
207
|
+
'pyproject.toml': 'Python project configuration',
|
|
208
|
+
'requirements.txt': 'Python dependencies',
|
|
209
|
+
'go.mod': 'Go module definition',
|
|
210
|
+
'go.sum': 'Go dependency checksums',
|
|
211
|
+
'Cargo.toml': 'Rust project manifest',
|
|
212
|
+
'Makefile': 'Build automation',
|
|
213
|
+
'main.go': 'Go entry point',
|
|
214
|
+
'main.rs': 'Rust entry point',
|
|
215
|
+
'src/main.ts': 'Application entry point',
|
|
216
|
+
'src/index.ts': 'Module entry point',
|
|
217
|
+
'src/index.tsx': 'React entry point',
|
|
218
|
+
'src/App.tsx': 'Main React component',
|
|
219
|
+
'src/App.vue': 'Main Vue component',
|
|
220
|
+
'src/main.py': 'Python entry point',
|
|
221
|
+
'src/app.module.ts': 'NestJS root module',
|
|
222
|
+
'vite.config.ts': 'Vite configuration'
|
|
223
|
+
};
|
|
224
|
+
return purposes[file] || 'Project file';
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Detect structural issues
|
|
228
|
+
*/
|
|
229
|
+
function detectStructureIssues(projectPath, dirs, files, projectType) {
|
|
230
|
+
const improvements = [];
|
|
231
|
+
// Check for flat structure (too many files in root)
|
|
232
|
+
const rootFiles = files.filter(f => !f.includes('/') && !f.includes('\\'));
|
|
233
|
+
const sourceFiles = rootFiles.filter(f => f.endsWith('.ts') || f.endsWith('.js') || f.endsWith('.tsx') || f.endsWith('.jsx'));
|
|
234
|
+
if (sourceFiles.length > 3) {
|
|
235
|
+
improvements.push({
|
|
236
|
+
type: 'reorganize',
|
|
237
|
+
description: `Consider moving source files to src/ directory (${sourceFiles.length} files in root)`,
|
|
238
|
+
priority: 'medium'
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
// Check for missing src directory in JS/TS projects
|
|
242
|
+
const jstsProject = ['react-typescript', 'nextjs', 'nestjs', 'express', 'vue-node'].includes(projectType);
|
|
243
|
+
if (jstsProject && !dirs.includes('src') && !dirs.includes('app')) {
|
|
244
|
+
improvements.push({
|
|
245
|
+
type: 'create',
|
|
246
|
+
description: 'Create src/ directory for source code organization',
|
|
247
|
+
priority: 'high'
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
// Check for mixed case directory names
|
|
251
|
+
const mixedCaseDirs = dirs.filter(d => {
|
|
252
|
+
const name = path.basename(d);
|
|
253
|
+
return name !== name.toLowerCase() && !name.startsWith('.') && name !== 'README.md';
|
|
254
|
+
});
|
|
255
|
+
if (mixedCaseDirs.length > 0) {
|
|
256
|
+
improvements.push({
|
|
257
|
+
type: 'rename',
|
|
258
|
+
description: `Consider using lowercase directory names for consistency: ${mixedCaseDirs.slice(0, 3).join(', ')}`,
|
|
259
|
+
priority: 'low'
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
// Check for test files outside tests directory
|
|
263
|
+
const testFilesInSrc = files.filter(f => (f.includes('.test.') || f.includes('.spec.') || f.includes('__tests__')) &&
|
|
264
|
+
!f.startsWith('tests') && !f.startsWith('test'));
|
|
265
|
+
if (testFilesInSrc.length > 5) {
|
|
266
|
+
improvements.push({
|
|
267
|
+
type: 'move',
|
|
268
|
+
description: 'Consider moving test files to a dedicated tests/ directory',
|
|
269
|
+
priority: 'low'
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
return improvements;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Calculate structure score
|
|
276
|
+
*/
|
|
277
|
+
function calculateStructureScore(missingHighPriorityDirs, missingHighPriorityFiles, highPriorityIssues) {
|
|
278
|
+
let score = 100;
|
|
279
|
+
// Deduct for missing high priority items
|
|
280
|
+
score -= missingHighPriorityDirs * 10;
|
|
281
|
+
score -= missingHighPriorityFiles * 5;
|
|
282
|
+
score -= highPriorityIssues * 8;
|
|
283
|
+
return Math.max(0, Math.min(100, score));
|
|
284
|
+
}
|
|
285
|
+
export { scanDirectory, getDirPurpose, getFilePurpose };
|
|
286
|
+
//# sourceMappingURL=structureAnalyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structureAnalyzer.js","sourceRoot":"","sources":["../../../src/services/intelligence/structureAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework Templates - Optimal structure definitions per framework
|
|
3
|
+
* @version 3.3.0
|
|
4
|
+
*/
|
|
5
|
+
import type { FrameworkTemplate, SmartConfig } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Framework template definitions
|
|
8
|
+
*/
|
|
9
|
+
export declare const FRAMEWORK_TEMPLATES: Record<string, FrameworkTemplate>;
|
|
10
|
+
/**
|
|
11
|
+
* Get template for a project type
|
|
12
|
+
*/
|
|
13
|
+
export declare function getFrameworkTemplate(projectType: string): FrameworkTemplate | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Get all available templates
|
|
16
|
+
*/
|
|
17
|
+
export declare function getAllTemplates(): FrameworkTemplate[];
|
|
18
|
+
/**
|
|
19
|
+
* Get config template by type
|
|
20
|
+
*/
|
|
21
|
+
export declare function getConfigTemplate(configType: string): SmartConfig | undefined;
|
|
22
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/services/intelligence/templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAA4B,WAAW,EAAE,MAAM,YAAY,CAAC;AAmO3F;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAqRjE,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEvF;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,iBAAiB,EAAE,CAErD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAS7E"}
|