@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
@@ -0,0 +1,94 @@
1
+ import * as core from '@actions/core';
2
+ import * as github from '@actions/github';
3
+ export class GithubActionAdapter {
4
+ octokit;
5
+ context = github.context;
6
+ constructor(token) {
7
+ this.octokit = github.getOctokit(token);
8
+ }
9
+ async postComment(headReport, baseReport, validationResult) {
10
+ if (!this.context.payload.pull_request) {
11
+ core.info('Not running in a Pull Request context. Skipping comment.');
12
+ return;
13
+ }
14
+ const issueNumber = this.context.payload.pull_request.number;
15
+ const body = this.buildMarkdownBody(headReport, baseReport, validationResult);
16
+ await this.octokit.rest.issues.createComment({
17
+ owner: this.context.repo.owner,
18
+ repo: this.context.repo.repo,
19
+ issue_number: issueNumber,
20
+ body,
21
+ });
22
+ }
23
+ buildMarkdownBody(headReport, baseReport, validationResult) {
24
+ const hScore = headReport.score.overall;
25
+ const bScore = baseReport ? baseReport.score.overall : null;
26
+ let deltaStr = '';
27
+ if (bScore !== null) {
28
+ const delta = hScore - bScore;
29
+ if (delta > 0) {
30
+ deltaStr = `📈 **+${delta}** (Improved from ${bScore})`;
31
+ }
32
+ else if (delta < 0) {
33
+ deltaStr = `📉 **${delta}** (Regressed from ${bScore})`;
34
+ }
35
+ else {
36
+ deltaStr = `➖ **0** (Stable at ${bScore})`;
37
+ }
38
+ }
39
+ else {
40
+ deltaStr = `🆕 (First Scan)`;
41
+ }
42
+ let validationStr = '';
43
+ if (validationResult) {
44
+ if (validationResult.success) {
45
+ validationStr = `✅ **Quality Gates Passed!**`;
46
+ }
47
+ else {
48
+ validationStr = `❌ **Quality Gates Failed!**\n\n`;
49
+ validationResult.violations.forEach(v => {
50
+ validationStr += `- **[${v.level.toUpperCase()}]** \`${v.rule}\`: ${v.message}\n`;
51
+ });
52
+ }
53
+ }
54
+ // Build anti-pattern warnings
55
+ const critical = headReport.antiPatterns.filter(a => a.severity === 'CRITICAL');
56
+ const high = headReport.antiPatterns.filter(a => a.severity === 'HIGH');
57
+ let antiPatternsStr = ``;
58
+ if (critical.length > 0 || high.length > 0) {
59
+ antiPatternsStr = `### ⚠️ Anti-Patterns Detected\n`;
60
+ critical.forEach(p => {
61
+ antiPatternsStr += `- 🔴 **${p.name}** in \`${p.location}\`: ${p.description}\n`;
62
+ });
63
+ high.forEach(p => {
64
+ antiPatternsStr += `- 🟠 **${p.name}** in \`${p.location}\`: ${p.description}\n`;
65
+ });
66
+ }
67
+ else {
68
+ antiPatternsStr = `✅ **No Critical/High Anti-Patterns!** Code is clean.\n`;
69
+ }
70
+ return `
71
+ ## 🏗 Architect Intelligence Report
72
+
73
+ > **Architecture Score:** \`${hScore}/100\`
74
+ > **Delta:** ${deltaStr}
75
+
76
+ ${validationStr}
77
+
78
+ ---
79
+ ### 📊 Score Breakdown
80
+ | Metric | Score |
81
+ | --- | --- |
82
+ | 🧩 Modularity | ${headReport.score.breakdown.modularity} |
83
+ | 🔗 Coupling | ${headReport.score.breakdown.coupling} |
84
+ | 🎯 Cohesion | ${headReport.score.breakdown.cohesion} |
85
+ | 🥞 Layering | ${headReport.score.breakdown.layering} |
86
+
87
+ ${antiPatternsStr}
88
+
89
+ ---
90
+ *Report generated automatically by [Architect Genesis API](https://github.com/girardelli/architect).*
91
+ `.trim();
92
+ }
93
+ }
94
+ //# sourceMappingURL=github-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-action.js","sourceRoot":"","sources":["../../../src/adapters/github-action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { AnalysisReport } from '@girardelli/architect-core/src/core/types/core.js';
2
+ /**
3
+ * All JavaScript for D3.js visualizations, animated counters, and radar chart
4
+ */
5
+ export declare function getScripts(report: AnalysisReport): string;
@@ -0,0 +1,400 @@
1
+ /**
2
+ * All JavaScript for D3.js visualizations, animated counters, and radar chart
3
+ */
4
+ export function getScripts(report) {
5
+ const breakdown = report.score.breakdown;
6
+ return `<script>
7
+ // ── Animated Counters ──
8
+ document.addEventListener('DOMContentLoaded', () => {
9
+ const counters = document.querySelectorAll('.score-counter, .stat-counter');
10
+ const observer = new IntersectionObserver((entries) => {
11
+ entries.forEach(entry => {
12
+ if (entry.isIntersecting) {
13
+ const el = entry.target;
14
+ const target = parseInt(el.dataset.target || '0');
15
+ animateCounter(el, target);
16
+ observer.unobserve(el);
17
+ }
18
+ });
19
+ }, { threshold: 0.5 });
20
+
21
+ counters.forEach(c => observer.observe(c));
22
+
23
+ // ── Sidebar Active Section Tracking ──
24
+ const sectionIds = ['score', 'layers', 'anti-patterns', 'suggestions', 'refactoring', 'agents'];
25
+ const sectionObserver = new IntersectionObserver((entries) => {
26
+ entries.forEach(entry => {
27
+ if (entry.isIntersecting) {
28
+ document.querySelectorAll('.sidebar-link').forEach(l => l.classList.remove('active'));
29
+ const link = document.querySelector('.sidebar-link[data-section="' + entry.target.id + '"]');
30
+ if (link) link.classList.add('active');
31
+ }
32
+ });
33
+ }, { threshold: 0.15, rootMargin: '-80px 0px -60% 0px' });
34
+
35
+ sectionIds.forEach(id => {
36
+ const el = document.getElementById(id);
37
+ if (el) sectionObserver.observe(el);
38
+ });
39
+ });
40
+
41
+ function animateCounter(el, target) {
42
+ const duration = 1500;
43
+ const start = performance.now();
44
+ const update = (now) => {
45
+ const elapsed = now - start;
46
+ const progress = Math.min(elapsed / duration, 1);
47
+ const ease = 1 - Math.pow(1 - progress, 3);
48
+ el.textContent = Math.round(target * ease).toLocaleString();
49
+ if (progress < 1) requestAnimationFrame(update);
50
+ };
51
+ requestAnimationFrame(update);
52
+ }
53
+
54
+ // ── Radar Chart ──
55
+ (function() {
56
+ const data = [
57
+ { axis: 'Modularity', value: ${breakdown.modularity} },
58
+ { axis: 'Coupling', value: ${breakdown.coupling} },
59
+ { axis: 'Cohesion', value: ${breakdown.cohesion} },
60
+ { axis: 'Layering', value: ${breakdown.layering} },
61
+ ];
62
+
63
+ const svg = d3.select('#radar-chart');
64
+ const w = 350, h = 350, cx = w/2, cy = h/2, maxR = 120;
65
+ const levels = 5;
66
+ const total = data.length;
67
+ const angleSlice = (Math.PI * 2) / total;
68
+
69
+ // Grid circles
70
+ for (let i = 1; i <= levels; i++) {
71
+ const r = (maxR / levels) * i;
72
+ svg.append('circle')
73
+ .attr('cx', cx).attr('cy', cy).attr('r', r)
74
+ .attr('fill', 'none').attr('stroke', '#334155').attr('stroke-width', 0.5)
75
+ .attr('stroke-dasharray', '4,4');
76
+
77
+ svg.append('text')
78
+ .attr('x', cx + 4).attr('y', cy - r + 4)
79
+ .text(Math.round(100 / levels * i))
80
+ .attr('fill', '#475569').attr('font-size', '10px');
81
+ }
82
+
83
+ // Axis lines
84
+ data.forEach((d, i) => {
85
+ const angle = angleSlice * i - Math.PI/2;
86
+ const x = cx + Math.cos(angle) * (maxR + 20);
87
+ const y = cy + Math.sin(angle) * (maxR + 20);
88
+
89
+ svg.append('line')
90
+ .attr('x1', cx).attr('y1', cy).attr('x2', cx + Math.cos(angle) * maxR).attr('y2', cy + Math.sin(angle) * maxR)
91
+ .attr('stroke', '#334155').attr('stroke-width', 1);
92
+
93
+ svg.append('text')
94
+ .attr('x', x).attr('y', y)
95
+ .attr('text-anchor', 'middle').attr('dominant-baseline', 'middle')
96
+ .attr('fill', '#94a3b8').attr('font-size', '12px').attr('font-weight', '600')
97
+ .text(d.axis);
98
+ });
99
+
100
+ // Data polygon
101
+ const points = data.map((d, i) => {
102
+ const angle = angleSlice * i - Math.PI/2;
103
+ const r = (d.value / 100) * maxR;
104
+ return [cx + Math.cos(angle) * r, cy + Math.sin(angle) * r];
105
+ });
106
+
107
+ const pointsStr = points.map(p => p.join(',')).join(' ');
108
+
109
+ svg.append('polygon')
110
+ .attr('points', pointsStr)
111
+ .attr('fill', 'rgba(129, 140, 248, 0.15)')
112
+ .attr('stroke', '#818cf8').attr('stroke-width', 2);
113
+
114
+ // Data dots
115
+ points.forEach((p, i) => {
116
+ const color = data[i].value >= 70 ? '#22c55e' : data[i].value >= 50 ? '#f59e0b' : '#ef4444';
117
+ svg.append('circle')
118
+ .attr('cx', p[0]).attr('cy', p[1]).attr('r', 5)
119
+ .attr('fill', color).attr('stroke', '#0f172a').attr('stroke-width', 2);
120
+
121
+ svg.append('text')
122
+ .attr('x', p[0]).attr('y', p[1] - 12)
123
+ .attr('text-anchor', 'middle')
124
+ .attr('fill', color).attr('font-size', '12px').attr('font-weight', '700')
125
+ .text(data[i].value);
126
+ });
127
+ })();
128
+
129
+ // ── D3 Force Dependency Graph ──
130
+ (function() {
131
+ const nodesEl = document.getElementById('graph-nodes');
132
+ const linksEl = document.getElementById('graph-links');
133
+ if (!nodesEl || !linksEl) return;
134
+
135
+ const nodes = JSON.parse(nodesEl.textContent || '[]');
136
+ const links = JSON.parse(linksEl.textContent || '[]');
137
+ if (nodes.length === 0) return;
138
+
139
+ const container = document.getElementById('dep-graph');
140
+ const width = container.clientWidth || 800;
141
+ const height = 500;
142
+ container.style.height = height + 'px';
143
+
144
+ // Dynamic color map — loaded from JSON (supports both layer and module coloring)
145
+ const colorsEl = document.getElementById('graph-colors');
146
+ const layerColors = colorsEl ? JSON.parse(colorsEl.textContent || '{}') : {
147
+ API: '#ec4899', Service: '#3b82f6', Data: '#10b981',
148
+ UI: '#f59e0b', Infrastructure: '#8b5cf6', Other: '#64748b',
149
+ };
150
+
151
+ const svg = d3.select('#dep-graph').append('svg')
152
+ .attr('width', width).attr('height', height)
153
+ .attr('viewBox', [0, 0, width, height]);
154
+
155
+ // Zoom container
156
+ const g = svg.append('g');
157
+
158
+ // Zoom behavior
159
+ const zoom = d3.zoom()
160
+ .scaleExtent([0.2, 5])
161
+ .on('zoom', (event) => { g.attr('transform', event.transform); });
162
+ svg.call(zoom);
163
+
164
+ // Double-click to reset zoom
165
+ svg.on('dblclick.zoom', () => {
166
+ svg.transition().duration(500).call(zoom.transform, d3.zoomIdentity);
167
+ });
168
+
169
+ // Arrow marker
170
+ g.append('defs').append('marker')
171
+ .attr('id', 'arrowhead').attr('viewBox', '-0 -5 10 10')
172
+ .attr('refX', 20).attr('refY', 0).attr('orient', 'auto')
173
+ .attr('markerWidth', 6).attr('markerHeight', 6)
174
+ .append('path').attr('d', 'M 0,-5 L 10,0 L 0,5')
175
+ .attr('fill', '#475569');
176
+
177
+ // Tuned simulation for better spread
178
+ const simulation = d3.forceSimulation(nodes)
179
+ .force('link', d3.forceLink(links).id(d => d.id).distance(80))
180
+ .force('charge', d3.forceManyBody().strength(-250))
181
+ .force('center', d3.forceCenter(width / 2, height / 2))
182
+ .force('x', d3.forceX(width / 2).strength(0.05))
183
+ .force('y', d3.forceY(height / 2).strength(0.05))
184
+ .force('collision', d3.forceCollide().radius(d => Math.max(d.connections * 2 + 16, 20)));
185
+
186
+ const link = g.append('g')
187
+ .selectAll('line').data(links).join('line')
188
+ .attr('stroke', '#334155').attr('stroke-width', 1)
189
+ .attr('stroke-opacity', 0.4).attr('marker-end', 'url(#arrowhead)');
190
+
191
+ const node = g.append('g')
192
+ .selectAll('g').data(nodes).join('g')
193
+ .call(d3.drag()
194
+ .on('start', (e, d) => { if (!e.active) simulation.alphaTarget(0.3).restart(); d.fx = d.x; d.fy = d.y; })
195
+ .on('drag', (e, d) => { d.fx = e.x; d.fy = e.y; })
196
+ .on('end', (e, d) => { if (!e.active) simulation.alphaTarget(0); d.fx = null; d.fy = null; })
197
+ );
198
+
199
+ // Node circles — color by layer
200
+ node.append('circle')
201
+ .attr('r', d => Math.max(d.connections * 2.5 + 5, 6))
202
+ .attr('fill', d => layerColors[d.layer] || '#64748b')
203
+ .attr('stroke', '#0f172a').attr('stroke-width', 1.5)
204
+ .attr('opacity', 0.9);
205
+
206
+ // Node labels — only show for nodes with enough connections
207
+ node.filter(d => d.connections >= 2).append('text')
208
+ .text(d => d.name.replace(/\\.[^.]+$/, ''))
209
+ .attr('x', 0).attr('y', d => -(Math.max(d.connections * 2.5 + 5, 6) + 4))
210
+ .attr('text-anchor', 'middle')
211
+ .attr('fill', '#e2e8f0').attr('font-size', '9px').attr('font-weight', '500');
212
+
213
+ // Tooltip
214
+ node.append('title')
215
+ .text(d => d.id + '\\nConnections: ' + d.connections + '\\nLayer: ' + d.layer);
216
+
217
+ simulation.on('tick', () => {
218
+ link
219
+ .attr('x1', d => d.source.x).attr('y1', d => d.source.y)
220
+ .attr('x2', d => d.target.x).attr('y2', d => d.target.y);
221
+ node.attr('transform', d => 'translate(' + d.x + ',' + d.y + ')');
222
+ });
223
+
224
+ // Expose search and filter functions
225
+ window.filterGraphNodes = function(query) {
226
+ if (!query) {
227
+ node.attr('opacity', 1);
228
+ link.attr('opacity', 0.4);
229
+ return;
230
+ }
231
+ query = query.toLowerCase();
232
+ node.attr('opacity', d => d.id.toLowerCase().includes(query) || d.name.toLowerCase().includes(query) ? 1 : 0.1);
233
+ link.attr('opacity', d => {
234
+ const srcMatch = d.source.id.toLowerCase().includes(query);
235
+ const tgtMatch = d.target.id.toLowerCase().includes(query);
236
+ return (srcMatch || tgtMatch) ? 0.6 : 0.05;
237
+ });
238
+ };
239
+
240
+ window.toggleGraphLayer = function(layer, visible) {
241
+ node.filter(d => d.layer === layer)
242
+ .transition().duration(300)
243
+ .attr('opacity', visible ? 1 : 0.05);
244
+ link.filter(d => d.source.layer === layer || d.target.layer === layer)
245
+ .transition().duration(300)
246
+ .attr('opacity', visible ? 0.4 : 0.02);
247
+ };
248
+ })();
249
+
250
+ // ── Bubble Chart ──
251
+ (function() {
252
+ const dataEl = document.getElementById('bubble-data');
253
+ if (!dataEl) return;
254
+
255
+ const bubbles = JSON.parse(dataEl.textContent || '[]');
256
+ if (bubbles.length === 0) return;
257
+
258
+ const container = document.getElementById('bubble-chart');
259
+ const width = container.clientWidth || 600;
260
+ const height = 300;
261
+
262
+ const svg = d3.select('#bubble-chart').append('svg')
263
+ .attr('width', width).attr('height', height)
264
+ .attr('viewBox', [0, 0, width, height]);
265
+
266
+ const simulation = d3.forceSimulation(bubbles)
267
+ .force('charge', d3.forceManyBody().strength(5))
268
+ .force('center', d3.forceCenter(width / 2, height / 2))
269
+ .force('collision', d3.forceCollide().radius(d => d.radius + 4))
270
+ .stop();
271
+
272
+ for (let i = 0; i < 120; i++) simulation.tick();
273
+
274
+ const g = svg.selectAll('g').data(bubbles).join('g')
275
+ .attr('transform', d => 'translate(' + d.x + ',' + d.y + ')');
276
+
277
+ // Glow effect
278
+ g.append('circle')
279
+ .attr('r', d => d.radius)
280
+ .attr('fill', d => d.color + '20')
281
+ .attr('stroke', d => d.color).attr('stroke-width', 2)
282
+ .attr('opacity', 0)
283
+ .transition().duration(800).delay((d, i) => i * 200)
284
+ .attr('opacity', 1);
285
+
286
+ // Inner circle
287
+ g.append('circle')
288
+ .attr('r', d => d.radius * 0.7)
289
+ .attr('fill', d => d.color + '30')
290
+ .attr('opacity', 0)
291
+ .transition().duration(800).delay((d, i) => i * 200)
292
+ .attr('opacity', 1);
293
+
294
+ // Name
295
+ g.append('text')
296
+ .text(d => d.name)
297
+ .attr('text-anchor', 'middle').attr('dy', '-0.3em')
298
+ .attr('fill', '#e2e8f0').attr('font-size', d => Math.max(d.radius / 4, 10) + 'px')
299
+ .attr('font-weight', '700');
300
+
301
+ // Count badge
302
+ g.append('text')
303
+ .text(d => '×' + d.count)
304
+ .attr('text-anchor', 'middle').attr('dy', '1.2em')
305
+ .attr('fill', d => d.color).attr('font-size', d => Math.max(d.radius / 5, 9) + 'px')
306
+ .attr('font-weight', '600');
307
+
308
+ // Severity label
309
+ g.append('text')
310
+ .text(d => d.severity)
311
+ .attr('text-anchor', 'middle').attr('dy', '2.5em')
312
+ .attr('fill', '#64748b').attr('font-size', '9px').attr('text-transform', 'uppercase');
313
+ })();
314
+ // ── AI Prompt Downloader ──
315
+
316
+ window.toggleAllPrompts = function(checked) {
317
+ const checkboxes = document.querySelectorAll('.prompt-export-cb');
318
+ checkboxes.forEach(cb => cb.checked = checked);
319
+ window.updatePromptSelection();
320
+ };
321
+
322
+ window.updatePromptSelection = function() {
323
+ const checkboxes = document.querySelectorAll('.prompt-export-cb:checked');
324
+ const totalCheckboxes = document.querySelectorAll('.prompt-export-cb');
325
+ const selectAllCb = document.getElementById('select-all-prompts');
326
+ const btn = document.getElementById('download-selected-prompts-btn');
327
+ const badge = document.getElementById('prompt-count-badge');
328
+
329
+ if (selectAllCb && totalCheckboxes.length > 0) {
330
+ selectAllCb.checked = (checkboxes.length === totalCheckboxes.length);
331
+ }
332
+
333
+ if (btn) {
334
+ if (checkboxes.length > 0) {
335
+ btn.style.display = 'flex';
336
+ if (badge) badge.innerText = checkboxes.length;
337
+ } else {
338
+ btn.style.display = 'none';
339
+ }
340
+ }
341
+ };
342
+
343
+ window.downloadSelectedPrompts = function() {
344
+ const checkboxes = document.querySelectorAll('.prompt-export-cb:checked');
345
+ if (checkboxes.length === 0) return;
346
+
347
+ const btn = document.getElementById('download-selected-prompts-btn');
348
+ const originalHtml = btn.innerHTML;
349
+ btn.innerHTML = '✅ Criando...';
350
+
351
+ checkboxes.forEach((cb, i) => {
352
+ setTimeout(() => {
353
+ const box = cb.closest('.ai-prompt-box');
354
+ const codeEl = box.querySelector('code');
355
+ if (!codeEl) return;
356
+ const text = codeEl.innerText;
357
+ const filename = cb.dataset.filename || ('step-prompt-' + i + '.md');
358
+
359
+ const a = document.createElement('a');
360
+ a.setAttribute('href', 'data:text/markdown;charset=utf-8,' + encodeURIComponent(text));
361
+ a.setAttribute('download', filename);
362
+ a.style.display = 'none';
363
+ document.body.appendChild(a);
364
+ a.click();
365
+ document.body.removeChild(a);
366
+ }, i * 400); // 400ms delay per file to prevent browser spam-block
367
+ });
368
+
369
+ setTimeout(() => {
370
+ btn.innerHTML = originalHtml;
371
+ }, checkboxes.length * 400 + 1000);
372
+ };
373
+
374
+ window.downloadAIPrompt = function(element, filename) {
375
+ const container = element.closest('.ai-prompt-box');
376
+ const codeEl = container.querySelector('code');
377
+ if (!codeEl) return;
378
+ const text = codeEl.innerText;
379
+
380
+ const a = document.createElement('a');
381
+ a.setAttribute('href', 'data:text/markdown;charset=utf-8,' + encodeURIComponent(text));
382
+ a.setAttribute('download', filename);
383
+ a.style.display = 'none';
384
+ document.body.appendChild(a);
385
+ a.click();
386
+ document.body.removeChild(a);
387
+
388
+ const originalHtml = element.innerHTML;
389
+ element.innerHTML = '✅ Executing Download...';
390
+ element.style.background = '#059669';
391
+ element.style.color = '#fff';
392
+ setTimeout(() => {
393
+ element.innerHTML = originalHtml;
394
+ element.style.background = '';
395
+ element.style.color = '';
396
+ }, 2000);
397
+ };
398
+ <\/script>`;
399
+ }
400
+ //# sourceMappingURL=scripts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../../../src/adapters/html-reporter/scripts.ts"],"names":[],"mappings":"AAEE;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,MAAsB;IAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;IACzC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAmDwB,SAAS,CAAC,UAAU;iCACtB,SAAS,CAAC,QAAQ;iCAClB,SAAS,CAAC,QAAQ;iCAClB,SAAS,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAkVxC,CAAC;AACV,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { AgentSuggestion } from '@girardelli/architect-agents/src/core/agent-generator/index.js';
2
+ export declare function renderAgentSuggestions(s: AgentSuggestion): string;