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