agentic-qe 2.6.2 → 2.6.4
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/.claude/agents/qe-code-intelligence.md +88 -1
- package/CHANGELOG.md +69 -0
- package/README.md +1 -1
- package/dist/agents/CodeIntelligenceAgent.d.ts +4 -1
- package/dist/agents/CodeIntelligenceAgent.d.ts.map +1 -1
- package/dist/agents/CodeIntelligenceAgent.js +30 -1
- package/dist/agents/CodeIntelligenceAgent.js.map +1 -1
- package/dist/cli/commands/knowledge-graph.d.ts +30 -0
- package/dist/cli/commands/knowledge-graph.d.ts.map +1 -1
- package/dist/cli/commands/knowledge-graph.js +206 -4
- package/dist/cli/commands/knowledge-graph.js.map +1 -1
- package/dist/cli/index.js +152 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/code-intelligence/inference/ComponentBoundaryAnalyzer.d.ts +75 -0
- package/dist/code-intelligence/inference/ComponentBoundaryAnalyzer.d.ts.map +1 -0
- package/dist/code-intelligence/inference/ComponentBoundaryAnalyzer.js +400 -0
- package/dist/code-intelligence/inference/ComponentBoundaryAnalyzer.js.map +1 -0
- package/dist/code-intelligence/inference/ExternalSystemDetector.d.ts +31 -0
- package/dist/code-intelligence/inference/ExternalSystemDetector.d.ts.map +1 -0
- package/dist/code-intelligence/inference/ExternalSystemDetector.js +523 -0
- package/dist/code-intelligence/inference/ExternalSystemDetector.js.map +1 -0
- package/dist/code-intelligence/inference/ProjectMetadataAnalyzer.d.ts +78 -0
- package/dist/code-intelligence/inference/ProjectMetadataAnalyzer.d.ts.map +1 -0
- package/dist/code-intelligence/inference/ProjectMetadataAnalyzer.js +491 -0
- package/dist/code-intelligence/inference/ProjectMetadataAnalyzer.js.map +1 -0
- package/dist/code-intelligence/inference/index.d.ts +36 -0
- package/dist/code-intelligence/inference/index.d.ts.map +1 -0
- package/dist/code-intelligence/inference/index.js +65 -0
- package/dist/code-intelligence/inference/index.js.map +1 -0
- package/dist/code-intelligence/inference/types.d.ts +196 -0
- package/dist/code-intelligence/inference/types.d.ts.map +1 -0
- package/dist/code-intelligence/inference/types.js +9 -0
- package/dist/code-intelligence/inference/types.js.map +1 -0
- package/dist/code-intelligence/visualization/C4ComponentDiagramBuilder.d.ts +75 -0
- package/dist/code-intelligence/visualization/C4ComponentDiagramBuilder.d.ts.map +1 -0
- package/dist/code-intelligence/visualization/C4ComponentDiagramBuilder.js +267 -0
- package/dist/code-intelligence/visualization/C4ComponentDiagramBuilder.js.map +1 -0
- package/dist/code-intelligence/visualization/C4ContainerDiagramBuilder.d.ts +138 -0
- package/dist/code-intelligence/visualization/C4ContainerDiagramBuilder.d.ts.map +1 -0
- package/dist/code-intelligence/visualization/C4ContainerDiagramBuilder.js +343 -0
- package/dist/code-intelligence/visualization/C4ContainerDiagramBuilder.js.map +1 -0
- package/dist/code-intelligence/visualization/C4ContextDiagramBuilder.d.ts +67 -0
- package/dist/code-intelligence/visualization/C4ContextDiagramBuilder.d.ts.map +1 -0
- package/dist/code-intelligence/visualization/C4ContextDiagramBuilder.js +152 -0
- package/dist/code-intelligence/visualization/C4ContextDiagramBuilder.js.map +1 -0
- package/dist/code-intelligence/visualization/MermaidGenerator.d.ts +79 -0
- package/dist/code-intelligence/visualization/MermaidGenerator.d.ts.map +1 -1
- package/dist/code-intelligence/visualization/MermaidGenerator.js +143 -0
- package/dist/code-intelligence/visualization/MermaidGenerator.js.map +1 -1
- package/dist/config/ConfigLoader.d.ts +1 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -1
- package/dist/config/ConfigLoader.js +33 -3
- package/dist/config/ConfigLoader.js.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/mcp/handlers/integration/integration-test-orchestrate.d.ts.map +1 -1
- package/dist/mcp/handlers/integration/integration-test-orchestrate.js +6 -9
- package/dist/mcp/handlers/integration/integration-test-orchestrate.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Component Boundary Analyzer for C4 Model Integration
|
|
4
|
+
*
|
|
5
|
+
* Detects logical component boundaries within a codebase for C4 Component diagrams.
|
|
6
|
+
* Analyzes directory structure, file organization, and import patterns to identify
|
|
7
|
+
* components and their relationships.
|
|
8
|
+
*
|
|
9
|
+
* Supports detection of:
|
|
10
|
+
* - Layered architecture (presentation, business, data layers)
|
|
11
|
+
* - Modular architecture (domain modules)
|
|
12
|
+
* - Feature-based architecture (vertical slices)
|
|
13
|
+
* - Package-based organization
|
|
14
|
+
*/
|
|
15
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
18
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
19
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
20
|
+
}
|
|
21
|
+
Object.defineProperty(o, k2, desc);
|
|
22
|
+
}) : (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
o[k2] = m[k];
|
|
25
|
+
}));
|
|
26
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
27
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
28
|
+
}) : function(o, v) {
|
|
29
|
+
o["default"] = v;
|
|
30
|
+
});
|
|
31
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
32
|
+
var ownKeys = function(o) {
|
|
33
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
34
|
+
var ar = [];
|
|
35
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
36
|
+
return ar;
|
|
37
|
+
};
|
|
38
|
+
return ownKeys(o);
|
|
39
|
+
};
|
|
40
|
+
return function (mod) {
|
|
41
|
+
if (mod && mod.__esModule) return mod;
|
|
42
|
+
var result = {};
|
|
43
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
44
|
+
__setModuleDefault(result, mod);
|
|
45
|
+
return result;
|
|
46
|
+
};
|
|
47
|
+
})();
|
|
48
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
49
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
50
|
+
};
|
|
51
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
|
+
exports.ComponentBoundaryAnalyzer = void 0;
|
|
53
|
+
const path = __importStar(require("path"));
|
|
54
|
+
const fs = __importStar(require("fs/promises"));
|
|
55
|
+
const fast_glob_1 = __importDefault(require("fast-glob"));
|
|
56
|
+
const DEFAULT_CONFIG = {
|
|
57
|
+
rootDir: './src',
|
|
58
|
+
minFilesPerComponent: 2,
|
|
59
|
+
analyzeImports: true,
|
|
60
|
+
excludePatterns: ['**/*.test.ts', '**/*.spec.ts', '**/node_modules/**', '**/__mocks__/**'],
|
|
61
|
+
maxDepth: 5,
|
|
62
|
+
};
|
|
63
|
+
const LAYER_PATTERNS = [
|
|
64
|
+
{
|
|
65
|
+
name: 'Presentation',
|
|
66
|
+
type: 'presentation',
|
|
67
|
+
patterns: ['controllers', 'routes', 'handlers', 'views', 'pages', 'ui', 'api', 'cli', 'commands'],
|
|
68
|
+
responsibilities: ['Handle HTTP requests', 'Manage user interface', 'Process API calls', 'Execute CLI commands'],
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'Business Logic',
|
|
72
|
+
type: 'business',
|
|
73
|
+
patterns: ['services', 'domain', 'use-cases', 'usecases', 'business', 'logic', 'core', 'agents'],
|
|
74
|
+
responsibilities: ['Implement business rules', 'Coordinate operations', 'Process domain logic', 'Manage workflows'],
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'Data Access',
|
|
78
|
+
type: 'data',
|
|
79
|
+
patterns: ['repositories', 'models', 'entities', 'database', 'db', 'storage', 'dao', 'persistence'],
|
|
80
|
+
responsibilities: ['Access database', 'Manage data persistence', 'Query data stores', 'Handle data models'],
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: 'Infrastructure',
|
|
84
|
+
type: 'infrastructure',
|
|
85
|
+
patterns: ['mcp', 'providers', 'adapters', 'integrations', 'external', 'clients'],
|
|
86
|
+
responsibilities: ['External integrations', 'Third-party services', 'Infrastructure concerns', 'Service adapters'],
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'Core',
|
|
90
|
+
type: 'core',
|
|
91
|
+
patterns: ['core', 'shared', 'common'],
|
|
92
|
+
responsibilities: ['Shared functionality', 'Common utilities', 'Core abstractions', 'Base classes'],
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
name: 'Utilities',
|
|
96
|
+
type: 'utility',
|
|
97
|
+
patterns: ['utils', 'helpers', 'lib', 'tools'],
|
|
98
|
+
responsibilities: ['Helper functions', 'Utility methods', 'Support tools', 'Common helpers'],
|
|
99
|
+
},
|
|
100
|
+
];
|
|
101
|
+
/**
|
|
102
|
+
* Component Boundary Analyzer
|
|
103
|
+
*
|
|
104
|
+
* Analyzes codebase structure to identify component boundaries
|
|
105
|
+
* for C4 Component diagrams.
|
|
106
|
+
*/
|
|
107
|
+
class ComponentBoundaryAnalyzer {
|
|
108
|
+
constructor(rootDir, config = {}) {
|
|
109
|
+
this.componentIdCounter = 0;
|
|
110
|
+
this.relationshipIdCounter = 0;
|
|
111
|
+
this.config = {
|
|
112
|
+
...DEFAULT_CONFIG,
|
|
113
|
+
...config,
|
|
114
|
+
rootDir,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Analyze codebase to detect component boundaries.
|
|
119
|
+
*/
|
|
120
|
+
async analyze() {
|
|
121
|
+
const startTime = Date.now();
|
|
122
|
+
// Step 1: Detect components based on directory structure
|
|
123
|
+
const components = await this.detectComponents();
|
|
124
|
+
// Step 2: Analyze relationships between components
|
|
125
|
+
const relationships = this.config.analyzeImports
|
|
126
|
+
? await this.analyzeRelationships(components)
|
|
127
|
+
: [];
|
|
128
|
+
const analysisTime = Date.now() - startTime;
|
|
129
|
+
console.log(`[ComponentBoundaryAnalyzer] Analysis complete in ${analysisTime}ms`);
|
|
130
|
+
console.log(`[ComponentBoundaryAnalyzer] Found ${components.length} components, ${relationships.length} relationships`);
|
|
131
|
+
return {
|
|
132
|
+
components,
|
|
133
|
+
relationships,
|
|
134
|
+
metadata: {
|
|
135
|
+
timestamp: Date.now(),
|
|
136
|
+
durationMs: analysisTime,
|
|
137
|
+
filesAnalyzed: components.reduce((sum, c) => sum + c.files.length, 0),
|
|
138
|
+
containersDetected: 0,
|
|
139
|
+
layersDetected: components.filter(c => c.type === 'layer').length,
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Detect components based on directory structure.
|
|
145
|
+
*/
|
|
146
|
+
async detectComponents() {
|
|
147
|
+
const components = [];
|
|
148
|
+
// Get all source files
|
|
149
|
+
const files = await this.getSourceFiles();
|
|
150
|
+
// Group files by directory
|
|
151
|
+
const filesByDir = this.groupFilesByDirectory(files);
|
|
152
|
+
// Analyze each directory as potential component
|
|
153
|
+
for (const [dir, dirFiles] of filesByDir.entries()) {
|
|
154
|
+
if (dirFiles.length < this.config.minFilesPerComponent) {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
const component = this.createComponentFromDirectory(dir, dirFiles);
|
|
158
|
+
if (component) {
|
|
159
|
+
components.push(component);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Sort components by type and name
|
|
163
|
+
components.sort((a, b) => {
|
|
164
|
+
if (a.type !== b.type) {
|
|
165
|
+
return a.type.localeCompare(b.type);
|
|
166
|
+
}
|
|
167
|
+
return a.name.localeCompare(b.name);
|
|
168
|
+
});
|
|
169
|
+
return components;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Get all source files excluding test files and node_modules.
|
|
173
|
+
*/
|
|
174
|
+
async getSourceFiles() {
|
|
175
|
+
const patterns = [
|
|
176
|
+
`${this.config.rootDir}/**/*.ts`,
|
|
177
|
+
`${this.config.rootDir}/**/*.tsx`,
|
|
178
|
+
`${this.config.rootDir}/**/*.js`,
|
|
179
|
+
`${this.config.rootDir}/**/*.jsx`,
|
|
180
|
+
`${this.config.rootDir}/**/*.py`,
|
|
181
|
+
`${this.config.rootDir}/**/*.go`,
|
|
182
|
+
`${this.config.rootDir}/**/*.rs`,
|
|
183
|
+
];
|
|
184
|
+
const files = await (0, fast_glob_1.default)(patterns, {
|
|
185
|
+
ignore: this.config.excludePatterns,
|
|
186
|
+
absolute: true,
|
|
187
|
+
onlyFiles: true,
|
|
188
|
+
});
|
|
189
|
+
return files;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Group files by their parent directory.
|
|
193
|
+
*/
|
|
194
|
+
groupFilesByDirectory(files) {
|
|
195
|
+
const filesByDir = new Map();
|
|
196
|
+
for (const file of files) {
|
|
197
|
+
const dir = path.dirname(file);
|
|
198
|
+
// Only consider directories at appropriate depth
|
|
199
|
+
const relativePath = path.relative(this.config.rootDir, dir);
|
|
200
|
+
const depth = relativePath.split(path.sep).length;
|
|
201
|
+
if (depth > this.config.maxDepth) {
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
const existing = filesByDir.get(dir) || [];
|
|
205
|
+
existing.push(file);
|
|
206
|
+
filesByDir.set(dir, existing);
|
|
207
|
+
}
|
|
208
|
+
return filesByDir;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Create a component from a directory and its files.
|
|
212
|
+
*/
|
|
213
|
+
createComponentFromDirectory(dir, files) {
|
|
214
|
+
const relativePath = path.relative(this.config.rootDir, dir);
|
|
215
|
+
const dirName = path.basename(dir);
|
|
216
|
+
// Skip root directory
|
|
217
|
+
if (relativePath === '' || relativePath === '.') {
|
|
218
|
+
return null;
|
|
219
|
+
}
|
|
220
|
+
// Detect component type and metadata
|
|
221
|
+
const layerInfo = this.detectLayerType(dirName, relativePath);
|
|
222
|
+
const componentId = this.generateComponentId();
|
|
223
|
+
const componentName = this.formatComponentName(dirName);
|
|
224
|
+
const component = {
|
|
225
|
+
id: componentId,
|
|
226
|
+
name: componentName,
|
|
227
|
+
type: layerInfo.type,
|
|
228
|
+
description: layerInfo.description,
|
|
229
|
+
technology: this.detectTechnology(files),
|
|
230
|
+
files: files.map(f => path.relative(this.config.rootDir, f)),
|
|
231
|
+
responsibilities: layerInfo.responsibilities,
|
|
232
|
+
};
|
|
233
|
+
return component;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Detect layer type from directory name and path.
|
|
237
|
+
*/
|
|
238
|
+
detectLayerType(dirName, relativePath) {
|
|
239
|
+
const lowerDirName = dirName.toLowerCase();
|
|
240
|
+
const lowerPath = relativePath.toLowerCase();
|
|
241
|
+
// Check against layer patterns
|
|
242
|
+
for (const layer of LAYER_PATTERNS) {
|
|
243
|
+
for (const pattern of layer.patterns) {
|
|
244
|
+
if (lowerDirName === pattern || lowerDirName.includes(pattern) || lowerPath.includes(pattern)) {
|
|
245
|
+
return {
|
|
246
|
+
type: 'layer',
|
|
247
|
+
description: `${layer.name} layer handling ${layer.responsibilities[0].toLowerCase()}`,
|
|
248
|
+
responsibilities: layer.responsibilities,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// Check for feature-based structure (e.g., src/features/user, src/domains/auth)
|
|
254
|
+
if (lowerPath.includes('features') || lowerPath.includes('domains') || lowerPath.includes('modules')) {
|
|
255
|
+
return {
|
|
256
|
+
type: 'feature',
|
|
257
|
+
description: `Feature module for ${dirName}`,
|
|
258
|
+
responsibilities: [`Manage ${dirName} feature`, 'Handle related business logic'],
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
// Default to module type
|
|
262
|
+
return {
|
|
263
|
+
type: 'module',
|
|
264
|
+
description: `Module for ${dirName}`,
|
|
265
|
+
responsibilities: [`Provide ${dirName} functionality`],
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Detect primary technology from file extensions.
|
|
270
|
+
*/
|
|
271
|
+
detectTechnology(files) {
|
|
272
|
+
const extensions = files.map(f => path.extname(f));
|
|
273
|
+
const counts = new Map();
|
|
274
|
+
for (const ext of extensions) {
|
|
275
|
+
counts.set(ext, (counts.get(ext) || 0) + 1);
|
|
276
|
+
}
|
|
277
|
+
// Find most common extension
|
|
278
|
+
let maxExt = '.ts';
|
|
279
|
+
let maxCount = 0;
|
|
280
|
+
for (const [ext, count] of counts.entries()) {
|
|
281
|
+
if (count > maxCount) {
|
|
282
|
+
maxExt = ext;
|
|
283
|
+
maxCount = count;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// Map extension to technology
|
|
287
|
+
const techMap = {
|
|
288
|
+
'.ts': 'TypeScript',
|
|
289
|
+
'.tsx': 'TypeScript/React',
|
|
290
|
+
'.js': 'JavaScript',
|
|
291
|
+
'.jsx': 'JavaScript/React',
|
|
292
|
+
'.py': 'Python',
|
|
293
|
+
'.go': 'Go',
|
|
294
|
+
'.rs': 'Rust',
|
|
295
|
+
};
|
|
296
|
+
return techMap[maxExt] || 'Unknown';
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Analyze relationships between components based on import patterns.
|
|
300
|
+
*/
|
|
301
|
+
async analyzeRelationships(components) {
|
|
302
|
+
const relationships = [];
|
|
303
|
+
const relationshipSet = new Set(); // Prevent duplicates
|
|
304
|
+
for (const sourceComponent of components) {
|
|
305
|
+
for (const file of sourceComponent.files) {
|
|
306
|
+
const filePath = path.join(this.config.rootDir, file);
|
|
307
|
+
try {
|
|
308
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
309
|
+
const imports = this.extractImports(content);
|
|
310
|
+
for (const importPath of imports) {
|
|
311
|
+
const targetComponent = this.findComponentByImport(importPath, components, filePath);
|
|
312
|
+
if (targetComponent && targetComponent.id !== sourceComponent.id) {
|
|
313
|
+
const relationshipKey = `${sourceComponent.id}->${targetComponent.id}`;
|
|
314
|
+
if (!relationshipSet.has(relationshipKey)) {
|
|
315
|
+
relationships.push({
|
|
316
|
+
sourceId: sourceComponent.id,
|
|
317
|
+
targetId: targetComponent.id,
|
|
318
|
+
type: 'uses',
|
|
319
|
+
count: 1,
|
|
320
|
+
});
|
|
321
|
+
relationshipSet.add(relationshipKey);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
catch (error) {
|
|
327
|
+
// Skip files that can't be read
|
|
328
|
+
console.warn(`[ComponentBoundaryAnalyzer] Failed to read ${filePath}:`, error);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return relationships;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Extract import paths from file content.
|
|
336
|
+
*/
|
|
337
|
+
extractImports(content) {
|
|
338
|
+
const imports = [];
|
|
339
|
+
// Match ES6 imports
|
|
340
|
+
const es6ImportRegex = /import\s+(?:[\w*\s{},]*)\s+from\s+['"]([^'"]+)['"]/g;
|
|
341
|
+
let match;
|
|
342
|
+
while ((match = es6ImportRegex.exec(content)) !== null) {
|
|
343
|
+
imports.push(match[1]);
|
|
344
|
+
}
|
|
345
|
+
// Match CommonJS require
|
|
346
|
+
const requireRegex = /require\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
|
|
347
|
+
while ((match = requireRegex.exec(content)) !== null) {
|
|
348
|
+
imports.push(match[1]);
|
|
349
|
+
}
|
|
350
|
+
return imports;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Find component that contains the imported file.
|
|
354
|
+
*/
|
|
355
|
+
findComponentByImport(importPath, components, sourceFilePath) {
|
|
356
|
+
// Skip external packages
|
|
357
|
+
if (!importPath.startsWith('.') && !importPath.startsWith('/')) {
|
|
358
|
+
return null;
|
|
359
|
+
}
|
|
360
|
+
// Resolve import path
|
|
361
|
+
const sourceDir = path.dirname(sourceFilePath);
|
|
362
|
+
const resolvedPath = path.resolve(sourceDir, importPath);
|
|
363
|
+
const relativePath = path.relative(this.config.rootDir, resolvedPath);
|
|
364
|
+
// Try with common extensions
|
|
365
|
+
const extensions = ['.ts', '.tsx', '.js', '.jsx', '.py', '.go', '.rs'];
|
|
366
|
+
const candidates = [
|
|
367
|
+
relativePath,
|
|
368
|
+
...extensions.map(ext => relativePath + ext),
|
|
369
|
+
path.join(relativePath, 'index.ts'),
|
|
370
|
+
path.join(relativePath, 'index.js'),
|
|
371
|
+
];
|
|
372
|
+
// Find component containing any candidate path
|
|
373
|
+
for (const component of components) {
|
|
374
|
+
for (const candidate of candidates) {
|
|
375
|
+
if (component.files.some((f) => f === candidate || f.startsWith(candidate + path.sep))) {
|
|
376
|
+
return component;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return null;
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Generate unique component ID.
|
|
384
|
+
*/
|
|
385
|
+
generateComponentId() {
|
|
386
|
+
return `component-${++this.componentIdCounter}`;
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Format directory name as component name.
|
|
390
|
+
*/
|
|
391
|
+
formatComponentName(dirName) {
|
|
392
|
+
// Convert kebab-case or snake_case to Title Case
|
|
393
|
+
return dirName
|
|
394
|
+
.split(/[-_]/)
|
|
395
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
|
396
|
+
.join(' ');
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
exports.ComponentBoundaryAnalyzer = ComponentBoundaryAnalyzer;
|
|
400
|
+
//# sourceMappingURL=ComponentBoundaryAnalyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComponentBoundaryAnalyzer.js","sourceRoot":"","sources":["../../../src/code-intelligence/inference/ComponentBoundaryAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ExternalSystem } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Detects external systems and dependencies for C4 Context diagrams
|
|
4
|
+
*/
|
|
5
|
+
export declare class ExternalSystemDetector {
|
|
6
|
+
private readonly rootDir;
|
|
7
|
+
private static readonly PACKAGE_MAPPINGS;
|
|
8
|
+
private static readonly ENV_PATTERNS;
|
|
9
|
+
constructor(rootDir: string);
|
|
10
|
+
/**
|
|
11
|
+
* Detect all external systems used by the project
|
|
12
|
+
*/
|
|
13
|
+
detect(): Promise<ExternalSystem[]>;
|
|
14
|
+
/**
|
|
15
|
+
* Analyze package.json dependencies to identify external systems
|
|
16
|
+
*/
|
|
17
|
+
private analyzePackageJson;
|
|
18
|
+
/**
|
|
19
|
+
* Analyze .env and .env.example files for external system hints
|
|
20
|
+
*/
|
|
21
|
+
private analyzeEnvFiles;
|
|
22
|
+
/**
|
|
23
|
+
* Deduplicate systems by ID, merging descriptions
|
|
24
|
+
*/
|
|
25
|
+
private deduplicateSystems;
|
|
26
|
+
/**
|
|
27
|
+
* Generate a unique system ID based on technology and type
|
|
28
|
+
*/
|
|
29
|
+
private generateSystemId;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=ExternalSystemDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExternalSystemDetector.d.ts","sourceRoot":"","sources":["../../../src/code-intelligence/inference/ExternalSystemDetector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAyB,MAAM,SAAS,CAAC;AAErE;;GAEG;AACH,qBAAa,sBAAsB;IAuZrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAtZpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CA2StC;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAuGlC;gBAE2B,OAAO,EAAE,MAAM;IAE5C;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAezC;;OAEG;YACW,kBAAkB;IAoChC;;OAEG;YACW,eAAe;IAgD7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAIzB"}
|