@girardelli/architect 2.2.0 → 4.0.0

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