@girardelli/architect-agents 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 (258) hide show
  1. package/dist/src/core/agent-generator/context-enricher.d.ts +17 -0
  2. package/dist/src/core/agent-generator/context-enricher.js +51 -0
  3. package/dist/src/core/agent-generator/context-enricher.js.map +1 -0
  4. package/dist/src/core/agent-generator/detectors/base-detector.d.ts +8 -0
  5. package/dist/src/core/agent-generator/detectors/base-detector.js +12 -0
  6. package/dist/src/core/agent-generator/detectors/base-detector.js.map +1 -0
  7. package/dist/src/core/agent-generator/detectors/dart-detector.d.ts +5 -0
  8. package/dist/src/core/agent-generator/detectors/dart-detector.js +16 -0
  9. package/dist/src/core/agent-generator/detectors/dart-detector.js.map +1 -0
  10. package/dist/src/core/agent-generator/detectors/framework-registry.d.ts +5 -0
  11. package/dist/src/core/agent-generator/detectors/framework-registry.js +81 -0
  12. package/dist/src/core/agent-generator/detectors/framework-registry.js.map +1 -0
  13. package/dist/src/core/agent-generator/detectors/go-detector.d.ts +5 -0
  14. package/dist/src/core/agent-generator/detectors/go-detector.js +25 -0
  15. package/dist/src/core/agent-generator/detectors/go-detector.js.map +1 -0
  16. package/dist/src/core/agent-generator/detectors/java-detector.d.ts +5 -0
  17. package/dist/src/core/agent-generator/detectors/java-detector.js +44 -0
  18. package/dist/src/core/agent-generator/detectors/java-detector.js.map +1 -0
  19. package/dist/src/core/agent-generator/detectors/node-detector.d.ts +5 -0
  20. package/dist/src/core/agent-generator/detectors/node-detector.js +28 -0
  21. package/dist/src/core/agent-generator/detectors/node-detector.js.map +1 -0
  22. package/dist/src/core/agent-generator/detectors/php-detector.d.ts +5 -0
  23. package/dist/src/core/agent-generator/detectors/php-detector.js +28 -0
  24. package/dist/src/core/agent-generator/detectors/php-detector.js.map +1 -0
  25. package/dist/src/core/agent-generator/detectors/python-detector.d.ts +7 -0
  26. package/dist/src/core/agent-generator/detectors/python-detector.js +116 -0
  27. package/dist/src/core/agent-generator/detectors/python-detector.js.map +1 -0
  28. package/dist/src/core/agent-generator/detectors/ruby-detector.d.ts +5 -0
  29. package/dist/src/core/agent-generator/detectors/ruby-detector.js +23 -0
  30. package/dist/src/core/agent-generator/detectors/ruby-detector.js.map +1 -0
  31. package/dist/src/core/agent-generator/detectors/rust-detector.d.ts +5 -0
  32. package/dist/src/core/agent-generator/detectors/rust-detector.js +18 -0
  33. package/dist/src/core/agent-generator/detectors/rust-detector.js.map +1 -0
  34. package/dist/src/core/agent-generator/detectors/structure-detector.d.ts +4 -0
  35. package/dist/src/core/agent-generator/detectors/structure-detector.js +35 -0
  36. package/dist/src/core/agent-generator/detectors/structure-detector.js.map +1 -0
  37. package/dist/src/core/agent-generator/detectors/toolchain-detector.d.ts +5 -0
  38. package/dist/src/core/agent-generator/detectors/toolchain-detector.js +164 -0
  39. package/dist/src/core/agent-generator/detectors/toolchain-detector.js.map +1 -0
  40. package/dist/src/core/agent-generator/domain-inferrer.d.ts +51 -0
  41. package/dist/src/core/agent-generator/domain-inferrer.js +585 -0
  42. package/dist/src/core/agent-generator/domain-inferrer.js.map +1 -0
  43. package/dist/src/core/agent-generator/engines/audit-engine.d.ts +8 -0
  44. package/dist/src/core/agent-generator/engines/audit-engine.js +84 -0
  45. package/dist/src/core/agent-generator/engines/audit-engine.js.map +1 -0
  46. package/dist/src/core/agent-generator/engines/context-builder.d.ts +12 -0
  47. package/dist/src/core/agent-generator/engines/context-builder.js +84 -0
  48. package/dist/src/core/agent-generator/engines/context-builder.js.map +1 -0
  49. package/dist/src/core/agent-generator/engines/generation-engine.d.ts +7 -0
  50. package/dist/src/core/agent-generator/engines/generation-engine.js +160 -0
  51. package/dist/src/core/agent-generator/engines/generation-engine.js.map +1 -0
  52. package/dist/src/core/agent-generator/engines/generation-engine_deps.d.ts +21 -0
  53. package/dist/src/core/agent-generator/engines/generation-engine_deps.js +17 -0
  54. package/dist/src/core/agent-generator/engines/generation-engine_deps.js.map +1 -0
  55. package/dist/src/core/agent-generator/engines/suggestion-engine.d.ts +13 -0
  56. package/dist/src/core/agent-generator/engines/suggestion-engine.js +171 -0
  57. package/dist/src/core/agent-generator/engines/suggestion-engine.js.map +1 -0
  58. package/dist/src/core/agent-generator/engines/suggestion-engine_deps.d.ts +8 -0
  59. package/dist/src/core/agent-generator/engines/suggestion-engine_deps.js +5 -0
  60. package/dist/src/core/agent-generator/engines/suggestion-engine_deps.js.map +1 -0
  61. package/dist/src/core/agent-generator/enrichers/analysis-helpers.d.ts +9 -0
  62. package/dist/src/core/agent-generator/enrichers/analysis-helpers.js +51 -0
  63. package/dist/src/core/agent-generator/enrichers/analysis-helpers.js.map +1 -0
  64. package/dist/src/core/agent-generator/enrichers/description-generator.d.ts +4 -0
  65. package/dist/src/core/agent-generator/enrichers/description-generator.js +82 -0
  66. package/dist/src/core/agent-generator/enrichers/description-generator.js.map +1 -0
  67. package/dist/src/core/agent-generator/enrichers/endpoint-extractor.d.ts +7 -0
  68. package/dist/src/core/agent-generator/enrichers/endpoint-extractor.js +90 -0
  69. package/dist/src/core/agent-generator/enrichers/endpoint-extractor.js.map +1 -0
  70. package/dist/src/core/agent-generator/enrichers/layer-classifier.d.ts +12 -0
  71. package/dist/src/core/agent-generator/enrichers/layer-classifier.js +152 -0
  72. package/dist/src/core/agent-generator/enrichers/layer-classifier.js.map +1 -0
  73. package/dist/src/core/agent-generator/enrichers/module-extractor.d.ts +10 -0
  74. package/dist/src/core/agent-generator/enrichers/module-extractor.js +173 -0
  75. package/dist/src/core/agent-generator/enrichers/module-extractor.js.map +1 -0
  76. package/dist/src/core/agent-generator/framework-detector.d.ts +17 -0
  77. package/dist/src/core/agent-generator/framework-detector.js +56 -0
  78. package/dist/src/core/agent-generator/framework-detector.js.map +1 -0
  79. package/dist/src/core/agent-generator/index.d.ts +25 -0
  80. package/dist/src/core/agent-generator/index.js +37 -0
  81. package/dist/src/core/agent-generator/index.js.map +1 -0
  82. package/dist/src/core/agent-generator/stack-detector.d.ts +13 -0
  83. package/dist/src/core/agent-generator/stack-detector.js +124 -0
  84. package/dist/src/core/agent-generator/stack-detector.js.map +1 -0
  85. package/dist/src/core/agent-generator/templates/core/agents.d.ts +9 -0
  86. package/dist/src/core/agent-generator/templates/core/agents.js +1127 -0
  87. package/dist/src/core/agent-generator/templates/core/agents.js.map +1 -0
  88. package/dist/src/core/agent-generator/templates/core/architecture-rules.d.ts +6 -0
  89. package/dist/src/core/agent-generator/templates/core/architecture-rules.js +275 -0
  90. package/dist/src/core/agent-generator/templates/core/architecture-rules.js.map +1 -0
  91. package/dist/src/core/agent-generator/templates/core/general-rules.d.ts +7 -0
  92. package/dist/src/core/agent-generator/templates/core/general-rules.js +301 -0
  93. package/dist/src/core/agent-generator/templates/core/general-rules.js.map +1 -0
  94. package/dist/src/core/agent-generator/templates/core/hooks-generator.d.ts +20 -0
  95. package/dist/src/core/agent-generator/templates/core/hooks-generator.js +235 -0
  96. package/dist/src/core/agent-generator/templates/core/hooks-generator.js.map +1 -0
  97. package/dist/src/core/agent-generator/templates/core/index-md.d.ts +6 -0
  98. package/dist/src/core/agent-generator/templates/core/index-md.js +247 -0
  99. package/dist/src/core/agent-generator/templates/core/index-md.js.map +1 -0
  100. package/dist/src/core/agent-generator/templates/core/orchestrator.d.ts +7 -0
  101. package/dist/src/core/agent-generator/templates/core/orchestrator.js +423 -0
  102. package/dist/src/core/agent-generator/templates/core/orchestrator.js.map +1 -0
  103. package/dist/src/core/agent-generator/templates/core/preflight.d.ts +7 -0
  104. package/dist/src/core/agent-generator/templates/core/preflight.js +213 -0
  105. package/dist/src/core/agent-generator/templates/core/preflight.js.map +1 -0
  106. package/dist/src/core/agent-generator/templates/core/quality-gates.d.ts +10 -0
  107. package/dist/src/core/agent-generator/templates/core/quality-gates.js +255 -0
  108. package/dist/src/core/agent-generator/templates/core/quality-gates.js.map +1 -0
  109. package/dist/src/core/agent-generator/templates/core/security-rules.d.ts +6 -0
  110. package/dist/src/core/agent-generator/templates/core/security-rules.js +529 -0
  111. package/dist/src/core/agent-generator/templates/core/security-rules.js.map +1 -0
  112. package/dist/src/core/agent-generator/templates/core/skills-generator.d.ts +18 -0
  113. package/dist/src/core/agent-generator/templates/core/skills-generator.js +547 -0
  114. package/dist/src/core/agent-generator/templates/core/skills-generator.js.map +1 -0
  115. package/dist/src/core/agent-generator/templates/core/workflow-fix-bug.d.ts +6 -0
  116. package/dist/src/core/agent-generator/templates/core/workflow-fix-bug.js +238 -0
  117. package/dist/src/core/agent-generator/templates/core/workflow-fix-bug.js.map +1 -0
  118. package/dist/src/core/agent-generator/templates/core/workflow-new-feature.d.ts +7 -0
  119. package/dist/src/core/agent-generator/templates/core/workflow-new-feature.js +321 -0
  120. package/dist/src/core/agent-generator/templates/core/workflow-new-feature.js.map +1 -0
  121. package/dist/src/core/agent-generator/templates/core/workflow-review.d.ts +6 -0
  122. package/dist/src/core/agent-generator/templates/core/workflow-review.js +105 -0
  123. package/dist/src/core/agent-generator/templates/core/workflow-review.js.map +1 -0
  124. package/dist/src/core/agent-generator/templates/domain/index.d.ts +21 -0
  125. package/dist/src/core/agent-generator/templates/domain/index.js +1179 -0
  126. package/dist/src/core/agent-generator/templates/domain/index.js.map +1 -0
  127. package/dist/src/core/agent-generator/templates/helpers/base-helpers.d.ts +10 -0
  128. package/dist/src/core/agent-generator/templates/helpers/base-helpers.js +20 -0
  129. package/dist/src/core/agent-generator/templates/helpers/base-helpers.js.map +1 -0
  130. package/dist/src/core/agent-generator/templates/helpers/cross-ref-helpers.d.ts +2 -0
  131. package/dist/src/core/agent-generator/templates/helpers/cross-ref-helpers.js +77 -0
  132. package/dist/src/core/agent-generator/templates/helpers/cross-ref-helpers.js.map +1 -0
  133. package/dist/src/core/agent-generator/templates/helpers/security-helpers.d.ts +2 -0
  134. package/dist/src/core/agent-generator/templates/helpers/security-helpers.js +182 -0
  135. package/dist/src/core/agent-generator/templates/helpers/security-helpers.js.map +1 -0
  136. package/dist/src/core/agent-generator/templates/helpers/stack-helpers.d.ts +4 -0
  137. package/dist/src/core/agent-generator/templates/helpers/stack-helpers.js +69 -0
  138. package/dist/src/core/agent-generator/templates/helpers/stack-helpers.js.map +1 -0
  139. package/dist/src/core/agent-generator/templates/helpers/structure-helpers.d.ts +2 -0
  140. package/dist/src/core/agent-generator/templates/helpers/structure-helpers.js +275 -0
  141. package/dist/src/core/agent-generator/templates/helpers/structure-helpers.js.map +1 -0
  142. package/dist/src/core/agent-generator/templates/helpers/summary-helpers.d.ts +6 -0
  143. package/dist/src/core/agent-generator/templates/helpers/summary-helpers.js +56 -0
  144. package/dist/src/core/agent-generator/templates/helpers/summary-helpers.js.map +1 -0
  145. package/dist/src/core/agent-generator/templates/stack/index.d.ts +7 -0
  146. package/dist/src/core/agent-generator/templates/stack/index.js +695 -0
  147. package/dist/src/core/agent-generator/templates/stack/index.js.map +1 -0
  148. package/dist/src/core/agent-generator/templates/template-helpers.d.ts +11 -0
  149. package/dist/src/core/agent-generator/templates/template-helpers.js +12 -0
  150. package/dist/src/core/agent-generator/templates/template-helpers.js.map +1 -0
  151. package/dist/src/core/agent-generator/types/agent.d.ts +39 -0
  152. package/dist/src/core/agent-generator/types/agent.js +27 -0
  153. package/dist/src/core/agent-generator/types/agent.js.map +1 -0
  154. package/dist/src/core/agent-generator/types/domain.d.ts +58 -0
  155. package/dist/src/core/agent-generator/types/domain.js +2 -0
  156. package/dist/src/core/agent-generator/types/domain.js.map +1 -0
  157. package/dist/src/core/agent-generator/types/stack.d.ts +36 -0
  158. package/dist/src/core/agent-generator/types/stack.js +2 -0
  159. package/dist/src/core/agent-generator/types/stack.js.map +1 -0
  160. package/dist/src/core/agent-generator/types/template.d.ts +29 -0
  161. package/dist/src/core/agent-generator/types/template.js +2 -0
  162. package/dist/src/core/agent-generator/types/template.js.map +1 -0
  163. package/dist/src/core/agent-runtime/ai-provider.d.ts +33 -0
  164. package/dist/src/core/agent-runtime/ai-provider.js +146 -0
  165. package/dist/src/core/agent-runtime/ai-provider.js.map +1 -0
  166. package/dist/src/core/agent-runtime/executor.d.ts +13 -0
  167. package/dist/src/core/agent-runtime/executor.js +138 -0
  168. package/dist/src/core/agent-runtime/executor.js.map +1 -0
  169. package/dist/src/core/agent-runtime/human-gate.d.ts +16 -0
  170. package/dist/src/core/agent-runtime/human-gate.js +70 -0
  171. package/dist/src/core/agent-runtime/human-gate.js.map +1 -0
  172. package/dist/tests/agent-generator.test.d.ts +1 -0
  173. package/dist/tests/agent-generator.test.js +349 -0
  174. package/dist/tests/agent-generator.test.js.map +1 -0
  175. package/dist/tests/agent-runtime.test.d.ts +1 -0
  176. package/dist/tests/agent-runtime.test.js +107 -0
  177. package/dist/tests/agent-runtime.test.js.map +1 -0
  178. package/dist/tests/context-enricher.test.d.ts +1 -0
  179. package/dist/tests/context-enricher.test.js +875 -0
  180. package/dist/tests/context-enricher.test.js.map +1 -0
  181. package/dist/tests/framework-detector.test.d.ts +1 -0
  182. package/dist/tests/framework-detector.test.js +882 -0
  183. package/dist/tests/framework-detector.test.js.map +1 -0
  184. package/dist/tests/stack-detector.test.d.ts +1 -0
  185. package/dist/tests/stack-detector.test.js +183 -0
  186. package/dist/tests/stack-detector.test.js.map +1 -0
  187. package/dist/tests/template-generation.test.d.ts +1 -0
  188. package/dist/tests/template-generation.test.js +571 -0
  189. package/dist/tests/template-generation.test.js.map +1 -0
  190. package/dist/tests/template-helpers.test.d.ts +1 -0
  191. package/dist/tests/template-helpers.test.js +967 -0
  192. package/dist/tests/template-helpers.test.js.map +1 -0
  193. package/package.json +24 -0
  194. package/src/core/agent-generator/context-enricher.ts +67 -0
  195. package/src/core/agent-generator/detectors/base-detector.ts +18 -0
  196. package/src/core/agent-generator/detectors/dart-detector.ts +17 -0
  197. package/src/core/agent-generator/detectors/framework-registry.ts +82 -0
  198. package/src/core/agent-generator/detectors/go-detector.ts +26 -0
  199. package/src/core/agent-generator/detectors/java-detector.ts +46 -0
  200. package/src/core/agent-generator/detectors/node-detector.ts +28 -0
  201. package/src/core/agent-generator/detectors/php-detector.ts +28 -0
  202. package/src/core/agent-generator/detectors/python-detector.ts +125 -0
  203. package/src/core/agent-generator/detectors/ruby-detector.ts +24 -0
  204. package/src/core/agent-generator/detectors/rust-detector.ts +19 -0
  205. package/src/core/agent-generator/detectors/structure-detector.ts +38 -0
  206. package/src/core/agent-generator/detectors/toolchain-detector.ts +181 -0
  207. package/src/core/agent-generator/domain-inferrer.ts +630 -0
  208. package/src/core/agent-generator/engines/audit-engine.ts +98 -0
  209. package/src/core/agent-generator/engines/context-builder.ts +96 -0
  210. package/src/core/agent-generator/engines/generation-engine.ts +184 -0
  211. package/src/core/agent-generator/engines/generation-engine_deps.ts +21 -0
  212. package/src/core/agent-generator/engines/suggestion-engine.ts +202 -0
  213. package/src/core/agent-generator/engines/suggestion-engine_deps.ts +8 -0
  214. package/src/core/agent-generator/enrichers/analysis-helpers.ts +58 -0
  215. package/src/core/agent-generator/enrichers/description-generator.ts +91 -0
  216. package/src/core/agent-generator/enrichers/endpoint-extractor.ts +114 -0
  217. package/src/core/agent-generator/enrichers/layer-classifier.ts +156 -0
  218. package/src/core/agent-generator/enrichers/module-extractor.ts +203 -0
  219. package/src/core/agent-generator/framework-detector.ts +66 -0
  220. package/src/core/agent-generator/index.ts +55 -0
  221. package/src/core/agent-generator/stack-detector.ts +115 -0
  222. package/src/core/agent-generator/templates/core/agents.ts +1168 -0
  223. package/src/core/agent-generator/templates/core/architecture-rules.ts +288 -0
  224. package/src/core/agent-generator/templates/core/general-rules.ts +306 -0
  225. package/src/core/agent-generator/templates/core/hooks-generator.ts +244 -0
  226. package/src/core/agent-generator/templates/core/index-md.ts +261 -0
  227. package/src/core/agent-generator/templates/core/orchestrator.ts +462 -0
  228. package/src/core/agent-generator/templates/core/preflight.ts +216 -0
  229. package/src/core/agent-generator/templates/core/quality-gates.ts +257 -0
  230. package/src/core/agent-generator/templates/core/security-rules.ts +544 -0
  231. package/src/core/agent-generator/templates/core/skills-generator.ts +586 -0
  232. package/src/core/agent-generator/templates/core/workflow-fix-bug.ts +240 -0
  233. package/src/core/agent-generator/templates/core/workflow-new-feature.ts +323 -0
  234. package/src/core/agent-generator/templates/core/workflow-review.ts +107 -0
  235. package/src/core/agent-generator/templates/domain/index.ts +1204 -0
  236. package/src/core/agent-generator/templates/helpers/base-helpers.ts +33 -0
  237. package/src/core/agent-generator/templates/helpers/cross-ref-helpers.ts +79 -0
  238. package/src/core/agent-generator/templates/helpers/security-helpers.ts +198 -0
  239. package/src/core/agent-generator/templates/helpers/stack-helpers.ts +80 -0
  240. package/src/core/agent-generator/templates/helpers/structure-helpers.ts +293 -0
  241. package/src/core/agent-generator/templates/helpers/summary-helpers.ts +67 -0
  242. package/src/core/agent-generator/templates/stack/index.ts +705 -0
  243. package/src/core/agent-generator/templates/template-helpers.ts +12 -0
  244. package/src/core/agent-generator/types/agent.ts +65 -0
  245. package/src/core/agent-generator/types/domain.ts +63 -0
  246. package/src/core/agent-generator/types/stack.ts +38 -0
  247. package/src/core/agent-generator/types/template.ts +31 -0
  248. package/src/core/agent-runtime/ai-provider.ts +178 -0
  249. package/src/core/agent-runtime/executor.ts +148 -0
  250. package/src/core/agent-runtime/human-gate.ts +69 -0
  251. package/tests/agent-generator.test.ts +428 -0
  252. package/tests/agent-runtime.test.ts +125 -0
  253. package/tests/context-enricher.test.ts +972 -0
  254. package/tests/framework-detector.test.ts +1172 -0
  255. package/tests/stack-detector.test.ts +241 -0
  256. package/tests/template-generation.test.ts +709 -0
  257. package/tests/template-helpers.test.ts +1130 -0
  258. package/tsconfig.json +14 -0
@@ -0,0 +1,33 @@
1
+ import { TemplateContext, EnrichedTemplateContext } from '@girardelli/architect-agents/src/core/agent-generator/types/template.js';
2
+ // @ts-ignore - Audit cleanup unused variable
3
+ import { FrameworkInfo } from '@girardelli/architect-agents/src/core/agent-generator/types/stack.js';
4
+
5
+ export function getEnriched(ctx: TemplateContext): Partial<EnrichedTemplateContext> {
6
+ if ('domain' in ctx) return ctx as EnrichedTemplateContext;
7
+ return {};
8
+ }
9
+
10
+ export function isEnriched(ctx: TemplateContext): ctx is EnrichedTemplateContext {
11
+ return 'domain' in ctx;
12
+ }
13
+
14
+ export function depthScale<T>(
15
+ ctx: TemplateContext,
16
+ options: {
17
+ small: T;
18
+ medium: T;
19
+ large: T;
20
+ enterprise: T;
21
+ },
22
+ ): T {
23
+ const enriched = getEnriched(ctx);
24
+ const depth = (enriched.projectDepth || 'medium') as 'small' | 'medium' | 'large' | 'enterprise';
25
+ return options[depth];
26
+ }
27
+
28
+ export function depthAtLeast(ctx: TemplateContext, minDepth: 'small' | 'medium' | 'large' | 'enterprise'): boolean {
29
+ const enriched = getEnriched(ctx);
30
+ const depth = enriched.projectDepth || 'medium';
31
+ const order = ['small', 'medium', 'large', 'enterprise'];
32
+ return order.indexOf(depth) >= order.indexOf(minDepth);
33
+ }
@@ -0,0 +1,79 @@
1
+ import { TemplateContext } from '@girardelli/architect-agents/src/core/agent-generator/types/template.js';
2
+
3
+ export function crossRef(agentId: string, ctx: TemplateContext): string {
4
+ const { stack } = ctx;
5
+
6
+ const agentRelations: Record<string, { id: string; name: string; when: string }[]> = {
7
+ 'backend': [
8
+ { id: 'database-engineer', name: 'Database Engineer', when: 'Criar/alterar entities, migrations, queries' },
9
+ { id: 'security-auditor', name: 'Security Auditor', when: 'Novo endpoint, auth flow, dados sensíveis' },
10
+ { id: 'qa-test', name: 'QA Test Engineer', when: 'Após implementação — plano de testes' },
11
+ { id: 'tech-debt', name: 'Tech Debt Controller', when: 'Antes de criar novo módulo — verificar débito' },
12
+ ],
13
+ 'frontend': [
14
+ { id: 'backend', name: 'Backend Developer', when: 'Antes de integrar — doc de integração obrigatória' },
15
+ { id: 'qa-test', name: 'QA Test Engineer', when: 'Após implementação — testes e2e' },
16
+ { id: 'security-auditor', name: 'Security Auditor', when: 'Forms, auth UI, dados sensíveis' },
17
+ ],
18
+ 'flutter': [
19
+ { id: 'backend', name: 'Backend Developer', when: 'Antes de integrar — doc de integração obrigatória' },
20
+ { id: 'qa-test', name: 'QA Test Engineer', when: 'Após implementação — testes de widget e integração' },
21
+ { id: 'security-auditor', name: 'Security Auditor', when: 'Armazenamento local, biometria, deep links' },
22
+ ],
23
+ 'database-engineer': [
24
+ { id: 'backend', name: 'Backend Developer', when: 'Após migration — atualizar entities e queries' },
25
+ { id: 'security-auditor', name: 'Security Auditor', when: 'Dados sensíveis, PII, encryption at rest' },
26
+ { id: 'tech-debt', name: 'Tech Debt Controller', when: 'Schema com N+1, índices faltantes' },
27
+ ],
28
+ 'security-auditor': [
29
+ { id: 'backend', name: 'Backend Developer', when: 'Falha de segurança em endpoint/service' },
30
+ { id: 'database-engineer', name: 'Database Engineer', when: 'Encryption at rest, data masking' },
31
+ { id: 'qa-test', name: 'QA Test Engineer', when: 'Testes de segurança (fuzzing, pentest)' },
32
+ ],
33
+ 'qa-test': [
34
+ { id: 'backend', name: 'Backend Developer', when: 'Cobertura insuficiente em services' },
35
+ { id: 'frontend', name: 'Frontend Developer', when: 'Testes e2e falhando, componentes sem testes' },
36
+ { id: 'tech-debt', name: 'Tech Debt Controller', when: 'Testes com .skip(), mocks frágeis' },
37
+ ],
38
+ 'tech-debt': [
39
+ { id: 'backend', name: 'Backend Developer', when: 'Refatoração de módulo, god class' },
40
+ { id: 'database-engineer', name: 'Database Engineer', when: 'N+1 queries, índices, schema refactoring' },
41
+ { id: 'security-auditor', name: 'Security Auditor', when: 'Débito de segurança (dependencies, configs)' },
42
+ ],
43
+ 'code-review': [
44
+ { id: 'security-auditor', name: 'Security Auditor', when: 'Review de endpoints, auth, dados sensíveis' },
45
+ { id: 'qa-test', name: 'QA Test Engineer', when: 'Verificar cobertura e qualidade dos testes' },
46
+ { id: 'tech-debt', name: 'Tech Debt Controller', when: 'Avaliar impacto em débito técnico' },
47
+ ],
48
+ 'orchestrator': [
49
+ { id: 'backend', name: 'Backend Developer', when: 'Features que tocam backend' },
50
+ { id: 'frontend', name: 'Frontend Developer', when: 'Features que tocam frontend' },
51
+ { id: 'flutter', name: 'Flutter UI Developer', when: 'Features que tocam app mobile' },
52
+ { id: 'database-engineer', name: 'Database Engineer', when: 'Features que tocam banco de dados' },
53
+ { id: 'security-auditor', name: 'Security Auditor', when: 'TODA feature — revisão obrigatória' },
54
+ { id: 'qa-test', name: 'QA Test Engineer', when: 'TODA feature — plano de testes obrigatório' },
55
+ { id: 'tech-debt', name: 'Tech Debt Controller', when: 'Antes de nova feature — checar débito' },
56
+ ],
57
+ };
58
+
59
+ const relations = agentRelations[agentId] || [];
60
+ const filtered = relations.filter(r => {
61
+ if (r.id === 'frontend' && !stack.hasFrontend) return false;
62
+ if (r.id === 'flutter' && !stack.hasMobile) return false;
63
+ if (r.id === 'database-engineer' && !stack.hasDatabase) return false;
64
+ return true;
65
+ });
66
+
67
+ if (filtered.length === 0) return '';
68
+
69
+ return `
70
+ ## 🔗 Cross-References (Agentes Relacionados)
71
+
72
+ | Agente | Quando Consultar |
73
+ |--------|-----------------|
74
+ ${filtered.map(r => `| **${r.name}** | ${r.when} |`).join('\n')}
75
+
76
+ > **Regra:** Nunca implementar isoladamente. Sempre verificar se o agente relacionado precisa ser consultado.
77
+ `;
78
+ }
79
+
@@ -0,0 +1,198 @@
1
+ // @ts-ignore - Audit cleanup unused variable
2
+ import { TemplateContext, EnrichedTemplateContext } from '@girardelli/architect-agents/src/core/agent-generator/types/template.js';
3
+ // @ts-ignore - Audit cleanup unused variable
4
+ import { FrameworkInfo } from '@girardelli/architect-agents/src/core/agent-generator/types/stack.js';
5
+
6
+ import { getEnriched } from './base-helpers.js';
7
+
8
+ export function frameworkSecurityChecklist(ctx: TemplateContext): string {
9
+ const enriched = getEnriched(ctx);
10
+ const fw = enriched.primaryFramework?.name || '';
11
+ const lang = ctx.stack.primary;
12
+
13
+ if (fw === 'FastAPI') {
14
+ return `
15
+ ## Checklist Segurança — FastAPI
16
+
17
+ \`\`\`
18
+ □ Pydantic models para validação de TODOS os inputs
19
+ □ OAuth2PasswordBearer / OAuth2AuthorizationCodeBearer configurado
20
+ □ Depends() para injeção segura de autenticação
21
+ □ CORS via CORSMiddleware com origins whitelist (não usar "*")
22
+ □ Rate limiting via slowapi ou middleware customizado
23
+ □ Security headers via middleware (X-Content-Type-Options, etc.)
24
+ □ Senhas hasheadas com passlib (bcrypt/argon2)
25
+ □ JWT tokens com expiração curta + refresh token
26
+ □ HTTPS obrigatório em produção (redirect HTTP → HTTPS)
27
+ □ Logs estruturados SEM dados sensíveis (loguru/structlog)
28
+ □ SQLAlchemy com queries parametrizadas (nunca string concat)
29
+ □ Background tasks validadas contra injection
30
+ □ File uploads com validação de tipo e tamanho
31
+ □ Dependency scanning: pip-audit / safety
32
+ \`\`\``;
33
+ }
34
+
35
+ if (fw === 'Django' || fw === 'DRF') {
36
+ return `
37
+ ## Checklist Segurança — Django
38
+
39
+ \`\`\`
40
+ □ CSRF protection habilitado (CsrfViewMiddleware)
41
+ □ XSS protection via auto-escaping nos templates
42
+ □ SQL Injection prevenido via ORM (nunca raw SQL sem parametrize)
43
+ □ Clickjacking protection (X-Frame-Options)
44
+ □ SECURE_SSL_REDIRECT = True em produção
45
+ □ SESSION_COOKIE_SECURE = True
46
+ □ CSRF_COOKIE_SECURE = True
47
+ □ ALLOWED_HOSTS configurado corretamente
48
+ □ DEBUG = False em produção
49
+ □ SECRET_KEY rotacionado e não commitado
50
+ □ django-rest-framework permissions e throttling
51
+ □ django-cors-headers com whitelist
52
+ □ Senhas hasheadas com PBKDF2/Argon2 (PASSWORD_HASHERS)
53
+ □ Dependency scanning: pip-audit / safety
54
+ \`\`\``;
55
+ }
56
+
57
+ if (fw === 'Flask') {
58
+ return `
59
+ ## Checklist Segurança — Flask
60
+
61
+ \`\`\`
62
+ □ Flask-Talisman para security headers
63
+ □ Flask-CORS com origins whitelist
64
+ □ Flask-Limiter para rate limiting
65
+ □ Flask-Login / Flask-JWT-Extended para auth
66
+ □ CSRF via Flask-WTF
67
+ □ SECRET_KEY seguro e rotacionado
68
+ □ Session cookie seguro (httponly, secure, samesite)
69
+ □ SQLAlchemy com queries parametrizadas
70
+ □ Jinja2 auto-escaping habilitado
71
+ □ File uploads validados (tipo, tamanho, path traversal)
72
+ □ Dependency scanning: pip-audit / safety
73
+ \`\`\``;
74
+ }
75
+
76
+ if (fw === 'NestJS') {
77
+ return `
78
+ ## Checklist Segurança — NestJS
79
+
80
+ \`\`\`
81
+ □ Helmet habilitado (app.use(helmet()))
82
+ □ CORS com origins whitelist
83
+ □ Rate limiting via @nestjs/throttler
84
+ □ class-validator em TODOS os DTOs
85
+ □ Guards para autenticação/autorização
86
+ □ JWT via @nestjs/jwt com expiração curta
87
+ □ CSRF protection (se serve HTML)
88
+ □ TypeORM/Prisma com queries parametrizadas
89
+ □ Pipes de validação globais (ValidationPipe)
90
+ □ Exception filters customizados (sem stack traces em prod)
91
+ □ npm audit sem vulnerabilidades críticas
92
+ □ strict: true em tsconfig.json
93
+ \`\`\``;
94
+ }
95
+
96
+ if (fw === 'Express' || fw === 'Fastify') {
97
+ return `
98
+ ## Checklist Segurança — ${fw}
99
+
100
+ \`\`\`
101
+ □ Helmet.js habilitado
102
+ □ CORS configurado restritivamente
103
+ □ Rate limiting (express-rate-limit)
104
+ □ Input validation (joi / zod / express-validator)
105
+ □ JWT com expiração + refresh
106
+ □ CSRF protection (csurf)
107
+ □ Queries parametrizadas (nunca string interpolation)
108
+ □ Error handler que não vaza stack traces
109
+ □ npm audit sem vulnerabilidades críticas
110
+ □ HTTPS obrigatório
111
+ \`\`\``;
112
+ }
113
+
114
+ if (fw === 'Spring Boot') {
115
+ return `
116
+ ## Checklist Segurança — Spring Boot
117
+
118
+ \`\`\`
119
+ □ Spring Security configurado
120
+ □ CSRF habilitado para endpoints com estado
121
+ □ CORS via WebMvcConfigurer com whitelist
122
+ □ @Valid / @Validated em DTOs
123
+ □ BCrypt para senhas (PasswordEncoder)
124
+ □ JPA parametrizado (nunca JPQL com concat)
125
+ □ Actuator endpoints protegidos em produção
126
+ □ OAuth2/JWT via Spring Security OAuth
127
+ □ Content-Security-Policy configurado
128
+ □ Dependências: OWASP Dependency-Check
129
+ \`\`\``;
130
+ }
131
+
132
+ if (fw === 'Laravel') {
133
+ return `
134
+ ## Checklist Segurança — Laravel
135
+
136
+ \`\`\`
137
+ □ CSRF token em todos os forms (@csrf)
138
+ □ Eloquent parametrizado (nunca DB::raw sem bind)
139
+ □ Form Requests para validação
140
+ □ Sanctum/Passport para API auth
141
+ □ Gate/Policy para autorização
142
+ □ Encryption via Crypt facade
143
+ □ Rate limiting via RateLimiter
144
+ □ APP_DEBUG=false em produção
145
+ □ CORS via config/cors.php com whitelist
146
+ □ Composer audit sem vulnerabilidades
147
+ \`\`\``;
148
+ }
149
+
150
+ // Fallback by language
151
+ if (lang === 'Python') {
152
+ return `
153
+ ## Checklist Segurança — Python
154
+
155
+ \`\`\`
156
+ □ Inputs validados (pydantic / marshmallow / WTForms)
157
+ □ Queries parametrizadas (SQLAlchemy / Django ORM)
158
+ □ CORS configurado com whitelist
159
+ □ Rate limiting implementado
160
+ □ Security headers configurados
161
+ □ Senhas hasheadas com bcrypt/argon2
162
+ □ Sem pickle para dados untrusted
163
+ □ HTTPS obrigatório em produção
164
+ □ pip-audit / safety para vulnerabilidades
165
+ □ Logging sem dados sensíveis
166
+ \`\`\``;
167
+ }
168
+
169
+ if (lang === 'Go') {
170
+ return `
171
+ ## Checklist Segurança — Go
172
+
173
+ \`\`\`
174
+ □ Inputs validados via validator package
175
+ □ Prepared statements para SQL
176
+ □ TLS/mTLS para comunicação inter-serviços
177
+ □ CORS headers explícitos
178
+ □ Rate limiting implementado
179
+ □ Logging de ações críticas (sem PII)
180
+ □ go vet / staticcheck no CI
181
+ □ govulncheck para vulnerabilidades
182
+ \`\`\``;
183
+ }
184
+
185
+ return `
186
+ ## Checklist Segurança — ${lang}
187
+
188
+ \`\`\`
189
+ □ Inputs sanitizados e validados
190
+ □ Queries parametrizadas obrigatoriamente
191
+ □ CSRF tokens em formulários
192
+ □ Rate limiting em APIs
193
+ □ Secrets em variáveis de ambiente
194
+ □ HTTPS obrigatório em produção
195
+ □ Dependency scanning no CI
196
+ \`\`\``;
197
+ }
198
+
@@ -0,0 +1,80 @@
1
+ // @ts-ignore - Audit cleanup unused variable
2
+ import { TemplateContext, EnrichedTemplateContext } from '@girardelli/architect-agents/src/core/agent-generator/types/template.js';
3
+ // @ts-ignore - Audit cleanup unused variable
4
+ import { FrameworkInfo } from '@girardelli/architect-agents/src/core/agent-generator/types/stack.js';
5
+
6
+ import { getEnriched } from './base-helpers.js';
7
+
8
+ export function frameworkBadge(ctx: TemplateContext): string {
9
+ const enriched = getEnriched(ctx);
10
+ if (!enriched.detectedFrameworks?.length) return '';
11
+
12
+ const fws = enriched.detectedFrameworks
13
+ .filter((f: any) => f.category === 'web' || f.category === 'orm')
14
+ .map((f: any) => `**${f.name}**${f.version ? ` ${f.version}` : ''}`);
15
+
16
+ const testFws = enriched.detectedFrameworks
17
+ .filter((f: any) => f.category === 'test')
18
+ .map((f: any) => f.name);
19
+
20
+ const lintFws = enriched.detectedFrameworks
21
+ .filter((f: any) => f.category === 'lint')
22
+ .map((f: any) => f.name);
23
+
24
+ const parts: string[] = [];
25
+ if (fws.length) parts.push(fws.join(' + '));
26
+ if (testFws.length) parts.push(`Testes: ${testFws.join(', ')}`);
27
+ if (lintFws.length) parts.push(`Lint: ${lintFws.join(', ')}`);
28
+
29
+ return `> 🚀 **Stack Detectada:** ${parts.join(' · ')}`;
30
+ }
31
+
32
+ export function projectStructureBadge(ctx: TemplateContext): string {
33
+ const enriched = getEnriched(ctx);
34
+ const structure = enriched.projectStructure || 'unknown';
35
+
36
+ const labels: Record<string, string> = {
37
+ 'clean-architecture': '🏛️ Clean Architecture / DDD',
38
+ 'mvc': '📐 MVC (Model-View-Controller)',
39
+ 'modular': '📦 Modular (Feature-based)',
40
+ 'flat': '📄 Flat Structure',
41
+ 'monorepo': '🏗️ Monorepo',
42
+ 'unknown': '❓ Estrutura não identificada',
43
+ };
44
+
45
+ return labels[structure] || labels['unknown'];
46
+ }
47
+
48
+ export function toolchainCommands(ctx: TemplateContext): string {
49
+ const enriched = getEnriched(ctx);
50
+ if (!enriched.toolchain) return '';
51
+
52
+ const tc = enriched.toolchain;
53
+ return `
54
+ ## 🔧 Toolchain Detectado
55
+
56
+ \`\`\`bash
57
+ # Build
58
+ ${tc.buildCmd}
59
+
60
+ # Testes
61
+ ${tc.testCmd}
62
+
63
+ # Lint
64
+ ${tc.lintCmd}
65
+
66
+ # Coverage
67
+ ${tc.coverageCmd}
68
+
69
+ # Dev Server
70
+ ${tc.runCmd}
71
+
72
+ # Instalar dependências
73
+ ${tc.installCmd}
74
+ ${tc.migrateCmd ? `\n# Migrations\n${tc.migrateCmd}` : ''}
75
+ \`\`\`
76
+
77
+ > **Deps file:** \`${tc.depsFile}\`
78
+ `;
79
+ }
80
+
@@ -0,0 +1,293 @@
1
+ // @ts-ignore - Audit cleanup unused variable
2
+ import { TemplateContext, EnrichedTemplateContext } from '@girardelli/architect-agents/src/core/agent-generator/types/template.js';
3
+ // @ts-ignore - Audit cleanup unused variable
4
+ import { FrameworkInfo } from '@girardelli/architect-agents/src/core/agent-generator/types/stack.js';
5
+
6
+ import { getEnriched } from './base-helpers.js';
7
+
8
+ export function frameworkModuleStructure(ctx: TemplateContext): string {
9
+ const enriched = getEnriched(ctx);
10
+ const fw = enriched.primaryFramework?.name || '';
11
+ const structure = enriched.projectStructure || 'unknown';
12
+ const lang = ctx.stack.primary;
13
+
14
+ // Clean Architecture (Python, any framework)
15
+ if (structure === 'clean-architecture') {
16
+ if (lang === 'Python') {
17
+ return `
18
+ \`\`\`
19
+ src/[projeto]/
20
+ ├── domain/ → Regras de negócio puras
21
+ │ ├── entities/ → Entidades com identidade
22
+ │ ├── value_objects/ → Objetos de valor (imutáveis)
23
+ │ ├── services/ → Serviços de domínio
24
+ │ ├── events/ → Eventos de domínio
25
+ │ ├── enums/ → Enumerações
26
+ │ └── exceptions/ → Exceções customizadas
27
+ ├── application/ → Casos de uso
28
+ │ ├── services/ → Application services
29
+ │ └── interfaces/ → Contratos (ports)
30
+ ├── infrastructure/ → Implementações externas
31
+ │ ├── persistence/ → Repositórios concretos
32
+ │ ├── storage/ → MinIO, S3, filesystem
33
+ │ ├── extraction/ → Extração de dados
34
+ │ │ ├── extractors/ → Extractors por tipo
35
+ │ │ ├── ocr/ → OCR engine
36
+ │ │ └── guards/ → Validadores
37
+ │ └── agents/ → Agentes de automação
38
+ ├── presentation/ → Interface com o mundo
39
+ │ ├── api/ → REST API
40
+ │ │ ├── routes/ → Endpoints${fw === 'FastAPI' ? ' (FastAPI routers)' : ''}
41
+ │ │ └── dependencies/ → ${fw === 'FastAPI' ? 'FastAPI Depends()' : 'Injeção de deps'}
42
+ │ └── workers/ → Background workers
43
+ └── tests/
44
+ ├── unit/ → Testes unitários
45
+ ├── integration/ → Testes de integração
46
+ └── fixtures/ → Dados de teste
47
+ \`\`\``;
48
+ }
49
+
50
+ // TypeScript Clean Architecture
51
+ return `
52
+ \`\`\`
53
+ src/
54
+ ├── domain/ → Regras de negócio puras
55
+ │ ├── entities/ → Entidades com identidade
56
+ │ ├── value-objects/ → Objetos de valor
57
+ │ ├── services/ → Serviços de domínio
58
+ │ └── events/ → Eventos de domínio
59
+ ├── application/ → Casos de uso
60
+ │ ├── use-cases/ → Casos de uso
61
+ │ └── ports/ → Interfaces (contratos)
62
+ ├── infrastructure/ → Implementações externas
63
+ │ ├── repositories/ → Repositórios concretos
64
+ │ ├── adapters/ → Adaptadores externos
65
+ │ └── config/ → Configuração
66
+ ├── presentation/ → Interface com o mundo
67
+ │ ├── controllers/ → Endpoints da API
68
+ │ ├── dto/ → Data Transfer Objects
69
+ │ └── middleware/ → Middleware
70
+ └── tests/
71
+ \`\`\``;
72
+ }
73
+
74
+ // FastAPI (non-clean-arch)
75
+ if (fw === 'FastAPI') {
76
+ return `
77
+ \`\`\`
78
+ app/
79
+ ├── main.py → Entrypoint (FastAPI app)
80
+ ├── api/
81
+ │ ├── routes/ → APIRouter por recurso
82
+ │ │ ├── __init__.py
83
+ │ │ ├── users.py → @router.get("/users")
84
+ │ │ └── items.py → @router.get("/items")
85
+ │ └── dependencies.py → Depends() compartilhados
86
+ ├── core/
87
+ │ ├── config.py → Settings (pydantic BaseSettings)
88
+ │ └── security.py → JWT, OAuth2
89
+ ├── models/ → SQLAlchemy / Pydantic models
90
+ ├── schemas/ → Pydantic schemas (request/response)
91
+ ├── services/ → Lógica de negócio
92
+ ├── db/ → Database session, migrations
93
+ └── tests/
94
+ ├── conftest.py → Fixtures (TestClient, db session)
95
+ ├── test_users.py
96
+ └── test_items.py
97
+ \`\`\``;
98
+ }
99
+
100
+ // Django
101
+ if (fw === 'Django' || fw === 'DRF') {
102
+ return `
103
+ \`\`\`
104
+ project/
105
+ ├── manage.py
106
+ ├── config/ → Settings, URLs, WSGI
107
+ │ ├── settings/
108
+ │ │ ├── base.py
109
+ │ │ ├── local.py
110
+ │ │ └── production.py
111
+ │ └── urls.py → Root URL config
112
+ ├── apps/
113
+ │ └── [app_name]/ → Django app
114
+ │ ├── models.py → Django ORM models
115
+ │ ├── views.py → ViewSets / APIViews
116
+ │ ├── serializers.py → DRF serializers
117
+ │ ├── urls.py → App URLs
118
+ │ ├── admin.py → Django admin
119
+ │ ├── forms.py → Forms
120
+ │ ├── signals.py → Django signals
121
+ │ └── tests/
122
+ │ ├── test_models.py
123
+ │ └── test_views.py
124
+ └── requirements/
125
+ \`\`\``;
126
+ }
127
+
128
+ // Flask
129
+ if (fw === 'Flask') {
130
+ return `
131
+ \`\`\`
132
+ app/
133
+ ├── __init__.py → create_app() factory
134
+ ├── blueprints/ → Flask Blueprints
135
+ │ ├── auth/
136
+ │ │ ├── __init__.py → Blueprint registration
137
+ │ │ ├── routes.py → @bp.route()
138
+ │ │ └── models.py
139
+ │ └── api/
140
+ ├── models/ → SQLAlchemy models
141
+ ├── services/ → Lógica de negócio
142
+ ├── extensions.py → db, migrate, login_manager
143
+ ├── config.py → Configuração
144
+ └── tests/
145
+ \`\`\``;
146
+ }
147
+
148
+ // NestJS
149
+ if (fw === 'NestJS') {
150
+ return `
151
+ \`\`\`
152
+ src/
153
+ ├── main.ts → Bootstrap (NestFactory)
154
+ ├── app.module.ts → Root module
155
+ ├── modules/
156
+ │ └── [module-name]/
157
+ │ ├── [name].module.ts → @Module()
158
+ │ ├── [name].controller.ts → @Controller() endpoints
159
+ │ ├── [name].service.ts → @Injectable() lógica
160
+ │ ├── dto/
161
+ │ │ ├── create-[name].dto.ts → class-validator DTOs
162
+ │ │ └── update-[name].dto.ts
163
+ │ ├── entities/
164
+ │ │ └── [name].entity.ts → TypeORM/Prisma entity
165
+ │ └── __tests__/
166
+ │ ├── [name].service.spec.ts
167
+ │ └── [name].controller.spec.ts
168
+ ├── common/ → Guards, pipes, interceptors
169
+ └── config/ → ConfigModule
170
+ \`\`\``;
171
+ }
172
+
173
+ // Express
174
+ if (fw === 'Express' || fw === 'Fastify') {
175
+ return `
176
+ \`\`\`
177
+ src/
178
+ ├── index.ts → Entrypoint
179
+ ├── routes/ → Route handlers
180
+ │ ├── users.router.ts
181
+ │ └── items.router.ts
182
+ ├── controllers/ → Request handlers
183
+ ├── services/ → Business logic
184
+ ├── models/ → Data models
185
+ ├── middleware/ → Auth, validation, error handler
186
+ ├── config/ → Environment config
187
+ └── tests/
188
+ \`\`\``;
189
+ }
190
+
191
+ // Spring Boot
192
+ if (fw === 'Spring Boot') {
193
+ return `
194
+ \`\`\`
195
+ src/main/java/com/company/project/
196
+ ├── Application.java → @SpringBootApplication
197
+ ├── controller/ → @RestController
198
+ │ └── UserController.java
199
+ ├── service/ → @Service
200
+ │ └── UserService.java
201
+ ├── repository/ → @Repository (Spring Data JPA)
202
+ │ └── UserRepository.java
203
+ ├── model/ → @Entity
204
+ │ └── User.java
205
+ ├── dto/ → Request/Response DTOs
206
+ ├── config/ → @Configuration
207
+ ├── exception/ → @ControllerAdvice
208
+ └── security/ → Spring Security config
209
+ \`\`\``;
210
+ }
211
+
212
+ // Laravel
213
+ if (fw === 'Laravel') {
214
+ return `
215
+ \`\`\`
216
+ app/
217
+ ├── Http/
218
+ │ ├── Controllers/ → Controllers
219
+ │ ├── Middleware/ → Middleware
220
+ │ └── Requests/ → Form Requests (validation)
221
+ ├── Models/ → Eloquent Models
222
+ ├── Services/ → Business Logic
223
+ ├── Repositories/ → Data Access
224
+ ├── Providers/ → Service Providers
225
+ ├── Events/ → Event classes
226
+ ├── Listeners/ → Event listeners
227
+ ├── Policies/ → Authorization policies
228
+ database/
229
+ ├── migrations/ → Database migrations
230
+ ├── seeders/ → Database seeders
231
+ └── factories/ → Model factories
232
+ \`\`\``;
233
+ }
234
+
235
+ // Go
236
+ if (fw === 'Gin' || fw === 'Echo' || fw === 'Fiber' || fw === 'Chi') {
237
+ return `
238
+ \`\`\`
239
+ .
240
+ ├── cmd/
241
+ │ └── server/
242
+ │ └── main.go → Entrypoint
243
+ ├── internal/
244
+ │ ├── handler/ → HTTP handlers
245
+ │ ├── service/ → Business logic
246
+ │ ├── repository/ → Data access
247
+ │ ├── model/ → Domain models
248
+ │ ├── middleware/ → HTTP middleware
249
+ │ └── config/ → Configuration
250
+ ├── pkg/ → Public packages
251
+ ├── go.mod
252
+ └── go.sum
253
+ \`\`\``;
254
+ }
255
+
256
+ // Ruby on Rails
257
+ if (fw === 'Ruby on Rails') {
258
+ return `
259
+ \`\`\`
260
+ app/
261
+ ├── controllers/ → ActionController
262
+ ├── models/ → ActiveRecord models
263
+ ├── views/ → ERB/HAML templates
264
+ ├── services/ → Service objects
265
+ ├── jobs/ → ActiveJob
266
+ ├── mailers/ → ActionMailer
267
+ ├── serializers/ → JSON serializers
268
+ config/
269
+ ├── routes.rb → Route definitions
270
+ ├── database.yml → Database config
271
+ db/
272
+ ├── migrate/ → Migrations
273
+ ├── seeds.rb → Seed data
274
+ spec/ (ou test/)
275
+ \`\`\``;
276
+ }
277
+
278
+ // Generic fallback
279
+ const ext = lang === 'Python' ? 'py' : lang === 'Go' ? 'go' : lang === 'PHP' ? 'php' : lang === 'Ruby' ? 'rb' : 'ts';
280
+ return `
281
+ \`\`\`
282
+ src/
283
+ ├── controllers/ → Endpoints / HTTP handlers
284
+ ├── services/ → Lógica de negócio
285
+ ├── models/ → Modelos de dados
286
+ ├── repositories/ → Acesso a dados
287
+ ├── dto/ → Data Transfer Objects
288
+ ├── middleware/ → Middleware
289
+ ├── config/ → Configuração
290
+ └── tests/ → Testes (.${ext})
291
+ \`\`\``;
292
+ }
293
+