agentic-qe 2.6.2 → 2.6.3
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 +63 -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/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 +2 -1
|
@@ -0,0 +1,491 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Project Metadata Analyzer for C4 Model Integration
|
|
4
|
+
*
|
|
5
|
+
* Extracts project metadata from configuration files to generate C4 diagrams:
|
|
6
|
+
* - Parse package.json for system name, type, and technology stack
|
|
7
|
+
* - Parse docker-compose.yml and Dockerfile for container detection
|
|
8
|
+
* - Analyze directory structure to infer system architecture
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.ProjectMetadataAnalyzer = void 0;
|
|
45
|
+
const fs = __importStar(require("fs-extra"));
|
|
46
|
+
const path = __importStar(require("path"));
|
|
47
|
+
const yaml = __importStar(require("yaml"));
|
|
48
|
+
const crypto_1 = require("crypto");
|
|
49
|
+
class ProjectMetadataAnalyzer {
|
|
50
|
+
constructor(rootDir) {
|
|
51
|
+
this.rootDir = rootDir;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Analyze project and extract metadata
|
|
55
|
+
*/
|
|
56
|
+
async analyze() {
|
|
57
|
+
const startTime = Date.now();
|
|
58
|
+
try {
|
|
59
|
+
// Parse package.json
|
|
60
|
+
const packageData = await this.parsePackageJson();
|
|
61
|
+
// Detect containers
|
|
62
|
+
const containers = await this.detectContainers();
|
|
63
|
+
// Detect system type
|
|
64
|
+
const systemType = await this.detectSystemType();
|
|
65
|
+
// Detect technology stack
|
|
66
|
+
const techStack = await this.detectTechnologyStack();
|
|
67
|
+
// Detect layers
|
|
68
|
+
const layers = await this.detectLayers();
|
|
69
|
+
const metadata = {
|
|
70
|
+
name: packageData.systemName || 'unknown-system',
|
|
71
|
+
description: packageData.systemDescription,
|
|
72
|
+
systemType,
|
|
73
|
+
technology: techStack.primary,
|
|
74
|
+
containers,
|
|
75
|
+
layers,
|
|
76
|
+
version: packageData.version,
|
|
77
|
+
repository: packageData.repository,
|
|
78
|
+
};
|
|
79
|
+
return metadata;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
throw new Error(`Failed to analyze project metadata: ${error instanceof Error ? error.message : String(error)}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Parse package.json for basic metadata
|
|
87
|
+
*/
|
|
88
|
+
async parsePackageJson() {
|
|
89
|
+
const packagePath = path.join(this.rootDir, 'package.json');
|
|
90
|
+
if (!(await fs.pathExists(packagePath))) {
|
|
91
|
+
return {
|
|
92
|
+
hasBin: false,
|
|
93
|
+
hasMain: false,
|
|
94
|
+
hasTypes: false,
|
|
95
|
+
dependencies: {},
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const packageJson = await fs.readJson(packagePath);
|
|
99
|
+
const repository = typeof packageJson.repository === 'string'
|
|
100
|
+
? packageJson.repository
|
|
101
|
+
: packageJson.repository?.url;
|
|
102
|
+
return {
|
|
103
|
+
systemName: packageJson.name,
|
|
104
|
+
systemDescription: packageJson.description,
|
|
105
|
+
version: packageJson.version,
|
|
106
|
+
repository,
|
|
107
|
+
hasBin: !!packageJson.bin,
|
|
108
|
+
hasMain: !!packageJson.main,
|
|
109
|
+
hasTypes: !!packageJson.types,
|
|
110
|
+
dependencies: {
|
|
111
|
+
...packageJson.dependencies,
|
|
112
|
+
...packageJson.devDependencies,
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Parse docker-compose.yml to detect containers
|
|
118
|
+
*/
|
|
119
|
+
async parseDockerCompose() {
|
|
120
|
+
const composePath = path.join(this.rootDir, 'docker-compose.yml');
|
|
121
|
+
if (!(await fs.pathExists(composePath))) {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
const content = await fs.readFile(composePath, 'utf-8');
|
|
126
|
+
const compose = yaml.parse(content);
|
|
127
|
+
if (!compose.services) {
|
|
128
|
+
return [];
|
|
129
|
+
}
|
|
130
|
+
const containers = [];
|
|
131
|
+
for (const [serviceName, service] of Object.entries(compose.services)) {
|
|
132
|
+
const container = this.parseDockerService(serviceName, service);
|
|
133
|
+
if (container) {
|
|
134
|
+
containers.push(container);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return containers;
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
console.warn(`Failed to parse docker-compose.yml: ${error}`);
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Parse a Docker service definition
|
|
146
|
+
*/
|
|
147
|
+
parseDockerService(serviceName, service) {
|
|
148
|
+
const image = service.image || '';
|
|
149
|
+
const type = this.detectContainerType(serviceName, image, service);
|
|
150
|
+
const technology = this.extractTechnology(image, service);
|
|
151
|
+
const port = this.extractPort(service.ports);
|
|
152
|
+
const dependencies = [];
|
|
153
|
+
if (service.depends_on) {
|
|
154
|
+
if (Array.isArray(service.depends_on)) {
|
|
155
|
+
dependencies.push(...service.depends_on);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
dependencies.push(...Object.keys(service.depends_on));
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
id: this.generateContainerId(serviceName),
|
|
163
|
+
name: serviceName,
|
|
164
|
+
type,
|
|
165
|
+
technology,
|
|
166
|
+
port,
|
|
167
|
+
dependencies,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Detect container type from service name and image
|
|
172
|
+
*/
|
|
173
|
+
detectContainerType(serviceName, image, service) {
|
|
174
|
+
const lowerName = serviceName.toLowerCase();
|
|
175
|
+
const lowerImage = image.toLowerCase();
|
|
176
|
+
// Database detection
|
|
177
|
+
if (lowerName.includes('db') ||
|
|
178
|
+
lowerName.includes('database') ||
|
|
179
|
+
lowerImage.includes('postgres') ||
|
|
180
|
+
lowerImage.includes('mysql') ||
|
|
181
|
+
lowerImage.includes('mongo') ||
|
|
182
|
+
lowerImage.includes('mariadb')) {
|
|
183
|
+
return 'database';
|
|
184
|
+
}
|
|
185
|
+
// Cache detection
|
|
186
|
+
if (lowerName.includes('redis') ||
|
|
187
|
+
lowerName.includes('cache') ||
|
|
188
|
+
lowerImage.includes('redis') ||
|
|
189
|
+
lowerImage.includes('memcached')) {
|
|
190
|
+
return 'cache';
|
|
191
|
+
}
|
|
192
|
+
// Queue detection
|
|
193
|
+
if (lowerName.includes('queue') ||
|
|
194
|
+
lowerName.includes('rabbitmq') ||
|
|
195
|
+
lowerName.includes('kafka') ||
|
|
196
|
+
lowerImage.includes('rabbitmq') ||
|
|
197
|
+
lowerImage.includes('kafka') ||
|
|
198
|
+
lowerImage.includes('redis') // Redis can be a queue
|
|
199
|
+
) {
|
|
200
|
+
return 'queue';
|
|
201
|
+
}
|
|
202
|
+
// API detection
|
|
203
|
+
if (lowerName.includes('api') || lowerName.includes('gateway')) {
|
|
204
|
+
return 'api';
|
|
205
|
+
}
|
|
206
|
+
// Service detection
|
|
207
|
+
if (lowerName.includes('service') || lowerName.includes('worker')) {
|
|
208
|
+
return 'service';
|
|
209
|
+
}
|
|
210
|
+
// Default to application
|
|
211
|
+
return 'application';
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Extract technology from image or service definition
|
|
215
|
+
*/
|
|
216
|
+
extractTechnology(image, service) {
|
|
217
|
+
const lowerImage = image.toLowerCase();
|
|
218
|
+
// Common technology detection
|
|
219
|
+
const techMap = {
|
|
220
|
+
postgres: 'PostgreSQL',
|
|
221
|
+
mysql: 'MySQL',
|
|
222
|
+
mariadb: 'MariaDB',
|
|
223
|
+
mongo: 'MongoDB',
|
|
224
|
+
redis: 'Redis',
|
|
225
|
+
rabbitmq: 'RabbitMQ',
|
|
226
|
+
kafka: 'Apache Kafka',
|
|
227
|
+
nginx: 'Nginx',
|
|
228
|
+
node: 'Node.js',
|
|
229
|
+
python: 'Python',
|
|
230
|
+
java: 'Java',
|
|
231
|
+
golang: 'Go',
|
|
232
|
+
rust: 'Rust',
|
|
233
|
+
};
|
|
234
|
+
for (const [key, tech] of Object.entries(techMap)) {
|
|
235
|
+
if (lowerImage.includes(key)) {
|
|
236
|
+
return tech;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// Extract from image name
|
|
240
|
+
const parts = image.split(':')[0].split('/');
|
|
241
|
+
const imageName = parts[parts.length - 1];
|
|
242
|
+
return imageName || 'Unknown';
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Extract primary port from ports configuration
|
|
246
|
+
*/
|
|
247
|
+
extractPort(ports) {
|
|
248
|
+
if (!ports || ports.length === 0) {
|
|
249
|
+
return undefined;
|
|
250
|
+
}
|
|
251
|
+
// Parse first port mapping (e.g., "3000:3000" or "3000")
|
|
252
|
+
const firstPort = ports[0];
|
|
253
|
+
const match = firstPort.match(/(\d+):?(\d+)?/);
|
|
254
|
+
if (match) {
|
|
255
|
+
// Return external port (first number)
|
|
256
|
+
return parseInt(match[1], 10);
|
|
257
|
+
}
|
|
258
|
+
return undefined;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Parse Dockerfile to detect base image and technology
|
|
262
|
+
*/
|
|
263
|
+
async parseDockerfile() {
|
|
264
|
+
const dockerfilePath = path.join(this.rootDir, 'Dockerfile');
|
|
265
|
+
if (!(await fs.pathExists(dockerfilePath))) {
|
|
266
|
+
return {};
|
|
267
|
+
}
|
|
268
|
+
try {
|
|
269
|
+
const content = await fs.readFile(dockerfilePath, 'utf-8');
|
|
270
|
+
const instructions = this.parseDockerInstructions(content);
|
|
271
|
+
// Find FROM instruction
|
|
272
|
+
const fromInstruction = instructions.find((i) => i.instruction === 'FROM');
|
|
273
|
+
if (!fromInstruction) {
|
|
274
|
+
return {};
|
|
275
|
+
}
|
|
276
|
+
const baseImage = fromInstruction.arguments.split(' ')[0];
|
|
277
|
+
const technology = this.extractTechnology(baseImage, {});
|
|
278
|
+
return { baseImage, technology };
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
console.warn(`Failed to parse Dockerfile: ${error}`);
|
|
282
|
+
return {};
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Parse Dockerfile instructions
|
|
287
|
+
*/
|
|
288
|
+
parseDockerInstructions(content) {
|
|
289
|
+
const lines = content.split('\n');
|
|
290
|
+
const instructions = [];
|
|
291
|
+
for (const line of lines) {
|
|
292
|
+
const trimmed = line.trim();
|
|
293
|
+
// Skip comments and empty lines
|
|
294
|
+
if (!trimmed || trimmed.startsWith('#')) {
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
// Parse instruction
|
|
298
|
+
const match = trimmed.match(/^([A-Z]+)\s+(.+)$/);
|
|
299
|
+
if (match) {
|
|
300
|
+
instructions.push({
|
|
301
|
+
instruction: match[1],
|
|
302
|
+
arguments: match[2],
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return instructions;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Detect all containers (Docker + inferred)
|
|
310
|
+
*/
|
|
311
|
+
async detectContainers() {
|
|
312
|
+
const containers = [];
|
|
313
|
+
// Containers from docker-compose
|
|
314
|
+
const dockerContainers = await this.parseDockerCompose();
|
|
315
|
+
containers.push(...dockerContainers);
|
|
316
|
+
// Inferred main application container if not in docker-compose
|
|
317
|
+
if (containers.length === 0) {
|
|
318
|
+
const packageData = await this.parsePackageJson();
|
|
319
|
+
const dockerfile = await this.parseDockerfile();
|
|
320
|
+
const mainContainer = {
|
|
321
|
+
id: this.generateContainerId('app'),
|
|
322
|
+
name: packageData.systemName || 'application',
|
|
323
|
+
type: 'application',
|
|
324
|
+
technology: dockerfile.technology || 'Unknown',
|
|
325
|
+
};
|
|
326
|
+
containers.push(mainContainer);
|
|
327
|
+
}
|
|
328
|
+
return containers;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Detect system type based on project structure
|
|
332
|
+
*/
|
|
333
|
+
async detectSystemType() {
|
|
334
|
+
const packageData = await this.parsePackageJson();
|
|
335
|
+
// CLI detection
|
|
336
|
+
if (packageData.hasBin) {
|
|
337
|
+
return 'cli';
|
|
338
|
+
}
|
|
339
|
+
// Library detection
|
|
340
|
+
if (packageData.hasMain && packageData.hasTypes && !packageData.hasBin) {
|
|
341
|
+
return 'library';
|
|
342
|
+
}
|
|
343
|
+
// Microservice vs Monolith detection
|
|
344
|
+
const hasDockerCompose = await fs.pathExists(path.join(this.rootDir, 'docker-compose.yml'));
|
|
345
|
+
const containers = await this.parseDockerCompose();
|
|
346
|
+
if (hasDockerCompose && containers.length > 1) {
|
|
347
|
+
return 'microservice';
|
|
348
|
+
}
|
|
349
|
+
// Check for services directory (common in microservices)
|
|
350
|
+
const servicesDir = path.join(this.rootDir, 'services');
|
|
351
|
+
const hasServicesDir = await fs.pathExists(servicesDir);
|
|
352
|
+
if (hasServicesDir) {
|
|
353
|
+
const entries = await fs.readdir(servicesDir);
|
|
354
|
+
const serviceDirs = await Promise.all(entries.map(async (entry) => {
|
|
355
|
+
const fullPath = path.join(servicesDir, entry);
|
|
356
|
+
const stat = await fs.stat(fullPath);
|
|
357
|
+
return stat.isDirectory();
|
|
358
|
+
}));
|
|
359
|
+
if (serviceDirs.filter(Boolean).length > 1) {
|
|
360
|
+
return 'microservice';
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
// Default to monolith
|
|
364
|
+
return 'monolith';
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Detect technology stack
|
|
368
|
+
*/
|
|
369
|
+
async detectTechnologyStack() {
|
|
370
|
+
const packageData = await this.parsePackageJson();
|
|
371
|
+
const dependencies = packageData.dependencies;
|
|
372
|
+
const frameworks = [];
|
|
373
|
+
const databases = [];
|
|
374
|
+
const infrastructure = [];
|
|
375
|
+
// Detect frameworks
|
|
376
|
+
if (dependencies.express)
|
|
377
|
+
frameworks.push('Express');
|
|
378
|
+
if (dependencies.fastify)
|
|
379
|
+
frameworks.push('Fastify');
|
|
380
|
+
if (dependencies.koa)
|
|
381
|
+
frameworks.push('Koa');
|
|
382
|
+
if (dependencies.react)
|
|
383
|
+
frameworks.push('React');
|
|
384
|
+
if (dependencies.vue)
|
|
385
|
+
frameworks.push('Vue');
|
|
386
|
+
if (dependencies.angular)
|
|
387
|
+
frameworks.push('Angular');
|
|
388
|
+
if (dependencies.next)
|
|
389
|
+
frameworks.push('Next.js');
|
|
390
|
+
if (dependencies.nest || dependencies['@nestjs/core'])
|
|
391
|
+
frameworks.push('NestJS');
|
|
392
|
+
// Detect databases
|
|
393
|
+
if (dependencies.pg)
|
|
394
|
+
databases.push('PostgreSQL');
|
|
395
|
+
if (dependencies.mysql || dependencies.mysql2)
|
|
396
|
+
databases.push('MySQL');
|
|
397
|
+
if (dependencies.mongodb || dependencies.mongoose)
|
|
398
|
+
databases.push('MongoDB');
|
|
399
|
+
if (dependencies.redis)
|
|
400
|
+
databases.push('Redis');
|
|
401
|
+
if (dependencies['better-sqlite3'] || dependencies.sqlite3)
|
|
402
|
+
databases.push('SQLite');
|
|
403
|
+
// Detect infrastructure
|
|
404
|
+
if (dependencies.docker || dependencies.dockerode)
|
|
405
|
+
infrastructure.push('Docker');
|
|
406
|
+
if (dependencies.kubernetes || dependencies['@kubernetes/client-node'])
|
|
407
|
+
infrastructure.push('Kubernetes');
|
|
408
|
+
if (dependencies['aws-sdk'])
|
|
409
|
+
infrastructure.push('AWS');
|
|
410
|
+
// Determine primary technology
|
|
411
|
+
let primary = 'TypeScript';
|
|
412
|
+
let runtime = 'Node.js';
|
|
413
|
+
const hasTsConfig = await fs.pathExists(path.join(this.rootDir, 'tsconfig.json'));
|
|
414
|
+
if (!hasTsConfig) {
|
|
415
|
+
primary = 'JavaScript';
|
|
416
|
+
}
|
|
417
|
+
// Check for other runtimes
|
|
418
|
+
const pyRequirements = await fs.pathExists(path.join(this.rootDir, 'requirements.txt'));
|
|
419
|
+
const goMod = await fs.pathExists(path.join(this.rootDir, 'go.mod'));
|
|
420
|
+
const cargoToml = await fs.pathExists(path.join(this.rootDir, 'Cargo.toml'));
|
|
421
|
+
if (pyRequirements) {
|
|
422
|
+
primary = 'Python';
|
|
423
|
+
runtime = 'Python';
|
|
424
|
+
}
|
|
425
|
+
else if (goMod) {
|
|
426
|
+
primary = 'Go';
|
|
427
|
+
runtime = 'Go';
|
|
428
|
+
}
|
|
429
|
+
else if (cargoToml) {
|
|
430
|
+
primary = 'Rust';
|
|
431
|
+
runtime = 'Rust';
|
|
432
|
+
}
|
|
433
|
+
return {
|
|
434
|
+
primary,
|
|
435
|
+
runtime,
|
|
436
|
+
frameworks,
|
|
437
|
+
databases,
|
|
438
|
+
infrastructure,
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Detect architectural layers from directory structure
|
|
443
|
+
*/
|
|
444
|
+
async detectLayers() {
|
|
445
|
+
const layers = [];
|
|
446
|
+
const layerDirs = [
|
|
447
|
+
'controllers',
|
|
448
|
+
'services',
|
|
449
|
+
'repositories',
|
|
450
|
+
'models',
|
|
451
|
+
'routes',
|
|
452
|
+
'middleware',
|
|
453
|
+
'utils',
|
|
454
|
+
'helpers',
|
|
455
|
+
'views',
|
|
456
|
+
'components',
|
|
457
|
+
'domain',
|
|
458
|
+
'infrastructure',
|
|
459
|
+
'application',
|
|
460
|
+
'presentation',
|
|
461
|
+
];
|
|
462
|
+
for (const layerDir of layerDirs) {
|
|
463
|
+
const layerPath = path.join(this.rootDir, 'src', layerDir);
|
|
464
|
+
const exists = await fs.pathExists(layerPath);
|
|
465
|
+
if (exists) {
|
|
466
|
+
layers.push(layerDir);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
return layers;
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Generate container ID
|
|
473
|
+
*/
|
|
474
|
+
generateContainerId(name) {
|
|
475
|
+
return (0, crypto_1.createHash)('md5').update(name).digest('hex').substring(0, 8);
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Get project root directory
|
|
479
|
+
*/
|
|
480
|
+
getRootDir() {
|
|
481
|
+
return this.rootDir;
|
|
482
|
+
}
|
|
483
|
+
/**
|
|
484
|
+
* Set project root directory
|
|
485
|
+
*/
|
|
486
|
+
setRootDir(rootDir) {
|
|
487
|
+
this.rootDir = rootDir;
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
exports.ProjectMetadataAnalyzer = ProjectMetadataAnalyzer;
|
|
491
|
+
//# sourceMappingURL=ProjectMetadataAnalyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectMetadataAnalyzer.js","sourceRoot":"","sources":["../../../src/code-intelligence/inference/ProjectMetadataAnalyzer.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,6CAA+B;AAC/B,2CAA6B;AAC7B,2CAA6B;AAC7B,mCAAoC;AAwDpC,MAAa,uBAAuB;IAClC,YAAoB,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;IAAG,CAAC;IAEvC;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,qBAAqB;YACrB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAElD,oBAAoB;YACpB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAEjD,qBAAqB;YACrB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAEjD,0BAA0B;YAC1B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAErD,gBAAgB;YAChB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAEzC,MAAM,QAAQ,GAAoB;gBAChC,IAAI,EAAE,WAAW,CAAC,UAAU,IAAI,gBAAgB;gBAChD,WAAW,EAAE,WAAW,CAAC,iBAAiB;gBAC1C,UAAU;gBACV,UAAU,EAAE,SAAS,CAAC,OAAO;gBAC7B,UAAU;gBACV,MAAM;gBACN,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,UAAU,EAAE,WAAW,CAAC,UAAU;aACnC,CAAC;YAEF,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,uCACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB;QAU5B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAE5D,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YACxC,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,KAAK;gBACf,YAAY,EAAE,EAAE;aACjB,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAgB,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEhE,MAAM,UAAU,GACd,OAAO,WAAW,CAAC,UAAU,KAAK,QAAQ;YACxC,CAAC,CAAC,WAAW,CAAC,UAAU;YACxB,CAAC,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC;QAElC,OAAO;YACL,UAAU,EAAE,WAAW,CAAC,IAAI;YAC5B,iBAAiB,EAAE,WAAW,CAAC,WAAW;YAC1C,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,UAAU;YACV,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG;YACzB,OAAO,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI;YAC3B,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK;YAC7B,YAAY,EAAE;gBACZ,GAAG,WAAW,CAAC,YAAY;gBAC3B,GAAG,WAAW,CAAC,eAAe;aAC/B;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;QAElE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YACxC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,OAAO,GAAkB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEnD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACtB,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,UAAU,GAAgB,EAAE,CAAC;YAEnC,KAAK,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtE,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBAChE,IAAI,SAAS,EAAE,CAAC;oBACd,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;YAED,OAAO,UAAU,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,uCAAuC,KAAK,EAAE,CAAC,CAAC;YAC7D,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,kBAAkB,CACxB,WAAmB,EACnB,OAAsB;QAEtB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE7C,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtC,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;YACzC,IAAI,EAAE,WAAW;YACjB,IAAI;YACJ,UAAU;YACV,IAAI;YACJ,YAAY;SACb,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,WAAmB,EACnB,KAAa,EACb,OAAsB;QAEtB,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEvC,qBAAqB;QACrB,IACE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;YACxB,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC9B,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC/B,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC5B,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC5B,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAC9B,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,kBAAkB;QAClB,IACE,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC3B,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC3B,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC5B,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,EAChC,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,kBAAkB;QAClB,IACE,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC3B,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC9B,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC3B,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC/B,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC5B,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,uBAAuB;UACpD,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,gBAAgB;QAChB,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,oBAAoB;QACpB,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClE,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,yBAAyB;QACzB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,KAAa,EAAE,OAAsB;QAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEvC,8BAA8B;QAC9B,MAAM,OAAO,GAA2B;YACtC,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,cAAc;YACrB,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,MAAM;SACb,CAAC;QAEF,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE1C,OAAO,SAAS,IAAI,SAAS,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,KAAgB;QAClC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,yDAAyD;QACzD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE/C,IAAI,KAAK,EAAE,CAAC;YACV,sCAAsC;YACtC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe;QAI3B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAE7D,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;YAC3C,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YAE3D,wBAAwB;YACxB,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,MAAM,CAChC,CAAC;YAEF,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAEzD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC;YACrD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,OAAe;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,YAAY,GAAwB,EAAE,CAAC;QAE7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,gCAAgC;YAChC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,SAAS;YACX,CAAC;YAED,oBAAoB;YACpB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACjD,IAAI,KAAK,EAAE,CAAC;gBACV,YAAY,CAAC,IAAI,CAAC;oBAChB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;oBACrB,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB;QAC5B,MAAM,UAAU,GAAgB,EAAE,CAAC;QAEnC,iCAAiC;QACjC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACzD,UAAU,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;QAErC,+DAA+D;QAC/D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAClD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAEhD,MAAM,aAAa,GAAc;gBAC/B,EAAE,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;gBACnC,IAAI,EAAE,WAAW,CAAC,UAAU,IAAI,aAAa;gBAC7C,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE,UAAU,CAAC,UAAU,IAAI,SAAS;aAC/C,CAAC;YAEF,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB;QAC5B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAElD,gBAAgB;QAChB,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,oBAAoB;QACpB,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACvE,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,qCAAqC;QACrC,MAAM,gBAAgB,GAAG,MAAM,EAAE,CAAC,UAAU,CAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAC9C,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAEnD,IAAI,gBAAgB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,yDAAyD;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACxD,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAExD,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC9C,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CACnC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;gBAC/C,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;YAC5B,CAAC,CAAC,CACH,CAAC;YAEF,IAAI,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3C,OAAO,cAAc,CAAC;YACxB,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,qBAAqB;QACjC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAClD,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC;QAE9C,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,cAAc,GAAa,EAAE,CAAC;QAEpC,oBAAoB;QACpB,IAAI,YAAY,CAAC,OAAO;YAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,YAAY,CAAC,OAAO;YAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,YAAY,CAAC,GAAG;YAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,YAAY,CAAC,KAAK;YAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,YAAY,CAAC,GAAG;YAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,YAAY,CAAC,OAAO;YAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,YAAY,CAAC,IAAI;YAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,cAAc,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEjF,mBAAmB;QACnB,IAAI,YAAY,CAAC,EAAE;YAAE,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,YAAY,CAAC,KAAK,IAAI,YAAY,CAAC,MAAM;YAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvE,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,QAAQ;YAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7E,IAAI,YAAY,CAAC,KAAK;YAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,YAAY,CAAC,gBAAgB,CAAC,IAAI,YAAY,CAAC,OAAO;YACxD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3B,wBAAwB;QACxB,IAAI,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,SAAS;YAC/C,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,YAAY,CAAC,UAAU,IAAI,YAAY,CAAC,yBAAyB,CAAC;YACpE,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACpC,IAAI,YAAY,CAAC,SAAS,CAAC;YAAE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExD,+BAA+B;QAC/B,IAAI,OAAO,GAAG,YAAY,CAAC;QAC3B,IAAI,OAAO,GAAG,SAAS,CAAC;QAExB,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,GAAG,YAAY,CAAC;QACzB,CAAC;QAED,2BAA2B;QAC3B,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,UAAU,CACxC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAC5C,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QAE7E,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,GAAG,QAAQ,CAAC;YACnB,OAAO,GAAG,QAAQ,CAAC;QACrB,CAAC;aAAM,IAAI,KAAK,EAAE,CAAC;YACjB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,OAAO,GAAG,MAAM,CAAC;YACjB,OAAO,GAAG,MAAM,CAAC;QACnB,CAAC;QAED,OAAO;YACL,OAAO;YACP,OAAO;YACP,UAAU;YACV,SAAS;YACT,cAAc;SACf,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY;QACxB,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,MAAM,SAAS,GAAG;YAChB,aAAa;YACb,UAAU;YACV,cAAc;YACd,QAAQ;YACR,QAAQ;YACR,YAAY;YACZ,OAAO;YACP,SAAS;YACT,OAAO;YACP,YAAY;YACZ,QAAQ;YACR,gBAAgB;YAChB,aAAa;YACb,cAAc;SACf,CAAC;QAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAE9C,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,IAAY;QACtC,OAAO,IAAA,mBAAU,EAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAAe;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AA5hBD,0DA4hBC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C4 Model Inference Module
|
|
3
|
+
*
|
|
4
|
+
* Provides automatic detection of C4 model elements from codebase analysis.
|
|
5
|
+
* This module analyzes project structure, dependencies, and configuration files
|
|
6
|
+
* to infer C4 architecture diagrams at Context, Container, and Component levels.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import {
|
|
11
|
+
* ProjectMetadataAnalyzer,
|
|
12
|
+
* ExternalSystemDetector,
|
|
13
|
+
* ComponentBoundaryAnalyzer,
|
|
14
|
+
* ProjectMetadata,
|
|
15
|
+
* ExternalSystem,
|
|
16
|
+
* Component
|
|
17
|
+
* } from './inference';
|
|
18
|
+
*
|
|
19
|
+
* // Analyze project for C4 Context diagram
|
|
20
|
+
* const metadataAnalyzer = new ProjectMetadataAnalyzer('/path/to/project');
|
|
21
|
+
* const metadata = await metadataAnalyzer.analyze();
|
|
22
|
+
*
|
|
23
|
+
* // Detect external systems
|
|
24
|
+
* const externalDetector = new ExternalSystemDetector('/path/to/project');
|
|
25
|
+
* const externalSystems = await externalDetector.detect();
|
|
26
|
+
*
|
|
27
|
+
* // Analyze components
|
|
28
|
+
* const componentAnalyzer = new ComponentBoundaryAnalyzer('/path/to/project/src');
|
|
29
|
+
* const components = await componentAnalyzer.analyze();
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export * from './types.js';
|
|
33
|
+
export { ProjectMetadataAnalyzer } from './ProjectMetadataAnalyzer.js';
|
|
34
|
+
export { ExternalSystemDetector } from './ExternalSystemDetector.js';
|
|
35
|
+
export { ComponentBoundaryAnalyzer } from './ComponentBoundaryAnalyzer.js';
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/code-intelligence/inference/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAKH,cAAc,YAAY,CAAC;AAO3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAGvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAGrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* C4 Model Inference Module
|
|
4
|
+
*
|
|
5
|
+
* Provides automatic detection of C4 model elements from codebase analysis.
|
|
6
|
+
* This module analyzes project structure, dependencies, and configuration files
|
|
7
|
+
* to infer C4 architecture diagrams at Context, Container, and Component levels.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import {
|
|
12
|
+
* ProjectMetadataAnalyzer,
|
|
13
|
+
* ExternalSystemDetector,
|
|
14
|
+
* ComponentBoundaryAnalyzer,
|
|
15
|
+
* ProjectMetadata,
|
|
16
|
+
* ExternalSystem,
|
|
17
|
+
* Component
|
|
18
|
+
* } from './inference';
|
|
19
|
+
*
|
|
20
|
+
* // Analyze project for C4 Context diagram
|
|
21
|
+
* const metadataAnalyzer = new ProjectMetadataAnalyzer('/path/to/project');
|
|
22
|
+
* const metadata = await metadataAnalyzer.analyze();
|
|
23
|
+
*
|
|
24
|
+
* // Detect external systems
|
|
25
|
+
* const externalDetector = new ExternalSystemDetector('/path/to/project');
|
|
26
|
+
* const externalSystems = await externalDetector.detect();
|
|
27
|
+
*
|
|
28
|
+
* // Analyze components
|
|
29
|
+
* const componentAnalyzer = new ComponentBoundaryAnalyzer('/path/to/project/src');
|
|
30
|
+
* const components = await componentAnalyzer.analyze();
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
34
|
+
if (k2 === undefined) k2 = k;
|
|
35
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
36
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
37
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
38
|
+
}
|
|
39
|
+
Object.defineProperty(o, k2, desc);
|
|
40
|
+
}) : (function(o, m, k, k2) {
|
|
41
|
+
if (k2 === undefined) k2 = k;
|
|
42
|
+
o[k2] = m[k];
|
|
43
|
+
}));
|
|
44
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
45
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.ComponentBoundaryAnalyzer = exports.ExternalSystemDetector = exports.ProjectMetadataAnalyzer = void 0;
|
|
49
|
+
// ============================================================================
|
|
50
|
+
// All types from consolidated types.ts
|
|
51
|
+
// ============================================================================
|
|
52
|
+
__exportStar(require("./types.js"), exports);
|
|
53
|
+
// ============================================================================
|
|
54
|
+
// Analyzers
|
|
55
|
+
// ============================================================================
|
|
56
|
+
// C4 Context & Container level analysis
|
|
57
|
+
var ProjectMetadataAnalyzer_js_1 = require("./ProjectMetadataAnalyzer.js");
|
|
58
|
+
Object.defineProperty(exports, "ProjectMetadataAnalyzer", { enumerable: true, get: function () { return ProjectMetadataAnalyzer_js_1.ProjectMetadataAnalyzer; } });
|
|
59
|
+
// External system detection for C4 Context diagrams
|
|
60
|
+
var ExternalSystemDetector_js_1 = require("./ExternalSystemDetector.js");
|
|
61
|
+
Object.defineProperty(exports, "ExternalSystemDetector", { enumerable: true, get: function () { return ExternalSystemDetector_js_1.ExternalSystemDetector; } });
|
|
62
|
+
// Component boundary analysis for C4 Component diagrams
|
|
63
|
+
var ComponentBoundaryAnalyzer_js_1 = require("./ComponentBoundaryAnalyzer.js");
|
|
64
|
+
Object.defineProperty(exports, "ComponentBoundaryAnalyzer", { enumerable: true, get: function () { return ComponentBoundaryAnalyzer_js_1.ComponentBoundaryAnalyzer; } });
|
|
65
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/code-intelligence/inference/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;;;;;;;;;;;;;;;;;AAEH,+EAA+E;AAC/E,uCAAuC;AACvC,+EAA+E;AAC/E,6CAA2B;AAE3B,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,wCAAwC;AACxC,2EAAuE;AAA9D,qIAAA,uBAAuB,OAAA;AAEhC,oDAAoD;AACpD,yEAAqE;AAA5D,mIAAA,sBAAsB,OAAA;AAE/B,wDAAwD;AACxD,+EAA2E;AAAlE,yIAAA,yBAAyB,OAAA"}
|