@girardelli/architect-core 8.1.0
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/dist/src/core/analyzer.d.ts +42 -0
- package/dist/src/core/analyzer.js +431 -0
- package/dist/src/core/analyzer.js.map +1 -0
- package/dist/src/core/analyzers/forecast.d.ts +84 -0
- package/dist/src/core/analyzers/forecast.js +338 -0
- package/dist/src/core/analyzers/forecast.js.map +1 -0
- package/dist/src/core/analyzers/index.d.ts +9 -0
- package/dist/src/core/analyzers/index.js +7 -0
- package/dist/src/core/analyzers/index.js.map +1 -0
- package/dist/src/core/analyzers/temporal-scorer.d.ts +71 -0
- package/dist/src/core/analyzers/temporal-scorer.js +141 -0
- package/dist/src/core/analyzers/temporal-scorer.js.map +1 -0
- package/dist/src/core/anti-patterns.d.ts +28 -0
- package/dist/src/core/anti-patterns.js +264 -0
- package/dist/src/core/anti-patterns.js.map +1 -0
- package/dist/src/core/ast/ast-parser.interface.d.ts +20 -0
- package/dist/src/core/ast/ast-parser.interface.js +2 -0
- package/dist/src/core/ast/ast-parser.interface.js.map +1 -0
- package/dist/src/core/ast/path-resolver.d.ts +13 -0
- package/dist/src/core/ast/path-resolver.js +54 -0
- package/dist/src/core/ast/path-resolver.js.map +1 -0
- package/dist/src/core/ast/tree-sitter-parser.d.ts +10 -0
- package/dist/src/core/ast/tree-sitter-parser.js +142 -0
- package/dist/src/core/ast/tree-sitter-parser.js.map +1 -0
- package/dist/src/core/config.d.ts +11 -0
- package/dist/src/core/config.js +112 -0
- package/dist/src/core/config.js.map +1 -0
- package/dist/src/core/diagram.d.ts +9 -0
- package/dist/src/core/diagram.js +101 -0
- package/dist/src/core/diagram.js.map +1 -0
- package/dist/src/core/i18n.d.ts +14 -0
- package/dist/src/core/i18n.js +54 -0
- package/dist/src/core/i18n.js.map +1 -0
- package/dist/src/core/locales/en.d.ts +2 -0
- package/dist/src/core/locales/en.js +337 -0
- package/dist/src/core/locales/en.js.map +1 -0
- package/dist/src/core/locales/pt-BR.d.ts +172 -0
- package/dist/src/core/locales/pt-BR.js +337 -0
- package/dist/src/core/locales/pt-BR.js.map +1 -0
- package/dist/src/core/locales/types.d.ts +86 -0
- package/dist/src/core/locales/types.js +2 -0
- package/dist/src/core/locales/types.js.map +1 -0
- package/dist/src/core/plugin-loader.d.ts +11 -0
- package/dist/src/core/plugin-loader.js +67 -0
- package/dist/src/core/plugin-loader.js.map +1 -0
- package/dist/src/core/project-summarizer.d.ts +16 -0
- package/dist/src/core/project-summarizer.js +37 -0
- package/dist/src/core/project-summarizer.js.map +1 -0
- package/dist/src/core/refactor-engine.d.ts +18 -0
- package/dist/src/core/refactor-engine.js +87 -0
- package/dist/src/core/refactor-engine.js.map +1 -0
- package/dist/src/core/rules/barrel-optimizer.d.ts +13 -0
- package/dist/src/core/rules/barrel-optimizer.js +76 -0
- package/dist/src/core/rules/barrel-optimizer.js.map +1 -0
- package/dist/src/core/rules/dead-code-detector.d.ts +21 -0
- package/dist/src/core/rules/dead-code-detector.js +116 -0
- package/dist/src/core/rules/dead-code-detector.js.map +1 -0
- package/dist/src/core/rules/hub-splitter.d.ts +13 -0
- package/dist/src/core/rules/hub-splitter.js +117 -0
- package/dist/src/core/rules/hub-splitter.js.map +1 -0
- package/dist/src/core/rules/import-organizer.d.ts +13 -0
- package/dist/src/core/rules/import-organizer.js +84 -0
- package/dist/src/core/rules/import-organizer.js.map +1 -0
- package/dist/src/core/rules/module-grouper.d.ts +13 -0
- package/dist/src/core/rules/module-grouper.js +116 -0
- package/dist/src/core/rules/module-grouper.js.map +1 -0
- package/dist/src/core/rules-engine.d.ts +7 -0
- package/dist/src/core/rules-engine.js +89 -0
- package/dist/src/core/rules-engine.js.map +1 -0
- package/dist/src/core/scorer.d.ts +15 -0
- package/dist/src/core/scorer.js +165 -0
- package/dist/src/core/scorer.js.map +1 -0
- package/dist/src/core/summarizer/keyword-extractor.d.ts +6 -0
- package/dist/src/core/summarizer/keyword-extractor.js +38 -0
- package/dist/src/core/summarizer/keyword-extractor.js.map +1 -0
- package/dist/src/core/summarizer/module-inferrer.d.ts +11 -0
- package/dist/src/core/summarizer/module-inferrer.js +171 -0
- package/dist/src/core/summarizer/module-inferrer.js.map +1 -0
- package/dist/src/core/summarizer/package-reader.d.ts +3 -0
- package/dist/src/core/summarizer/package-reader.js +33 -0
- package/dist/src/core/summarizer/package-reader.js.map +1 -0
- package/dist/src/core/summarizer/purpose-inferrer.d.ts +8 -0
- package/dist/src/core/summarizer/purpose-inferrer.js +179 -0
- package/dist/src/core/summarizer/purpose-inferrer.js.map +1 -0
- package/dist/src/core/summarizer/readme-reader.d.ts +3 -0
- package/dist/src/core/summarizer/readme-reader.js +24 -0
- package/dist/src/core/summarizer/readme-reader.js.map +1 -0
- package/dist/src/core/types/architect-rules.d.ts +27 -0
- package/dist/src/core/types/architect-rules.js +2 -0
- package/dist/src/core/types/architect-rules.js.map +1 -0
- package/dist/src/core/types/core.d.ts +87 -0
- package/dist/src/core/types/core.js +2 -0
- package/dist/src/core/types/core.js.map +1 -0
- package/dist/src/core/types/infrastructure.d.ts +38 -0
- package/dist/src/core/types/infrastructure.js +2 -0
- package/dist/src/core/types/infrastructure.js.map +1 -0
- package/dist/src/core/types/plugin.d.ts +12 -0
- package/dist/src/core/types/plugin.js +2 -0
- package/dist/src/core/types/plugin.js.map +1 -0
- package/dist/src/core/types/rules.d.ts +53 -0
- package/dist/src/core/types/rules.js +2 -0
- package/dist/src/core/types/rules.js.map +1 -0
- package/dist/src/core/types/summarizer.d.ts +12 -0
- package/dist/src/core/types/summarizer.js +2 -0
- package/dist/src/core/types/summarizer.js.map +1 -0
- package/dist/src/infrastructure/git-cache.d.ts +6 -0
- package/dist/src/infrastructure/git-cache.js +41 -0
- package/dist/src/infrastructure/git-cache.js.map +1 -0
- package/dist/src/infrastructure/git-history.d.ts +112 -0
- package/dist/src/infrastructure/git-history.js +340 -0
- package/dist/src/infrastructure/git-history.js.map +1 -0
- package/dist/src/infrastructure/logger.d.ts +20 -0
- package/dist/src/infrastructure/logger.js +57 -0
- package/dist/src/infrastructure/logger.js.map +1 -0
- package/dist/src/infrastructure/scanner.d.ts +31 -0
- package/dist/src/infrastructure/scanner.js +334 -0
- package/dist/src/infrastructure/scanner.js.map +1 -0
- package/dist/tests/analyzers-integration.test.d.ts +7 -0
- package/dist/tests/analyzers-integration.test.js +140 -0
- package/dist/tests/analyzers-integration.test.js.map +1 -0
- package/dist/tests/anti-patterns.test.d.ts +1 -0
- package/dist/tests/anti-patterns.test.js +81 -0
- package/dist/tests/anti-patterns.test.js.map +1 -0
- package/dist/tests/ast-parser.test.d.ts +1 -0
- package/dist/tests/ast-parser.test.js +94 -0
- package/dist/tests/ast-parser.test.js.map +1 -0
- package/dist/tests/fixtures/monorepo/packages/app/src/index.d.ts +1 -0
- package/dist/tests/fixtures/monorepo/packages/app/src/index.js +9 -0
- package/dist/tests/fixtures/monorepo/packages/app/src/index.js.map +1 -0
- package/dist/tests/fixtures/monorepo/packages/core/src/index.d.ts +2 -0
- package/dist/tests/fixtures/monorepo/packages/core/src/index.js +11 -0
- package/dist/tests/fixtures/monorepo/packages/core/src/index.js.map +1 -0
- package/dist/tests/forecast.test.d.ts +7 -0
- package/dist/tests/forecast.test.js +380 -0
- package/dist/tests/forecast.test.js.map +1 -0
- package/dist/tests/git-history.test.d.ts +7 -0
- package/dist/tests/git-history.test.js +193 -0
- package/dist/tests/git-history.test.js.map +1 -0
- package/dist/tests/i18n.test.d.ts +1 -0
- package/dist/tests/i18n.test.js +39 -0
- package/dist/tests/i18n.test.js.map +1 -0
- package/dist/tests/monorepo-scan.test.d.ts +11 -0
- package/dist/tests/monorepo-scan.test.js +143 -0
- package/dist/tests/monorepo-scan.test.js.map +1 -0
- package/dist/tests/plugin-loader.test.d.ts +1 -0
- package/dist/tests/plugin-loader.test.js +31 -0
- package/dist/tests/plugin-loader.test.js.map +1 -0
- package/dist/tests/rules-engine.test.d.ts +1 -0
- package/dist/tests/rules-engine.test.js +112 -0
- package/dist/tests/rules-engine.test.js.map +1 -0
- package/dist/tests/scanner.test.d.ts +1 -0
- package/dist/tests/scanner.test.js +44 -0
- package/dist/tests/scanner.test.js.map +1 -0
- package/dist/tests/scorer.test.d.ts +1 -0
- package/dist/tests/scorer.test.js +610 -0
- package/dist/tests/scorer.test.js.map +1 -0
- package/dist/tests/temporal-scorer.test.d.ts +7 -0
- package/dist/tests/temporal-scorer.test.js +239 -0
- package/dist/tests/temporal-scorer.test.js.map +1 -0
- package/package.json +29 -0
- package/src/core/analyzer.ts +499 -0
- package/src/core/analyzers/forecast.ts +497 -0
- package/src/core/analyzers/index.ts +33 -0
- package/src/core/analyzers/temporal-scorer.ts +227 -0
- package/src/core/anti-patterns.ts +324 -0
- package/src/core/ast/ast-parser.interface.ts +21 -0
- package/src/core/ast/path-resolver.ts +61 -0
- package/src/core/ast/tree-sitter-parser.ts +158 -0
- package/src/core/config.ts +125 -0
- package/src/core/diagram.ts +129 -0
- package/src/core/i18n.ts +64 -0
- package/src/core/locales/en.ts +340 -0
- package/src/core/locales/pt-BR.ts +341 -0
- package/src/core/locales/types.ts +95 -0
- package/src/core/plugin-loader.ts +80 -0
- package/src/core/project-summarizer.ts +42 -0
- package/src/core/refactor-engine.ts +112 -0
- package/src/core/rules/barrel-optimizer.ts +99 -0
- package/src/core/rules/dead-code-detector.ts +134 -0
- package/src/core/rules/hub-splitter.ts +135 -0
- package/src/core/rules/import-organizer.ts +100 -0
- package/src/core/rules/module-grouper.ts +133 -0
- package/src/core/rules-engine.ts +100 -0
- package/src/core/scorer.ts +181 -0
- package/src/core/summarizer/keyword-extractor.ts +53 -0
- package/src/core/summarizer/module-inferrer.ts +194 -0
- package/src/core/summarizer/package-reader.ts +34 -0
- package/src/core/summarizer/purpose-inferrer.ts +197 -0
- package/src/core/summarizer/readme-reader.ts +24 -0
- package/src/core/types/architect-rules.ts +29 -0
- package/src/core/types/core.ts +94 -0
- package/src/core/types/infrastructure.ts +41 -0
- package/src/core/types/plugin.ts +19 -0
- package/src/core/types/rules.ts +51 -0
- package/src/core/types/summarizer.ts +8 -0
- package/src/infrastructure/git-cache.ts +52 -0
- package/src/infrastructure/git-history.ts +496 -0
- package/src/infrastructure/logger.ts +68 -0
- package/src/infrastructure/scanner.ts +349 -0
- package/tests/analyzers-integration.test.ts +174 -0
- package/tests/anti-patterns.test.ts +95 -0
- package/tests/ast-parser.test.ts +102 -0
- package/tests/fixtures/monorepo/package.json +6 -0
- package/tests/fixtures/monorepo/packages/app/package.json +12 -0
- package/tests/fixtures/monorepo/packages/app/src/index.ts +6 -0
- package/tests/fixtures/monorepo/packages/core/package.json +7 -0
- package/tests/fixtures/monorepo/packages/core/src/index.ts +7 -0
- package/tests/forecast.test.ts +504 -0
- package/tests/git-history.test.ts +254 -0
- package/tests/i18n.test.ts +47 -0
- package/tests/monorepo-scan.test.ts +170 -0
- package/tests/plugin-loader.test.ts +40 -0
- package/tests/rules-engine.test.ts +131 -0
- package/tests/scanner.test.ts +54 -0
- package/tests/scorer.test.ts +675 -0
- package/tests/temporal-scorer.test.ts +306 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
const DEFAULT_CONFIG = {
|
|
4
|
+
ignore: [
|
|
5
|
+
'**/node_modules/**',
|
|
6
|
+
'**/dist/**',
|
|
7
|
+
'**/build/**',
|
|
8
|
+
'**/coverage/**',
|
|
9
|
+
'**/.git/**',
|
|
10
|
+
'**/.next/**',
|
|
11
|
+
'**/venv/**',
|
|
12
|
+
'**/__pycache__/**',
|
|
13
|
+
'**/target/**',
|
|
14
|
+
'**/out/**',
|
|
15
|
+
'**/.cache/**',
|
|
16
|
+
],
|
|
17
|
+
frameworks: {
|
|
18
|
+
detect: true,
|
|
19
|
+
},
|
|
20
|
+
antiPatterns: {
|
|
21
|
+
godClass: {
|
|
22
|
+
linesThreshold: 500,
|
|
23
|
+
methodsThreshold: 10,
|
|
24
|
+
},
|
|
25
|
+
shotgunSurgery: {
|
|
26
|
+
changePropagationThreshold: 5,
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
score: {
|
|
30
|
+
modularity: 0.4,
|
|
31
|
+
coupling: 0.25,
|
|
32
|
+
cohesion: 0.2,
|
|
33
|
+
layering: 0.15,
|
|
34
|
+
},
|
|
35
|
+
monorepo: {
|
|
36
|
+
enabled: true,
|
|
37
|
+
treatPackagesAsModules: true,
|
|
38
|
+
},
|
|
39
|
+
plugins: [],
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Normalize ignore patterns to use proper glob syntax.
|
|
43
|
+
* Simple names like "node_modules" are expanded to cover nested directories:
|
|
44
|
+
* "node_modules" → ["node_modules", "node_modules/**", "** /node_modules", "** /node_modules/**"]
|
|
45
|
+
*/
|
|
46
|
+
export function normalizeIgnorePatterns(patterns) {
|
|
47
|
+
const normalized = new Set();
|
|
48
|
+
for (const p of patterns) {
|
|
49
|
+
if (p.includes('*') || p.includes('/')) {
|
|
50
|
+
// Already a glob pattern — keep as-is
|
|
51
|
+
normalized.add(p);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// Simple directory name — expand to cover all nesting levels
|
|
55
|
+
normalized.add(p);
|
|
56
|
+
normalized.add(`${p}/**`);
|
|
57
|
+
normalized.add(`**/${p}`);
|
|
58
|
+
normalized.add(`**/${p}/**`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return [...normalized];
|
|
62
|
+
}
|
|
63
|
+
export class ConfigLoader {
|
|
64
|
+
static loadConfig(projectPath) {
|
|
65
|
+
const configPath = join(projectPath, '.architect.json');
|
|
66
|
+
try {
|
|
67
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
68
|
+
const userConfig = JSON.parse(content);
|
|
69
|
+
return this.mergeConfigs(DEFAULT_CONFIG, userConfig);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return { ...DEFAULT_CONFIG };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
static mergeConfigs(defaults, user) {
|
|
76
|
+
// If user provides ignore patterns, normalize them to proper glob format
|
|
77
|
+
const userIgnore = user.ignore
|
|
78
|
+
? normalizeIgnorePatterns(user.ignore)
|
|
79
|
+
: defaults.ignore;
|
|
80
|
+
return {
|
|
81
|
+
ignore: userIgnore,
|
|
82
|
+
plugins: user.plugins ?? defaults.plugins,
|
|
83
|
+
frameworks: {
|
|
84
|
+
detect: user.frameworks?.detect ?? defaults.frameworks?.detect,
|
|
85
|
+
},
|
|
86
|
+
antiPatterns: {
|
|
87
|
+
godClass: {
|
|
88
|
+
linesThreshold: user.antiPatterns?.godClass?.linesThreshold ??
|
|
89
|
+
defaults.antiPatterns?.godClass?.linesThreshold,
|
|
90
|
+
methodsThreshold: user.antiPatterns?.godClass?.methodsThreshold ??
|
|
91
|
+
defaults.antiPatterns?.godClass?.methodsThreshold,
|
|
92
|
+
},
|
|
93
|
+
shotgunSurgery: {
|
|
94
|
+
changePropagationThreshold: user.antiPatterns?.shotgunSurgery?.changePropagationThreshold ??
|
|
95
|
+
defaults.antiPatterns?.shotgunSurgery?.changePropagationThreshold,
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
score: {
|
|
99
|
+
modularity: user.score?.modularity ?? defaults.score?.modularity,
|
|
100
|
+
coupling: user.score?.coupling ?? defaults.score?.coupling,
|
|
101
|
+
cohesion: user.score?.cohesion ?? defaults.score?.cohesion,
|
|
102
|
+
layering: user.score?.layering ?? defaults.score?.layering,
|
|
103
|
+
},
|
|
104
|
+
monorepo: {
|
|
105
|
+
enabled: user.monorepo?.enabled ?? defaults.monorepo?.enabled,
|
|
106
|
+
treatPackagesAsModules: user.monorepo?.treatPackagesAsModules ??
|
|
107
|
+
defaults.monorepo?.treatPackagesAsModules,
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DependencyEdge, Layer } from './types/core.js';
|
|
2
|
+
export declare class DiagramGenerator {
|
|
3
|
+
generateComponentDiagram(edges: DependencyEdge[], layers: Layer[]): string;
|
|
4
|
+
generateLayerDiagram(layers: Layer[]): string;
|
|
5
|
+
generateDependencyFlowDiagram(edges: DependencyEdge[]): string;
|
|
6
|
+
private sanitizeNodeName;
|
|
7
|
+
private getStyleClass;
|
|
8
|
+
private appendCommonClassDefs;
|
|
9
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
const LAYER_THEME = {
|
|
2
|
+
API: { color: '#FFB6C1', style: 'apiStyle' },
|
|
3
|
+
Service: { color: '#87CEEB', style: 'serviceStyle' },
|
|
4
|
+
Data: { color: '#90EE90', style: 'dataStyle' },
|
|
5
|
+
UI: { color: '#FFD700', style: 'uiStyle' },
|
|
6
|
+
Infrastructure: { color: '#D3D3D3', style: 'infraStyle' },
|
|
7
|
+
};
|
|
8
|
+
export class DiagramGenerator {
|
|
9
|
+
generateComponentDiagram(edges, layers) {
|
|
10
|
+
const nodes = new Set();
|
|
11
|
+
edges.forEach((e) => {
|
|
12
|
+
nodes.add(e.from);
|
|
13
|
+
nodes.add(e.to);
|
|
14
|
+
});
|
|
15
|
+
const nodeColors = {};
|
|
16
|
+
for (const layer of layers) {
|
|
17
|
+
for (const file of layer.files) {
|
|
18
|
+
const moduleName = file.split('/').pop() || file;
|
|
19
|
+
nodeColors[moduleName] = LAYER_THEME[layer.name]?.color || '#FFFFFF';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
let mermaid = 'graph TB\n';
|
|
23
|
+
for (const node of Array.from(nodes).slice(0, 20)) {
|
|
24
|
+
const moduleName = node.split('/').pop() || node;
|
|
25
|
+
const color = nodeColors[moduleName] || '#FFFFFF';
|
|
26
|
+
mermaid += ` ${this.sanitizeNodeName(node)}["${moduleName}"]:::${this.getStyleClass(color)}\n`;
|
|
27
|
+
}
|
|
28
|
+
mermaid += '\n';
|
|
29
|
+
for (const edge of edges.slice(0, 30)) {
|
|
30
|
+
mermaid += ` ${this.sanitizeNodeName(edge.from)} --> ${this.sanitizeNodeName(edge.to)}\n`;
|
|
31
|
+
}
|
|
32
|
+
return this.appendCommonClassDefs(mermaid);
|
|
33
|
+
}
|
|
34
|
+
generateLayerDiagram(layers) {
|
|
35
|
+
let mermaid = 'graph LR\n';
|
|
36
|
+
const layerOrder = ['UI', 'API', 'Service', 'Data', 'Infrastructure'];
|
|
37
|
+
for (const layerName of layerOrder) {
|
|
38
|
+
const layer = layers.find((l) => l.name === layerName);
|
|
39
|
+
if (layer && layer.files.length > 0) {
|
|
40
|
+
const nodeId = layerName.replace(/\s+/g, '_');
|
|
41
|
+
const fileCount = layer.files.length;
|
|
42
|
+
const style = LAYER_THEME[layerName]?.style || 'defaultStyle';
|
|
43
|
+
mermaid += ` ${nodeId}["${layerName}<br/>(${fileCount} files)"]:::${style}\n`;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
for (let i = 0; i < layerOrder.length - 1; i++) {
|
|
47
|
+
const from = layerOrder[i].replace(/\s+/g, '_');
|
|
48
|
+
const to = layerOrder[i + 1].replace(/\s+/g, '_');
|
|
49
|
+
mermaid += ` ${from} --> ${to}\n`;
|
|
50
|
+
}
|
|
51
|
+
return this.appendCommonClassDefs(mermaid);
|
|
52
|
+
}
|
|
53
|
+
generateDependencyFlowDiagram(edges) {
|
|
54
|
+
const flowMap = {};
|
|
55
|
+
for (const edge of edges) {
|
|
56
|
+
const flowKey = `${edge.from} -> ${edge.to}`;
|
|
57
|
+
flowMap[flowKey] = (flowMap[flowKey] || 0) + edge.weight;
|
|
58
|
+
}
|
|
59
|
+
const topFlows = Object.entries(flowMap)
|
|
60
|
+
.sort((a, b) => b[1] - a[1])
|
|
61
|
+
.slice(0, 15);
|
|
62
|
+
let mermaid = 'graph LR\n';
|
|
63
|
+
const nodes = new Set();
|
|
64
|
+
for (const [flow] of topFlows) {
|
|
65
|
+
const [from, _, to] = flow.split(' ');
|
|
66
|
+
nodes.add(from);
|
|
67
|
+
nodes.add(to);
|
|
68
|
+
}
|
|
69
|
+
for (const node of nodes) {
|
|
70
|
+
const moduleName = node.split('/').pop() || node;
|
|
71
|
+
mermaid += ` ${this.sanitizeNodeName(node)}["${moduleName}"]\n`;
|
|
72
|
+
}
|
|
73
|
+
mermaid += '\n';
|
|
74
|
+
for (const [flow, weight] of topFlows) {
|
|
75
|
+
const [from, _, to] = flow.split(' ');
|
|
76
|
+
const label = weight > 1 ? ` | ${weight}` : '';
|
|
77
|
+
mermaid += ` ${this.sanitizeNodeName(from)} -->|${label}| ${this.sanitizeNodeName(to)}\n`;
|
|
78
|
+
}
|
|
79
|
+
return mermaid; // specific diagram that doesn't use standard classDefs
|
|
80
|
+
}
|
|
81
|
+
sanitizeNodeName(path) {
|
|
82
|
+
return path
|
|
83
|
+
.replace(/[^a-zA-Z0-9]/g, '_')
|
|
84
|
+
.replace(/_+/g, '_')
|
|
85
|
+
.toLowerCase();
|
|
86
|
+
}
|
|
87
|
+
getStyleClass(color) {
|
|
88
|
+
const match = Object.values(LAYER_THEME).find(t => t.color === color);
|
|
89
|
+
return match ? match.style : 'defaultStyle';
|
|
90
|
+
}
|
|
91
|
+
appendCommonClassDefs(mermaid) {
|
|
92
|
+
let result = mermaid + '\n';
|
|
93
|
+
result += ' classDef apiStyle fill:#FFB6C1,stroke:#333,color:#000\n';
|
|
94
|
+
result += ' classDef serviceStyle fill:#87CEEB,stroke:#333,color:#000\n';
|
|
95
|
+
result += ' classDef dataStyle fill:#90EE90,stroke:#333,color:#000\n';
|
|
96
|
+
result += ' classDef uiStyle fill:#FFD700,stroke:#333,color:#000\n';
|
|
97
|
+
result += ' classDef infraStyle fill:#D3D3D3,stroke:#333,color:#000\n';
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=diagram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagram.js","sourceRoot":"","sources":["../../../src/core/diagram.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type Locale = 'en' | 'pt-BR';
|
|
2
|
+
declare class I18nEngine {
|
|
3
|
+
private currentLocale;
|
|
4
|
+
setLocale(locale: Locale): void;
|
|
5
|
+
getLocale(): Locale;
|
|
6
|
+
private getDict;
|
|
7
|
+
/**
|
|
8
|
+
* Obtém uma string de tradução navegando pela dot notation da AppTranslation.
|
|
9
|
+
* Exemplo: t('agents.backend.title', { lang: 'TypeScript' })
|
|
10
|
+
*/
|
|
11
|
+
t(path: string, params?: Record<string, string | number>): string;
|
|
12
|
+
}
|
|
13
|
+
export declare const i18n: I18nEngine;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { en } from './locales/en.js';
|
|
2
|
+
import { ptBR } from './locales/pt-BR.js';
|
|
3
|
+
class I18nEngine {
|
|
4
|
+
currentLocale = 'en';
|
|
5
|
+
setLocale(locale) {
|
|
6
|
+
if (locale === 'en' || locale === 'pt-BR') {
|
|
7
|
+
this.currentLocale = locale;
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
this.currentLocale = 'en';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
getLocale() {
|
|
14
|
+
return this.currentLocale;
|
|
15
|
+
}
|
|
16
|
+
getDict() {
|
|
17
|
+
return this.currentLocale === 'pt-BR' ? ptBR : en;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Obtém uma string de tradução navegando pela dot notation da AppTranslation.
|
|
21
|
+
* Exemplo: t('agents.backend.title', { lang: 'TypeScript' })
|
|
22
|
+
*/
|
|
23
|
+
t(path, params) {
|
|
24
|
+
const keys = path.split('.');
|
|
25
|
+
let current = this.getDict();
|
|
26
|
+
for (const key of keys) {
|
|
27
|
+
if (current[key] === undefined) {
|
|
28
|
+
// Fallback to EN if missing in current dict
|
|
29
|
+
let fallback = en;
|
|
30
|
+
for (const fKey of keys) {
|
|
31
|
+
if (fallback[fKey] === undefined)
|
|
32
|
+
return `[Missing translation: ${path}]`;
|
|
33
|
+
fallback = fallback[fKey];
|
|
34
|
+
}
|
|
35
|
+
current = fallback;
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
current = current[key];
|
|
39
|
+
}
|
|
40
|
+
if (typeof current !== 'string') {
|
|
41
|
+
return `[Invalid translation path: ${path}]`;
|
|
42
|
+
}
|
|
43
|
+
let text = current;
|
|
44
|
+
// Replace params: {fw} -> value
|
|
45
|
+
if (params) {
|
|
46
|
+
for (const [key, value] of Object.entries(params)) {
|
|
47
|
+
text = text.replace(new RegExp(`{${key}}`, 'g'), String(value));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return text;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export const i18n = new I18nEngine();
|
|
54
|
+
//# sourceMappingURL=i18n.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../src/core/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,IAAI,EAAkB,MAAM,oBAAoB,CAAC;AAI1D,MAAM,UAAU;IACN,aAAa,GAAW,IAAI,CAAC;IAErC,SAAS,CAAC,MAAc;QACtB,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YAC1C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAEO,OAAO;QACb,OAAO,IAAI,CAAC,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,CAAC,CAAC,IAAY,EAAE,MAAwC;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,OAAO,GAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;QAElC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC/B,4CAA4C;gBAC5C,IAAI,QAAQ,GAAQ,EAAE,CAAC;gBACvB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;oBACxB,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS;wBAAE,OAAO,yBAAyB,IAAI,GAAG,CAAC;oBAC1E,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC5B,CAAC;gBACD,OAAO,GAAG,QAAQ,CAAC;gBACnB,MAAM;YACR,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,8BAA8B,IAAI,GAAG,CAAC;QAC/C,CAAC;QAED,IAAI,IAAI,GAAG,OAAiB,CAAC;QAE7B,gCAAgC;QAChC,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
export const en = {
|
|
2
|
+
// === CLI ===
|
|
3
|
+
cli: {
|
|
4
|
+
phases: {
|
|
5
|
+
scan: { label: 'FILE SCANNER', verb: 'Scanning filesystem' },
|
|
6
|
+
dependencies: { label: 'DEPENDENCY MAPPER', verb: 'Mapping import graph' },
|
|
7
|
+
layers: { label: 'LAYER DETECTOR', verb: 'Classifying architecture' },
|
|
8
|
+
antipatterns: { label: 'PATTERN ANALYZER', verb: 'Detecting anti-patterns' },
|
|
9
|
+
scoring: { label: 'QUALITY ENGINE', verb: 'Computing quality metrics' },
|
|
10
|
+
normalize: { label: 'PATH NORMALIZER', verb: 'Normalizing paths' },
|
|
11
|
+
summarize: { label: 'AI SUMMARIZER', verb: 'Generating project summary' }
|
|
12
|
+
},
|
|
13
|
+
results: {
|
|
14
|
+
score: 'ARCHITECTURE SCORE',
|
|
15
|
+
completedIn: 'Completed in',
|
|
16
|
+
files: 'files',
|
|
17
|
+
lines: 'lines',
|
|
18
|
+
anitpatterns: 'anti-patterns',
|
|
19
|
+
steps: 'steps',
|
|
20
|
+
agents: 'agents'
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
// === AGONTS OUTPUTS ===
|
|
24
|
+
agents: {
|
|
25
|
+
generatedBy: 'Generated by Architect v8.1',
|
|
26
|
+
backend: {
|
|
27
|
+
description: '{lang} Backend Developer — APIs, services, business logic',
|
|
28
|
+
title: '🔧 {lang} BACKEND DEVELOPER',
|
|
29
|
+
specialistIn: 'Backend specialist in {fw} for {projectName}',
|
|
30
|
+
stack: 'Stack',
|
|
31
|
+
language: 'Language',
|
|
32
|
+
framework: 'Framework',
|
|
33
|
+
architecture: 'Architecture',
|
|
34
|
+
test: 'Test Framework',
|
|
35
|
+
packageManager: 'Package Manager',
|
|
36
|
+
currentScore: 'Current Score',
|
|
37
|
+
domainContext: 'Domain & Business Context',
|
|
38
|
+
principles: 'Principles (SOLID + Clean Architecture)',
|
|
39
|
+
modules: 'Project Modules',
|
|
40
|
+
projectStructure: 'Project Structure (Detected)',
|
|
41
|
+
implementationRules: 'Implementation Rules',
|
|
42
|
+
implementationRulesBody: `□ Controller MUST NEVER contain business logic (routing only)
|
|
43
|
+
□ Service MUST NEVER access Request/Response directly
|
|
44
|
+
□ Entity MUST NEVER be exposed directly in API (use DTO)
|
|
45
|
+
□ Input validation in DTO / Guard / Pipe
|
|
46
|
+
□ Errors thrown with clear messages and correct HTTP status
|
|
47
|
+
□ Structured logging (never console.log)
|
|
48
|
+
□ Unit tests for every service method
|
|
49
|
+
□ Integration tests for every endpoint
|
|
50
|
+
□ Coverage ≥ {coverage}%`,
|
|
51
|
+
afterImplementation: 'After Backend Implementation',
|
|
52
|
+
afterImplementationBody: `> **MANDATORY: Generate Integration Document before proceeding to frontend/app.**
|
|
53
|
+
|
|
54
|
+
Document must contain:
|
|
55
|
+
- All created/modified endpoints
|
|
56
|
+
- Request and response payloads (with examples)
|
|
57
|
+
- Error codes and messages
|
|
58
|
+
- Business rules applied
|
|
59
|
+
- Required headers (auth, pagination, etc.)`
|
|
60
|
+
},
|
|
61
|
+
frontend: {
|
|
62
|
+
description: '{fw} Frontend Developer — Components, UX, state management',
|
|
63
|
+
title: '🎨 {fw} FRONTEND DEVELOPER',
|
|
64
|
+
specialistIn: 'Frontend specialist in {fw} for {projectName}',
|
|
65
|
+
prerequisites: 'Prerequisites for Implementation',
|
|
66
|
+
prerequisitesBody: `╔══════════════════════════════════════════════╗
|
|
67
|
+
║ BEFORE writing any UI component: ║
|
|
68
|
+
║ ║
|
|
69
|
+
║ □ MOCKUP approved by human ║
|
|
70
|
+
║ □ Integration Document available ║
|
|
71
|
+
║ □ User stories with acceptance criteria ║
|
|
72
|
+
║ □ BDD scenarios written ║
|
|
73
|
+
╚══════════════════════════════════════════════╝`,
|
|
74
|
+
implementationRules: 'Implementation Rules',
|
|
75
|
+
implementationRulesBody: `□ Component follows approved MOCKUP (do not invent UI)
|
|
76
|
+
□ ALL UI states implemented:
|
|
77
|
+
- ✅ Data present (normal state)
|
|
78
|
+
- 📭 Empty state
|
|
79
|
+
- ⏳ Loading state (skeleton)
|
|
80
|
+
- ❌ Error state (with clear message)
|
|
81
|
+
□ Business logic in services (NEVER in the component)
|
|
82
|
+
□ Proper state management (no prop drilling)
|
|
83
|
+
□ Forms with client-side validation
|
|
84
|
+
□ Responsive layout (mobile + desktop)
|
|
85
|
+
□ Basic accessibility (labels, aria, contrast)
|
|
86
|
+
□ Lazy loading where applicable
|
|
87
|
+
□ Coverage ≥ {coverage}%`
|
|
88
|
+
},
|
|
89
|
+
security: {
|
|
90
|
+
description: 'Security Auditor — Threat analysis, compliance, vulnerability scanning',
|
|
91
|
+
title: '🛡️ SECURITY AUDITOR',
|
|
92
|
+
analysisFor: 'Security Analysis for {projectName}',
|
|
93
|
+
checklist: 'OWASP Top 10 Checklist',
|
|
94
|
+
checklistBody: `□ A01: Broken Access Control — RBAC implemented?
|
|
95
|
+
□ A02: Cryptographic Failures — Sensitive data encrypted?
|
|
96
|
+
□ A03: Injection — Inputs sanitized? Parameterized queries?
|
|
97
|
+
□ A04: Insecure Design — Threat modeling performed?
|
|
98
|
+
□ A05: Security Misconfiguration — Secure headers, CORS?
|
|
99
|
+
□ A06: Vulnerable Components — Dependencies updated?
|
|
100
|
+
□ A07: Auth Failures — Brute-force protected? Session managed?
|
|
101
|
+
□ A08: Software Integrity — Supply chain verified?
|
|
102
|
+
□ A09: Logging Failures — Audit logs for sensitive actions?
|
|
103
|
+
□ A10: SSRF — Server-side requests validated?`,
|
|
104
|
+
whenToActivate: 'When To Activate',
|
|
105
|
+
whenToActivateBody: `- Any feature handling: auth, personal data, payments
|
|
106
|
+
- New public APIs
|
|
107
|
+
- External system integrations
|
|
108
|
+
- Infrastructure/Ops changes`,
|
|
109
|
+
expectedOutput: 'Expected Output',
|
|
110
|
+
expectedOutputBody: `1. Findings list with severity levels (CRITICAL/HIGH/MEDIUM/LOW)
|
|
111
|
+
2. Mitigation recommendations
|
|
112
|
+
3. Threat model (if applicable)`
|
|
113
|
+
},
|
|
114
|
+
qa: {
|
|
115
|
+
description: 'QA Test Engineer — Test planning, BDD/TDD, coverage analysis',
|
|
116
|
+
title: '🧪 QA TEST ENGINEER',
|
|
117
|
+
qualityFor: 'Test Quality mapping for {projectName}',
|
|
118
|
+
nonNegotiable: 'Non-Negotiable Targets',
|
|
119
|
+
nonNegotiableBody: `╔══════════════════════════════════════════╗
|
|
120
|
+
║ Minimum Coverage: {coverage}% ║
|
|
121
|
+
║ No tests = no delivery, no completion ║
|
|
122
|
+
║ NON-NEGOTIABLE. ║
|
|
123
|
+
╚══════════════════════════════════════════╝`,
|
|
124
|
+
pyramid: 'Testing Pyramid',
|
|
125
|
+
pyramidBody: ` ╱╲
|
|
126
|
+
╱ E2E╲ → Few, slow, high value
|
|
127
|
+
╱──────╲
|
|
128
|
+
╱Integration╲ → Medium, validate integration
|
|
129
|
+
╱──────────────╲
|
|
130
|
+
╱ Unit Tests ╲ → Many, fast, cheap
|
|
131
|
+
╱════════════════════╲`,
|
|
132
|
+
process: 'Testing Process',
|
|
133
|
+
processBody: `1. **BDD first** — Gherkin scenarios before code
|
|
134
|
+
2. **TDD** — RED → GREEN → REFACTOR
|
|
135
|
+
3. **Coverage** — verify after each implementation
|
|
136
|
+
4. **Regression** — ALL previous tests must pass
|
|
137
|
+
5. **Review** — tests are reviewed alongside the code`,
|
|
138
|
+
refactoringRoadmap: 'Refactoring Roadmap'
|
|
139
|
+
},
|
|
140
|
+
techDebt: {
|
|
141
|
+
description: 'Tech Debt Controller — Technical debt backlog and score enforcement',
|
|
142
|
+
title: '📊 TECH DEBT CONTROLLER',
|
|
143
|
+
controlFor: 'Tech debt tracking for {projectName}',
|
|
144
|
+
currentState: 'Current State',
|
|
145
|
+
stateTable: `| Metric | Value |
|
|
146
|
+
|---------|-------|
|
|
147
|
+
| Score | {score}/100 |
|
|
148
|
+
| Target | {target}/100 |
|
|
149
|
+
| Anti-patterns | {antiPatterns} |
|
|
150
|
+
| Pending Refactors | {refactoringSteps} |
|
|
151
|
+
| Estimated Gain | +{improvement} points |`,
|
|
152
|
+
refactoringRoadmap: 'Refactoring Roadmap',
|
|
153
|
+
scoreTargets: 'Score Targets',
|
|
154
|
+
scoreTargetsBody: `Current Score: {score}/100
|
|
155
|
+
Short-Term Target: {targetShort}/100
|
|
156
|
+
Mid-Term Target: {targetMedium}/100
|
|
157
|
+
Minimum Acceptable: {threshold}/100`,
|
|
158
|
+
rules: 'Enforcement Rules',
|
|
159
|
+
rulesBody: `□ Score MUST NEVER regress after a PR
|
|
160
|
+
□ Minimum allowed: {threshold}/100
|
|
161
|
+
□ Critical: resolve within 1 sprint
|
|
162
|
+
□ High: resolve within 2 sprints
|
|
163
|
+
□ Medium: add to technical backlog
|
|
164
|
+
□ Verify using: architect score ./src`
|
|
165
|
+
},
|
|
166
|
+
codeReview: {
|
|
167
|
+
description: 'Code Review Checklist — Mandatory review points',
|
|
168
|
+
title: '🔍 CODE REVIEW CHECKLIST — {projectName}',
|
|
169
|
+
mandatoryRule: '**Every PR must be verified against this checklist.**',
|
|
170
|
+
mandatory: 'Mandatory',
|
|
171
|
+
mandatoryBody: `□ Code compiles without errors
|
|
172
|
+
□ All tests pass
|
|
173
|
+
□ Coverage ≥ {coverage}%
|
|
174
|
+
□ Lint passes without errors
|
|
175
|
+
□ No hardcoded secrets
|
|
176
|
+
□ Score has not regressed`,
|
|
177
|
+
functional: 'Functional',
|
|
178
|
+
functionalBody: `□ Meets acceptance criteria
|
|
179
|
+
□ Edge cases handled
|
|
180
|
+
□ Errors handled appropriately
|
|
181
|
+
□ Exisiting features not broken`,
|
|
182
|
+
quality: 'Quality',
|
|
183
|
+
qualityBody: `□ Code readable without explanatory comments
|
|
184
|
+
□ Naming is descriptive and consistent
|
|
185
|
+
□ Functions are small and focused
|
|
186
|
+
□ No code duplication (DRY)
|
|
187
|
+
□ Complex logic is isolated and tested
|
|
188
|
+
□ No large commented out code blocks`,
|
|
189
|
+
domainReviewItems: 'Domain-Specific Review Items: {domain}',
|
|
190
|
+
domainRules: {
|
|
191
|
+
fintech: `□ Are transactions idempotent?
|
|
192
|
+
□ Complete audit of all operations?
|
|
193
|
+
□ No sensitive data exposed in logs?
|
|
194
|
+
□ Monetary values use Decimal (no floats)?
|
|
195
|
+
□ PCI-DSS compliance verified?`,
|
|
196
|
+
healthtech: `□ GDPR/LGPD compliance verified?
|
|
197
|
+
□ Sensitive data encrypted at rest?
|
|
198
|
+
□ Access audited and logged?
|
|
199
|
+
□ Anonymization implemented correctly?
|
|
200
|
+
□ 2FA for sensitive operations?`,
|
|
201
|
+
ecommerce: `□ Cart is idempotent?
|
|
202
|
+
□ Inventory updated correctly (race conditions)?
|
|
203
|
+
□ Prices validated (no client-side manipulation)?
|
|
204
|
+
□ Coupons/discounts applied correctly?
|
|
205
|
+
□ Fraud detection implemented?`,
|
|
206
|
+
default: `□ Critical business workflow intact?
|
|
207
|
+
□ Rollback is safe?
|
|
208
|
+
□ Concurrency handled?
|
|
209
|
+
□ Final state is consistent?`
|
|
210
|
+
},
|
|
211
|
+
stackReviewItems: 'Language-Specific Checklist: {stack}',
|
|
212
|
+
stackRules: {
|
|
213
|
+
ts: `□ \`strict: true\` in tsconfig (no unjustified 'any')?
|
|
214
|
+
□ Circular imports?
|
|
215
|
+
□ Async/await handled (no unhandled promises)?
|
|
216
|
+
□ Memory leaks (EventListeners unsubscribed)?
|
|
217
|
+
□ Console.log/debugger removed?`,
|
|
218
|
+
python: `□ Type hints on all public functions?
|
|
219
|
+
□ Docstrings formatted (Google or NumPy style)?
|
|
220
|
+
□ No mutable default arguments?
|
|
221
|
+
□ Context managers used for resources?
|
|
222
|
+
□ F-strings instead of % or .format()?
|
|
223
|
+
□ No \`eval()\` or \`exec()\`?`,
|
|
224
|
+
go: `□ Errors handled (not ignored with _)?
|
|
225
|
+
□ Defer for cleanup?
|
|
226
|
+
□ Goroutines with context?
|
|
227
|
+
□ Race conditions tested?
|
|
228
|
+
□ Timeouts implemented?`,
|
|
229
|
+
dart: `□ Null-safety (! avoided)?
|
|
230
|
+
□ Widgets have keys in lists?
|
|
231
|
+
□ BuildContext accessed only in build?
|
|
232
|
+
□ Listeners unsubscribed?
|
|
233
|
+
□ Images/assets load lazily?`,
|
|
234
|
+
default: `□ Code follows project standards?
|
|
235
|
+
□ Dependencies updated?
|
|
236
|
+
□ No compiler/linter warnings?`
|
|
237
|
+
},
|
|
238
|
+
integrationReviewItems: 'Integration Review Items',
|
|
239
|
+
integrationRulesBody: `□ Endpoint handles all expected status codes?
|
|
240
|
+
□ Input payload validation?
|
|
241
|
+
{auth}
|
|
242
|
+
{validation}
|
|
243
|
+
□ Response follows the documented contract?
|
|
244
|
+
□ Errors return clear messages?
|
|
245
|
+
□ Rate limiting applied?
|
|
246
|
+
□ Structured logging?`
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
// === DYNAMIC BLOCKS ===
|
|
250
|
+
dynamic: {
|
|
251
|
+
compliance: {
|
|
252
|
+
title: 'Detected Compliance Requirements',
|
|
253
|
+
reason: 'Reason',
|
|
254
|
+
mandatoryChecks: 'Mandatory Checks'
|
|
255
|
+
},
|
|
256
|
+
integrations: {
|
|
257
|
+
title: 'Integration Security',
|
|
258
|
+
threats: 'Threats',
|
|
259
|
+
types: {
|
|
260
|
+
payment: 'PCI-DSS, sensitive data encryption, tokenization',
|
|
261
|
+
auth: 'MFA, session hijacking, credential stuffing',
|
|
262
|
+
api: 'Rate limiting, API key rotation, required HTTPS',
|
|
263
|
+
database: 'SQL Injection, Encryption at rest, Backups',
|
|
264
|
+
government: 'Regulatory compliance, audit trails, data retention',
|
|
265
|
+
default: 'Input/output validation, rate limiting'
|
|
266
|
+
}
|
|
267
|
+
},
|
|
268
|
+
domainThreats: {
|
|
269
|
+
title: 'Domain-Specific Threats: {domain}',
|
|
270
|
+
fintech: `- **Data Manipulation:** Transaction audits, checksums, encryption
|
|
271
|
+
- **Unauthorized Access:** MFA on privileged accounts, IP whitelist
|
|
272
|
+
- **Compliance:** PCI-DSS, LGPD/GDPR, SOX
|
|
273
|
+
- **Fraud:** Anomaly detection, rate limiting`,
|
|
274
|
+
healthtech: `- **Data Leakage:** End-to-end encryption, anonymization
|
|
275
|
+
- **HIPAA/GDPR:** Audit trails, explicit consent
|
|
276
|
+
- **Integrity:** Digital signatures, blockchain if applicable
|
|
277
|
+
- **Access:** Granular RBAC, 2FA for sensitive data`,
|
|
278
|
+
ecommerce: `- **Payment Fraud:** CVV validation, 3D Secure
|
|
279
|
+
- **Data Theft:** SSL/TLS, PCI-DSS, encryption at rest
|
|
280
|
+
- **DoS:** Rate limiting, CAPTCHA, WAF
|
|
281
|
+
- **Auth:** MFA, session timeout`,
|
|
282
|
+
default: `- **Confidentiality:** Data encrypted in transit and at rest
|
|
283
|
+
- **Integrity:** Input validation, checksums
|
|
284
|
+
- **Availability:** Backup, disaster recovery, monitoring
|
|
285
|
+
- **Auditing:** Logging sensitive actions, retention policy`
|
|
286
|
+
},
|
|
287
|
+
qaDomain: {
|
|
288
|
+
title: 'Domain-Specific Test Scenarios: {domain}',
|
|
289
|
+
fintech: `### Business Tests
|
|
290
|
+
- Create transaction with valid amounts
|
|
291
|
+
- Reject transaction above limit
|
|
292
|
+
- Process refund correctly
|
|
293
|
+
- Audit logging of all transactions
|
|
294
|
+
- Validate balance after multiple operations
|
|
295
|
+
|
|
296
|
+
### Security Tests
|
|
297
|
+
- Do not expose card data in logs
|
|
298
|
+
- Validate PCI-DSS compliance
|
|
299
|
+
- Test fraud detection`,
|
|
300
|
+
healthtech: `### Business Tests
|
|
301
|
+
- Create patient record with GDPR compliance
|
|
302
|
+
- Validate consent before sharing data
|
|
303
|
+
- Anonymize data correctly
|
|
304
|
+
- Respect right to be forgotten
|
|
305
|
+
- Audit access to sensitive data
|
|
306
|
+
|
|
307
|
+
### Security Tests
|
|
308
|
+
- E2E encryption at rest
|
|
309
|
+
- Validate 2FA for critical data
|
|
310
|
+
- Test data retention`,
|
|
311
|
+
ecommerce: `### Business Tests
|
|
312
|
+
- Create cart with multiple products
|
|
313
|
+
- Apply discount/coupon correctly
|
|
314
|
+
- Process payment with 3DS validation
|
|
315
|
+
- Update inventory after sale
|
|
316
|
+
- Generate order with correct status
|
|
317
|
+
|
|
318
|
+
### Security Tests
|
|
319
|
+
- Do not expose card data
|
|
320
|
+
- Validate rate limiting on checkout
|
|
321
|
+
- Test fraud protection`,
|
|
322
|
+
default: `### Business Tests
|
|
323
|
+
- Main flow (happy path)
|
|
324
|
+
- Edge cases and boundaries
|
|
325
|
+
- Concurrency (race conditions)
|
|
326
|
+
- Rollback after error
|
|
327
|
+
- Idempotency
|
|
328
|
+
|
|
329
|
+
### Security Tests
|
|
330
|
+
- Invalid/malicious inputs
|
|
331
|
+
- Unauthorized access
|
|
332
|
+
- Rate limiting
|
|
333
|
+
- Proper logging`
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
//# sourceMappingURL=en.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"en.js","sourceRoot":"","sources":["../../../../src/core/locales/en.ts"],"names":[],"mappings":"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"}
|