@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,705 @@
|
|
|
1
|
+
import { TemplateContext } from '@girardelli/architect-agents/src/core/agent-generator/types/template.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Stack-specific rule generators.
|
|
5
|
+
* Each generates a 03-[framework].md rule file tailored to the detected stack.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export function generateStackRules(ctx: TemplateContext): string | null {
|
|
9
|
+
const { stack } = ctx;
|
|
10
|
+
|
|
11
|
+
if (stack.frameworks.includes('NestJS')) return generateNestJSRules(ctx);
|
|
12
|
+
if (stack.frameworks.includes('Angular')) return generateAngularRules(ctx);
|
|
13
|
+
if (stack.frameworks.includes('Next.js')) return generateNextJSRules(ctx);
|
|
14
|
+
if (stack.frameworks.includes('Django') || stack.frameworks.includes('FastAPI')) return generatePythonWebRules(ctx);
|
|
15
|
+
if (stack.frameworks.includes('Flutter')) return generateFlutterRules(ctx);
|
|
16
|
+
if (stack.frameworks.includes('Spring')) return generateSpringRules(ctx);
|
|
17
|
+
if (stack.frameworks.includes('Express') || stack.frameworks.includes('Fastify')) return generateNodeAPIRules(ctx);
|
|
18
|
+
|
|
19
|
+
return null; // No framework-specific rules needed
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function getStackRuleFileName(ctx: TemplateContext): string | null {
|
|
23
|
+
const { stack } = ctx;
|
|
24
|
+
if (stack.frameworks.includes('NestJS')) return '03-nestjs';
|
|
25
|
+
if (stack.frameworks.includes('Angular')) return '03-angular';
|
|
26
|
+
if (stack.frameworks.includes('Next.js')) return '03-nextjs';
|
|
27
|
+
if (stack.frameworks.includes('Django')) return '03-django';
|
|
28
|
+
if (stack.frameworks.includes('FastAPI')) return '03-fastapi';
|
|
29
|
+
if (stack.frameworks.includes('Flutter')) return '03-flutter';
|
|
30
|
+
if (stack.frameworks.includes('Spring')) return '03-spring';
|
|
31
|
+
if (stack.frameworks.includes('Express')) return '03-express';
|
|
32
|
+
if (stack.frameworks.includes('Fastify')) return '03-fastify';
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
37
|
+
// NestJS
|
|
38
|
+
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
39
|
+
|
|
40
|
+
function generateNestJSRules(ctx: TemplateContext): string {
|
|
41
|
+
const { projectName, config } = ctx;
|
|
42
|
+
|
|
43
|
+
return `---
|
|
44
|
+
antigravity:
|
|
45
|
+
trigger: 'always_on'
|
|
46
|
+
globs: ['**/*.ts']
|
|
47
|
+
description: 'Regras NestJS para ${projectName}'
|
|
48
|
+
priority: HIGH
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
# βοΈ Regras NestJS β ${projectName}
|
|
52
|
+
|
|
53
|
+
> **PadrΓ΅es obrigatΓ³rios para desenvolvimento NestJS.**
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## π¦ Estrutura de MΓ³dulo
|
|
58
|
+
|
|
59
|
+
\`\`\`
|
|
60
|
+
Cada feature = 1 mΓ³dulo NestJS
|
|
61
|
+
|
|
62
|
+
src/modules/[feature]/
|
|
63
|
+
βββ [feature].module.ts β @Module({ imports, providers, exports })
|
|
64
|
+
βββ [feature].controller.ts β @Controller() β HTTP endpoints
|
|
65
|
+
βββ [feature].controller.spec.ts β Testes do controller
|
|
66
|
+
βββ [feature].service.ts β @Injectable() β LΓ³gica de negΓ³cio
|
|
67
|
+
βββ [feature].service.spec.ts β Testes do service
|
|
68
|
+
βββ dto/
|
|
69
|
+
β βββ create-[feature].dto.ts β class-validator + class-transformer
|
|
70
|
+
β βββ update-[feature].dto.ts β Partial<CreateDto>
|
|
71
|
+
β βββ [feature]-response.dto.ts β Response shape (NUNCA entity direta)
|
|
72
|
+
βββ entities/
|
|
73
|
+
β βββ [feature].entity.ts β @Entity() TypeORM / Prisma model
|
|
74
|
+
βββ guards/ β Guards especΓficos
|
|
75
|
+
βββ pipes/ β Pipes customizados
|
|
76
|
+
βββ interfaces/ β Interfaces do mΓ³dulo
|
|
77
|
+
\`\`\`
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## π― Decorators β Uso Correto
|
|
82
|
+
|
|
83
|
+
\`\`\`
|
|
84
|
+
@Controller() β Routing APENAS. Sem lΓ³gica de negΓ³cio.
|
|
85
|
+
@Injectable() β Services, Repositories. InjetΓ‘veis.
|
|
86
|
+
@Module() β Agrupa components. Declara imports/exports.
|
|
87
|
+
@Entity() β Modelo de banco. NUNCA expor na API.
|
|
88
|
+
|
|
89
|
+
Guards:
|
|
90
|
+
@UseGuards(AuthGuard) β AutenticaΓ§Γ£o
|
|
91
|
+
@UseGuards(RolesGuard) β AutorizaΓ§Γ£o
|
|
92
|
+
@Roles('admin', 'user') β Roles necessΓ‘rias
|
|
93
|
+
|
|
94
|
+
Pipes:
|
|
95
|
+
@UsePipes(ValidationPipe) β ValidaΓ§Γ£o de DTO
|
|
96
|
+
{ whitelist: true, forbidNonWhitelisted: true, transform: true }
|
|
97
|
+
|
|
98
|
+
Interceptors:
|
|
99
|
+
@UseInterceptors(LoggingInterceptor) β Logging
|
|
100
|
+
@UseInterceptors(TransformInterceptor) β Response shape
|
|
101
|
+
\`\`\`
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## π« Anti-Patterns NestJS
|
|
106
|
+
|
|
107
|
+
\`\`\`
|
|
108
|
+
β PROIBIDO: LΓ³gica de negΓ³cio no controller
|
|
109
|
+
β Mover para service
|
|
110
|
+
|
|
111
|
+
β PROIBIDO: Entity como response de API
|
|
112
|
+
β Criar DTO de response
|
|
113
|
+
|
|
114
|
+
β PROIBIDO: @Body() sem DTO validado
|
|
115
|
+
β Criar DTO com class-validator
|
|
116
|
+
|
|
117
|
+
β PROIBIDO: Service importando Request/Response
|
|
118
|
+
β Service recebe dados puros, controller adapta
|
|
119
|
+
|
|
120
|
+
β PROIBIDO: Circular module imports
|
|
121
|
+
β Usar forwardRef() ou extrair shared module
|
|
122
|
+
|
|
123
|
+
β PROIBIDO: Repository no controller
|
|
124
|
+
β Controller β Service β Repository
|
|
125
|
+
|
|
126
|
+
β PROIBIDO: try/catch genΓ©rico no controller
|
|
127
|
+
β Usar exception filters
|
|
128
|
+
|
|
129
|
+
β PROIBIDO: console.log
|
|
130
|
+
β Usar @nestjs/common Logger ou winston
|
|
131
|
+
\`\`\`
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## β
Patterns NestJS ObrigatΓ³rios
|
|
136
|
+
|
|
137
|
+
\`\`\`
|
|
138
|
+
β
Global validation pipe no bootstrap
|
|
139
|
+
β
Global exception filter (HttpExceptionFilter)
|
|
140
|
+
β
DTOs com class-validator para TODOS os endpoints
|
|
141
|
+
β
Config via @nestjs/config + .env
|
|
142
|
+
β
Database via TypeORM/Prisma com migrations
|
|
143
|
+
β
Auth via Passport + JWT strategy
|
|
144
|
+
β
Swagger via @nestjs/swagger + ApiProperty()
|
|
145
|
+
β
Health check endpoint (/health)
|
|
146
|
+
β
Cobertura β₯ ${config.coverageMinimum}%
|
|
147
|
+
\`\`\`
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## π Checklist por Endpoint
|
|
152
|
+
|
|
153
|
+
\`\`\`
|
|
154
|
+
β‘ DTO de request com validaΓ§Γ£o
|
|
155
|
+
β‘ DTO de response (nΓ£o entity)
|
|
156
|
+
β‘ Guard de auth aplicado
|
|
157
|
+
β‘ Swagger decorators (@ApiTags, @ApiOperation, @ApiResponse)
|
|
158
|
+
β‘ Error handling (HttpException com status correto)
|
|
159
|
+
β‘ Teste unitΓ‘rio do service method
|
|
160
|
+
β‘ Teste de integraΓ§Γ£o do endpoint
|
|
161
|
+
β‘ Logging estruturado
|
|
162
|
+
\`\`\`
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
**Gerado por Architect v8.1**
|
|
167
|
+
`;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
171
|
+
// Angular
|
|
172
|
+
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
173
|
+
|
|
174
|
+
function generateAngularRules(ctx: TemplateContext): string {
|
|
175
|
+
const { projectName, config } = ctx;
|
|
176
|
+
|
|
177
|
+
return `---
|
|
178
|
+
antigravity:
|
|
179
|
+
trigger: 'always_on'
|
|
180
|
+
globs: ['**/*.ts', '**/*.html', '**/*.scss']
|
|
181
|
+
description: 'Regras Angular para ${projectName}'
|
|
182
|
+
priority: HIGH
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
# π
°οΈ Regras Angular β ${projectName}
|
|
186
|
+
|
|
187
|
+
> **PadrΓ΅es obrigatΓ³rios para desenvolvimento Angular.**
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## π¦ Estrutura de Module
|
|
192
|
+
|
|
193
|
+
\`\`\`
|
|
194
|
+
src/app/modules/[feature]/
|
|
195
|
+
βββ [feature].module.ts
|
|
196
|
+
βββ [feature]-routing.module.ts
|
|
197
|
+
βββ components/
|
|
198
|
+
β βββ [feature]-list/
|
|
199
|
+
β β βββ [feature]-list.component.ts
|
|
200
|
+
β β βββ [feature]-list.component.html
|
|
201
|
+
β β βββ [feature]-list.component.scss
|
|
202
|
+
β β βββ [feature]-list.component.spec.ts
|
|
203
|
+
β βββ [feature]-form/
|
|
204
|
+
β βββ ...
|
|
205
|
+
βββ services/
|
|
206
|
+
β βββ [feature].service.ts
|
|
207
|
+
β βββ [feature].service.spec.ts
|
|
208
|
+
βββ models/
|
|
209
|
+
β βββ [feature].model.ts
|
|
210
|
+
βββ guards/
|
|
211
|
+
βββ pipes/
|
|
212
|
+
\`\`\`
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## π― Component Rules
|
|
217
|
+
|
|
218
|
+
\`\`\`
|
|
219
|
+
β‘ Smart vs Dumb components (Container vs Presentational)
|
|
220
|
+
β‘ OnPush change detection por padrΓ£o
|
|
221
|
+
β‘ Unsubscribe de Observables (takeUntilDestroyed ou async pipe)
|
|
222
|
+
β‘ TODOS os estados: loading, error, empty, data
|
|
223
|
+
β‘ Lazy loading para feature modules
|
|
224
|
+
β‘ trackBy em *ngFor
|
|
225
|
+
β‘ Sem lΓ³gica de negΓ³cio no template
|
|
226
|
+
β‘ Sem lΓ³gica de negΓ³cio no component β usar services
|
|
227
|
+
\`\`\`
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## π« Anti-Patterns Angular
|
|
232
|
+
|
|
233
|
+
\`\`\`
|
|
234
|
+
β Component com > 200 linhas de lΓ³gica β Extrair para service
|
|
235
|
+
β Subscribe manual sem unsubscribe β Memory leak
|
|
236
|
+
β Chamadas HTTP no component β Usar service
|
|
237
|
+
β any em templates β Tipar corretamente
|
|
238
|
+
β Shared module gigante β Dividir por domΓnio
|
|
239
|
+
\`\`\`
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## β
Checklist por Component
|
|
244
|
+
|
|
245
|
+
\`\`\`
|
|
246
|
+
β‘ OnPush change detection
|
|
247
|
+
β‘ Loading/error/empty states
|
|
248
|
+
β‘ Responsive (mobile + desktop)
|
|
249
|
+
β‘ Acessibilidade (labels, aria)
|
|
250
|
+
β‘ Lazy loaded (se feature module)
|
|
251
|
+
β‘ Teste unitΓ‘rio
|
|
252
|
+
β‘ Cobertura β₯ ${config.coverageMinimum}%
|
|
253
|
+
\`\`\`
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
**Gerado por Architect v8.1**
|
|
258
|
+
`;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
262
|
+
// Next.js
|
|
263
|
+
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
264
|
+
|
|
265
|
+
function generateNextJSRules(ctx: TemplateContext): string {
|
|
266
|
+
const { projectName, config } = ctx;
|
|
267
|
+
|
|
268
|
+
return `---
|
|
269
|
+
antigravity:
|
|
270
|
+
trigger: 'always_on'
|
|
271
|
+
globs: ['**/*.{ts,tsx,js,jsx}']
|
|
272
|
+
description: 'Regras Next.js para ${projectName}'
|
|
273
|
+
priority: HIGH
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
# β² Regras Next.js β ${projectName}
|
|
277
|
+
|
|
278
|
+
> **PadrΓ΅es obrigatΓ³rios para desenvolvimento Next.js.**
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## π¦ Estrutura
|
|
283
|
+
|
|
284
|
+
\`\`\`
|
|
285
|
+
src/
|
|
286
|
+
βββ app/ β App Router (pages, layouts, loading, error)
|
|
287
|
+
β βββ layout.tsx β Root layout
|
|
288
|
+
β βββ page.tsx β Home
|
|
289
|
+
β βββ [feature]/
|
|
290
|
+
β β βββ page.tsx β Feature page (Server Component por padrΓ£o)
|
|
291
|
+
β β βββ loading.tsx β Loading UI
|
|
292
|
+
β β βββ error.tsx β Error boundary
|
|
293
|
+
β β βββ layout.tsx β Feature layout
|
|
294
|
+
βββ components/ β Shared components
|
|
295
|
+
β βββ ui/ β Design system atoms
|
|
296
|
+
β βββ [feature]/ β Feature-specific components
|
|
297
|
+
βββ lib/ β Utilities, API clients
|
|
298
|
+
βββ services/ β Business logic, data fetching
|
|
299
|
+
βββ types/ β TypeScript types
|
|
300
|
+
βββ hooks/ β Custom React hooks
|
|
301
|
+
\`\`\`
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## π― Server vs Client Components
|
|
306
|
+
|
|
307
|
+
\`\`\`
|
|
308
|
+
Server Components (padrΓ£o):
|
|
309
|
+
β
Data fetching
|
|
310
|
+
β
Acesso a backend resources
|
|
311
|
+
β
Sensitive data (tokens, keys)
|
|
312
|
+
β
Large dependencies server-side
|
|
313
|
+
|
|
314
|
+
Client Components ('use client'):
|
|
315
|
+
β
Interatividade (onClick, onChange)
|
|
316
|
+
β
Hooks (useState, useEffect)
|
|
317
|
+
β
Browser APIs
|
|
318
|
+
β
Event listeners
|
|
319
|
+
|
|
320
|
+
REGRA: Manter Client Components o menor possΓvel.
|
|
321
|
+
Push 'use client' para baixo na Γ‘rvore.
|
|
322
|
+
\`\`\`
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## π« Anti-Patterns Next.js
|
|
327
|
+
|
|
328
|
+
\`\`\`
|
|
329
|
+
β 'use client' no layout.tsx β Quebra streaming SSR
|
|
330
|
+
β fetch sem cache strategy β Definir revalidate
|
|
331
|
+
β useEffect para data fetching β Server Component
|
|
332
|
+
β API route sem validaΓ§Γ£o β Zod schema
|
|
333
|
+
β Client component gigante β Extrair server parts
|
|
334
|
+
\`\`\`
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## β
Checklist por Page
|
|
339
|
+
|
|
340
|
+
\`\`\`
|
|
341
|
+
β‘ loading.tsx para Suspense boundary
|
|
342
|
+
β‘ error.tsx para error boundary
|
|
343
|
+
β‘ Metadata (generateMetadata) para SEO
|
|
344
|
+
β‘ Server Component por padrΓ£o
|
|
345
|
+
β‘ ValidaΓ§Γ£o de params/searchParams
|
|
346
|
+
β‘ Cobertura β₯ ${config.coverageMinimum}%
|
|
347
|
+
\`\`\`
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
**Gerado por Architect v8.1**
|
|
352
|
+
`;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
356
|
+
// Python Web (Django / FastAPI)
|
|
357
|
+
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
358
|
+
|
|
359
|
+
function generatePythonWebRules(ctx: TemplateContext): string {
|
|
360
|
+
const { projectName, stack, config } = ctx;
|
|
361
|
+
const fw = stack.frameworks.includes('Django') ? 'Django' : 'FastAPI';
|
|
362
|
+
|
|
363
|
+
return `---
|
|
364
|
+
antigravity:
|
|
365
|
+
trigger: 'always_on'
|
|
366
|
+
globs: ['**/*.py']
|
|
367
|
+
description: 'Regras ${fw} para ${projectName}'
|
|
368
|
+
priority: HIGH
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
# π Regras ${fw} β ${projectName}
|
|
372
|
+
|
|
373
|
+
> **PadrΓ΅es obrigatΓ³rios para desenvolvimento ${fw}.**
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
## π¦ Estrutura
|
|
378
|
+
|
|
379
|
+
${fw === 'Django' ? `\`\`\`
|
|
380
|
+
apps/[feature]/
|
|
381
|
+
βββ __init__.py
|
|
382
|
+
βββ admin.py β Admin customizado
|
|
383
|
+
βββ apps.py β App config
|
|
384
|
+
βββ models.py β Models (ORM)
|
|
385
|
+
βββ managers.py β Custom QuerySet/Manager
|
|
386
|
+
βββ serializers.py β DRF Serializers
|
|
387
|
+
βββ views.py β ViewSets / APIViews
|
|
388
|
+
βββ urls.py β URL patterns
|
|
389
|
+
βββ permissions.py β Custom permissions
|
|
390
|
+
βββ filters.py β django-filter sets
|
|
391
|
+
βββ signals.py β Signal handlers
|
|
392
|
+
βββ services.py β Business logic (NΓO no view)
|
|
393
|
+
βββ tasks.py β Celery tasks
|
|
394
|
+
βββ tests/
|
|
395
|
+
β βββ test_models.py
|
|
396
|
+
β βββ test_views.py
|
|
397
|
+
β βββ test_services.py
|
|
398
|
+
βββ migrations/
|
|
399
|
+
\`\`\`` : `\`\`\`
|
|
400
|
+
app/
|
|
401
|
+
βββ main.py β FastAPI app, middleware
|
|
402
|
+
βββ core/
|
|
403
|
+
β βββ config.py β Pydantic Settings
|
|
404
|
+
β βββ security.py β JWT, hashing
|
|
405
|
+
β βββ deps.py β Dependency injection
|
|
406
|
+
βββ modules/[feature]/
|
|
407
|
+
β βββ __init__.py
|
|
408
|
+
β βββ router.py β APIRouter endpoints
|
|
409
|
+
β βββ schemas.py β Pydantic models (request/response)
|
|
410
|
+
β βββ models.py β SQLAlchemy models
|
|
411
|
+
β βββ service.py β Business logic
|
|
412
|
+
β βββ repository.py β Data access
|
|
413
|
+
β βββ tests/
|
|
414
|
+
β βββ test_router.py
|
|
415
|
+
β βββ test_service.py
|
|
416
|
+
βββ alembic/ β Migrations
|
|
417
|
+
\`\`\``}
|
|
418
|
+
|
|
419
|
+
---
|
|
420
|
+
|
|
421
|
+
## π« Anti-Patterns ${fw}
|
|
422
|
+
|
|
423
|
+
\`\`\`
|
|
424
|
+
${fw === 'Django' ? `β Fat views (lΓ³gica de negΓ³cio no view) β Usar services.py
|
|
425
|
+
β N+1 queries β select_related / prefetch_related
|
|
426
|
+
β Raw SQL sem necessidade β QuerySet API
|
|
427
|
+
β Model sem __str__ β Sempre implementar
|
|
428
|
+
β Migrations manuais β Sempre via makemigrations
|
|
429
|
+
β Signal abuse β Preferir chamada explΓcita em service` : `β LΓ³gica no router (endpoint) β Usar service layer
|
|
430
|
+
β SQLAlchemy session no router β Dependency injection
|
|
431
|
+
β Schemas sem validaΓ§Γ£o β Pydantic validators
|
|
432
|
+
β sync blocking em async β Usar run_in_executor
|
|
433
|
+
β Sem type hints β FastAPI depende de tipos`}
|
|
434
|
+
\`\`\`
|
|
435
|
+
|
|
436
|
+
---
|
|
437
|
+
|
|
438
|
+
## β
Checklist
|
|
439
|
+
|
|
440
|
+
\`\`\`
|
|
441
|
+
β‘ LΓ³gica de negΓ³cio em services (nΓ£o views/routers)
|
|
442
|
+
β‘ Schemas/Serializers para TODOS os endpoints
|
|
443
|
+
β‘ Migrations reversΓveis
|
|
444
|
+
β‘ Testes para models, services, views
|
|
445
|
+
β‘ Type hints em todo cΓ³digo
|
|
446
|
+
β‘ Cobertura β₯ ${config.coverageMinimum}%
|
|
447
|
+
\`\`\`
|
|
448
|
+
|
|
449
|
+
---
|
|
450
|
+
|
|
451
|
+
**Gerado por Architect v8.1**
|
|
452
|
+
`;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
456
|
+
// Flutter
|
|
457
|
+
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
458
|
+
|
|
459
|
+
function generateFlutterRules(ctx: TemplateContext): string {
|
|
460
|
+
const { projectName, config } = ctx;
|
|
461
|
+
|
|
462
|
+
return `---
|
|
463
|
+
antigravity:
|
|
464
|
+
trigger: 'always_on'
|
|
465
|
+
globs: ['**/*.dart']
|
|
466
|
+
description: 'Regras Flutter para ${projectName}'
|
|
467
|
+
priority: HIGH
|
|
468
|
+
---
|
|
469
|
+
|
|
470
|
+
# π± Regras Flutter β ${projectName}
|
|
471
|
+
|
|
472
|
+
> **PadrΓ΅es obrigatΓ³rios para desenvolvimento Flutter.**
|
|
473
|
+
|
|
474
|
+
---
|
|
475
|
+
|
|
476
|
+
## π¦ Estrutura
|
|
477
|
+
|
|
478
|
+
\`\`\`
|
|
479
|
+
lib/
|
|
480
|
+
βββ main.dart β Entry point
|
|
481
|
+
βββ app.dart β MaterialApp / Router
|
|
482
|
+
βββ core/
|
|
483
|
+
β βββ di/ β Dependency injection (get_it/riverpod)
|
|
484
|
+
β βββ theme/ β AppTheme, colors, typography
|
|
485
|
+
β βββ network/ β Dio/HTTP client config
|
|
486
|
+
β βββ storage/ β SharedPreferences, secure storage
|
|
487
|
+
β βββ utils/ β Extensions, formatters
|
|
488
|
+
βββ features/[feature]/
|
|
489
|
+
β βββ data/
|
|
490
|
+
β β βββ models/ β JSON models (fromJson/toJson)
|
|
491
|
+
β β βββ repositories/ β Repository implementation
|
|
492
|
+
β β βββ datasources/ β API calls, local DB
|
|
493
|
+
β βββ domain/
|
|
494
|
+
β β βββ entities/ β Business entities
|
|
495
|
+
β β βββ repositories/ β Repository interfaces (abstract)
|
|
496
|
+
β β βββ usecases/ β Business logic units
|
|
497
|
+
β βββ presentation/
|
|
498
|
+
β βββ pages/ β Screen widgets
|
|
499
|
+
β βββ widgets/ β Feature-specific widgets
|
|
500
|
+
β βββ bloc/ (ou cubit/) β State management
|
|
501
|
+
β βββ providers/ β Riverpod providers (se usado)
|
|
502
|
+
βββ shared/
|
|
503
|
+
βββ widgets/ β Reusable widgets
|
|
504
|
+
βββ models/ β Shared models
|
|
505
|
+
\`\`\`
|
|
506
|
+
|
|
507
|
+
---
|
|
508
|
+
|
|
509
|
+
## π― State Management
|
|
510
|
+
|
|
511
|
+
\`\`\`
|
|
512
|
+
PadrΓ£o: BLoC/Cubit ou Riverpod (escolher UM)
|
|
513
|
+
|
|
514
|
+
BLoC:
|
|
515
|
+
Event β BLoC β State β UI
|
|
516
|
+
β‘ Events sΓ£o imutΓ‘veis
|
|
517
|
+
β‘ States sΓ£o imutΓ‘veis
|
|
518
|
+
β‘ BLoC nΓ£o importa Flutter (puro Dart)
|
|
519
|
+
β‘ Um BLoC por feature (nΓ£o God BLoC)
|
|
520
|
+
|
|
521
|
+
NUNCA:
|
|
522
|
+
β setState para lΓ³gica complexa
|
|
523
|
+
β State management misturado (BLoC + Provider + setState)
|
|
524
|
+
β BLoC acessando BuildContext
|
|
525
|
+
\`\`\`
|
|
526
|
+
|
|
527
|
+
---
|
|
528
|
+
|
|
529
|
+
## π« Anti-Patterns Flutter
|
|
530
|
+
|
|
531
|
+
\`\`\`
|
|
532
|
+
β Column com muitos children para listas β ListView.builder
|
|
533
|
+
β Widget gigante (> 200 linhas) β Extrair sub-widgets
|
|
534
|
+
β Build method com lΓ³gica β Mover para BLoC/Cubit
|
|
535
|
+
β Sem const constructors β Sempre usar const
|
|
536
|
+
β FutureBuilder direto para API calls β BLoC/Cubit
|
|
537
|
+
β Hardcoded strings β Usar l10n/intl
|
|
538
|
+
β Hardcoded colors β Usar Theme.of(context)
|
|
539
|
+
\`\`\`
|
|
540
|
+
|
|
541
|
+
---
|
|
542
|
+
|
|
543
|
+
## β
Checklist por Screen
|
|
544
|
+
|
|
545
|
+
\`\`\`
|
|
546
|
+
β‘ TODOS os estados: loading, error, empty, data
|
|
547
|
+
β‘ Pull-to-refresh (se lista)
|
|
548
|
+
β‘ Skeleton/shimmer para loading
|
|
549
|
+
β‘ Error retry button
|
|
550
|
+
β‘ Responsive (tablet support se necessΓ‘rio)
|
|
551
|
+
β‘ Keyboard handling (dismiss, next field)
|
|
552
|
+
β‘ Teste de widget
|
|
553
|
+
β‘ Cobertura β₯ ${config.coverageMinimum}%
|
|
554
|
+
\`\`\`
|
|
555
|
+
|
|
556
|
+
---
|
|
557
|
+
|
|
558
|
+
**Gerado por Architect v8.1**
|
|
559
|
+
`;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
563
|
+
// Spring Boot
|
|
564
|
+
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
565
|
+
|
|
566
|
+
function generateSpringRules(ctx: TemplateContext): string {
|
|
567
|
+
const { projectName, config } = ctx;
|
|
568
|
+
|
|
569
|
+
return `---
|
|
570
|
+
antigravity:
|
|
571
|
+
trigger: 'always_on'
|
|
572
|
+
globs: ['**/*.java', '**/*.kt']
|
|
573
|
+
description: 'Regras Spring Boot para ${projectName}'
|
|
574
|
+
priority: HIGH
|
|
575
|
+
---
|
|
576
|
+
|
|
577
|
+
# π Regras Spring Boot β ${projectName}
|
|
578
|
+
|
|
579
|
+
> **PadrΓ΅es obrigatΓ³rios para desenvolvimento Spring Boot.**
|
|
580
|
+
|
|
581
|
+
---
|
|
582
|
+
|
|
583
|
+
## π¦ Estrutura
|
|
584
|
+
|
|
585
|
+
\`\`\`
|
|
586
|
+
src/main/java/com/[org]/[project]/
|
|
587
|
+
βββ [Feature]Module/
|
|
588
|
+
β βββ controller/
|
|
589
|
+
β β βββ [Feature]Controller.java β @RestController
|
|
590
|
+
β βββ service/
|
|
591
|
+
β β βββ [Feature]Service.java β Interface
|
|
592
|
+
β β βββ [Feature]ServiceImpl.java β @Service
|
|
593
|
+
β βββ repository/
|
|
594
|
+
β β βββ [Feature]Repository.java β @Repository / JPA
|
|
595
|
+
β βββ dto/
|
|
596
|
+
β β βββ Create[Feature]Request.java β @Valid annotations
|
|
597
|
+
β β βββ [Feature]Response.java
|
|
598
|
+
β βββ entity/
|
|
599
|
+
β β βββ [Feature].java β @Entity JPA
|
|
600
|
+
β βββ exception/
|
|
601
|
+
β βββ [Feature]NotFoundException.java
|
|
602
|
+
\`\`\`
|
|
603
|
+
|
|
604
|
+
---
|
|
605
|
+
|
|
606
|
+
## π« Anti-Patterns Spring
|
|
607
|
+
|
|
608
|
+
\`\`\`
|
|
609
|
+
β @Autowired field injection β Constructor injection
|
|
610
|
+
β LΓ³gica no controller β Service layer
|
|
611
|
+
β Entity como response β DTO mapping
|
|
612
|
+
β catch(Exception e) genΓ©rico β Specific exceptions + @ControllerAdvice
|
|
613
|
+
β @Transactional no controller β Service layer
|
|
614
|
+
\`\`\`
|
|
615
|
+
|
|
616
|
+
---
|
|
617
|
+
|
|
618
|
+
## β
Checklist
|
|
619
|
+
|
|
620
|
+
\`\`\`
|
|
621
|
+
β‘ Constructor injection (nΓ£o field)
|
|
622
|
+
β‘ DTOs com @Valid
|
|
623
|
+
β‘ @ControllerAdvice para exception handling
|
|
624
|
+
β‘ @Transactional no service
|
|
625
|
+
β‘ Cobertura β₯ ${config.coverageMinimum}%
|
|
626
|
+
\`\`\`
|
|
627
|
+
|
|
628
|
+
---
|
|
629
|
+
|
|
630
|
+
**Gerado por Architect v8.1**
|
|
631
|
+
`;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
635
|
+
// Express / Fastify (Node.js API)
|
|
636
|
+
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
637
|
+
|
|
638
|
+
function generateNodeAPIRules(ctx: TemplateContext): string {
|
|
639
|
+
const { projectName, stack, config } = ctx;
|
|
640
|
+
const fw = stack.frameworks.includes('Fastify') ? 'Fastify' : 'Express';
|
|
641
|
+
|
|
642
|
+
return `---
|
|
643
|
+
antigravity:
|
|
644
|
+
trigger: 'always_on'
|
|
645
|
+
globs: ['**/*.{ts,js}']
|
|
646
|
+
description: 'Regras ${fw} para ${projectName}'
|
|
647
|
+
priority: HIGH
|
|
648
|
+
---
|
|
649
|
+
|
|
650
|
+
# π Regras ${fw} β ${projectName}
|
|
651
|
+
|
|
652
|
+
> **PadrΓ΅es obrigatΓ³rios para desenvolvimento ${fw}.**
|
|
653
|
+
|
|
654
|
+
---
|
|
655
|
+
|
|
656
|
+
## π¦ Estrutura
|
|
657
|
+
|
|
658
|
+
\`\`\`
|
|
659
|
+
src/
|
|
660
|
+
βββ app.${stack.languages.includes('TypeScript') ? 'ts' : 'js'} β ${fw} app setup, middleware
|
|
661
|
+
βββ server.${stack.languages.includes('TypeScript') ? 'ts' : 'js'} β Server bootstrap
|
|
662
|
+
βββ modules/[feature]/
|
|
663
|
+
β βββ [feature].routes.${stack.languages.includes('TypeScript') ? 'ts' : 'js'} β Route definitions
|
|
664
|
+
β βββ [feature].controller.${stack.languages.includes('TypeScript') ? 'ts' : 'js'} β Request handling
|
|
665
|
+
β βββ [feature].service.${stack.languages.includes('TypeScript') ? 'ts' : 'js'} β Business logic
|
|
666
|
+
β βββ [feature].schema.${stack.languages.includes('TypeScript') ? 'ts' : 'js'} β Validation (Joi/Zod)
|
|
667
|
+
β βββ [feature].model.${stack.languages.includes('TypeScript') ? 'ts' : 'js'} β DB model
|
|
668
|
+
β βββ __tests__/
|
|
669
|
+
βββ middleware/ β Auth, logging, error handler
|
|
670
|
+
βββ config/ β Environment config
|
|
671
|
+
βββ utils/ β Shared utilities
|
|
672
|
+
\`\`\`
|
|
673
|
+
|
|
674
|
+
---
|
|
675
|
+
|
|
676
|
+
## π« Anti-Patterns ${fw}
|
|
677
|
+
|
|
678
|
+
\`\`\`
|
|
679
|
+
β LΓ³gica de negΓ³cio no route handler β Usar service layer
|
|
680
|
+
β req.body sem validaΓ§Γ£o β Joi/Zod schema
|
|
681
|
+
β Callback hell β async/await
|
|
682
|
+
β Error swallowing (catch vazio) β Proper error handler middleware
|
|
683
|
+
β Secrets hardcoded β Environment variables
|
|
684
|
+
β console.log em produΓ§Γ£o β Structured logger (winston/pino)
|
|
685
|
+
\`\`\`
|
|
686
|
+
|
|
687
|
+
---
|
|
688
|
+
|
|
689
|
+
## β
Checklist
|
|
690
|
+
|
|
691
|
+
\`\`\`
|
|
692
|
+
β‘ Validation middleware em TODOS os endpoints
|
|
693
|
+
β‘ Error handling middleware global
|
|
694
|
+
β‘ Auth middleware para rotas protegidas
|
|
695
|
+
β‘ Rate limiting
|
|
696
|
+
β‘ CORS configurado
|
|
697
|
+
β‘ Helmet para security headers
|
|
698
|
+
β‘ Cobertura β₯ ${config.coverageMinimum}%
|
|
699
|
+
\`\`\`
|
|
700
|
+
|
|
701
|
+
---
|
|
702
|
+
|
|
703
|
+
**Gerado por Architect v8.1**
|
|
704
|
+
`;
|
|
705
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template Helpers v3.2 β Facade para todos os utilitΓ‘rios agnΓ³sticos e estruturais.
|
|
3
|
+
*
|
|
4
|
+
* Refatorado na Fase 2.3.4: ErradicaΓ§Γ£o final da God Class (777 β 20 linhas).
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export * from './helpers/base-helpers.js';
|
|
8
|
+
export * from './helpers/cross-ref-helpers.js';
|
|
9
|
+
export * from './helpers/summary-helpers.js';
|
|
10
|
+
export * from './helpers/stack-helpers.js';
|
|
11
|
+
export * from './helpers/structure-helpers.js';
|
|
12
|
+
export * from './helpers/security-helpers.js';
|