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,138 @@
|
|
|
1
|
+
import type { ProjectMetadata, ExternalSystem } from '../inference/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Builds C4 Container diagrams in Mermaid syntax
|
|
4
|
+
*
|
|
5
|
+
* Container diagrams show the high-level technology choices and how containers
|
|
6
|
+
* communicate with each other. Containers represent applications or data stores.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const builder = new C4ContainerDiagramBuilder();
|
|
11
|
+
* const diagram = builder.build(metadata, externalSystems);
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare class C4ContainerDiagramBuilder {
|
|
15
|
+
/**
|
|
16
|
+
* Build a C4 Container diagram in Mermaid syntax
|
|
17
|
+
*
|
|
18
|
+
* @param metadata - Project metadata containing container information
|
|
19
|
+
* @param externalSystems - Detected external systems
|
|
20
|
+
* @returns Mermaid C4Container diagram as string
|
|
21
|
+
*/
|
|
22
|
+
build(metadata: ProjectMetadata, externalSystems: ExternalSystem[]): string;
|
|
23
|
+
/**
|
|
24
|
+
* Format a container definition
|
|
25
|
+
*
|
|
26
|
+
* @param container - Container to format
|
|
27
|
+
* @returns Mermaid Container definition
|
|
28
|
+
*/
|
|
29
|
+
private formatContainer;
|
|
30
|
+
/**
|
|
31
|
+
* Format a database container definition
|
|
32
|
+
*
|
|
33
|
+
* @param container - Database container to format
|
|
34
|
+
* @returns Mermaid ContainerDb definition
|
|
35
|
+
*/
|
|
36
|
+
private formatContainerDb;
|
|
37
|
+
/**
|
|
38
|
+
* Format external database as ContainerDb
|
|
39
|
+
*
|
|
40
|
+
* @param external - External database system
|
|
41
|
+
* @returns Mermaid ContainerDb definition
|
|
42
|
+
*/
|
|
43
|
+
private formatExternalDb;
|
|
44
|
+
/**
|
|
45
|
+
* Format external system as Container
|
|
46
|
+
*
|
|
47
|
+
* @param external - External system
|
|
48
|
+
* @returns Mermaid Container definition
|
|
49
|
+
*/
|
|
50
|
+
private formatExternalContainer;
|
|
51
|
+
/**
|
|
52
|
+
* Check if container is a database
|
|
53
|
+
*
|
|
54
|
+
* @param container - Container to check
|
|
55
|
+
* @returns True if container is a database
|
|
56
|
+
*/
|
|
57
|
+
private isDatabase;
|
|
58
|
+
/**
|
|
59
|
+
* Check if external system should be shown in container diagram
|
|
60
|
+
*
|
|
61
|
+
* @param external - External system to check
|
|
62
|
+
* @returns True if relevant for container diagram
|
|
63
|
+
*/
|
|
64
|
+
private isRelevantExternal;
|
|
65
|
+
/**
|
|
66
|
+
* Infer technology stack for container
|
|
67
|
+
*
|
|
68
|
+
* @param container - Container to analyze
|
|
69
|
+
* @returns Technology description
|
|
70
|
+
*/
|
|
71
|
+
private inferTechnology;
|
|
72
|
+
/**
|
|
73
|
+
* Infer database technology
|
|
74
|
+
*
|
|
75
|
+
* @param container - Database container
|
|
76
|
+
* @returns Database technology
|
|
77
|
+
*/
|
|
78
|
+
private inferDatabaseTechnology;
|
|
79
|
+
/**
|
|
80
|
+
* Get external system technology
|
|
81
|
+
*
|
|
82
|
+
* @param external - External system
|
|
83
|
+
* @returns Technology description
|
|
84
|
+
*/
|
|
85
|
+
private getExternalTechnology;
|
|
86
|
+
/**
|
|
87
|
+
* Get container description
|
|
88
|
+
*
|
|
89
|
+
* @param container - Container to describe
|
|
90
|
+
* @returns Description text
|
|
91
|
+
*/
|
|
92
|
+
private getContainerDescription;
|
|
93
|
+
/**
|
|
94
|
+
* Get database description
|
|
95
|
+
*
|
|
96
|
+
* @param container - Database container
|
|
97
|
+
* @returns Description text
|
|
98
|
+
*/
|
|
99
|
+
private getDatabaseDescription;
|
|
100
|
+
/**
|
|
101
|
+
* Generate relationships between containers
|
|
102
|
+
*
|
|
103
|
+
* @param containers - List of containers
|
|
104
|
+
* @returns Mermaid Rel definitions
|
|
105
|
+
*/
|
|
106
|
+
private generateContainerRelationships;
|
|
107
|
+
/**
|
|
108
|
+
* Generate relationships to external systems
|
|
109
|
+
*
|
|
110
|
+
* @param containers - Internal containers
|
|
111
|
+
* @param externals - External systems
|
|
112
|
+
* @returns Mermaid Rel definitions
|
|
113
|
+
*/
|
|
114
|
+
private generateExternalRelationships;
|
|
115
|
+
/**
|
|
116
|
+
* Infer relationship between two containers
|
|
117
|
+
*
|
|
118
|
+
* @param from - Source container
|
|
119
|
+
* @param to - Target container
|
|
120
|
+
* @returns Relationship description or null
|
|
121
|
+
*/
|
|
122
|
+
private inferRelationship;
|
|
123
|
+
/**
|
|
124
|
+
* Get relationship description for external system
|
|
125
|
+
*
|
|
126
|
+
* @param external - External system
|
|
127
|
+
* @returns Relationship description
|
|
128
|
+
*/
|
|
129
|
+
private getExternalRelationship;
|
|
130
|
+
/**
|
|
131
|
+
* Sanitize name for Mermaid syntax
|
|
132
|
+
*
|
|
133
|
+
* @param name - Original name
|
|
134
|
+
* @returns Sanitized name
|
|
135
|
+
*/
|
|
136
|
+
private sanitizeName;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=C4ContainerDiagramBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"C4ContainerDiagramBuilder.d.ts","sourceRoot":"","sources":["../../../src/code-intelligence/visualization/C4ContainerDiagramBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAa,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAExF;;;;;;;;;;;GAWG;AACH,qBAAa,yBAAyB;IACpC;;;;;;OAMG;IACH,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,MAAM;IA2C3E;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAQvB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAQ/B;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAMlB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAmBvB;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAY/B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAI9B;;;;;OAKG;IACH,OAAO,CAAC,8BAA8B;IA2BtC;;;;;;OAMG;IACH,OAAO,CAAC,6BAA6B;IAoBrC;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IA2BzB;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;;;;OAKG;IACH,OAAO,CAAC,YAAY;CAOrB"}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.C4ContainerDiagramBuilder = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Builds C4 Container diagrams in Mermaid syntax
|
|
6
|
+
*
|
|
7
|
+
* Container diagrams show the high-level technology choices and how containers
|
|
8
|
+
* communicate with each other. Containers represent applications or data stores.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const builder = new C4ContainerDiagramBuilder();
|
|
13
|
+
* const diagram = builder.build(metadata, externalSystems);
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
class C4ContainerDiagramBuilder {
|
|
17
|
+
/**
|
|
18
|
+
* Build a C4 Container diagram in Mermaid syntax
|
|
19
|
+
*
|
|
20
|
+
* @param metadata - Project metadata containing container information
|
|
21
|
+
* @param externalSystems - Detected external systems
|
|
22
|
+
* @returns Mermaid C4Container diagram as string
|
|
23
|
+
*/
|
|
24
|
+
build(metadata, externalSystems) {
|
|
25
|
+
const lines = [
|
|
26
|
+
'C4Container',
|
|
27
|
+
` title Container diagram for ${metadata.name}`,
|
|
28
|
+
'',
|
|
29
|
+
];
|
|
30
|
+
// Add containers
|
|
31
|
+
if (metadata.containers.length > 0) {
|
|
32
|
+
for (const container of metadata.containers) {
|
|
33
|
+
if (this.isDatabase(container)) {
|
|
34
|
+
lines.push(this.formatContainerDb(container));
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
lines.push(this.formatContainer(container));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
lines.push('');
|
|
41
|
+
}
|
|
42
|
+
// Add external systems as containers
|
|
43
|
+
if (externalSystems.length > 0) {
|
|
44
|
+
for (const external of externalSystems) {
|
|
45
|
+
if (external.type === 'database') {
|
|
46
|
+
lines.push(this.formatExternalDb(external));
|
|
47
|
+
}
|
|
48
|
+
else if (this.isRelevantExternal(external)) {
|
|
49
|
+
lines.push(this.formatExternalContainer(external));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
lines.push('');
|
|
53
|
+
}
|
|
54
|
+
// Add relationships
|
|
55
|
+
lines.push(this.generateContainerRelationships(metadata.containers));
|
|
56
|
+
// Add relationships to external systems
|
|
57
|
+
if (externalSystems.length > 0) {
|
|
58
|
+
lines.push('');
|
|
59
|
+
lines.push(this.generateExternalRelationships(metadata.containers, externalSystems));
|
|
60
|
+
}
|
|
61
|
+
return lines.filter(line => line !== undefined && line !== '').join('\n');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Format a container definition
|
|
65
|
+
*
|
|
66
|
+
* @param container - Container to format
|
|
67
|
+
* @returns Mermaid Container definition
|
|
68
|
+
*/
|
|
69
|
+
formatContainer(container) {
|
|
70
|
+
const id = this.sanitizeName(container.name);
|
|
71
|
+
const technology = this.inferTechnology(container);
|
|
72
|
+
const description = this.getContainerDescription(container);
|
|
73
|
+
return ` Container(${id}, "${container.name}", "${technology}", "${description}")`;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Format a database container definition
|
|
77
|
+
*
|
|
78
|
+
* @param container - Database container to format
|
|
79
|
+
* @returns Mermaid ContainerDb definition
|
|
80
|
+
*/
|
|
81
|
+
formatContainerDb(container) {
|
|
82
|
+
const id = this.sanitizeName(container.name);
|
|
83
|
+
const technology = this.inferDatabaseTechnology(container);
|
|
84
|
+
const description = this.getDatabaseDescription(container);
|
|
85
|
+
return ` ContainerDb(${id}, "${container.name}", "${technology}", "${description}")`;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Format external database as ContainerDb
|
|
89
|
+
*
|
|
90
|
+
* @param external - External database system
|
|
91
|
+
* @returns Mermaid ContainerDb definition
|
|
92
|
+
*/
|
|
93
|
+
formatExternalDb(external) {
|
|
94
|
+
const id = this.sanitizeName(external.name);
|
|
95
|
+
const technology = this.getExternalTechnology(external);
|
|
96
|
+
const description = external.description || 'External database system';
|
|
97
|
+
return ` ContainerDb(${id}, "${external.name}", "${technology}", "${description}")`;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Format external system as Container
|
|
101
|
+
*
|
|
102
|
+
* @param external - External system
|
|
103
|
+
* @returns Mermaid Container definition
|
|
104
|
+
*/
|
|
105
|
+
formatExternalContainer(external) {
|
|
106
|
+
const id = this.sanitizeName(external.name);
|
|
107
|
+
const technology = this.getExternalTechnology(external);
|
|
108
|
+
const description = external.description || 'External system';
|
|
109
|
+
return ` Container(${id}, "${external.name}", "${technology}", "${description}")`;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Check if container is a database
|
|
113
|
+
*
|
|
114
|
+
* @param container - Container to check
|
|
115
|
+
* @returns True if container is a database
|
|
116
|
+
*/
|
|
117
|
+
isDatabase(container) {
|
|
118
|
+
const dbKeywords = ['database', 'db', 'postgres', 'mysql', 'mongo', 'redis', 'cache'];
|
|
119
|
+
const name = container.name.toLowerCase();
|
|
120
|
+
return dbKeywords.some(keyword => name.includes(keyword));
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Check if external system should be shown in container diagram
|
|
124
|
+
*
|
|
125
|
+
* @param external - External system to check
|
|
126
|
+
* @returns True if relevant for container diagram
|
|
127
|
+
*/
|
|
128
|
+
isRelevantExternal(external) {
|
|
129
|
+
const relevantTypes = ['database', 'api', 'service', 'messageQueue', 'cache', 'storage'];
|
|
130
|
+
return relevantTypes.includes(external.type);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Infer technology stack for container
|
|
134
|
+
*
|
|
135
|
+
* @param container - Container to analyze
|
|
136
|
+
* @returns Technology description
|
|
137
|
+
*/
|
|
138
|
+
inferTechnology(container) {
|
|
139
|
+
const name = container.name.toLowerCase();
|
|
140
|
+
if (name.includes('api') || name.includes('backend')) {
|
|
141
|
+
return 'Node.js, TypeScript';
|
|
142
|
+
}
|
|
143
|
+
if (name.includes('frontend') || name.includes('ui') || name.includes('web')) {
|
|
144
|
+
return 'React, TypeScript';
|
|
145
|
+
}
|
|
146
|
+
if (name.includes('service') || name.includes('worker')) {
|
|
147
|
+
return 'Node.js';
|
|
148
|
+
}
|
|
149
|
+
if (name.includes('gateway') || name.includes('proxy')) {
|
|
150
|
+
return 'NGINX, Node.js';
|
|
151
|
+
}
|
|
152
|
+
return 'Application';
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Infer database technology
|
|
156
|
+
*
|
|
157
|
+
* @param container - Database container
|
|
158
|
+
* @returns Database technology
|
|
159
|
+
*/
|
|
160
|
+
inferDatabaseTechnology(container) {
|
|
161
|
+
const name = container.name.toLowerCase();
|
|
162
|
+
if (name.includes('postgres') || name.includes('pg'))
|
|
163
|
+
return 'PostgreSQL';
|
|
164
|
+
if (name.includes('mysql'))
|
|
165
|
+
return 'MySQL';
|
|
166
|
+
if (name.includes('mongo'))
|
|
167
|
+
return 'MongoDB';
|
|
168
|
+
if (name.includes('redis'))
|
|
169
|
+
return 'Redis';
|
|
170
|
+
if (name.includes('elastic'))
|
|
171
|
+
return 'Elasticsearch';
|
|
172
|
+
if (name.includes('dynamodb'))
|
|
173
|
+
return 'DynamoDB';
|
|
174
|
+
return 'Database';
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Get external system technology
|
|
178
|
+
*
|
|
179
|
+
* @param external - External system
|
|
180
|
+
* @returns Technology description
|
|
181
|
+
*/
|
|
182
|
+
getExternalTechnology(external) {
|
|
183
|
+
const name = external.name.toLowerCase();
|
|
184
|
+
if (name.includes('postgres'))
|
|
185
|
+
return 'PostgreSQL';
|
|
186
|
+
if (name.includes('mysql'))
|
|
187
|
+
return 'MySQL';
|
|
188
|
+
if (name.includes('mongo'))
|
|
189
|
+
return 'MongoDB';
|
|
190
|
+
if (name.includes('redis'))
|
|
191
|
+
return 'Redis';
|
|
192
|
+
if (name.includes('rabbitmq'))
|
|
193
|
+
return 'RabbitMQ';
|
|
194
|
+
if (name.includes('kafka'))
|
|
195
|
+
return 'Apache Kafka';
|
|
196
|
+
if (name.includes('aws'))
|
|
197
|
+
return 'AWS Service';
|
|
198
|
+
if (name.includes('gcp'))
|
|
199
|
+
return 'GCP Service';
|
|
200
|
+
if (name.includes('azure'))
|
|
201
|
+
return 'Azure Service';
|
|
202
|
+
return 'External Service';
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Get container description
|
|
206
|
+
*
|
|
207
|
+
* @param container - Container to describe
|
|
208
|
+
* @returns Description text
|
|
209
|
+
*/
|
|
210
|
+
getContainerDescription(container) {
|
|
211
|
+
const name = container.name.toLowerCase();
|
|
212
|
+
if (name.includes('api'))
|
|
213
|
+
return 'Provides application functionality via REST API';
|
|
214
|
+
if (name.includes('frontend'))
|
|
215
|
+
return 'Delivers web interface to users';
|
|
216
|
+
if (name.includes('service'))
|
|
217
|
+
return 'Handles business logic and processing';
|
|
218
|
+
if (name.includes('worker'))
|
|
219
|
+
return 'Processes background tasks';
|
|
220
|
+
if (name.includes('gateway'))
|
|
221
|
+
return 'Routes and manages API traffic';
|
|
222
|
+
return 'Application component';
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Get database description
|
|
226
|
+
*
|
|
227
|
+
* @param container - Database container
|
|
228
|
+
* @returns Description text
|
|
229
|
+
*/
|
|
230
|
+
getDatabaseDescription(container) {
|
|
231
|
+
return 'Stores application data and state';
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Generate relationships between containers
|
|
235
|
+
*
|
|
236
|
+
* @param containers - List of containers
|
|
237
|
+
* @returns Mermaid Rel definitions
|
|
238
|
+
*/
|
|
239
|
+
generateContainerRelationships(containers) {
|
|
240
|
+
const lines = [];
|
|
241
|
+
const relationships = new Set();
|
|
242
|
+
for (const container of containers) {
|
|
243
|
+
const fromId = this.sanitizeName(container.name);
|
|
244
|
+
// Find likely relationships based on naming patterns
|
|
245
|
+
for (const other of containers) {
|
|
246
|
+
if (container === other)
|
|
247
|
+
continue;
|
|
248
|
+
const toId = this.sanitizeName(other.name);
|
|
249
|
+
const relationship = this.inferRelationship(container, other);
|
|
250
|
+
if (relationship) {
|
|
251
|
+
const relKey = `${fromId}-${toId}`;
|
|
252
|
+
if (!relationships.has(relKey)) {
|
|
253
|
+
relationships.add(relKey);
|
|
254
|
+
lines.push(` Rel(${fromId}, ${toId}, "${relationship}")`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return lines.join('\n');
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Generate relationships to external systems
|
|
263
|
+
*
|
|
264
|
+
* @param containers - Internal containers
|
|
265
|
+
* @param externals - External systems
|
|
266
|
+
* @returns Mermaid Rel definitions
|
|
267
|
+
*/
|
|
268
|
+
generateExternalRelationships(containers, externals) {
|
|
269
|
+
const lines = [];
|
|
270
|
+
for (const container of containers) {
|
|
271
|
+
const fromId = this.sanitizeName(container.name);
|
|
272
|
+
for (const external of externals) {
|
|
273
|
+
if (!this.isRelevantExternal(external) && external.type !== 'database') {
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
const toId = this.sanitizeName(external.name);
|
|
277
|
+
const relationship = this.getExternalRelationship(external);
|
|
278
|
+
lines.push(` Rel(${fromId}, ${toId}, "${relationship}")`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return lines.join('\n');
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Infer relationship between two containers
|
|
285
|
+
*
|
|
286
|
+
* @param from - Source container
|
|
287
|
+
* @param to - Target container
|
|
288
|
+
* @returns Relationship description or null
|
|
289
|
+
*/
|
|
290
|
+
inferRelationship(from, to) {
|
|
291
|
+
const fromName = from.name.toLowerCase();
|
|
292
|
+
const toName = to.name.toLowerCase();
|
|
293
|
+
// Frontend -> Backend/API
|
|
294
|
+
if (fromName.includes('frontend') && (toName.includes('api') || toName.includes('backend'))) {
|
|
295
|
+
return 'Makes API calls to';
|
|
296
|
+
}
|
|
297
|
+
// API/Backend -> Database
|
|
298
|
+
if ((fromName.includes('api') || fromName.includes('backend')) && this.isDatabase(to)) {
|
|
299
|
+
return 'Reads from and writes to';
|
|
300
|
+
}
|
|
301
|
+
// Service -> Database
|
|
302
|
+
if (fromName.includes('service') && this.isDatabase(to)) {
|
|
303
|
+
return 'Reads from and writes to';
|
|
304
|
+
}
|
|
305
|
+
// Gateway -> API/Service
|
|
306
|
+
if (fromName.includes('gateway') && (toName.includes('api') || toName.includes('service'))) {
|
|
307
|
+
return 'Routes requests to';
|
|
308
|
+
}
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Get relationship description for external system
|
|
313
|
+
*
|
|
314
|
+
* @param external - External system
|
|
315
|
+
* @returns Relationship description
|
|
316
|
+
*/
|
|
317
|
+
getExternalRelationship(external) {
|
|
318
|
+
const typeRelationships = {
|
|
319
|
+
database: 'Reads from and writes to',
|
|
320
|
+
api: 'Makes API calls to',
|
|
321
|
+
service: 'Sends requests to',
|
|
322
|
+
messageQueue: 'Publishes to and consumes from',
|
|
323
|
+
cache: 'Reads from and writes to',
|
|
324
|
+
storage: 'Stores files in',
|
|
325
|
+
};
|
|
326
|
+
return typeRelationships[external.type] || 'Communicates with';
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Sanitize name for Mermaid syntax
|
|
330
|
+
*
|
|
331
|
+
* @param name - Original name
|
|
332
|
+
* @returns Sanitized name
|
|
333
|
+
*/
|
|
334
|
+
sanitizeName(name) {
|
|
335
|
+
return name
|
|
336
|
+
.replace(/[^a-zA-Z0-9_\s-]/g, '')
|
|
337
|
+
.replace(/\s+/g, '_')
|
|
338
|
+
.replace(/-+/g, '_')
|
|
339
|
+
.toLowerCase();
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
exports.C4ContainerDiagramBuilder = C4ContainerDiagramBuilder;
|
|
343
|
+
//# sourceMappingURL=C4ContainerDiagramBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"C4ContainerDiagramBuilder.js","sourceRoot":"","sources":["../../../src/code-intelligence/visualization/C4ContainerDiagramBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { ProjectMetadata, ExternalSystem } from '../inference/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Builds C4 Context diagrams in Mermaid syntax
|
|
4
|
+
*
|
|
5
|
+
* Context diagrams show the system in its environment with users and external systems.
|
|
6
|
+
* This is the highest level of abstraction in C4 modeling.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const builder = new C4ContextDiagramBuilder();
|
|
11
|
+
* const diagram = builder.build(metadata, externalSystems);
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare class C4ContextDiagramBuilder {
|
|
15
|
+
/**
|
|
16
|
+
* Build a C4 Context diagram in Mermaid syntax
|
|
17
|
+
*
|
|
18
|
+
* @param metadata - Project metadata containing system information
|
|
19
|
+
* @param externalSystems - Detected external systems and dependencies
|
|
20
|
+
* @returns Mermaid C4Context diagram as string
|
|
21
|
+
*/
|
|
22
|
+
build(metadata: ProjectMetadata, externalSystems: ExternalSystem[]): string;
|
|
23
|
+
/**
|
|
24
|
+
* Sanitize system name for Mermaid syntax
|
|
25
|
+
* Removes special characters and replaces spaces with underscores
|
|
26
|
+
*
|
|
27
|
+
* @param name - Original system name
|
|
28
|
+
* @returns Sanitized name safe for Mermaid
|
|
29
|
+
*/
|
|
30
|
+
private formatSystemName;
|
|
31
|
+
/**
|
|
32
|
+
* Generate default user/person actors
|
|
33
|
+
*
|
|
34
|
+
* @returns Mermaid Person definitions
|
|
35
|
+
*/
|
|
36
|
+
private generatePersons;
|
|
37
|
+
/**
|
|
38
|
+
* Generate external system definitions
|
|
39
|
+
*
|
|
40
|
+
* @param systems - Detected external systems
|
|
41
|
+
* @returns Mermaid System_Ext definitions
|
|
42
|
+
*/
|
|
43
|
+
private generateExternalSystems;
|
|
44
|
+
/**
|
|
45
|
+
* Get description for external system based on type
|
|
46
|
+
*
|
|
47
|
+
* @param system - External system
|
|
48
|
+
* @returns Human-readable description
|
|
49
|
+
*/
|
|
50
|
+
private getSystemDescription;
|
|
51
|
+
/**
|
|
52
|
+
* Generate relationships between system and external systems
|
|
53
|
+
*
|
|
54
|
+
* @param metadata - Project metadata
|
|
55
|
+
* @param externals - External systems
|
|
56
|
+
* @returns Mermaid Rel definitions
|
|
57
|
+
*/
|
|
58
|
+
private generateRelationships;
|
|
59
|
+
/**
|
|
60
|
+
* Get relationship label based on external system type
|
|
61
|
+
*
|
|
62
|
+
* @param system - External system
|
|
63
|
+
* @returns Relationship description
|
|
64
|
+
*/
|
|
65
|
+
private getRelationshipLabel;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=C4ContextDiagramBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"C4ContextDiagramBuilder.d.ts","sourceRoot":"","sources":["../../../src/code-intelligence/visualization/C4ContextDiagramBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAa,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAExF;;;;;;;;;;;GAWG;AACH,qBAAa,uBAAuB;IAClC;;;;;;OAMG;IACH,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,MAAM;IAyB3E;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IASvB;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAoB/B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;CAc7B"}
|