@girardelli/architect 5.0.0 → 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 (335) hide show
  1. package/dist/{cli.d.ts → src/adapters/cli.d.ts} +1 -2
  2. package/dist/{cli.js → src/adapters/cli.js} +191 -213
  3. package/dist/src/adapters/cli.js.map +1 -0
  4. package/dist/src/adapters/github-action.d.ts +9 -0
  5. package/dist/src/adapters/github-action.js +94 -0
  6. package/dist/src/adapters/github-action.js.map +1 -0
  7. package/dist/src/adapters/html-reporter/scripts.d.ts +5 -0
  8. package/dist/src/adapters/html-reporter/scripts.js +400 -0
  9. package/dist/src/adapters/html-reporter/scripts.js.map +1 -0
  10. package/dist/src/adapters/html-reporter/sections/agents.d.ts +2 -0
  11. package/dist/src/adapters/html-reporter/sections/agents.js +260 -0
  12. package/dist/src/adapters/html-reporter/sections/agents.js.map +1 -0
  13. package/dist/src/adapters/html-reporter/sections/anti-patterns.d.ts +13 -0
  14. package/dist/src/adapters/html-reporter/sections/anti-patterns.js +64 -0
  15. package/dist/src/adapters/html-reporter/sections/anti-patterns.js.map +1 -0
  16. package/dist/src/adapters/html-reporter/sections/header.d.ts +3 -0
  17. package/dist/src/adapters/html-reporter/sections/header.js +30 -0
  18. package/dist/src/adapters/html-reporter/sections/header.js.map +1 -0
  19. package/dist/src/adapters/html-reporter/sections/layers.d.ts +9 -0
  20. package/dist/src/adapters/html-reporter/sections/layers.js +143 -0
  21. package/dist/src/adapters/html-reporter/sections/layers.js.map +1 -0
  22. package/dist/src/adapters/html-reporter/sections/overview.d.ts +2 -0
  23. package/dist/src/adapters/html-reporter/sections/overview.js +58 -0
  24. package/dist/src/adapters/html-reporter/sections/overview.js.map +1 -0
  25. package/dist/src/adapters/html-reporter/sections/refactoring-plan.d.ts +3 -0
  26. package/dist/src/adapters/html-reporter/sections/refactoring-plan.js +151 -0
  27. package/dist/src/adapters/html-reporter/sections/refactoring-plan.js.map +1 -0
  28. package/dist/src/adapters/html-reporter/sections/score.d.ts +7 -0
  29. package/dist/src/adapters/html-reporter/sections/score.js +70 -0
  30. package/dist/src/adapters/html-reporter/sections/score.js.map +1 -0
  31. package/dist/src/adapters/html-reporter/sections/suggestions.d.ts +7 -0
  32. package/dist/src/adapters/html-reporter/sections/suggestions.js +34 -0
  33. package/dist/src/adapters/html-reporter/sections/suggestions.js.map +1 -0
  34. package/dist/src/adapters/html-reporter/styles.d.ts +1 -0
  35. package/dist/src/adapters/html-reporter/styles.js +526 -0
  36. package/dist/src/adapters/html-reporter/styles.js.map +1 -0
  37. package/dist/src/adapters/html-reporter/utils_adapters.d.ts +20 -0
  38. package/dist/src/adapters/html-reporter/utils_adapters.js +32 -0
  39. package/dist/src/adapters/html-reporter/utils_adapters.js.map +1 -0
  40. package/dist/src/adapters/html-reporter/utils_sections.d.ts +7 -0
  41. package/dist/src/adapters/html-reporter/utils_sections.js +58 -0
  42. package/dist/src/adapters/html-reporter/utils_sections.js.map +1 -0
  43. package/dist/src/adapters/html-reporter.d.ts +10 -0
  44. package/dist/src/adapters/html-reporter.js +97 -0
  45. package/dist/src/adapters/html-reporter.js.map +1 -0
  46. package/dist/src/adapters/progress-logger.d.ts +55 -0
  47. package/dist/src/adapters/progress-logger.js +200 -0
  48. package/dist/src/adapters/progress-logger.js.map +1 -0
  49. package/dist/{refactor-reporter.d.ts → src/adapters/refactor-reporter.d.ts} +1 -2
  50. package/dist/{refactor-reporter.js → src/adapters/refactor-reporter.js} +1 -1
  51. package/dist/src/adapters/refactor-reporter.js.map +1 -0
  52. package/dist/{reporter.d.ts → src/adapters/reporter.d.ts} +1 -2
  53. package/dist/src/adapters/reporter.js.map +1 -0
  54. package/dist/src/core/GenesisTerminal.d.ts +8 -0
  55. package/dist/src/core/GenesisTerminal.js +105 -0
  56. package/dist/src/core/GenesisTerminal.js.map +1 -0
  57. package/dist/{index.d.ts → src/core/architect.d.ts} +4 -18
  58. package/dist/{index.js → src/core/architect.js} +22 -21
  59. package/dist/src/core/architect.js.map +1 -0
  60. package/dist/tests/architect-adapter-enrichment.test.d.ts +1 -0
  61. package/dist/tests/architect-adapter-enrichment.test.js +11 -0
  62. package/dist/tests/architect-adapter-enrichment.test.js.map +1 -0
  63. package/dist/tests/github-action.test.d.ts +1 -0
  64. package/dist/tests/github-action.test.js +92 -0
  65. package/dist/tests/github-action.test.js.map +1 -0
  66. package/package.json +15 -65
  67. package/src/adapters/cli.ts +492 -0
  68. package/src/adapters/github-action.ts +109 -0
  69. package/src/adapters/html-reporter/scripts.ts +402 -0
  70. package/src/adapters/html-reporter/sections/agents.ts +267 -0
  71. package/src/adapters/html-reporter/sections/anti-patterns.ts +81 -0
  72. package/src/adapters/html-reporter/sections/header.ts +35 -0
  73. package/src/adapters/html-reporter/sections/layers.ts +165 -0
  74. package/src/adapters/html-reporter/sections/overview.ts +64 -0
  75. package/src/adapters/html-reporter/sections/refactoring-plan.ts +166 -0
  76. package/src/adapters/html-reporter/sections/score.ts +80 -0
  77. package/src/adapters/html-reporter/sections/suggestions.ts +39 -0
  78. package/src/adapters/html-reporter/styles.ts +525 -0
  79. package/src/adapters/html-reporter/utils_adapters.ts +39 -0
  80. package/src/adapters/html-reporter/utils_sections.ts +55 -0
  81. package/src/adapters/html-reporter.ts +102 -0
  82. package/src/adapters/progress-logger.ts +236 -0
  83. package/src/{refactor-reporter.ts → adapters/refactor-reporter.ts} +2 -2
  84. package/src/{reporter.ts → adapters/reporter.ts} +1 -1
  85. package/src/core/GenesisTerminal.ts +127 -0
  86. package/src/{index.ts → core/architect.ts} +27 -45
  87. package/tests/github-action.test.ts +109 -0
  88. package/tsconfig.json +12 -19
  89. package/CONTRIBUTING.md +0 -140
  90. package/LICENSE +0 -21
  91. package/PROJECT_STRUCTURE.txt +0 -168
  92. package/README.md +0 -257
  93. package/architect-run.sh +0 -431
  94. package/assets/banner-v3.html +0 -561
  95. package/dist/agent-generator/context-enricher.d.ts +0 -58
  96. package/dist/agent-generator/context-enricher.d.ts.map +0 -1
  97. package/dist/agent-generator/context-enricher.js +0 -613
  98. package/dist/agent-generator/context-enricher.js.map +0 -1
  99. package/dist/agent-generator/domain-inferrer.d.ts +0 -52
  100. package/dist/agent-generator/domain-inferrer.d.ts.map +0 -1
  101. package/dist/agent-generator/domain-inferrer.js +0 -585
  102. package/dist/agent-generator/domain-inferrer.js.map +0 -1
  103. package/dist/agent-generator/framework-detector.d.ts +0 -40
  104. package/dist/agent-generator/framework-detector.d.ts.map +0 -1
  105. package/dist/agent-generator/framework-detector.js +0 -611
  106. package/dist/agent-generator/framework-detector.js.map +0 -1
  107. package/dist/agent-generator/index.d.ts +0 -47
  108. package/dist/agent-generator/index.d.ts.map +0 -1
  109. package/dist/agent-generator/index.js +0 -545
  110. package/dist/agent-generator/index.js.map +0 -1
  111. package/dist/agent-generator/stack-detector.d.ts +0 -14
  112. package/dist/agent-generator/stack-detector.d.ts.map +0 -1
  113. package/dist/agent-generator/stack-detector.js +0 -124
  114. package/dist/agent-generator/stack-detector.js.map +0 -1
  115. package/dist/agent-generator/templates/core/agents.d.ts +0 -17
  116. package/dist/agent-generator/templates/core/agents.d.ts.map +0 -1
  117. package/dist/agent-generator/templates/core/agents.js +0 -1256
  118. package/dist/agent-generator/templates/core/agents.js.map +0 -1
  119. package/dist/agent-generator/templates/core/architecture-rules.d.ts +0 -7
  120. package/dist/agent-generator/templates/core/architecture-rules.d.ts.map +0 -1
  121. package/dist/agent-generator/templates/core/architecture-rules.js +0 -274
  122. package/dist/agent-generator/templates/core/architecture-rules.js.map +0 -1
  123. package/dist/agent-generator/templates/core/general-rules.d.ts +0 -8
  124. package/dist/agent-generator/templates/core/general-rules.d.ts.map +0 -1
  125. package/dist/agent-generator/templates/core/general-rules.js +0 -301
  126. package/dist/agent-generator/templates/core/general-rules.js.map +0 -1
  127. package/dist/agent-generator/templates/core/hooks-generator.d.ts +0 -21
  128. package/dist/agent-generator/templates/core/hooks-generator.d.ts.map +0 -1
  129. package/dist/agent-generator/templates/core/hooks-generator.js +0 -233
  130. package/dist/agent-generator/templates/core/hooks-generator.js.map +0 -1
  131. package/dist/agent-generator/templates/core/index-md.d.ts +0 -7
  132. package/dist/agent-generator/templates/core/index-md.d.ts.map +0 -1
  133. package/dist/agent-generator/templates/core/index-md.js +0 -246
  134. package/dist/agent-generator/templates/core/index-md.js.map +0 -1
  135. package/dist/agent-generator/templates/core/orchestrator.d.ts +0 -8
  136. package/dist/agent-generator/templates/core/orchestrator.d.ts.map +0 -1
  137. package/dist/agent-generator/templates/core/orchestrator.js +0 -422
  138. package/dist/agent-generator/templates/core/orchestrator.js.map +0 -1
  139. package/dist/agent-generator/templates/core/preflight.d.ts +0 -8
  140. package/dist/agent-generator/templates/core/preflight.d.ts.map +0 -1
  141. package/dist/agent-generator/templates/core/preflight.js +0 -213
  142. package/dist/agent-generator/templates/core/preflight.js.map +0 -1
  143. package/dist/agent-generator/templates/core/quality-gates.d.ts +0 -11
  144. package/dist/agent-generator/templates/core/quality-gates.d.ts.map +0 -1
  145. package/dist/agent-generator/templates/core/quality-gates.js +0 -254
  146. package/dist/agent-generator/templates/core/quality-gates.js.map +0 -1
  147. package/dist/agent-generator/templates/core/security-rules.d.ts +0 -7
  148. package/dist/agent-generator/templates/core/security-rules.d.ts.map +0 -1
  149. package/dist/agent-generator/templates/core/security-rules.js +0 -528
  150. package/dist/agent-generator/templates/core/security-rules.js.map +0 -1
  151. package/dist/agent-generator/templates/core/skills-generator.d.ts +0 -19
  152. package/dist/agent-generator/templates/core/skills-generator.d.ts.map +0 -1
  153. package/dist/agent-generator/templates/core/skills-generator.js +0 -546
  154. package/dist/agent-generator/templates/core/skills-generator.js.map +0 -1
  155. package/dist/agent-generator/templates/core/workflow-fix-bug.d.ts +0 -7
  156. package/dist/agent-generator/templates/core/workflow-fix-bug.d.ts.map +0 -1
  157. package/dist/agent-generator/templates/core/workflow-fix-bug.js +0 -237
  158. package/dist/agent-generator/templates/core/workflow-fix-bug.js.map +0 -1
  159. package/dist/agent-generator/templates/core/workflow-new-feature.d.ts +0 -8
  160. package/dist/agent-generator/templates/core/workflow-new-feature.d.ts.map +0 -1
  161. package/dist/agent-generator/templates/core/workflow-new-feature.js +0 -321
  162. package/dist/agent-generator/templates/core/workflow-new-feature.js.map +0 -1
  163. package/dist/agent-generator/templates/core/workflow-review.d.ts +0 -7
  164. package/dist/agent-generator/templates/core/workflow-review.d.ts.map +0 -1
  165. package/dist/agent-generator/templates/core/workflow-review.js +0 -104
  166. package/dist/agent-generator/templates/core/workflow-review.js.map +0 -1
  167. package/dist/agent-generator/templates/domain/index.d.ts +0 -22
  168. package/dist/agent-generator/templates/domain/index.d.ts.map +0 -1
  169. package/dist/agent-generator/templates/domain/index.js +0 -1176
  170. package/dist/agent-generator/templates/domain/index.js.map +0 -1
  171. package/dist/agent-generator/templates/stack/index.d.ts +0 -8
  172. package/dist/agent-generator/templates/stack/index.d.ts.map +0 -1
  173. package/dist/agent-generator/templates/stack/index.js +0 -695
  174. package/dist/agent-generator/templates/stack/index.js.map +0 -1
  175. package/dist/agent-generator/templates/template-helpers.d.ts +0 -75
  176. package/dist/agent-generator/templates/template-helpers.d.ts.map +0 -1
  177. package/dist/agent-generator/templates/template-helpers.js +0 -726
  178. package/dist/agent-generator/templates/template-helpers.js.map +0 -1
  179. package/dist/agent-generator/types.d.ts +0 -196
  180. package/dist/agent-generator/types.d.ts.map +0 -1
  181. package/dist/agent-generator/types.js +0 -27
  182. package/dist/agent-generator/types.js.map +0 -1
  183. package/dist/analyzer.d.ts +0 -38
  184. package/dist/analyzer.d.ts.map +0 -1
  185. package/dist/analyzer.js +0 -383
  186. package/dist/analyzer.js.map +0 -1
  187. package/dist/analyzers/forecast.d.ts +0 -85
  188. package/dist/analyzers/forecast.d.ts.map +0 -1
  189. package/dist/analyzers/forecast.js +0 -337
  190. package/dist/analyzers/forecast.js.map +0 -1
  191. package/dist/analyzers/git-cache.d.ts +0 -7
  192. package/dist/analyzers/git-cache.d.ts.map +0 -1
  193. package/dist/analyzers/git-cache.js +0 -41
  194. package/dist/analyzers/git-cache.js.map +0 -1
  195. package/dist/analyzers/git-history.d.ts +0 -113
  196. package/dist/analyzers/git-history.d.ts.map +0 -1
  197. package/dist/analyzers/git-history.js +0 -333
  198. package/dist/analyzers/git-history.js.map +0 -1
  199. package/dist/analyzers/index.d.ts +0 -10
  200. package/dist/analyzers/index.d.ts.map +0 -1
  201. package/dist/analyzers/index.js +0 -7
  202. package/dist/analyzers/index.js.map +0 -1
  203. package/dist/analyzers/temporal-scorer.d.ts +0 -72
  204. package/dist/analyzers/temporal-scorer.d.ts.map +0 -1
  205. package/dist/analyzers/temporal-scorer.js +0 -140
  206. package/dist/analyzers/temporal-scorer.js.map +0 -1
  207. package/dist/anti-patterns.d.ts +0 -24
  208. package/dist/anti-patterns.d.ts.map +0 -1
  209. package/dist/anti-patterns.js +0 -230
  210. package/dist/anti-patterns.js.map +0 -1
  211. package/dist/cli.d.ts.map +0 -1
  212. package/dist/cli.js.map +0 -1
  213. package/dist/config.d.ts +0 -12
  214. package/dist/config.d.ts.map +0 -1
  215. package/dist/config.js +0 -110
  216. package/dist/config.js.map +0 -1
  217. package/dist/diagram.d.ts +0 -9
  218. package/dist/diagram.d.ts.map +0 -1
  219. package/dist/diagram.js +0 -116
  220. package/dist/diagram.js.map +0 -1
  221. package/dist/html-reporter.d.ts +0 -47
  222. package/dist/html-reporter.d.ts.map +0 -1
  223. package/dist/html-reporter.js +0 -1747
  224. package/dist/html-reporter.js.map +0 -1
  225. package/dist/index.d.ts.map +0 -1
  226. package/dist/index.js.map +0 -1
  227. package/dist/project-summarizer.d.ts +0 -38
  228. package/dist/project-summarizer.d.ts.map +0 -1
  229. package/dist/project-summarizer.js +0 -463
  230. package/dist/project-summarizer.js.map +0 -1
  231. package/dist/refactor-engine.d.ts +0 -18
  232. package/dist/refactor-engine.d.ts.map +0 -1
  233. package/dist/refactor-engine.js +0 -86
  234. package/dist/refactor-engine.js.map +0 -1
  235. package/dist/refactor-reporter.d.ts.map +0 -1
  236. package/dist/refactor-reporter.js.map +0 -1
  237. package/dist/reporter.d.ts.map +0 -1
  238. package/dist/reporter.js.map +0 -1
  239. package/dist/rules/barrel-optimizer.d.ts +0 -13
  240. package/dist/rules/barrel-optimizer.d.ts.map +0 -1
  241. package/dist/rules/barrel-optimizer.js +0 -77
  242. package/dist/rules/barrel-optimizer.js.map +0 -1
  243. package/dist/rules/dead-code-detector.d.ts +0 -21
  244. package/dist/rules/dead-code-detector.d.ts.map +0 -1
  245. package/dist/rules/dead-code-detector.js +0 -117
  246. package/dist/rules/dead-code-detector.js.map +0 -1
  247. package/dist/rules/hub-splitter.d.ts +0 -13
  248. package/dist/rules/hub-splitter.d.ts.map +0 -1
  249. package/dist/rules/hub-splitter.js +0 -110
  250. package/dist/rules/hub-splitter.js.map +0 -1
  251. package/dist/rules/import-organizer.d.ts +0 -13
  252. package/dist/rules/import-organizer.d.ts.map +0 -1
  253. package/dist/rules/import-organizer.js +0 -85
  254. package/dist/rules/import-organizer.js.map +0 -1
  255. package/dist/rules/module-grouper.d.ts +0 -13
  256. package/dist/rules/module-grouper.d.ts.map +0 -1
  257. package/dist/rules/module-grouper.js +0 -110
  258. package/dist/rules/module-grouper.js.map +0 -1
  259. package/dist/scanner.d.ts +0 -31
  260. package/dist/scanner.d.ts.map +0 -1
  261. package/dist/scanner.js +0 -328
  262. package/dist/scanner.js.map +0 -1
  263. package/dist/scorer.d.ts +0 -27
  264. package/dist/scorer.d.ts.map +0 -1
  265. package/dist/scorer.js +0 -229
  266. package/dist/scorer.js.map +0 -1
  267. package/dist/types.d.ts +0 -186
  268. package/dist/types.d.ts.map +0 -1
  269. package/dist/types.js +0 -2
  270. package/dist/types.js.map +0 -1
  271. package/examples/sample-report.md +0 -207
  272. package/jest.config.js +0 -18
  273. package/src/agent-generator/context-enricher.ts +0 -672
  274. package/src/agent-generator/domain-inferrer.ts +0 -635
  275. package/src/agent-generator/framework-detector.ts +0 -669
  276. package/src/agent-generator/index.ts +0 -634
  277. package/src/agent-generator/stack-detector.ts +0 -115
  278. package/src/agent-generator/templates/core/agents.ts +0 -1296
  279. package/src/agent-generator/templates/core/architecture-rules.ts +0 -287
  280. package/src/agent-generator/templates/core/general-rules.ts +0 -306
  281. package/src/agent-generator/templates/core/hooks-generator.ts +0 -242
  282. package/src/agent-generator/templates/core/index-md.ts +0 -260
  283. package/src/agent-generator/templates/core/orchestrator.ts +0 -459
  284. package/src/agent-generator/templates/core/preflight.ts +0 -215
  285. package/src/agent-generator/templates/core/quality-gates.ts +0 -256
  286. package/src/agent-generator/templates/core/security-rules.ts +0 -543
  287. package/src/agent-generator/templates/core/skills-generator.ts +0 -585
  288. package/src/agent-generator/templates/core/workflow-fix-bug.ts +0 -239
  289. package/src/agent-generator/templates/core/workflow-new-feature.ts +0 -323
  290. package/src/agent-generator/templates/core/workflow-review.ts +0 -106
  291. package/src/agent-generator/templates/domain/index.ts +0 -1201
  292. package/src/agent-generator/templates/stack/index.ts +0 -705
  293. package/src/agent-generator/templates/template-helpers.ts +0 -776
  294. package/src/agent-generator/types.ts +0 -232
  295. package/src/analyzer.ts +0 -447
  296. package/src/analyzers/forecast.ts +0 -496
  297. package/src/analyzers/git-cache.ts +0 -52
  298. package/src/analyzers/git-history.ts +0 -488
  299. package/src/analyzers/index.ts +0 -33
  300. package/src/analyzers/temporal-scorer.ts +0 -227
  301. package/src/anti-patterns.ts +0 -287
  302. package/src/cli.ts +0 -517
  303. package/src/config.ts +0 -123
  304. package/src/diagram.ts +0 -144
  305. package/src/html-reporter.ts +0 -1830
  306. package/src/project-summarizer.ts +0 -521
  307. package/src/refactor-engine.ts +0 -117
  308. package/src/rules/barrel-optimizer.ts +0 -97
  309. package/src/rules/dead-code-detector.ts +0 -132
  310. package/src/rules/hub-splitter.ts +0 -123
  311. package/src/rules/import-organizer.ts +0 -98
  312. package/src/rules/module-grouper.ts +0 -124
  313. package/src/scanner.ts +0 -344
  314. package/src/scorer.ts +0 -254
  315. package/src/types.ts +0 -193
  316. package/tests/agent-generator.test.ts +0 -427
  317. package/tests/analyzers-integration.test.ts +0 -174
  318. package/tests/anti-patterns.test.ts +0 -94
  319. package/tests/context-enricher.test.ts +0 -971
  320. package/tests/fixtures/monorepo/package.json +0 -6
  321. package/tests/fixtures/monorepo/packages/app/package.json +0 -12
  322. package/tests/fixtures/monorepo/packages/app/src/index.ts +0 -6
  323. package/tests/fixtures/monorepo/packages/core/package.json +0 -7
  324. package/tests/fixtures/monorepo/packages/core/src/index.ts +0 -7
  325. package/tests/forecast.test.ts +0 -509
  326. package/tests/framework-detector.test.ts +0 -1172
  327. package/tests/git-history.test.ts +0 -254
  328. package/tests/monorepo-scan.test.ts +0 -170
  329. package/tests/scanner.test.ts +0 -54
  330. package/tests/scorer.test.ts +0 -674
  331. package/tests/stack-detector.test.ts +0 -241
  332. package/tests/template-generation.test.ts +0 -706
  333. package/tests/template-helpers.test.ts +0 -1152
  334. package/tests/temporal-scorer.test.ts +0 -307
  335. /package/dist/{reporter.js → src/adapters/reporter.js} +0 -0
package/README.md DELETED
@@ -1,257 +0,0 @@
1
- # Architect
2
-
3
- **AI-powered architecture analysis, refactoring, and context-aware agent system generator**
4
-
5
- [![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue.svg)](https://www.typescriptlang.org/)
6
- [![Node.js](https://img.shields.io/badge/Node.js-18+-339933.svg)](https://nodejs.org/)
7
- [![npm](https://img.shields.io/npm/v/@girardelli/architect)](https://www.npmjs.com/package/@girardelli/architect)
8
- [![Tests](https://img.shields.io/badge/Tests-337%20passing-22c55e.svg)]()
9
- [![MIT License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
10
-
11
- Understand your codebase architecture in seconds. Detect anti-patterns, get refactoring plans, and generate **context-aware AI agent configurations** that actually understand your stack, domain, and toolchain — all from a single command.
12
-
13
- ## What's New in v3.1
14
-
15
- - **Context-Aware Agent Generation** — Agents are no longer generic. Templates adapt to your detected stack (Python/FastAPI generates pytest examples, not Jest; Go generates `go test`, not `npm test`)
16
- - **Framework Detection Engine** — 61 frameworks across 10+ ecosystems detected from dependency files (package.json, pyproject.toml, requirements.txt, pubspec.yaml, go.mod, Cargo.toml, pom.xml, Gemfile, composer.json)
17
- - **Domain Inference** — Detects business domain (fintech, healthtech, e-commerce, tax, HR, etc.) from project metadata, README, and code structure. Generates domain-specific BDD scenarios, threat models, and compliance requirements (LGPD, PCI-DSS, HIPAA, SOX)
18
- - **Stack-Aware Templates** — C4 Level 4 code blocks, TDD test examples, ADR decisions, quality gates, and forbidden actions all adapt to the detected language and framework
19
- - **Skills Generator** — Detects architectural patterns in your codebase (adapters, factories, extractors, repositories) and generates `skills/PROJECT-PATTERNS.md`
20
- - **Enriched Context** — Module extraction, endpoint detection, toolchain commands, project structure analysis, and critical path identification feed into every generated template
21
- - **Premium HTML Report** — Dark-themed responsive report with interactive D3.js dependency graph, health radar, bubble charts, and collapsible refactoring steps
22
-
23
- ## Quick Start
24
-
25
- ```bash
26
- # Run directly with npx (no install needed)
27
- npx @girardelli/architect analyze ./src
28
-
29
- # Or install globally
30
- npm install -g @girardelli/architect
31
- architect analyze ./src
32
- ```
33
-
34
- ## Core Features
35
-
36
- ### Architecture Analysis
37
-
38
- Architect scans your codebase and produces a quality score (0-100) with weighted breakdown across four dimensions: Modularity, Coupling, Cohesion, and Layering. It detects anti-patterns (God Class, Circular Dependencies, Leaky Abstractions, Feature Envy, Shotgun Surgery) with severity levels and specific file locations, and automatically identifies architectural layers (API, Service, Data, UI, Infrastructure).
39
-
40
- The analysis supports TypeScript, JavaScript, Python, Java, Kotlin, Go, Ruby, PHP, Rust, Dart, and SQL. Framework detection covers 61 frameworks across all major ecosystems — from NestJS and React to FastAPI, Spring Boot, Flutter, Gin, Actix Web, and Rails.
41
-
42
- ### Refactoring Plan
43
-
44
- Each analysis produces a tiered refactoring plan with score impact predictions. Tier 1 contains quick wins (low-risk, immediate impact), Tier 2 covers strategic refactoring with architecture-level benefits. Every step includes before/after score predictions and specific file operations (CREATE, MOVE, MODIFY, DELETE).
45
-
46
- ### Context-Aware Agent System
47
-
48
- This is what sets Architect apart. The `.agent/` directory it generates isn't a generic template — it's deeply customized to your project.
49
-
50
- **What gets generated (20+ files):**
51
-
52
- ```
53
- .agent/
54
- ├── INDEX.md # Project overview with badges and links
55
- ├── agents/
56
- │ ├── AGENT-ORCHESTRATOR.md # 5-phase protocol, dispatch table, quality gates
57
- │ ├── {STACK}-BACKEND-DEVELOPER.md # Stack-specific backend agent
58
- │ ├── {FRAMEWORK}-FRONTEND-DEVELOPER.md
59
- │ ├── FLUTTER-UI-DEVELOPER.md # (if mobile detected)
60
- │ ├── DATABASE-ENGINEER.md # (if database detected)
61
- │ ├── SECURITY-AUDITOR.md # STRIDE threats, compliance, integrations
62
- │ ├── QA-TEST-ENGINEER.md # Coverage tracking, test scenarios
63
- │ └── TECH-DEBT-CONTROLLER.md # Score targets, anti-pattern tracking
64
- ├── rules/
65
- │ ├── 00-general.md # Golden rules, naming, forbidden actions (stack-aware)
66
- │ ├── 01-architecture.md # Anti-pattern prevention, module structure
67
- │ ├── 02-security.md # OWASP, secrets, input validation
68
- │ └── {stack}-rules.md # Stack-specific rules (Python, TypeScript, etc.)
69
- ├── guards/
70
- │ ├── PREFLIGHT.md # Pre-action checklist with detected toolchain
71
- │ ├── QUALITY-GATES.md # Build/test/coverage/score gates
72
- │ └── CODE-REVIEW-CHECKLIST.md # Domain-specific review items
73
- ├── workflows/
74
- │ ├── new-feature.md # Feature development workflow
75
- │ ├── fix-bug.md # Bug fix workflow
76
- │ └── review.md # Code review workflow
77
- ├── templates/
78
- │ ├── C4.md # Architecture template (framework-aware Level 4)
79
- │ ├── BDD.md # BDD scenarios (domain-aware)
80
- │ ├── TDD.md # TDD examples (pytest/junit/go_test/jest per stack)
81
- │ ├── ADR.md # Decision records (stack-aware context)
82
- │ └── THREAT-MODEL.md # STRIDE model (domain-specific threats)
83
- └── skills/
84
- └── PROJECT-PATTERNS.md # Detected patterns (adapters, factories, etc.)
85
- ```
86
-
87
- **What makes it context-aware:**
88
-
89
- A Python/FastAPI project gets pytest examples in TDD, `class ABC` interfaces in C4, SQLAlchemy references in ADR, `type: ignore` in forbidden actions, and `pytest` in quality gates. A TypeScript/NestJS project gets Jest, `interface`, TypeORM/Prisma, `@ts-ignore`, and `npm run build`. A Go project gets `go test`, `type ... interface`, GORM, `interface{}` warnings, and `go build`. The same command produces fundamentally different output based on what it detects.
90
-
91
- **Domain inference feeds into every template.** A fintech project gets PCI-DSS compliance gates, fraud-prevention BDD scenarios, and encryption-focused threat models. A healthtech project gets HIPAA checks and patient data protection rules. Domain confidence is boosted by reading pyproject.toml descriptions, README keywords, and project names.
92
-
93
- ## CLI Commands
94
-
95
- ### `architect analyze [path]`
96
- The unified command — architecture analysis, refactoring plan, and agent suggestions in one report.
97
-
98
- ```bash
99
- architect analyze ./src # HTML report (default)
100
- architect analyze ./src --output docs/report.html # Custom path
101
- architect analyze ./src --format json # JSON output
102
- architect analyze ./src --format markdown # Markdown output
103
- ```
104
-
105
- ### `architect agents [path]`
106
- Generate or audit the `.agent/` directory for AI coding assistants.
107
-
108
- ```bash
109
- architect agents ./ # Generate full .agent/
110
- architect agents ./ --agents ORCHESTRATOR,QA # Specific agents only
111
- ```
112
-
113
- If `.agent/` already exists, Architect audits it and only generates missing files.
114
-
115
- ### `architect refactor [path]`
116
- Generate a standalone refactoring plan.
117
-
118
- ### `architect score [path]`
119
- Calculate architecture quality score (quick mode).
120
-
121
- ### `architect anti-patterns [path]`
122
- Detect anti-patterns with severity levels.
123
-
124
- ### `architect layers [path]`
125
- Analyze layer structure and distribution.
126
-
127
- ### `architect diagram [path]`
128
- Generate architecture diagram in Mermaid format.
129
-
130
- ## Configuration
131
-
132
- Create `.architect.json` in your project root:
133
-
134
- ```json
135
- {
136
- "ignore": ["node_modules", "dist", ".git", "coverage", "__pycache__", ".venv"],
137
- "frameworks": { "detect": true },
138
- "antiPatterns": {
139
- "godClass": { "linesThreshold": 500, "methodsThreshold": 10 },
140
- "shotgunSurgery": { "changePropagationThreshold": 8 }
141
- },
142
- "score": {
143
- "modularity": 0.40,
144
- "coupling": 0.25,
145
- "cohesion": 0.20,
146
- "layering": 0.15
147
- }
148
- }
149
- ```
150
-
151
- ## Supported Frameworks (61)
152
-
153
- | Ecosystem | Frameworks |
154
- |-----------|-----------|
155
- | **Node.js/TypeScript** | NestJS, Express, Fastify, Koa, Hapi, Next.js, Nuxt |
156
- | **Python** | FastAPI, Django, Flask, Starlette, Sanic, Litestar, aiohttp, Tornado, DRF |
157
- | **Java/Kotlin** | Spring Boot, Quarkus, Micronaut, Ktor |
158
- | **Go** | Gin, Echo, Fiber, Chi, Gorilla Mux |
159
- | **Rust** | Actix Web, Axum, Rocket |
160
- | **Ruby** | Ruby on Rails, Sinatra |
161
- | **PHP** | Laravel, Symfony, Slim |
162
- | **Dart/Flutter** | Flutter, Shelf, Dart Frog |
163
- | **ORM/Database** | TypeORM, Prisma, Sequelize, Mongoose, Knex, Drizzle, SQLAlchemy, SQLModel, Tortoise ORM, Peewee |
164
- | **Testing** | Jest, Vitest, Mocha, pytest, unittest, Hypothesis, RSpec |
165
- | **Tooling** | ESLint, Prettier, Biome, Ruff, Black, Flake8, Pylint, mypy |
166
-
167
- ## CI/CD Integration
168
-
169
- ### GitHub Actions
170
-
171
- ```yaml
172
- name: Architecture Analysis
173
- on: [push, pull_request]
174
-
175
- jobs:
176
- architect:
177
- runs-on: ubuntu-latest
178
- steps:
179
- - uses: actions/checkout@v4
180
- - uses: actions/setup-node@v4
181
- with:
182
- node-version: '20'
183
- - run: npx @girardelli/architect analyze ./src --format html --output architect-report.html
184
- - uses: actions/upload-artifact@v4
185
- with:
186
- name: architect-report
187
- path: architect-report.html
188
- ```
189
-
190
- ### As a Dev Dependency
191
-
192
- ```bash
193
- npm install -D @girardelli/architect
194
- ```
195
-
196
- ```json
197
- {
198
- "scripts": {
199
- "architect": "architect analyze ./src --output docs/architect-report.html",
200
- "architect:score": "architect score ./src"
201
- }
202
- }
203
- ```
204
-
205
- ## Programmatic Usage
206
-
207
- ```typescript
208
- import { Architect, HtmlReportGenerator } from '@girardelli/architect';
209
-
210
- const architect = new Architect();
211
-
212
- // Full analysis
213
- const report = await architect.analyze('./src');
214
-
215
- // Refactoring plan
216
- const plan = architect.refactor(report, './src');
217
-
218
- // Agent suggestions (dry-run)
219
- const agents = architect.suggestAgents('./');
220
-
221
- // Generate HTML report
222
- const htmlGenerator = new HtmlReportGenerator();
223
- const html = htmlGenerator.generateHtml(report, plan, agents);
224
- ```
225
-
226
- ## Development
227
-
228
- ```bash
229
- npm install
230
- npm run build # Compile TypeScript
231
- npm run dev # Watch mode
232
- npm test # Run tests (337 tests, 9 suites)
233
- npm run lint # ESLint
234
- ```
235
-
236
- ## Roadmap
237
-
238
- - **v4.0** — Agent Runtime: orchestrated execution with I/O contracts, pipeline engine, and human approval gates
239
-
240
- ## Author
241
-
242
- **Camilo Girardelli**
243
- IEEE Senior Member | Senior Software Architect | CTO at Girardelli Tecnologia
244
-
245
- - GitHub: [@camilooscargbaptista](https://github.com/camilooscargbaptista)
246
- - LinkedIn: [Camilo Girardelli](https://www.linkedin.com/in/camilooscargirardellibaptista/)
247
- - Company: [Girardelli Tecnologia](https://www.girardellitecnologia.com)
248
-
249
- ## Contributing
250
-
251
- Contributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
252
-
253
- ## License
254
-
255
- MIT License - Copyright (c) 2026 Camilo Girardelli / Girardelli Tecnologia
256
-
257
- See [LICENSE](LICENSE) for details.
package/architect-run.sh DELETED
@@ -1,431 +0,0 @@
1
- #!/usr/bin/env bash
2
- # ╔══════════════════════════════════════════════════════════════════╗
3
- # ║ 🏗️ Architect v3.0 — Interactive Launcher ║
4
- # ║ Seleciona projeto via Finder, executa análise completa, ║
5
- # ║ salva resultados no diretório escolhido. ║
6
- # ╚══════════════════════════════════════════════════════════════════╝
7
-
8
- set -euo pipefail
9
-
10
- # ── Colors ──
11
- RED='\033[0;31m'
12
- GREEN='\033[0;32m'
13
- YELLOW='\033[1;33m'
14
- BLUE='\033[0;34m'
15
- CYAN='\033[0;36m'
16
- BOLD='\033[1m'
17
- DIM='\033[2m'
18
- NC='\033[0m' # No Color
19
-
20
- # ── Script location (resolve symlinks) ──
21
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
22
- ARCHITECT_BIN="${SCRIPT_DIR}/dist/cli.js"
23
-
24
- # ── Helpers ──
25
-
26
- print_banner() {
27
- local GRAY='\033[38;5;240m'
28
- local WHITE='\033[38;5;255m'
29
- local MAGENTA='\033[38;5;201m'
30
- echo ""
31
- echo -e "${GRAY} ┌─────────────────────────────────────────────────────────────────┐${NC}"
32
- echo -e "${GRAY} │${NC} ${GRAY}│${NC}"
33
- echo -e "${GRAY} │${NC} ${CYAN}${BOLD}⚡ ARCHITECT v3.0${NC} ${DIM}Enterprise Architecture Intelligence${NC} ${GRAY}│${NC}"
34
- echo -e "${GRAY} │${NC} ${DIM}@girardelli/architect — powered by Girardelli Tecnologia${NC} ${GRAY}│${NC}"
35
- echo -e "${GRAY} │${NC} ${GRAY}│${NC}"
36
- echo -e "${GRAY} └─────────────────────────────────────────────────────────────────┘${NC}"
37
- echo ""
38
- }
39
-
40
- print_step() {
41
- echo -e "\n${BLUE}▸${NC} ${BOLD}$1${NC}"
42
- }
43
-
44
- print_success() {
45
- echo -e " ${GREEN}✅ $1${NC}"
46
- }
47
-
48
- print_warn() {
49
- echo -e " ${YELLOW}⚠️ $1${NC}"
50
- }
51
-
52
- print_error() {
53
- echo -e " ${RED}❌ $1${NC}"
54
- }
55
-
56
- print_info() {
57
- echo -e " ${DIM}$1${NC}"
58
- }
59
-
60
- # ── OS Detection ──
61
-
62
- detect_os() {
63
- case "$(uname -s)" in
64
- Darwin*) echo "macos" ;;
65
- Linux*) echo "linux" ;;
66
- MINGW*|MSYS*|CYGWIN*) echo "windows" ;;
67
- *) echo "unknown" ;;
68
- esac
69
- }
70
-
71
- OS=$(detect_os)
72
-
73
- # ── Folder Picker ──
74
-
75
- pick_folder() {
76
- local prompt="$1"
77
- local default_path="${2:-$HOME}"
78
- local result=""
79
-
80
- case "$OS" in
81
- macos)
82
- result=$(osascript -e "
83
- set selectedFolder to choose folder with prompt \"$prompt\" default location POSIX file \"$default_path\"
84
- return POSIX path of selectedFolder
85
- " 2>/dev/null) || true
86
- ;;
87
- linux)
88
- # Try zenity first (GNOME), then kdialog (KDE), then terminal fallback
89
- if command -v zenity &>/dev/null; then
90
- result=$(zenity --file-selection --directory --title="$prompt" 2>/dev/null) || true
91
- elif command -v kdialog &>/dev/null; then
92
- result=$(kdialog --getexistingdirectory "$default_path" --title "$prompt" 2>/dev/null) || true
93
- fi
94
- ;;
95
- windows)
96
- # PowerShell folder picker
97
- result=$(powershell.exe -Command "
98
- Add-Type -AssemblyName System.Windows.Forms
99
- \$dialog = New-Object System.Windows.Forms.FolderBrowserDialog
100
- \$dialog.Description = '$prompt'
101
- \$dialog.SelectedPath = '$default_path'
102
- if (\$dialog.ShowDialog() -eq 'OK') { \$dialog.SelectedPath }
103
- " 2>/dev/null | tr -d '\r') || true
104
- ;;
105
- esac
106
-
107
- # Fallback: terminal input
108
- if [ -z "$result" ]; then
109
- echo "" >&2
110
- echo -e " ${YELLOW}Não foi possível abrir o seletor de pasta.${NC}" >&2
111
- echo -e " ${DIM}Digite o caminho manualmente:${NC}" >&2
112
- read -rp " > " result </dev/tty
113
- fi
114
-
115
- # Remove trailing slash
116
- echo "${result%/}"
117
- }
118
-
119
- # ── Menu de Análise ──
120
-
121
- show_analysis_menu() {
122
- echo "" >&2
123
- echo -e "${BOLD}Selecione as análises a executar:${NC}" >&2
124
- echo "" >&2
125
- echo -e " ${CYAN}1)${NC} 🔍 Análise completa ${DIM}(report HTML + refactor plan + agents)${NC}" >&2
126
- echo -e " ${CYAN}2)${NC} 📊 Apenas score ${DIM}(score rápido com breakdown)${NC}" >&2
127
- echo -e " ${CYAN}3)${NC} 🐛 Anti-patterns ${DIM}(detectar problemas arquiteturais)${NC}" >&2
128
- echo -e " ${CYAN}4)${NC} 🤖 Gerar .agent/ ${DIM}(framework de agentes Enterprise-Grade)${NC}" >&2
129
- echo -e " ${CYAN}5)${NC} 🔧 Plano de refatoração ${DIM}(steps + operations + score estimado)${NC}" >&2
130
- echo -e " ${CYAN}6)${NC} 🗺️ Diagrama Mermaid ${DIM}(grafo de dependências)${NC}" >&2
131
- echo -e " ${CYAN}7)${NC} 🚀 TUDO ${DIM}(roda todas as análises acima)${NC}" >&2
132
- echo "" >&2
133
- read -rp " Opção [1-7] (default: 1): " choice </dev/tty
134
- echo "${choice:-1}"
135
- }
136
-
137
- # ── Validações ──
138
-
139
- check_prerequisites() {
140
- print_step "Verificando pré-requisitos..."
141
-
142
- # Node.js
143
- if ! command -v node &>/dev/null; then
144
- print_error "Node.js não encontrado. Instale: https://nodejs.org"
145
- exit 1
146
- fi
147
- local node_version
148
- node_version=$(node -v | sed 's/v//' | cut -d. -f1)
149
- if [ "$node_version" -lt 18 ]; then
150
- print_error "Node.js >= 18 necessário. Atual: $(node -v)"
151
- exit 1
152
- fi
153
- print_success "Node.js $(node -v)"
154
-
155
- # Dependencies installed?
156
- if [ ! -d "${SCRIPT_DIR}/node_modules" ]; then
157
- print_warn "Dependências não instaladas. Instalando agora..."
158
- (cd "$SCRIPT_DIR" && npm install --silent)
159
- if [ $? -ne 0 ]; then
160
- print_error "Falha ao instalar dependências. Rode: cd $SCRIPT_DIR && npm install"
161
- exit 1
162
- fi
163
- print_success "Dependências instaladas"
164
- fi
165
-
166
- # Architect built?
167
- if [ ! -f "$ARCHITECT_BIN" ]; then
168
- print_warn "Architect não compilado. Compilando agora..."
169
- (cd "$SCRIPT_DIR" && npm run build)
170
- if [ ! -f "$ARCHITECT_BIN" ]; then
171
- print_error "Falha ao compilar. Rode: cd $SCRIPT_DIR && npm run build"
172
- exit 1
173
- fi
174
- print_success "Build concluído"
175
- else
176
- print_success "Architect compilado"
177
- fi
178
-
179
- # Register CLI globally (npm link) if 'architect' not in PATH
180
- if ! command -v architect &>/dev/null; then
181
- print_warn "Comando 'architect' não encontrado no PATH. Registrando via npm link..."
182
- (cd "$SCRIPT_DIR" && npm link --silent 2>/dev/null) || true
183
- if command -v architect &>/dev/null; then
184
- print_success "Comando 'architect' disponível globalmente"
185
- else
186
- print_info "npm link falhou (talvez precise de sudo). Use: npx architect ou ./architect-run.sh"
187
- fi
188
- else
189
- print_success "Comando 'architect' disponível"
190
- fi
191
- }
192
-
193
- # ── Execução das Análises ──
194
-
195
- run_analyze() {
196
- local project="$1"
197
- local output_dir="$2"
198
- local project_name
199
- project_name=$(basename "$project")
200
-
201
- print_step "Executando análise completa de ${BOLD}${project_name}${NC}..."
202
- node "$ARCHITECT_BIN" analyze "$project" \
203
- --format html \
204
- --output "${output_dir}/architect-report-${project_name}.html"
205
- print_success "Report HTML: ${output_dir}/architect-report-${project_name}.html"
206
- }
207
-
208
- run_score() {
209
- local project="$1"
210
- local output_dir="$2"
211
- local project_name
212
- project_name=$(basename "$project")
213
-
214
- print_step "Calculando score de ${BOLD}${project_name}${NC}..."
215
- node "$ARCHITECT_BIN" score "$project" --format json \
216
- > "${output_dir}/architect-score-${project_name}.json"
217
-
218
- # Print inline score
219
- local score
220
- score=$(node -e "const s = require('${output_dir}/architect-score-${project_name}.json'); console.log(s.overall + '/100 — M:' + s.breakdown.modularity + ' C:' + s.breakdown.coupling + ' Co:' + s.breakdown.cohesion + ' L:' + s.breakdown.layering)" 2>/dev/null || echo "ver JSON")
221
- print_success "Score: ${score}"
222
- }
223
-
224
- run_anti_patterns() {
225
- local project="$1"
226
- local output_dir="$2"
227
- local project_name
228
- project_name=$(basename "$project")
229
-
230
- print_step "Detectando anti-patterns em ${BOLD}${project_name}${NC}..."
231
- node "$ARCHITECT_BIN" anti-patterns "$project" --format json \
232
- > "${output_dir}/architect-antipatterns-${project_name}.json"
233
-
234
- local count
235
- count=$(node -e "const d = require('${output_dir}/architect-antipatterns-${project_name}.json'); console.log(d.length)" 2>/dev/null || echo "?")
236
- print_success "Anti-patterns encontrados: ${count}"
237
- }
238
-
239
- run_agents() {
240
- local project="$1"
241
- local output_dir="$2"
242
- local project_name
243
- project_name=$(basename "$project")
244
-
245
- print_step "Gerando framework de agentes (.agent/) para ${BOLD}${project_name}${NC}..."
246
-
247
- # Generate agents in the project directory (standard location)
248
- node "$ARCHITECT_BIN" agents "$project"
249
-
250
- # Also copy to output dir if different
251
- if [ -d "${project}/.agent" ] && [ "$project" != "$output_dir" ]; then
252
- cp -r "${project}/.agent" "${output_dir}/.agent-${project_name}" 2>/dev/null || true
253
- print_success ".agent/ gerado no projeto E copiado para output"
254
- else
255
- print_success ".agent/ gerado no projeto"
256
- fi
257
- }
258
-
259
- run_refactor() {
260
- local project="$1"
261
- local output_dir="$2"
262
- local project_name
263
- project_name=$(basename "$project")
264
-
265
- print_step "Gerando plano de refatoração para ${BOLD}${project_name}${NC}..."
266
- node "$ARCHITECT_BIN" refactor "$project" \
267
- --output "${output_dir}/architect-refactor-${project_name}.html"
268
- print_success "Refactor plan: ${output_dir}/architect-refactor-${project_name}.html"
269
- }
270
-
271
- run_diagram() {
272
- local project="$1"
273
- local output_dir="$2"
274
- local project_name
275
- project_name=$(basename "$project")
276
-
277
- print_step "Gerando diagrama Mermaid de ${BOLD}${project_name}${NC}..."
278
- node "$ARCHITECT_BIN" diagram "$project" \
279
- --output "${output_dir}/architect-diagram-${project_name}.mmd"
280
- print_success "Diagrama: ${output_dir}/architect-diagram-${project_name}.mmd"
281
- }
282
-
283
- # ── Open Results ──
284
-
285
- open_results() {
286
- local output_dir="$1"
287
-
288
- echo ""
289
- echo -e "${GREEN}═══════════════════════════════════════════════════════════${NC}"
290
- echo -e " ${BOLD}✅ Análise concluída!${NC}"
291
- echo -e "${GREEN}═══════════════════════════════════════════════════════════${NC}"
292
- echo ""
293
- echo -e " ${DIM}Resultados salvos em:${NC}"
294
- echo -e " ${BOLD}${output_dir}${NC}"
295
- echo ""
296
-
297
- # List generated files
298
- echo -e " ${DIM}Arquivos gerados:${NC}"
299
- for f in "${output_dir}"/architect-*; do
300
- [ -e "$f" ] && echo -e " ${CYAN}📄${NC} $(basename "$f")"
301
- done
302
- if [ -d "${output_dir}/.agent"* ] 2>/dev/null; then
303
- echo -e " ${CYAN}📁${NC} .agent/ (framework de agentes)"
304
- fi
305
-
306
- echo ""
307
- read -rp " Abrir pasta de resultados? [S/n]: " open_choice </dev/tty
308
- open_choice="${open_choice:-S}"
309
-
310
- if [[ "$open_choice" =~ ^[Ss]$ ]]; then
311
- case "$OS" in
312
- macos) open "$output_dir" ;;
313
- linux) xdg-open "$output_dir" 2>/dev/null || true ;;
314
- windows) explorer.exe "$output_dir" 2>/dev/null || true ;;
315
- esac
316
- fi
317
-
318
- # Try to open HTML report
319
- local html_report
320
- html_report=$(find "$output_dir" -name "architect-report-*.html" -maxdepth 1 2>/dev/null | head -1)
321
- if [ -n "$html_report" ]; then
322
- read -rp " Abrir report HTML no browser? [S/n]: " browser_choice </dev/tty
323
- browser_choice="${browser_choice:-S}"
324
- if [[ "$browser_choice" =~ ^[Ss]$ ]]; then
325
- case "$OS" in
326
- macos) open "$html_report" ;;
327
- linux) xdg-open "$html_report" 2>/dev/null || true ;;
328
- windows) start "$html_report" 2>/dev/null || true ;;
329
- esac
330
- fi
331
- fi
332
- }
333
-
334
- # ── Main ──
335
-
336
- main() {
337
- print_banner
338
- check_prerequisites
339
-
340
- # ── Step 1: Select project ──
341
- print_step "Selecione o projeto para analisar"
342
- print_info "Uma janela do Finder/Explorer será aberta..."
343
-
344
- PROJECT_PATH=$(pick_folder "🏗️ Architect — Selecione o PROJETO para analisar" "$HOME")
345
-
346
- if [ -z "$PROJECT_PATH" ] || [ ! -d "$PROJECT_PATH" ]; then
347
- print_error "Nenhum projeto selecionado ou diretório inválido."
348
- exit 1
349
- fi
350
- print_success "Projeto: ${PROJECT_PATH}"
351
-
352
- # Quick validation — does it look like a code project?
353
- local file_count
354
- file_count=$(find "$PROJECT_PATH" -maxdepth 3 -type f \( -name "*.ts" -o -name "*.js" -o -name "*.py" -o -name "*.dart" -o -name "*.go" -o -name "*.java" -o -name "*.rs" -o -name "*.rb" -o -name "*.php" -o -name "*.cs" \) 2>/dev/null | wc -l | tr -d ' ') || file_count=0
355
- if [ "$file_count" -eq 0 ]; then
356
- print_warn "Nenhum arquivo de código encontrado nas primeiras 3 camadas."
357
- read -rp " Continuar mesmo assim? [s/N]: " continue_choice </dev/tty
358
- if [[ ! "$continue_choice" =~ ^[Ss]$ ]]; then
359
- echo " Abortado."
360
- exit 0
361
- fi
362
- else
363
- print_info "Encontrados ${file_count} arquivos de código"
364
- fi
365
-
366
- # ── Step 2: Select output directory ──
367
- print_step "Selecione onde salvar os resultados"
368
- print_info "Uma janela do Finder/Explorer será aberta..."
369
-
370
- OUTPUT_PATH=$(pick_folder "🏗️ Architect — Selecione DESTINO dos resultados" "$HOME/Documents")
371
-
372
- if [ -z "$OUTPUT_PATH" ]; then
373
- # Default: create output dir next to project
374
- OUTPUT_PATH="${PROJECT_PATH}/architect-results"
375
- print_warn "Nenhum destino selecionado. Usando: ${OUTPUT_PATH}"
376
- fi
377
-
378
- # Create output dir if needed
379
- mkdir -p "$OUTPUT_PATH"
380
- print_success "Destino: ${OUTPUT_PATH}"
381
-
382
- # ── Step 3: Choose analysis ──
383
- CHOICE=$(show_analysis_menu)
384
-
385
- # ── Step 4: Execute ──
386
- local start_time
387
- start_time=$(date +%s)
388
-
389
- echo ""
390
- echo -e "${BOLD}═══════════════════════════════════════════════════════════${NC}"
391
- echo -e " ${BOLD}🚀 Iniciando análise...${NC}"
392
- echo -e "${BOLD}═══════════════════════════════════════════════════════════${NC}"
393
-
394
- case "$CHOICE" in
395
- 1) run_analyze "$PROJECT_PATH" "$OUTPUT_PATH" ;;
396
- 2) run_score "$PROJECT_PATH" "$OUTPUT_PATH" ;;
397
- 3) run_anti_patterns "$PROJECT_PATH" "$OUTPUT_PATH" ;;
398
- 4) run_agents "$PROJECT_PATH" "$OUTPUT_PATH" ;;
399
- 5) run_refactor "$PROJECT_PATH" "$OUTPUT_PATH" ;;
400
- 6) run_diagram "$PROJECT_PATH" "$OUTPUT_PATH" ;;
401
- 7)
402
- run_analyze "$PROJECT_PATH" "$OUTPUT_PATH"
403
- run_refactor "$PROJECT_PATH" "$OUTPUT_PATH"
404
- run_agents "$PROJECT_PATH" "$OUTPUT_PATH"
405
- run_diagram "$PROJECT_PATH" "$OUTPUT_PATH"
406
- run_anti_patterns "$PROJECT_PATH" "$OUTPUT_PATH"
407
- run_score "$PROJECT_PATH" "$OUTPUT_PATH"
408
- ;;
409
- *)
410
- print_error "Opção inválida: $CHOICE"
411
- exit 1
412
- ;;
413
- esac
414
-
415
- local end_time
416
- end_time=$(date +%s)
417
- local elapsed=$((end_time - start_time))
418
-
419
- echo ""
420
- echo -e " ${DIM}⏱️ Tempo total: ${elapsed}s${NC}"
421
-
422
- # ── Step 5: Open results ──
423
- open_results "$OUTPUT_PATH"
424
-
425
- echo ""
426
- echo -e " ${DIM}Powered by @girardelli/architect v3.0${NC}"
427
- echo ""
428
- }
429
-
430
- # ── Run ──
431
- main "$@"