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