@girardelli/architect 2.2.0 → 5.0.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 (212) hide show
  1. package/README.md +105 -116
  2. package/architect-run.sh +431 -0
  3. package/assets/banner-v3.html +561 -0
  4. package/dist/agent-generator/context-enricher.d.ts +58 -0
  5. package/dist/agent-generator/context-enricher.d.ts.map +1 -0
  6. package/dist/agent-generator/context-enricher.js +613 -0
  7. package/dist/agent-generator/context-enricher.js.map +1 -0
  8. package/dist/agent-generator/domain-inferrer.d.ts +52 -0
  9. package/dist/agent-generator/domain-inferrer.d.ts.map +1 -0
  10. package/dist/agent-generator/domain-inferrer.js +585 -0
  11. package/dist/agent-generator/domain-inferrer.js.map +1 -0
  12. package/dist/agent-generator/framework-detector.d.ts +40 -0
  13. package/dist/agent-generator/framework-detector.d.ts.map +1 -0
  14. package/dist/agent-generator/framework-detector.js +611 -0
  15. package/dist/agent-generator/framework-detector.js.map +1 -0
  16. package/dist/agent-generator/index.d.ts +47 -0
  17. package/dist/agent-generator/index.d.ts.map +1 -0
  18. package/dist/agent-generator/index.js +545 -0
  19. package/dist/agent-generator/index.js.map +1 -0
  20. package/dist/agent-generator/stack-detector.d.ts +14 -0
  21. package/dist/agent-generator/stack-detector.d.ts.map +1 -0
  22. package/dist/agent-generator/stack-detector.js +124 -0
  23. package/dist/agent-generator/stack-detector.js.map +1 -0
  24. package/dist/agent-generator/templates/core/agents.d.ts +17 -0
  25. package/dist/agent-generator/templates/core/agents.d.ts.map +1 -0
  26. package/dist/agent-generator/templates/core/agents.js +1256 -0
  27. package/dist/agent-generator/templates/core/agents.js.map +1 -0
  28. package/dist/agent-generator/templates/core/architecture-rules.d.ts +7 -0
  29. package/dist/agent-generator/templates/core/architecture-rules.d.ts.map +1 -0
  30. package/dist/agent-generator/templates/core/architecture-rules.js +274 -0
  31. package/dist/agent-generator/templates/core/architecture-rules.js.map +1 -0
  32. package/dist/agent-generator/templates/core/general-rules.d.ts +8 -0
  33. package/dist/agent-generator/templates/core/general-rules.d.ts.map +1 -0
  34. package/dist/agent-generator/templates/core/general-rules.js +301 -0
  35. package/dist/agent-generator/templates/core/general-rules.js.map +1 -0
  36. package/dist/agent-generator/templates/core/hooks-generator.d.ts +21 -0
  37. package/dist/agent-generator/templates/core/hooks-generator.d.ts.map +1 -0
  38. package/dist/agent-generator/templates/core/hooks-generator.js +233 -0
  39. package/dist/agent-generator/templates/core/hooks-generator.js.map +1 -0
  40. package/dist/agent-generator/templates/core/index-md.d.ts +7 -0
  41. package/dist/agent-generator/templates/core/index-md.d.ts.map +1 -0
  42. package/dist/agent-generator/templates/core/index-md.js +246 -0
  43. package/dist/agent-generator/templates/core/index-md.js.map +1 -0
  44. package/dist/agent-generator/templates/core/orchestrator.d.ts +8 -0
  45. package/dist/agent-generator/templates/core/orchestrator.d.ts.map +1 -0
  46. package/dist/agent-generator/templates/core/orchestrator.js +422 -0
  47. package/dist/agent-generator/templates/core/orchestrator.js.map +1 -0
  48. package/dist/agent-generator/templates/core/preflight.d.ts +8 -0
  49. package/dist/agent-generator/templates/core/preflight.d.ts.map +1 -0
  50. package/dist/agent-generator/templates/core/preflight.js +213 -0
  51. package/dist/agent-generator/templates/core/preflight.js.map +1 -0
  52. package/dist/agent-generator/templates/core/quality-gates.d.ts +11 -0
  53. package/dist/agent-generator/templates/core/quality-gates.d.ts.map +1 -0
  54. package/dist/agent-generator/templates/core/quality-gates.js +254 -0
  55. package/dist/agent-generator/templates/core/quality-gates.js.map +1 -0
  56. package/dist/agent-generator/templates/core/security-rules.d.ts +7 -0
  57. package/dist/agent-generator/templates/core/security-rules.d.ts.map +1 -0
  58. package/dist/agent-generator/templates/core/security-rules.js +528 -0
  59. package/dist/agent-generator/templates/core/security-rules.js.map +1 -0
  60. package/dist/agent-generator/templates/core/skills-generator.d.ts +19 -0
  61. package/dist/agent-generator/templates/core/skills-generator.d.ts.map +1 -0
  62. package/dist/agent-generator/templates/core/skills-generator.js +546 -0
  63. package/dist/agent-generator/templates/core/skills-generator.js.map +1 -0
  64. package/dist/agent-generator/templates/core/workflow-fix-bug.d.ts +7 -0
  65. package/dist/agent-generator/templates/core/workflow-fix-bug.d.ts.map +1 -0
  66. package/dist/agent-generator/templates/core/workflow-fix-bug.js +237 -0
  67. package/dist/agent-generator/templates/core/workflow-fix-bug.js.map +1 -0
  68. package/dist/agent-generator/templates/core/workflow-new-feature.d.ts +8 -0
  69. package/dist/agent-generator/templates/core/workflow-new-feature.d.ts.map +1 -0
  70. package/dist/agent-generator/templates/core/workflow-new-feature.js +321 -0
  71. package/dist/agent-generator/templates/core/workflow-new-feature.js.map +1 -0
  72. package/dist/agent-generator/templates/core/workflow-review.d.ts +7 -0
  73. package/dist/agent-generator/templates/core/workflow-review.d.ts.map +1 -0
  74. package/dist/agent-generator/templates/core/workflow-review.js +104 -0
  75. package/dist/agent-generator/templates/core/workflow-review.js.map +1 -0
  76. package/dist/agent-generator/templates/domain/index.d.ts +22 -0
  77. package/dist/agent-generator/templates/domain/index.d.ts.map +1 -0
  78. package/dist/agent-generator/templates/domain/index.js +1176 -0
  79. package/dist/agent-generator/templates/domain/index.js.map +1 -0
  80. package/dist/agent-generator/templates/stack/index.d.ts +8 -0
  81. package/dist/agent-generator/templates/stack/index.d.ts.map +1 -0
  82. package/dist/agent-generator/templates/stack/index.js +695 -0
  83. package/dist/agent-generator/templates/stack/index.js.map +1 -0
  84. package/dist/agent-generator/templates/template-helpers.d.ts +75 -0
  85. package/dist/agent-generator/templates/template-helpers.d.ts.map +1 -0
  86. package/dist/agent-generator/templates/template-helpers.js +726 -0
  87. package/dist/agent-generator/templates/template-helpers.js.map +1 -0
  88. package/dist/agent-generator/types.d.ts +196 -0
  89. package/dist/agent-generator/types.d.ts.map +1 -0
  90. package/dist/agent-generator/types.js +27 -0
  91. package/dist/agent-generator/types.js.map +1 -0
  92. package/dist/analyzer.d.ts +5 -0
  93. package/dist/analyzer.d.ts.map +1 -1
  94. package/dist/analyzer.js +46 -5
  95. package/dist/analyzer.js.map +1 -1
  96. package/dist/analyzers/forecast.d.ts +85 -0
  97. package/dist/analyzers/forecast.d.ts.map +1 -0
  98. package/dist/analyzers/forecast.js +337 -0
  99. package/dist/analyzers/forecast.js.map +1 -0
  100. package/dist/analyzers/git-cache.d.ts +7 -0
  101. package/dist/analyzers/git-cache.d.ts.map +1 -0
  102. package/dist/analyzers/git-cache.js +41 -0
  103. package/dist/analyzers/git-cache.js.map +1 -0
  104. package/dist/analyzers/git-history.d.ts +113 -0
  105. package/dist/analyzers/git-history.d.ts.map +1 -0
  106. package/dist/analyzers/git-history.js +333 -0
  107. package/dist/analyzers/git-history.js.map +1 -0
  108. package/dist/analyzers/index.d.ts +10 -0
  109. package/dist/analyzers/index.d.ts.map +1 -0
  110. package/dist/analyzers/index.js +7 -0
  111. package/dist/analyzers/index.js.map +1 -0
  112. package/dist/analyzers/temporal-scorer.d.ts +72 -0
  113. package/dist/analyzers/temporal-scorer.d.ts.map +1 -0
  114. package/dist/analyzers/temporal-scorer.js +140 -0
  115. package/dist/analyzers/temporal-scorer.js.map +1 -0
  116. package/dist/anti-patterns.d.ts +7 -0
  117. package/dist/anti-patterns.d.ts.map +1 -1
  118. package/dist/anti-patterns.js +25 -6
  119. package/dist/anti-patterns.js.map +1 -1
  120. package/dist/cli.d.ts +2 -3
  121. package/dist/cli.d.ts.map +1 -1
  122. package/dist/cli.js +275 -113
  123. package/dist/cli.js.map +1 -1
  124. package/dist/config.d.ts +6 -0
  125. package/dist/config.d.ts.map +1 -1
  126. package/dist/config.js +48 -11
  127. package/dist/config.js.map +1 -1
  128. package/dist/html-reporter.d.ts +3 -1
  129. package/dist/html-reporter.d.ts.map +1 -1
  130. package/dist/html-reporter.js +248 -12
  131. package/dist/html-reporter.js.map +1 -1
  132. package/dist/index.d.ts +16 -3
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +63 -4
  135. package/dist/index.js.map +1 -1
  136. package/dist/project-summarizer.d.ts +38 -0
  137. package/dist/project-summarizer.d.ts.map +1 -0
  138. package/dist/project-summarizer.js +463 -0
  139. package/dist/project-summarizer.js.map +1 -0
  140. package/dist/refactor-reporter.js +1 -1
  141. package/dist/scanner.d.ts +8 -2
  142. package/dist/scanner.d.ts.map +1 -1
  143. package/dist/scanner.js +153 -113
  144. package/dist/scanner.js.map +1 -1
  145. package/dist/scorer.d.ts.map +1 -1
  146. package/dist/scorer.js +24 -11
  147. package/dist/scorer.js.map +1 -1
  148. package/dist/types.d.ts +29 -0
  149. package/dist/types.d.ts.map +1 -1
  150. package/package.json +12 -3
  151. package/src/agent-generator/context-enricher.ts +672 -0
  152. package/src/agent-generator/domain-inferrer.ts +635 -0
  153. package/src/agent-generator/framework-detector.ts +669 -0
  154. package/src/agent-generator/index.ts +634 -0
  155. package/src/agent-generator/stack-detector.ts +115 -0
  156. package/src/agent-generator/templates/core/agents.ts +1296 -0
  157. package/src/agent-generator/templates/core/architecture-rules.ts +287 -0
  158. package/src/agent-generator/templates/core/general-rules.ts +306 -0
  159. package/src/agent-generator/templates/core/hooks-generator.ts +242 -0
  160. package/src/agent-generator/templates/core/index-md.ts +260 -0
  161. package/src/agent-generator/templates/core/orchestrator.ts +459 -0
  162. package/src/agent-generator/templates/core/preflight.ts +215 -0
  163. package/src/agent-generator/templates/core/quality-gates.ts +256 -0
  164. package/src/agent-generator/templates/core/security-rules.ts +543 -0
  165. package/src/agent-generator/templates/core/skills-generator.ts +585 -0
  166. package/src/agent-generator/templates/core/workflow-fix-bug.ts +239 -0
  167. package/src/agent-generator/templates/core/workflow-new-feature.ts +323 -0
  168. package/src/agent-generator/templates/core/workflow-review.ts +106 -0
  169. package/src/agent-generator/templates/domain/index.ts +1201 -0
  170. package/src/agent-generator/templates/stack/index.ts +705 -0
  171. package/src/agent-generator/templates/template-helpers.ts +776 -0
  172. package/src/agent-generator/types.ts +232 -0
  173. package/src/analyzer.ts +51 -5
  174. package/src/analyzers/forecast.ts +496 -0
  175. package/src/analyzers/git-cache.ts +52 -0
  176. package/src/analyzers/git-history.ts +488 -0
  177. package/src/analyzers/index.ts +33 -0
  178. package/src/analyzers/temporal-scorer.ts +227 -0
  179. package/src/anti-patterns.ts +29 -6
  180. package/src/cli.ts +316 -117
  181. package/src/config.ts +52 -11
  182. package/src/html-reporter.ts +263 -13
  183. package/src/index.ts +93 -10
  184. package/src/project-summarizer.ts +521 -0
  185. package/src/refactor-reporter.ts +1 -1
  186. package/src/scanner.ts +136 -90
  187. package/src/scorer.ts +26 -11
  188. package/src/types.ts +27 -0
  189. package/tests/agent-generator.test.ts +427 -0
  190. package/tests/analyzers-integration.test.ts +174 -0
  191. package/tests/architect-adapter-enrichment.test.ts +9 -0
  192. package/tests/context-enricher.test.ts +971 -0
  193. package/tests/fixtures/monorepo/package.json +6 -0
  194. package/tests/fixtures/monorepo/packages/app/package.json +12 -0
  195. package/tests/fixtures/monorepo/packages/app/src/index.ts +6 -0
  196. package/tests/fixtures/monorepo/packages/core/package.json +7 -0
  197. package/tests/fixtures/monorepo/packages/core/src/index.ts +7 -0
  198. package/tests/forecast.test.ts +509 -0
  199. package/tests/framework-detector.test.ts +1172 -0
  200. package/tests/git-history.test.ts +254 -0
  201. package/tests/monorepo-scan.test.ts +170 -0
  202. package/tests/scanner.test.ts +7 -8
  203. package/tests/scorer.test.ts +594 -0
  204. package/tests/stack-detector.test.ts +241 -0
  205. package/tests/template-generation.test.ts +706 -0
  206. package/tests/template-helpers.test.ts +1152 -0
  207. package/tests/temporal-scorer.test.ts +307 -0
  208. package/dist/agent-generator.d.ts +0 -106
  209. package/dist/agent-generator.d.ts.map +0 -1
  210. package/dist/agent-generator.js +0 -1398
  211. package/dist/agent-generator.js.map +0 -1
  212. package/src/agent-generator.ts +0 -1526
package/dist/index.js CHANGED
@@ -6,17 +6,27 @@ import { DiagramGenerator } from './diagram.js';
6
6
  import { ReportGenerator } from './reporter.js';
7
7
  import { HtmlReportGenerator } from './html-reporter.js';
8
8
  import { RefactorEngine } from './refactor-engine.js';
9
- import { AgentGenerator } from './agent-generator.js';
9
+ import { AgentGenerator } from './agent-generator/index.js';
10
+ import { ProjectSummarizer } from './project-summarizer.js';
10
11
  import { ConfigLoader } from './config.js';
11
12
  import { relative } from 'path';
12
13
  class Architect {
13
- async analyze(projectPath) {
14
+ async analyze(projectPath, onProgress) {
15
+ const emit = onProgress || (() => { });
14
16
  const config = ConfigLoader.loadConfig(projectPath);
17
+ // ── Phase 1: File Scanning ──
18
+ emit({ phase: 'scan', status: 'start' });
15
19
  const scanner = new ProjectScanner(projectPath, config);
16
20
  const projectInfo = scanner.scan();
17
21
  if (!projectInfo.fileTree) {
18
22
  throw new Error('Failed to scan project');
19
23
  }
24
+ emit({
25
+ phase: 'scan', status: 'complete',
26
+ metrics: { files: projectInfo.totalFiles, lines: projectInfo.totalLines, languages: projectInfo.primaryLanguages.length },
27
+ });
28
+ // ── Phase 2: Dependency Analysis ──
29
+ emit({ phase: 'dependencies', status: 'start' });
20
30
  const analyzer = new ArchitectureAnalyzer(projectPath);
21
31
  const dependencies = new Map();
22
32
  for (const [file, imports] of analyzer
@@ -32,11 +42,43 @@ class Architect {
32
42
  dependencies.set(file, imports);
33
43
  }
34
44
  const edges = analyzer.analyzeDependencies(projectInfo.fileTree);
45
+ emit({
46
+ phase: 'dependencies', status: 'complete',
47
+ metrics: { edges: edges.length, modules: dependencies.size },
48
+ });
49
+ // ── Phase 3: Layer Detection ──
50
+ emit({ phase: 'layers', status: 'start' });
35
51
  const layers = analyzer.detectLayers(projectInfo.fileTree);
52
+ emit({
53
+ phase: 'layers', status: 'complete',
54
+ metrics: { layers: layers.length, classified: layers.reduce((s, l) => s + l.files.length, 0) },
55
+ });
56
+ // ── Phase 4: Anti-Pattern Detection ──
57
+ emit({ phase: 'antipatterns', status: 'start' });
36
58
  const detector = new AntiPatternDetector(config);
37
59
  const antiPatterns = detector.detect(projectInfo.fileTree, dependencies);
60
+ emit({
61
+ phase: 'antipatterns', status: 'complete',
62
+ metrics: {
63
+ total: antiPatterns.length,
64
+ critical: antiPatterns.filter(p => p.severity === 'CRITICAL').length,
65
+ high: antiPatterns.filter(p => p.severity === 'HIGH').length,
66
+ },
67
+ });
68
+ // ── Phase 5: Architecture Scoring ──
69
+ emit({ phase: 'scoring', status: 'start' });
38
70
  const scorer = new ArchitectureScorer();
39
71
  const score = scorer.score(edges, antiPatterns, projectInfo.totalFiles);
72
+ emit({
73
+ phase: 'scoring', status: 'complete',
74
+ metrics: {
75
+ overall: score.overall,
76
+ modularity: score.breakdown.modularity,
77
+ coupling: score.breakdown.coupling,
78
+ cohesion: score.breakdown.cohesion,
79
+ layering: score.breakdown.layering,
80
+ },
81
+ });
40
82
  const diagramGenerator = new DiagramGenerator();
41
83
  const layerDiagram = diagramGenerator.generateLayerDiagram(layers);
42
84
  const suggestions = this.generateSuggestions(antiPatterns, score, edges);
@@ -56,8 +98,22 @@ class Architect {
56
98
  type: 'layer',
57
99
  },
58
100
  };
59
- // Normalize paths to be relative to project root
60
- return this.relativizePaths(report, projectPath);
101
+ // ── Phase 6: Normalize Paths ──
102
+ emit({ phase: 'normalize', status: 'start' });
103
+ const normalized = this.relativizePaths(report, projectPath);
104
+ emit({ phase: 'normalize', status: 'complete' });
105
+ // ── Phase 7: Project Summary ──
106
+ emit({ phase: 'summarize', status: 'start' });
107
+ const summarizer = new ProjectSummarizer();
108
+ normalized.projectSummary = summarizer.summarize(projectPath, normalized);
109
+ emit({
110
+ phase: 'summarize', status: 'complete',
111
+ metrics: {
112
+ modules: normalized.projectSummary?.modules?.length || 0,
113
+ techStack: normalized.projectSummary?.techStack?.length || 0,
114
+ },
115
+ });
116
+ return normalized;
61
117
  }
62
118
  /**
63
119
  * Generate a refactoring plan from an analysis report.
@@ -225,4 +281,7 @@ class Architect {
225
281
  }
226
282
  export const architect = new Architect();
227
283
  export { ProjectScanner, ArchitectureAnalyzer, AntiPatternDetector, ArchitectureScorer, DiagramGenerator, ReportGenerator, HtmlReportGenerator, AgentGenerator, ConfigLoader, };
284
+ // ── v4.0: Temporal & Predictive Analyzers ──
285
+ export { GitHistoryAnalyzer, TemporalScorer, ForecastEngine } from './analyzers/index.js';
286
+ export { saveToCache, loadFromCache } from './analyzers/git-cache.js';
228
287
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { AnalysisReport, ProjectSummary } from './types.js';
2
+ /**
3
+ * ProjectSummarizer — infers what a project does from its metadata,
4
+ * structure, README, package.json, and file naming conventions.
5
+ *
6
+ * v5.0: Workspace-aware module inference, package.json-first descriptions,
7
+ * entry point detection from `bin` fields, and keyword blacklisting.
8
+ */
9
+ export declare class ProjectSummarizer {
10
+ /** Keywords that should never appear in project summaries */
11
+ private static readonly KEYWORD_BLACKLIST;
12
+ summarize(projectPath: string, report: AnalysisReport): ProjectSummary;
13
+ private readPackageJson;
14
+ private readReadme;
15
+ private inferModules;
16
+ /**
17
+ * Workspace-aware module inference.
18
+ * Uses package.json name, description, and file count from each workspace.
19
+ */
20
+ private inferModulesFromWorkspaces;
21
+ /**
22
+ * Get a meaningful description for a workspace.
23
+ * Priority: package.json description > README first line > heuristic
24
+ */
25
+ private getWorkspaceDescription;
26
+ private countFilesInDir;
27
+ /**
28
+ * Fallback module inference from directory structure (non-workspace projects)
29
+ */
30
+ private inferModulesFromStructure;
31
+ private describeModule;
32
+ private findEntryPoints;
33
+ private extractKeywords;
34
+ private buildTechStack;
35
+ private buildDescription;
36
+ private inferPurpose;
37
+ }
38
+ //# sourceMappingURL=project-summarizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-summarizer.d.ts","sourceRoot":"","sources":["../src/project-summarizer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,cAAc,EAA2B,MAAM,YAAY,CAAC;AAErF;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAE5B,6DAA6D;IAC7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAItC;IAEH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,cAAc;IAsBtE,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,YAAY;IAYpB;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IA8BlC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IA2B/B,OAAO,CAAC,eAAe;IAavB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAgDjC,OAAO,CAAC,cAAc;IA0DtB,OAAO,CAAC,eAAe;IAkEvB,OAAO,CAAC,eAAe;IAyCvB,OAAO,CAAC,cAAc;IA0CtB,OAAO,CAAC,gBAAgB;IAkCxB,OAAO,CAAC,YAAY;CAoDrB"}
@@ -0,0 +1,463 @@
1
+ import { readFileSync, existsSync } from 'fs';
2
+ import { join, basename } from 'path';
3
+ /**
4
+ * ProjectSummarizer — infers what a project does from its metadata,
5
+ * structure, README, package.json, and file naming conventions.
6
+ *
7
+ * v5.0: Workspace-aware module inference, package.json-first descriptions,
8
+ * entry point detection from `bin` fields, and keyword blacklisting.
9
+ */
10
+ export class ProjectSummarizer {
11
+ summarize(projectPath, report) {
12
+ const packageInfo = this.readPackageJson(projectPath);
13
+ const readmeContent = this.readReadme(projectPath);
14
+ const modules = this.inferModules(report, projectPath);
15
+ const entryPoints = this.findEntryPoints(report, projectPath);
16
+ const keywords = this.extractKeywords(packageInfo, readmeContent, modules, report);
17
+ const techStack = this.buildTechStack(report, packageInfo);
18
+ const description = this.buildDescription(packageInfo, readmeContent, report);
19
+ const purpose = this.inferPurpose(keywords, modules, report);
20
+ return {
21
+ description,
22
+ purpose,
23
+ modules,
24
+ techStack,
25
+ entryPoints,
26
+ keywords,
27
+ };
28
+ }
29
+ // ── Package.json ──
30
+ readPackageJson(projectPath) {
31
+ const candidates = [
32
+ join(projectPath, 'package.json'),
33
+ join(projectPath, 'pyproject.toml'),
34
+ join(projectPath, 'pubspec.yaml'),
35
+ join(projectPath, 'Cargo.toml'),
36
+ join(projectPath, 'pom.xml'),
37
+ join(projectPath, 'build.gradle'),
38
+ ];
39
+ for (const candidate of candidates) {
40
+ if (existsSync(candidate)) {
41
+ try {
42
+ if (candidate.endsWith('.json')) {
43
+ return JSON.parse(readFileSync(candidate, 'utf-8'));
44
+ }
45
+ // For non-JSON, return raw content as 'raw' field
46
+ return { raw: readFileSync(candidate, 'utf-8'), type: basename(candidate) };
47
+ }
48
+ catch {
49
+ // ignore
50
+ }
51
+ }
52
+ }
53
+ return {};
54
+ }
55
+ readReadme(projectPath) {
56
+ const candidates = ['README.md', 'readme.md', 'README.txt', 'README', 'README.rst'];
57
+ for (const name of candidates) {
58
+ const path = join(projectPath, name);
59
+ if (existsSync(path)) {
60
+ try {
61
+ // Read first 3000 chars — enough for description, skip excessive content
62
+ return readFileSync(path, 'utf-8').slice(0, 3000);
63
+ }
64
+ catch {
65
+ // ignore
66
+ }
67
+ }
68
+ }
69
+ return '';
70
+ }
71
+ // ── Module Inference — Workspace-Aware ──
72
+ inferModules(report, projectPath) {
73
+ const workspaces = report.projectInfo.workspaces;
74
+ // If we have workspaces, use them as the authoritative module list
75
+ if (workspaces && workspaces.length > 0) {
76
+ return this.inferModulesFromWorkspaces(workspaces, report);
77
+ }
78
+ // Fallback: infer from directory structure
79
+ return this.inferModulesFromStructure(report);
80
+ }
81
+ /**
82
+ * Workspace-aware module inference.
83
+ * Uses package.json name, description, and file count from each workspace.
84
+ */
85
+ inferModulesFromWorkspaces(workspaces, report) {
86
+ return workspaces
87
+ .map((ws) => {
88
+ // Count files belonging to this workspace
89
+ const wsPrefix = ws.relativePath + '/';
90
+ const fileCount = report.dependencyGraph.nodes.filter((n) => n.startsWith(wsPrefix) || n.startsWith(ws.relativePath)).length;
91
+ // Get description: prefer package.json description, then README, then heuristic
92
+ const description = this.getWorkspaceDescription(ws);
93
+ // Use the short name (last segment of npm scope or dir name)
94
+ const displayName = ws.name.includes('/')
95
+ ? ws.name.split('/').pop() || ws.name
96
+ : basename(ws.relativePath);
97
+ return {
98
+ name: displayName,
99
+ files: fileCount || this.countFilesInDir(ws.path),
100
+ description,
101
+ };
102
+ })
103
+ .filter((m) => m.files > 0)
104
+ .sort((a, b) => b.files - a.files);
105
+ }
106
+ /**
107
+ * Get a meaningful description for a workspace.
108
+ * Priority: package.json description > README first line > heuristic
109
+ */
110
+ getWorkspaceDescription(ws) {
111
+ // 1. package.json description (most reliable)
112
+ if (ws.description && ws.description.trim().length > 5) {
113
+ return ws.description.trim();
114
+ }
115
+ // 2. README.md first paragraph
116
+ const readmePath = join(ws.path, 'README.md');
117
+ if (existsSync(readmePath)) {
118
+ try {
119
+ const lines = readFileSync(readmePath, 'utf-8').split('\n');
120
+ for (const line of lines) {
121
+ const trimmed = line.trim();
122
+ if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith('[')
123
+ || trimmed.startsWith('<') || trimmed.startsWith('!')
124
+ || trimmed.length < 15)
125
+ continue;
126
+ return trimmed.slice(0, 200);
127
+ }
128
+ }
129
+ catch {
130
+ // skip
131
+ }
132
+ }
133
+ // 3. Heuristic from name and deps
134
+ return this.describeModule(basename(ws.relativePath), new Set(Object.keys(ws.dependencies)));
135
+ }
136
+ countFilesInDir(dirPath) {
137
+ try {
138
+ const { globSync } = require('glob');
139
+ return globSync('**/*.{ts,tsx,js,jsx,py,java,go}', {
140
+ cwd: dirPath,
141
+ ignore: ['**/node_modules/**', '**/dist/**'],
142
+ nodir: true,
143
+ }).length;
144
+ }
145
+ catch {
146
+ return 0;
147
+ }
148
+ }
149
+ /**
150
+ * Fallback module inference from directory structure (non-workspace projects)
151
+ */
152
+ inferModulesFromStructure(report) {
153
+ const modules = new Map();
154
+ for (const node of report.dependencyGraph.nodes) {
155
+ // Safety: skip any node_modules paths that leaked through
156
+ if (node.includes('node_modules'))
157
+ continue;
158
+ const parts = node.split('/');
159
+ // Skip root-level files
160
+ if (parts.length < 2)
161
+ continue;
162
+ // Get the module directory (2nd level, or 1st level for flat projects)
163
+ let moduleName;
164
+ const firstDir = parts[0];
165
+ // Common source directories — go one level deeper
166
+ if (['src', 'lib', 'app', 'packages', 'modules', 'features', 'apps'].includes(firstDir)) {
167
+ moduleName = parts.length > 2 ? parts[1] : firstDir;
168
+ }
169
+ else if (firstDir === 'tests' || firstDir === 'test' || firstDir === '__tests__') {
170
+ continue; // Skip test directories for module inference
171
+ }
172
+ else {
173
+ moduleName = firstDir;
174
+ }
175
+ if (!modules.has(moduleName)) {
176
+ modules.set(moduleName, { files: new Set(), hints: new Set() });
177
+ }
178
+ const mod = modules.get(moduleName);
179
+ mod.files.add(node);
180
+ // Extract hints from filenames
181
+ const filename = basename(node).replace(/\.(ts|js|py|dart|go|java|rb|php|cs|tsx|jsx)$/, '');
182
+ if (filename !== 'index' && filename !== 'main' && filename !== '__init__') {
183
+ mod.hints.add(filename.toLowerCase());
184
+ }
185
+ }
186
+ return [...modules.entries()]
187
+ .filter(([, data]) => data.files.size > 0)
188
+ .sort((a, b) => b[1].files.size - a[1].files.size)
189
+ .slice(0, 15) // Top 15 modules
190
+ .map(([name, data]) => ({
191
+ name,
192
+ files: data.files.size,
193
+ description: this.describeModule(name, data.hints),
194
+ }));
195
+ }
196
+ describeModule(name, hints) {
197
+ const n = name.toLowerCase();
198
+ const h = [...hints].join(' ');
199
+ // Known module patterns
200
+ const patterns = [
201
+ [/auth/, 'Autenticação e autorização'],
202
+ [/user/, 'Gestão de usuários'],
203
+ [/payment|billing|charge|invoice/, 'Pagamentos e faturamento'],
204
+ [/order|cart|checkout/, 'Pedidos e checkout'],
205
+ [/product|catalog|item/, 'Catálogo de produtos'],
206
+ [/notif/, 'Sistema de notificações'],
207
+ [/email|mail|smtp/, 'Envio de emails'],
208
+ [/report|analytics|dashboard/, 'Relatórios e analytics'],
209
+ [/config|setting/, 'Configuração do sistema'],
210
+ [/util|helper|common|shared/, 'Utilitários compartilhados'],
211
+ [/middleware|interceptor|guard|pipe/, 'Middleware e interceptors'],
212
+ [/database|db|migration|seed/, 'Banco de dados e migrations'],
213
+ [/api|controller|route|endpoint/, 'API endpoints'],
214
+ [/service|business|domain/, 'Lógica de negócio'],
215
+ [/model|entity|schema/, 'Modelos de dados'],
216
+ [/test|spec|fixture/, 'Testes'],
217
+ [/validator|validation|sanitiz/, 'Validação de dados'],
218
+ [/security|crypto|encrypt/, 'Segurança e criptografia'],
219
+ [/cache|redis/, 'Cache e performance'],
220
+ [/queue|worker|job|task/, 'Processamento assíncrono'],
221
+ [/log|monitor|trace|metric/, 'Logging e monitoramento'],
222
+ [/file|upload|storage|s3/, 'Armazenamento de arquivos'],
223
+ [/search|elastic|index/, 'Busca e indexação'],
224
+ [/chat|message|websocket|socket/, 'Comunicação em tempo real'],
225
+ [/i18n|locale|translation/, 'Internacionalização'],
226
+ [/theme|style|design/, 'Design system e temas'],
227
+ [/component|widget|ui/, 'Componentes de UI'],
228
+ [/page|screen|view/, 'Páginas/telas'],
229
+ [/hook|composable/, 'Hooks/composables reutilizáveis'],
230
+ [/store|state|redux|bloc/, 'Gerenciamento de estado'],
231
+ [/navigation|router|routing/, 'Navegação e rotas'],
232
+ [/bridge/, 'Camada de integração'],
233
+ [/core/, 'Núcleo e orquestração'],
234
+ [/event/, 'Sistema de eventos'],
235
+ [/type/, 'Definições de tipos'],
236
+ [/mcp/, 'MCP Server'],
237
+ [/cli/, 'Interface de linha de comando'],
238
+ [/cloud/, 'Serviço cloud / API'],
239
+ [/autonomy/, 'Automação e self-healing'],
240
+ [/app/, 'Aplicação principal'],
241
+ ];
242
+ const combined = `${n} ${h}`;
243
+ for (const [regex, desc] of patterns) {
244
+ if (regex.test(combined))
245
+ return desc;
246
+ }
247
+ return `Módulo ${name}`;
248
+ }
249
+ // ── Entry Points — Workspace-Aware ──
250
+ findEntryPoints(report, projectPath) {
251
+ const entries = [];
252
+ // 1. From workspace bin fields
253
+ const workspaces = report.projectInfo.workspaces;
254
+ if (workspaces) {
255
+ for (const ws of workspaces) {
256
+ if (ws.bin) {
257
+ if (typeof ws.bin === 'string') {
258
+ entries.push(`${ws.relativePath}/${ws.bin}`);
259
+ }
260
+ else {
261
+ for (const [, binPath] of Object.entries(ws.bin)) {
262
+ const fullPath = `${ws.relativePath}/${binPath}`;
263
+ entries.push(fullPath);
264
+ }
265
+ }
266
+ }
267
+ if (ws.main) {
268
+ entries.push(`${ws.relativePath}/${ws.main}`);
269
+ }
270
+ }
271
+ }
272
+ // 2. From root package.json bin/main
273
+ const rootPkgPath = join(projectPath, 'package.json');
274
+ if (existsSync(rootPkgPath)) {
275
+ try {
276
+ const pkg = JSON.parse(readFileSync(rootPkgPath, 'utf-8'));
277
+ if (pkg.bin) {
278
+ if (typeof pkg.bin === 'string') {
279
+ entries.push(pkg.bin);
280
+ }
281
+ else {
282
+ for (const [, binPath] of Object.entries(pkg.bin)) {
283
+ entries.push(binPath);
284
+ }
285
+ }
286
+ }
287
+ if (pkg.main && !entries.includes(pkg.main)) {
288
+ entries.push(pkg.main);
289
+ }
290
+ }
291
+ catch {
292
+ // skip
293
+ }
294
+ }
295
+ // 3. Pattern-based detection (fallback)
296
+ const entryPatterns = [
297
+ /^(src\/)?(main|index|app|server|cli)\.(ts|js|py|dart|go|java)$/,
298
+ /^(src\/)?bin\//,
299
+ /^packages\/[^/]+\/src\/(main|index|app|server|cli)\.(ts|js)$/,
300
+ /^packages\/[^/]+\/src\/bin\//,
301
+ /manage\.py$/,
302
+ /^main\.go$/,
303
+ ];
304
+ const patternEntries = report.dependencyGraph.nodes
305
+ .filter(node => entryPatterns.some(p => p.test(node)))
306
+ .filter(node => !entries.includes(node));
307
+ entries.push(...patternEntries);
308
+ return [...new Set(entries)].slice(0, 10);
309
+ }
310
+ // ── Keywords ──
311
+ extractKeywords(packageInfo, readme, modules, report) {
312
+ const keywords = new Set();
313
+ // From package.json keywords
314
+ if (Array.isArray(packageInfo.keywords)) {
315
+ for (const kw of packageInfo.keywords) {
316
+ if (typeof kw === 'string')
317
+ keywords.add(kw.toLowerCase());
318
+ }
319
+ }
320
+ // From module names (only clean names)
321
+ for (const mod of modules) {
322
+ const name = mod.name.toLowerCase();
323
+ if (!ProjectSummarizer.KEYWORD_BLACKLIST.has(name)) {
324
+ keywords.add(name);
325
+ }
326
+ }
327
+ // From frameworks detected
328
+ for (const fw of report.projectInfo.frameworks) {
329
+ keywords.add(fw.toLowerCase());
330
+ }
331
+ // From languages
332
+ for (const lang of report.projectInfo.primaryLanguages) {
333
+ keywords.add(lang.toLowerCase());
334
+ }
335
+ // Filter out blacklisted and generic entries
336
+ return [...keywords]
337
+ .filter(kw => !ProjectSummarizer.KEYWORD_BLACKLIST.has(kw) && kw.length > 1)
338
+ .slice(0, 20);
339
+ }
340
+ // ── Tech Stack ──
341
+ buildTechStack(report, packageInfo) {
342
+ const stack = [];
343
+ // Languages
344
+ stack.push(...report.projectInfo.primaryLanguages);
345
+ // Frameworks from report
346
+ stack.push(...report.projectInfo.frameworks);
347
+ // Dependencies from package.json
348
+ const deps = { ...(packageInfo.dependencies || {}), ...(packageInfo.devDependencies || {}) };
349
+ const notable = [
350
+ 'express', 'fastify', 'nestjs', '@nestjs/core', 'koa', 'hapi',
351
+ 'react', 'next', 'angular', 'vue', 'svelte',
352
+ 'prisma', '@prisma/client', 'typeorm', 'sequelize', 'mongoose', 'knex',
353
+ 'jest', 'mocha', 'vitest', 'cypress', 'playwright',
354
+ 'tailwindcss', 'styled-components', 'emotion',
355
+ 'redis', 'ioredis', 'bull', 'bullmq',
356
+ 'graphql', 'apollo', '@apollo/server',
357
+ 'socket.io', 'ws',
358
+ 'passport', 'jsonwebtoken', 'bcrypt',
359
+ 'winston', 'pino',
360
+ 'swagger', '@nestjs/swagger',
361
+ 'docker', 'kubernetes',
362
+ 'aws-sdk', '@aws-sdk',
363
+ 'stripe', 'paypal',
364
+ ];
365
+ for (const dep of Object.keys(deps)) {
366
+ const cleaned = dep.replace('@', '').split('/')[0];
367
+ if (notable.some(n => dep.includes(n))) {
368
+ if (!stack.some(s => s.toLowerCase() === cleaned.toLowerCase())) {
369
+ stack.push(dep);
370
+ }
371
+ }
372
+ }
373
+ return [...new Set(stack)].slice(0, 15);
374
+ }
375
+ // ── Description Builder ──
376
+ buildDescription(packageInfo, readme, report) {
377
+ // Priority 1: package.json description
378
+ if (typeof packageInfo.description === 'string' && packageInfo.description.trim()) {
379
+ return packageInfo.description.trim();
380
+ }
381
+ // Priority 2: First paragraph of README (skip badges, titles)
382
+ if (readme) {
383
+ const lines = readme.split('\n');
384
+ for (const line of lines) {
385
+ const trimmed = line.trim();
386
+ // Skip empty lines, headers, badges, links, HTML tags
387
+ if (!trimmed)
388
+ continue;
389
+ if (trimmed.startsWith('#'))
390
+ continue;
391
+ if (trimmed.startsWith('[!') || trimmed.startsWith('[!['))
392
+ continue;
393
+ if (trimmed.startsWith('<'))
394
+ continue;
395
+ if (trimmed.startsWith('---') || trimmed.startsWith('==='))
396
+ continue;
397
+ if (trimmed.startsWith('!['))
398
+ continue;
399
+ if (trimmed.length < 20)
400
+ continue;
401
+ // Found a real text paragraph
402
+ return trimmed.slice(0, 300);
403
+ }
404
+ }
405
+ // Priority 3: Infer from project name and structure
406
+ const name = report.projectInfo.name || 'Unknown';
407
+ const langs = report.projectInfo.primaryLanguages.join(', ');
408
+ const files = report.projectInfo.totalFiles;
409
+ return `Projeto ${name} — ${files} arquivos em ${langs}`;
410
+ }
411
+ // ── Purpose Inference ──
412
+ inferPurpose(keywords, modules, report) {
413
+ const allSignals = [
414
+ ...keywords,
415
+ ...modules.map(m => m.name.toLowerCase()),
416
+ ...modules.map(m => m.description.toLowerCase()),
417
+ // Only use project nodes, never leaked node_modules paths
418
+ ...report.dependencyGraph.nodes
419
+ .filter(n => !n.includes('node_modules'))
420
+ .map(n => n.toLowerCase()),
421
+ ].join(' ');
422
+ // Infer project type from signals
423
+ const types = [
424
+ [/api.*(rest|graph|endpoint)|controller.*route|swagger|openapi/, 'API Backend'],
425
+ [/cli|command.*line|bin\/|yargs|commander/, 'CLI Tool'],
426
+ [/component.*ui|react|angular|vue|frontend|page.*screen/, 'Frontend Application'],
427
+ [/mobile|flutter|dart|react.native|ionic/, 'Mobile App'],
428
+ [/library|lib|package|npm|pub|sdk|module/, 'Library / Package'],
429
+ [/test|spec|validator|lint|analyz|check/, 'Tool de Análise / Validação'],
430
+ [/microservice|service|worker|queue/, 'Microservice'],
431
+ [/monorepo|workspace|packages\//, 'Monorepo'],
432
+ [/bot|scraper|crawler|automation/, 'Bot / Automação'],
433
+ [/game|canvas|webgl|three/, 'Game / Visualização'],
434
+ [/e-?commerce|shop|cart|product|catalog/, 'E-commerce'],
435
+ [/blog|cms|content|post|article/, 'CMS / Blog'],
436
+ [/auth|login|oauth|sso|identity/, 'Sistema de Autenticação'],
437
+ [/chat|message|realtime|socket/, 'Comunicação Real-time'],
438
+ [/dashboard|admin|panel|analytics/, 'Dashboard / Admin Panel'],
439
+ [/payment|billing|fintech|finance|bank/, 'Fintech / Pagamentos'],
440
+ [/health|medical|patient|clinic/, 'Healthcare'],
441
+ [/education|course|learn|student/, 'EdTech'],
442
+ ];
443
+ const matched = [];
444
+ for (const [regex, type] of types) {
445
+ if (regex.test(allSignals)) {
446
+ matched.push(type);
447
+ }
448
+ }
449
+ if (matched.length > 0) {
450
+ return matched.slice(0, 3).join(' + ');
451
+ }
452
+ // Fallback
453
+ const langs = report.projectInfo.primaryLanguages.join('/');
454
+ return `Projeto ${langs}`;
455
+ }
456
+ }
457
+ /** Keywords that should never appear in project summaries */
458
+ ProjectSummarizer.KEYWORD_BLACKLIST = new Set([
459
+ 'node_modules', 'dist', 'build', '.git', '.next', 'coverage',
460
+ '__tests__', '__mocks__', 'src', 'lib', 'index', 'main',
461
+ 'out', 'tmp', '.cache', 'vendor', '.vscode', '.idea',
462
+ ]);
463
+ //# sourceMappingURL=project-summarizer.js.map