@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,544 @@
1
+ import { TemplateContext } from '@girardelli/architect-agents/src/core/agent-generator/types/template.js';
2
+
3
+ /**
4
+ * Generates 02-security.md — OWASP rules, input validation, secrets management,
5
+ * auth/authz patterns, and security anti-patterns.
6
+ */
7
+ export function generateSecurityRules(ctx: TemplateContext): string {
8
+ // @ts-ignore - Audit cleanup unused variable
9
+ const { stack, projectName, report, config } = ctx;
10
+ const validationPatterns = buildValidationPatterns(ctx);
11
+ const authPatterns = buildAuthPatterns(ctx);
12
+ const secretsRules = buildSecretsRules(ctx);
13
+
14
+ return `---
15
+ antigravity:
16
+ trigger: 'always_on'
17
+ globs: ['**/*']
18
+ description: 'Regras de segurança para ${projectName}'
19
+ priority: CRITICAL
20
+ ---
21
+
22
+ # 🛡️ Regras de Segurança — ${projectName}
23
+
24
+ > **Segurança NÃO é feature — é requisito. Toda linha de código é superfície de ataque.**
25
+
26
+ ---
27
+
28
+ ## ⚠️ REGRA ZERO DE SEGURANÇA
29
+
30
+ \`\`\`
31
+ ╔══════════════════════════════════════════════════════════════╗
32
+ ║ NUNCA confiar em input do usuário. ║
33
+ ║ NUNCA expor detalhes internos em respostas de erro. ║
34
+ ║ NUNCA armazenar secrets em código. ║
35
+ ║ NUNCA desabilitar validação "temporariamente". ║
36
+ ║ NUNCA commitar com security warnings ignorados. ║
37
+ ╚══════════════════════════════════════════════════════════════╝
38
+ \`\`\`
39
+
40
+ ---
41
+
42
+ ## 🔐 OWASP Top 10 — Checklist Obrigatório
43
+
44
+ ### A01: Broken Access Control
45
+ \`\`\`
46
+ ❌ PROIBIDO: Endpoint sem verificação de autorização
47
+ ❌ PROIBIDO: IDOR (Insecure Direct Object Reference) — acessar recurso de outro usuário via ID
48
+ ✅ CORRETO: RBAC (Role-Based Access Control) em TODOS os endpoints
49
+ ✅ CORRETO: Verificar ownership do recurso antes de retornar
50
+
51
+ Padrão:
52
+ 1. Autenticar (quem é?)
53
+ 2. Autorizar (pode fazer isso?)
54
+ 3. Verificar ownership (esse recurso é dele?)
55
+ 4. Executar ação
56
+ \`\`\`
57
+
58
+ ### A02: Cryptographic Failures
59
+ \`\`\`
60
+ ❌ PROIBIDO: Senhas em plain text
61
+ ❌ PROIBIDO: HTTP para dados sensíveis
62
+ ❌ PROIBIDO: Algoritmos fracos (MD5, SHA1 para passwords)
63
+ ✅ CORRETO: bcrypt/argon2 para passwords (cost ≥ 12)
64
+ ✅ CORRETO: HTTPS everywhere (HSTS)
65
+ ✅ CORRETO: AES-256-GCM para dados em repouso
66
+ ✅ CORRETO: TLS 1.2+ para dados em trânsito
67
+ \`\`\`
68
+
69
+ ### A03: Injection
70
+ \`\`\`
71
+ ❌ PROIBIDO: Concatenação de strings em queries SQL
72
+ ❌ PROIBIDO: Template strings com input de usuário
73
+ ❌ PROIBIDO: eval(), exec(), Function() com input externo
74
+ ✅ CORRETO: Queries parametrizadas SEMPRE
75
+ ✅ CORRETO: ORM com bindings
76
+ ✅ CORRETO: Input sanitization na borda (controller/pipe)
77
+
78
+ Exemplos:
79
+ ❌ \`SELECT * FROM users WHERE id = '\${userId}'\`
80
+ ✅ \`SELECT * FROM users WHERE id = $1\` + [userId]
81
+ ❌ \`db.query(\`...WHERE name = '\${name}'\`)\`
82
+ ✅ \`db.query('...WHERE name = ?', [name])\`
83
+ \`\`\`
84
+
85
+ ### A04: Insecure Design
86
+ \`\`\`
87
+ ❌ PROIBIDO: Endpoints sem rate limiting
88
+ ❌ PROIBIDO: Reset de senha via link sem expiração
89
+ ❌ PROIBIDO: Lógica de negócio sem threat model
90
+ ✅ CORRETO: STRIDE analysis antes de implementar features sensíveis
91
+ ✅ CORRETO: Rate limiting em auth endpoints (≤ 5 tentativas/minuto)
92
+ ✅ CORRETO: Tokens com expiração curta (15min access, 7d refresh)
93
+ \`\`\`
94
+
95
+ ### A05: Security Misconfiguration
96
+ \`\`\`
97
+ ❌ PROIBIDO: CORS com origin: '*' em produção
98
+ ❌ PROIBIDO: Debug mode em produção
99
+ ❌ PROIBIDO: Default credentials
100
+ ❌ PROIBIDO: Stack traces em respostas de erro
101
+ ✅ CORRETO: CORS restritivo (origins explícitos)
102
+ ✅ CORRETO: Headers de segurança (X-Frame-Options, CSP, X-Content-Type-Options)
103
+ ✅ CORRETO: Error handling que retorna apenas mensagem genérica ao usuário
104
+
105
+ Headers obrigatórios:
106
+ X-Content-Type-Options: nosniff
107
+ X-Frame-Options: DENY
108
+ X-XSS-Protection: 0 (CSP substitui)
109
+ Content-Security-Policy: default-src 'self'
110
+ Strict-Transport-Security: max-age=31536000; includeSubDomains
111
+ Referrer-Policy: strict-origin-when-cross-origin
112
+ \`\`\`
113
+
114
+ ### A06: Vulnerable and Outdated Components
115
+ \`\`\`
116
+ ❌ PROIBIDO: Dependências com vulnerabilidades conhecidas
117
+ ❌ PROIBIDO: Ignorar security advisories
118
+ ✅ CORRETO: Audit regular (npm audit / pip audit / safety check)
119
+ ✅ CORRETO: Renovate/Dependabot configurado
120
+ ✅ CORRETO: Lock files commitados (package-lock.json, poetry.lock)
121
+
122
+ Comandos de verificação:
123
+ ${stack.primary === 'Python'
124
+ ? ' $ pip audit\n $ safety check\n $ bandit -r src/'
125
+ : stack.primary === 'Dart'
126
+ ? ' $ flutter pub outdated\n $ dart analyze --fatal-warnings'
127
+ : ' $ npm audit\n $ npx audit-ci --critical\n $ npx snyk test'}
128
+ \`\`\`
129
+
130
+ ### A07: Identification and Authentication Failures
131
+ \`\`\`
132
+ ❌ PROIBIDO: Sessions sem expiração
133
+ ❌ PROIBIDO: Tokens previsíveis
134
+ ❌ PROIBIDO: Brute force sem proteção
135
+ ✅ CORRETO: JWT com algoritmo explícito (RS256 ou ES256)
136
+ ✅ CORRETO: Refresh token rotation
137
+ ✅ CORRETO: Account lockout após N tentativas
138
+ ✅ CORRETO: MFA para operações sensíveis
139
+
140
+ JWT Checklist:
141
+ □ Algoritmo explícito (nunca 'none')
142
+ □ Audience (aud) verificado
143
+ □ Issuer (iss) verificado
144
+ □ Expiração (exp) curta
145
+ □ Secret key ≥ 256 bits
146
+ □ Stored em httpOnly cookie (não localStorage)
147
+ \`\`\`
148
+
149
+ ### A08: Software and Data Integrity Failures
150
+ \`\`\`
151
+ ❌ PROIBIDO: CI/CD sem verificação de integridade
152
+ ❌ PROIBIDO: Deserialização de dados não confiáveis
153
+ ✅ CORRETO: Subresource Integrity (SRI) para CDN scripts
154
+ ✅ CORRETO: Signed commits
155
+ ✅ CORRETO: Pipeline protegido (branch protection rules)
156
+ \`\`\`
157
+
158
+ ### A09: Security Logging and Monitoring Failures
159
+ \`\`\`
160
+ ❌ PROIBIDO: Ações sensíveis sem log
161
+ ❌ PROIBIDO: Logs com dados sensíveis (passwords, tokens, PII)
162
+ ✅ CORRETO: Audit log para: login, logout, password change, permission change
163
+ ✅ CORRETO: Log level adequado (WARN/ERROR para falhas de auth)
164
+ ✅ CORRETO: Alertas para atividades anômalas
165
+
166
+ O que logar:
167
+ ✅ Quem (user ID)
168
+ ✅ O quê (ação)
169
+ ✅ Quando (timestamp UTC)
170
+ ✅ Onde (IP, user-agent)
171
+ ✅ Resultado (sucesso/falha)
172
+
173
+ O que NUNCA logar:
174
+ ❌ Passwords (nem em debug)
175
+ ❌ Tokens de autenticação
176
+ ❌ Dados de cartão de crédito
177
+ ❌ PII sem necessidade
178
+ \`\`\`
179
+
180
+ ### A10: Server-Side Request Forgery (SSRF)
181
+ \`\`\`
182
+ ❌ PROIBIDO: Fetch de URL fornecida pelo usuário sem validação
183
+ ❌ PROIBIDO: Acesso a metadata endpoints (169.254.169.254)
184
+ ✅ CORRETO: Allowlist de domínios para requests externos
185
+ ✅ CORRETO: Validação de schema (https only)
186
+ ✅ CORRETO: Block de IPs internos/privados
187
+ \`\`\`
188
+
189
+ ---
190
+
191
+ ## 🔑 Validação de Input
192
+
193
+ ${validationPatterns}
194
+
195
+ ---
196
+
197
+ ## 🔒 Autenticação & Autorização
198
+
199
+ ${authPatterns}
200
+
201
+ ---
202
+
203
+ ## 🗝️ Gestão de Secrets
204
+
205
+ ${secretsRules}
206
+
207
+ ---
208
+
209
+ ## 🚨 Security Anti-Patterns Detectados
210
+
211
+ ${report.antiPatterns.filter(a =>
212
+ a.name.toLowerCase().includes('security') ||
213
+ a.name.toLowerCase().includes('secret') ||
214
+ a.name.toLowerCase().includes('hardcoded') ||
215
+ a.name.toLowerCase().includes('injection') ||
216
+ a.name.toLowerCase().includes('validation')
217
+ ).length > 0
218
+ ? report.antiPatterns
219
+ .filter(a =>
220
+ a.name.toLowerCase().includes('security') ||
221
+ a.name.toLowerCase().includes('secret') ||
222
+ a.name.toLowerCase().includes('hardcoded') ||
223
+ a.name.toLowerCase().includes('injection') ||
224
+ a.name.toLowerCase().includes('validation')
225
+ )
226
+ .map(a => `- **${a.name}** (${a.severity}) em \`${a.location}\` — ${a.suggestion}`)
227
+ .join('\\n')
228
+ : '✅ Nenhum anti-pattern de segurança detectado no scan automático.\\n> ⚠️ Isso NÃO significa que o projeto está seguro. Análise manual é necessária.'}
229
+
230
+ ---
231
+
232
+ ## ✅ Checklist de Segurança por Camada
233
+
234
+ ### Controller / API Layer
235
+ \`\`\`
236
+ □ Input validado com DTO/Schema
237
+ □ Rate limiting configurado
238
+ □ Auth guard aplicado
239
+ □ CORS configurado corretamente
240
+ □ Response não expõe dados internos
241
+ □ Error handling sem stack trace
242
+ \`\`\`
243
+
244
+ ### Service / Business Layer
245
+ \`\`\`
246
+ □ Autorização verificada (ownership)
247
+ □ Dados sensíveis criptografados
248
+ □ Lógica de negócio com audit log
249
+ □ Sem eval/exec com input externo
250
+ □ Timeout em operações externas
251
+ \`\`\`
252
+
253
+ ### Data / Repository Layer
254
+ \`\`\`
255
+ □ Queries parametrizadas (NUNCA concatenação)
256
+ □ Connection pooling com limits
257
+ □ Migrations reversíveis
258
+ □ Dados sensíveis com encryption at rest
259
+ □ Backup policy definida
260
+ \`\`\`
261
+
262
+ ### Frontend / Mobile Layer
263
+ \`\`\`
264
+ □ XSS prevenido (sanitization)
265
+ □ CSRF token em formulários
266
+ □ Tokens em httpOnly cookies (não localStorage)
267
+ □ Content Security Policy
268
+ □ Sem secrets no bundle (NUNCA)
269
+ □ Validação client-side + server-side
270
+ \`\`\`
271
+
272
+ ---
273
+
274
+ ## 🛡️ Threat Model (STRIDE)
275
+
276
+ Antes de implementar features sensíveis, usar template STRIDE:
277
+
278
+ \`\`\`
279
+ | Ameaça | Descrição | Mitigação |
280
+ |---------------------|------------------------------------|-----------|
281
+ | Spoofing | Alguém se passando por outro | Auth forte, MFA |
282
+ | Tampering | Dados alterados em trânsito | TLS, HMAC, checksums |
283
+ | Repudiation | Negar ação realizada | Audit logs |
284
+ | Info Disclosure | Vazamento de dados | Encryption, access control |
285
+ | Denial of Service | Indisponibilidade | Rate limiting, CDN, autoscaling |
286
+ | Elevation of Priv. | Escalar permissões | Least privilege, RBAC |
287
+ \`\`\`
288
+
289
+ > Template completo disponível em: \`templates/THREAT-MODEL.md\`
290
+
291
+ ---
292
+
293
+ ## 📊 Verificação Automatizada
294
+
295
+ \`\`\`bash
296
+ # Scan de vulnerabilidades em dependências
297
+ ${stack.primary === 'Python'
298
+ ? 'pip audit\nsafety check\nbandit -r src/'
299
+ : stack.primary === 'Dart'
300
+ ? 'dart analyze --fatal-warnings'
301
+ : 'npm audit\nnpx audit-ci --critical'}
302
+
303
+ # Scan de secrets no código
304
+ # (configure pre-commit hook)
305
+ git secrets --scan
306
+ gitleaks detect
307
+
308
+ # Score de arquitetura (inclui métricas de segurança)
309
+ architect score ./src
310
+ architect anti-patterns ./src
311
+ \`\`\`
312
+
313
+ ---
314
+
315
+ **Gerado por Architect v8.1 · Score: ${report.score.overall}/100**
316
+ `;
317
+ }
318
+
319
+ function buildValidationPatterns(ctx: TemplateContext): string {
320
+ const { stack } = ctx;
321
+
322
+ if (stack.frameworks.includes('NestJS')) {
323
+ return `### NestJS — class-validator + class-transformer
324
+
325
+ \`\`\`typescript
326
+ // ✅ CORRETO: DTO com validação
327
+ import { IsString, IsEmail, MinLength, MaxLength, IsOptional } from 'class-validator';
328
+
329
+ export class CreateUserDto {
330
+ @IsString()
331
+ @MinLength(2)
332
+ @MaxLength(100)
333
+ name: string;
334
+
335
+ @IsEmail()
336
+ email: string;
337
+
338
+ @IsString()
339
+ @MinLength(8)
340
+ @MaxLength(128)
341
+ password: string;
342
+ }
343
+
344
+ // Controller com ValidationPipe
345
+ @Post()
346
+ @UsePipes(new ValidationPipe({ whitelist: true, forbidNonWhitelisted: true }))
347
+ async create(@Body() dto: CreateUserDto) { ... }
348
+ \`\`\`
349
+
350
+ **Regras:**
351
+ - \`whitelist: true\` — remove campos não declarados no DTO
352
+ - \`forbidNonWhitelisted: true\` — retorna 400 se campo extra enviado
353
+ - \`transform: true\` — converte tipos automaticamente
354
+ - NUNCA usar \`@Body()\` sem DTO validado`;
355
+ }
356
+
357
+ if (stack.primary === 'Python') {
358
+ return `### Python — Pydantic / marshmallow
359
+
360
+ \`\`\`python
361
+ # ✅ CORRETO: Schema com validação
362
+ from pydantic import BaseModel, EmailStr, Field, validator
363
+
364
+ class CreateUserSchema(BaseModel):
365
+ name: str = Field(min_length=2, max_length=100)
366
+ email: EmailStr
367
+ password: str = Field(min_length=8, max_length=128)
368
+
369
+ @validator('name')
370
+ def name_must_be_alphanumeric(cls, v):
371
+ if not v.replace(' ', '').isalnum():
372
+ raise ValueError('Name must be alphanumeric')
373
+ return v.strip()
374
+ \`\`\`
375
+
376
+ **Regras:**
377
+ - Pydantic \`BaseModel\` ou marshmallow \`Schema\` para TODOS os inputs
378
+ - \`Field()\` com min/max constraints
379
+ - Custom validators para regras de negócio
380
+ - NUNCA usar \`request.json\` diretamente sem validação`;
381
+ }
382
+
383
+ // Generic
384
+ return `### Validação de Input — Padrão Geral
385
+
386
+ \`\`\`
387
+ Regras de validação:
388
+ 1. TODOS os inputs passam por schema validation
389
+ 2. Tipos verificados (string, number, email, etc.)
390
+ 3. Limites definidos (min/max length, ranges)
391
+ 4. Whitelist de campos aceitos
392
+ 5. Sanitização de caracteres especiais
393
+ 6. Encoding correto (UTF-8)
394
+
395
+ Pipeline:
396
+ Request → Schema Validation → Sanitization → Business Logic
397
+
398
+ NUNCA:
399
+ ❌ request.body direto na lógica
400
+ ❌ Confiar em validação client-side apenas
401
+ ❌ Aceitar campos não declarados
402
+ \`\`\``;
403
+ }
404
+
405
+ function buildAuthPatterns(ctx: TemplateContext): string {
406
+ const { stack } = ctx;
407
+
408
+ if (stack.frameworks.includes('NestJS')) {
409
+ return `### NestJS Auth Pattern
410
+
411
+ \`\`\`
412
+ Implementação padrão:
413
+ 1. AuthGuard global para rotas protegidas
414
+ 2. @Public() decorator para rotas abertas
415
+ 3. RolesGuard para autorização
416
+ 4. CurrentUser decorator para extrair user do token
417
+
418
+ Hierarquia:
419
+ @Public() → Sem autenticação
420
+ @UseGuards(AuthGuard) → Autenticado
421
+ @Roles('admin') → Autenticado + Role específica
422
+ @OwnerGuard() → Autenticado + Dono do recurso
423
+
424
+ Fluxo de token:
425
+ Login → Access Token (15min) + Refresh Token (7d, httpOnly cookie)
426
+ Request → AuthGuard verifica Access Token
427
+ Expired → Refresh endpoint gera novo par
428
+ Logout → Invalidar Refresh Token no banco
429
+ \`\`\``;
430
+ }
431
+
432
+ // Generic
433
+ return `### Padrão de Autenticação/Autorização
434
+
435
+ \`\`\`
436
+ Fluxo obrigatório:
437
+ 1. Autenticar: Verificar identidade (JWT/session)
438
+ 2. Autorizar: Verificar permissões (roles/policies)
439
+ 3. Ownership: Verificar se recurso pertence ao usuário
440
+ 4. Executar: Somente após passos 1-3
441
+
442
+ Token management:
443
+ - Access Token: curta duração (15min)
444
+ - Refresh Token: longa duração (7d), httpOnly, secure
445
+ - Rotation: novo refresh token a cada uso
446
+ - Blacklist: invalidar tokens no logout
447
+
448
+ RBAC mínimo:
449
+ - admin: tudo
450
+ - user: próprios recursos
451
+ - public: endpoints marcados explicitamente
452
+ \`\`\``;
453
+ }
454
+
455
+ function buildSecretsRules(ctx: TemplateContext): string {
456
+ const { stack } = ctx;
457
+
458
+ return `### Regras de Secrets
459
+
460
+ \`\`\`
461
+ ╔══════════════════════════════════════════════════════════════╗
462
+ ║ SECRETS NUNCA NO CÓDIGO. NUNCA. SEM EXCEÇÃO. ║
463
+ ╚══════════════════════════════════════════════════════════════╝
464
+
465
+ ❌ PROIBIDO:
466
+ - API keys hardcoded
467
+ - Passwords em arquivos de config
468
+ - Tokens em constantes
469
+ - Connection strings com credenciais no código
470
+ - .env commitado no repositório
471
+
472
+ ✅ CORRETO:
473
+ - Environment variables
474
+ - Secret manager (AWS SSM, Vault, GCP Secret Manager)
475
+ - .env.example com placeholders (sem valores reais)
476
+ - .gitignore com: .env, .env.local, .env.*.local
477
+ \`\`\`
478
+
479
+ ### .gitignore obrigatório
480
+
481
+ \`\`\`
482
+ # Secrets — NUNCA commitar
483
+ .env
484
+ .env.local
485
+ .env.*.local
486
+ *.pem
487
+ *.key
488
+ *.p12
489
+ credentials.json
490
+ service-account.json
491
+ \`\`\`
492
+
493
+ ### Detecção de secrets no CI
494
+
495
+ \`\`\`bash
496
+ # Pre-commit hook (recomendado)
497
+ # .pre-commit-config.yaml
498
+ repos:
499
+ - repo: https://github.com/gitleaks/gitleaks
500
+ rev: v8.18.0
501
+ hooks:
502
+ - id: gitleaks
503
+
504
+ # Ou manualmente:
505
+ gitleaks detect --source . --verbose
506
+ git secrets --scan
507
+ \`\`\`
508
+
509
+ ### Padrão de configuração
510
+
511
+ \`\`\`${stack.primary === 'Python' ? 'python' : 'typescript'}
512
+ ${stack.primary === 'Python'
513
+ ? `# ✅ CORRETO
514
+ import os
515
+ from pydantic_settings import BaseSettings
516
+
517
+ class Settings(BaseSettings):
518
+ database_url: str
519
+ jwt_secret: str
520
+ redis_url: str = "redis://localhost:6379"
521
+
522
+ class Config:
523
+ env_file = ".env"
524
+
525
+ settings = Settings() # Carrega de environment variables`
526
+ : `// ✅ CORRETO
527
+ const config = {
528
+ database: {
529
+ url: process.env.DATABASE_URL, // De environment variable
530
+ ssl: process.env.DB_SSL === 'true',
531
+ },
532
+ jwt: {
533
+ secret: process.env.JWT_SECRET, // NUNCA hardcoded
534
+ expiresIn: '15m',
535
+ },
536
+ };
537
+
538
+ // Validação no startup — falha rápido se falta secret
539
+ const required = ['DATABASE_URL', 'JWT_SECRET'];
540
+ for (const key of required) {
541
+ if (!process.env[key]) throw new Error(\\\`Missing env: \\\${key}\\\`);
542
+ }`}
543
+ \`\`\``;
544
+ }