@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.
Files changed (217) hide show
  1. package/dist/src/core/analyzer.d.ts +42 -0
  2. package/dist/src/core/analyzer.js +431 -0
  3. package/dist/src/core/analyzer.js.map +1 -0
  4. package/dist/src/core/analyzers/forecast.d.ts +84 -0
  5. package/dist/src/core/analyzers/forecast.js +338 -0
  6. package/dist/src/core/analyzers/forecast.js.map +1 -0
  7. package/dist/src/core/analyzers/index.d.ts +9 -0
  8. package/dist/src/core/analyzers/index.js +7 -0
  9. package/dist/src/core/analyzers/index.js.map +1 -0
  10. package/dist/src/core/analyzers/temporal-scorer.d.ts +71 -0
  11. package/dist/src/core/analyzers/temporal-scorer.js +141 -0
  12. package/dist/src/core/analyzers/temporal-scorer.js.map +1 -0
  13. package/dist/src/core/anti-patterns.d.ts +28 -0
  14. package/dist/src/core/anti-patterns.js +264 -0
  15. package/dist/src/core/anti-patterns.js.map +1 -0
  16. package/dist/src/core/ast/ast-parser.interface.d.ts +20 -0
  17. package/dist/src/core/ast/ast-parser.interface.js +2 -0
  18. package/dist/src/core/ast/ast-parser.interface.js.map +1 -0
  19. package/dist/src/core/ast/path-resolver.d.ts +13 -0
  20. package/dist/src/core/ast/path-resolver.js +54 -0
  21. package/dist/src/core/ast/path-resolver.js.map +1 -0
  22. package/dist/src/core/ast/tree-sitter-parser.d.ts +10 -0
  23. package/dist/src/core/ast/tree-sitter-parser.js +142 -0
  24. package/dist/src/core/ast/tree-sitter-parser.js.map +1 -0
  25. package/dist/src/core/config.d.ts +11 -0
  26. package/dist/src/core/config.js +112 -0
  27. package/dist/src/core/config.js.map +1 -0
  28. package/dist/src/core/diagram.d.ts +9 -0
  29. package/dist/src/core/diagram.js +101 -0
  30. package/dist/src/core/diagram.js.map +1 -0
  31. package/dist/src/core/i18n.d.ts +14 -0
  32. package/dist/src/core/i18n.js +54 -0
  33. package/dist/src/core/i18n.js.map +1 -0
  34. package/dist/src/core/locales/en.d.ts +2 -0
  35. package/dist/src/core/locales/en.js +337 -0
  36. package/dist/src/core/locales/en.js.map +1 -0
  37. package/dist/src/core/locales/pt-BR.d.ts +172 -0
  38. package/dist/src/core/locales/pt-BR.js +337 -0
  39. package/dist/src/core/locales/pt-BR.js.map +1 -0
  40. package/dist/src/core/locales/types.d.ts +86 -0
  41. package/dist/src/core/locales/types.js +2 -0
  42. package/dist/src/core/locales/types.js.map +1 -0
  43. package/dist/src/core/plugin-loader.d.ts +11 -0
  44. package/dist/src/core/plugin-loader.js +67 -0
  45. package/dist/src/core/plugin-loader.js.map +1 -0
  46. package/dist/src/core/project-summarizer.d.ts +16 -0
  47. package/dist/src/core/project-summarizer.js +37 -0
  48. package/dist/src/core/project-summarizer.js.map +1 -0
  49. package/dist/src/core/refactor-engine.d.ts +18 -0
  50. package/dist/src/core/refactor-engine.js +87 -0
  51. package/dist/src/core/refactor-engine.js.map +1 -0
  52. package/dist/src/core/rules/barrel-optimizer.d.ts +13 -0
  53. package/dist/src/core/rules/barrel-optimizer.js +76 -0
  54. package/dist/src/core/rules/barrel-optimizer.js.map +1 -0
  55. package/dist/src/core/rules/dead-code-detector.d.ts +21 -0
  56. package/dist/src/core/rules/dead-code-detector.js +116 -0
  57. package/dist/src/core/rules/dead-code-detector.js.map +1 -0
  58. package/dist/src/core/rules/hub-splitter.d.ts +13 -0
  59. package/dist/src/core/rules/hub-splitter.js +117 -0
  60. package/dist/src/core/rules/hub-splitter.js.map +1 -0
  61. package/dist/src/core/rules/import-organizer.d.ts +13 -0
  62. package/dist/src/core/rules/import-organizer.js +84 -0
  63. package/dist/src/core/rules/import-organizer.js.map +1 -0
  64. package/dist/src/core/rules/module-grouper.d.ts +13 -0
  65. package/dist/src/core/rules/module-grouper.js +116 -0
  66. package/dist/src/core/rules/module-grouper.js.map +1 -0
  67. package/dist/src/core/rules-engine.d.ts +7 -0
  68. package/dist/src/core/rules-engine.js +89 -0
  69. package/dist/src/core/rules-engine.js.map +1 -0
  70. package/dist/src/core/scorer.d.ts +15 -0
  71. package/dist/src/core/scorer.js +165 -0
  72. package/dist/src/core/scorer.js.map +1 -0
  73. package/dist/src/core/summarizer/keyword-extractor.d.ts +6 -0
  74. package/dist/src/core/summarizer/keyword-extractor.js +38 -0
  75. package/dist/src/core/summarizer/keyword-extractor.js.map +1 -0
  76. package/dist/src/core/summarizer/module-inferrer.d.ts +11 -0
  77. package/dist/src/core/summarizer/module-inferrer.js +171 -0
  78. package/dist/src/core/summarizer/module-inferrer.js.map +1 -0
  79. package/dist/src/core/summarizer/package-reader.d.ts +3 -0
  80. package/dist/src/core/summarizer/package-reader.js +33 -0
  81. package/dist/src/core/summarizer/package-reader.js.map +1 -0
  82. package/dist/src/core/summarizer/purpose-inferrer.d.ts +8 -0
  83. package/dist/src/core/summarizer/purpose-inferrer.js +179 -0
  84. package/dist/src/core/summarizer/purpose-inferrer.js.map +1 -0
  85. package/dist/src/core/summarizer/readme-reader.d.ts +3 -0
  86. package/dist/src/core/summarizer/readme-reader.js +24 -0
  87. package/dist/src/core/summarizer/readme-reader.js.map +1 -0
  88. package/dist/src/core/types/architect-rules.d.ts +27 -0
  89. package/dist/src/core/types/architect-rules.js +2 -0
  90. package/dist/src/core/types/architect-rules.js.map +1 -0
  91. package/dist/src/core/types/core.d.ts +87 -0
  92. package/dist/src/core/types/core.js +2 -0
  93. package/dist/src/core/types/core.js.map +1 -0
  94. package/dist/src/core/types/infrastructure.d.ts +38 -0
  95. package/dist/src/core/types/infrastructure.js +2 -0
  96. package/dist/src/core/types/infrastructure.js.map +1 -0
  97. package/dist/src/core/types/plugin.d.ts +12 -0
  98. package/dist/src/core/types/plugin.js +2 -0
  99. package/dist/src/core/types/plugin.js.map +1 -0
  100. package/dist/src/core/types/rules.d.ts +53 -0
  101. package/dist/src/core/types/rules.js +2 -0
  102. package/dist/src/core/types/rules.js.map +1 -0
  103. package/dist/src/core/types/summarizer.d.ts +12 -0
  104. package/dist/src/core/types/summarizer.js +2 -0
  105. package/dist/src/core/types/summarizer.js.map +1 -0
  106. package/dist/src/infrastructure/git-cache.d.ts +6 -0
  107. package/dist/src/infrastructure/git-cache.js +41 -0
  108. package/dist/src/infrastructure/git-cache.js.map +1 -0
  109. package/dist/src/infrastructure/git-history.d.ts +112 -0
  110. package/dist/src/infrastructure/git-history.js +340 -0
  111. package/dist/src/infrastructure/git-history.js.map +1 -0
  112. package/dist/src/infrastructure/logger.d.ts +20 -0
  113. package/dist/src/infrastructure/logger.js +57 -0
  114. package/dist/src/infrastructure/logger.js.map +1 -0
  115. package/dist/src/infrastructure/scanner.d.ts +31 -0
  116. package/dist/src/infrastructure/scanner.js +334 -0
  117. package/dist/src/infrastructure/scanner.js.map +1 -0
  118. package/dist/tests/analyzers-integration.test.d.ts +7 -0
  119. package/dist/tests/analyzers-integration.test.js +140 -0
  120. package/dist/tests/analyzers-integration.test.js.map +1 -0
  121. package/dist/tests/anti-patterns.test.d.ts +1 -0
  122. package/dist/tests/anti-patterns.test.js +81 -0
  123. package/dist/tests/anti-patterns.test.js.map +1 -0
  124. package/dist/tests/ast-parser.test.d.ts +1 -0
  125. package/dist/tests/ast-parser.test.js +94 -0
  126. package/dist/tests/ast-parser.test.js.map +1 -0
  127. package/dist/tests/fixtures/monorepo/packages/app/src/index.d.ts +1 -0
  128. package/dist/tests/fixtures/monorepo/packages/app/src/index.js +9 -0
  129. package/dist/tests/fixtures/monorepo/packages/app/src/index.js.map +1 -0
  130. package/dist/tests/fixtures/monorepo/packages/core/src/index.d.ts +2 -0
  131. package/dist/tests/fixtures/monorepo/packages/core/src/index.js +11 -0
  132. package/dist/tests/fixtures/monorepo/packages/core/src/index.js.map +1 -0
  133. package/dist/tests/forecast.test.d.ts +7 -0
  134. package/dist/tests/forecast.test.js +380 -0
  135. package/dist/tests/forecast.test.js.map +1 -0
  136. package/dist/tests/git-history.test.d.ts +7 -0
  137. package/dist/tests/git-history.test.js +193 -0
  138. package/dist/tests/git-history.test.js.map +1 -0
  139. package/dist/tests/i18n.test.d.ts +1 -0
  140. package/dist/tests/i18n.test.js +39 -0
  141. package/dist/tests/i18n.test.js.map +1 -0
  142. package/dist/tests/monorepo-scan.test.d.ts +11 -0
  143. package/dist/tests/monorepo-scan.test.js +143 -0
  144. package/dist/tests/monorepo-scan.test.js.map +1 -0
  145. package/dist/tests/plugin-loader.test.d.ts +1 -0
  146. package/dist/tests/plugin-loader.test.js +31 -0
  147. package/dist/tests/plugin-loader.test.js.map +1 -0
  148. package/dist/tests/rules-engine.test.d.ts +1 -0
  149. package/dist/tests/rules-engine.test.js +112 -0
  150. package/dist/tests/rules-engine.test.js.map +1 -0
  151. package/dist/tests/scanner.test.d.ts +1 -0
  152. package/dist/tests/scanner.test.js +44 -0
  153. package/dist/tests/scanner.test.js.map +1 -0
  154. package/dist/tests/scorer.test.d.ts +1 -0
  155. package/dist/tests/scorer.test.js +610 -0
  156. package/dist/tests/scorer.test.js.map +1 -0
  157. package/dist/tests/temporal-scorer.test.d.ts +7 -0
  158. package/dist/tests/temporal-scorer.test.js +239 -0
  159. package/dist/tests/temporal-scorer.test.js.map +1 -0
  160. package/package.json +29 -0
  161. package/src/core/analyzer.ts +499 -0
  162. package/src/core/analyzers/forecast.ts +497 -0
  163. package/src/core/analyzers/index.ts +33 -0
  164. package/src/core/analyzers/temporal-scorer.ts +227 -0
  165. package/src/core/anti-patterns.ts +324 -0
  166. package/src/core/ast/ast-parser.interface.ts +21 -0
  167. package/src/core/ast/path-resolver.ts +61 -0
  168. package/src/core/ast/tree-sitter-parser.ts +158 -0
  169. package/src/core/config.ts +125 -0
  170. package/src/core/diagram.ts +129 -0
  171. package/src/core/i18n.ts +64 -0
  172. package/src/core/locales/en.ts +340 -0
  173. package/src/core/locales/pt-BR.ts +341 -0
  174. package/src/core/locales/types.ts +95 -0
  175. package/src/core/plugin-loader.ts +80 -0
  176. package/src/core/project-summarizer.ts +42 -0
  177. package/src/core/refactor-engine.ts +112 -0
  178. package/src/core/rules/barrel-optimizer.ts +99 -0
  179. package/src/core/rules/dead-code-detector.ts +134 -0
  180. package/src/core/rules/hub-splitter.ts +135 -0
  181. package/src/core/rules/import-organizer.ts +100 -0
  182. package/src/core/rules/module-grouper.ts +133 -0
  183. package/src/core/rules-engine.ts +100 -0
  184. package/src/core/scorer.ts +181 -0
  185. package/src/core/summarizer/keyword-extractor.ts +53 -0
  186. package/src/core/summarizer/module-inferrer.ts +194 -0
  187. package/src/core/summarizer/package-reader.ts +34 -0
  188. package/src/core/summarizer/purpose-inferrer.ts +197 -0
  189. package/src/core/summarizer/readme-reader.ts +24 -0
  190. package/src/core/types/architect-rules.ts +29 -0
  191. package/src/core/types/core.ts +94 -0
  192. package/src/core/types/infrastructure.ts +41 -0
  193. package/src/core/types/plugin.ts +19 -0
  194. package/src/core/types/rules.ts +51 -0
  195. package/src/core/types/summarizer.ts +8 -0
  196. package/src/infrastructure/git-cache.ts +52 -0
  197. package/src/infrastructure/git-history.ts +496 -0
  198. package/src/infrastructure/logger.ts +68 -0
  199. package/src/infrastructure/scanner.ts +349 -0
  200. package/tests/analyzers-integration.test.ts +174 -0
  201. package/tests/anti-patterns.test.ts +95 -0
  202. package/tests/ast-parser.test.ts +102 -0
  203. package/tests/fixtures/monorepo/package.json +6 -0
  204. package/tests/fixtures/monorepo/packages/app/package.json +12 -0
  205. package/tests/fixtures/monorepo/packages/app/src/index.ts +6 -0
  206. package/tests/fixtures/monorepo/packages/core/package.json +7 -0
  207. package/tests/fixtures/monorepo/packages/core/src/index.ts +7 -0
  208. package/tests/forecast.test.ts +504 -0
  209. package/tests/git-history.test.ts +254 -0
  210. package/tests/i18n.test.ts +47 -0
  211. package/tests/monorepo-scan.test.ts +170 -0
  212. package/tests/plugin-loader.test.ts +40 -0
  213. package/tests/rules-engine.test.ts +131 -0
  214. package/tests/scanner.test.ts +54 -0
  215. package/tests/scorer.test.ts +675 -0
  216. package/tests/temporal-scorer.test.ts +306 -0
  217. 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,2 @@
1
+ import { AppTranslation } from './pt-BR.js';
2
+ export declare const en: AppTranslation;
@@ -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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"}