@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,586 @@
|
|
|
1
|
+
import { EnrichedTemplateContext, TemplateContext } from '@girardelli/architect-agents/src/core/agent-generator/types/template.js';
|
|
2
|
+
import { getEnriched } from '../template-helpers.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Detecta padrões arquiteturais nos módulos do projeto
|
|
6
|
+
* e gera skills/documentação para o diretório skills/.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
interface DetectedPattern {
|
|
10
|
+
name: string;
|
|
11
|
+
description: string;
|
|
12
|
+
examples: string[];
|
|
13
|
+
howToCreate: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Analisa módulos e detecta padrões recorrentes (adapters, factories, extractors, etc.)
|
|
18
|
+
*/
|
|
19
|
+
function detectPatterns(ctx: TemplateContext | EnrichedTemplateContext): DetectedPattern[] {
|
|
20
|
+
const enriched = getEnriched(ctx);
|
|
21
|
+
const modules = enriched.modules || [];
|
|
22
|
+
const patterns: DetectedPattern[] = [];
|
|
23
|
+
|
|
24
|
+
// Collect all file/class names from modules
|
|
25
|
+
const allFiles: string[] = [];
|
|
26
|
+
const allServices: string[] = [];
|
|
27
|
+
const allControllers: string[] = [];
|
|
28
|
+
const allEntities: string[] = [];
|
|
29
|
+
|
|
30
|
+
for (const mod of modules) {
|
|
31
|
+
allServices.push(...mod.services);
|
|
32
|
+
allControllers.push(...mod.controllers);
|
|
33
|
+
allEntities.push(...mod.entities);
|
|
34
|
+
allFiles.push(...mod.testFiles);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const allNames = [...allServices, ...allControllers, ...allEntities, ...allFiles];
|
|
38
|
+
|
|
39
|
+
// Detect Adapter pattern
|
|
40
|
+
const adapters = allNames.filter(n => /adapter/i.test(n));
|
|
41
|
+
if (adapters.length > 0) {
|
|
42
|
+
patterns.push({
|
|
43
|
+
name: 'Adapter Pattern',
|
|
44
|
+
description: 'O projeto utiliza o padrão Adapter para abstrair integrações externas e garantir desacoplamento.',
|
|
45
|
+
examples: adapters.slice(0, 5),
|
|
46
|
+
howToCreate: `1. Criar interface no domínio: \`I{Nome}Port\`
|
|
47
|
+
2. Implementar adapter: \`{Nome}Adapter implements I{Nome}Port\`
|
|
48
|
+
3. Registrar no container de DI
|
|
49
|
+
4. Escrever testes unitários com mock do adapter
|
|
50
|
+
5. Garantir que o domínio nunca importe o adapter diretamente`,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Detect Factory pattern
|
|
55
|
+
const factories = allNames.filter(n => /factory/i.test(n));
|
|
56
|
+
if (factories.length > 0) {
|
|
57
|
+
patterns.push({
|
|
58
|
+
name: 'Factory Pattern',
|
|
59
|
+
description: 'Factories são usadas para encapsular a lógica de criação de objetos complexos.',
|
|
60
|
+
examples: factories.slice(0, 5),
|
|
61
|
+
howToCreate: `1. Criar classe factory: \`{Nome}Factory\`
|
|
62
|
+
2. Método principal: \`create({params}): {Tipo}\`
|
|
63
|
+
3. Encapsular validações e defaults
|
|
64
|
+
4. Escrever testes para cada variação de criação`,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Detect Extractor pattern
|
|
69
|
+
const extractors = allNames.filter(n => /extractor|parser|reader/i.test(n));
|
|
70
|
+
if (extractors.length > 0) {
|
|
71
|
+
patterns.push({
|
|
72
|
+
name: 'Extractor/Parser Pattern',
|
|
73
|
+
description: 'Extractors/Parsers são usados para extrair e transformar dados de fontes externas (PDFs, APIs, arquivos).',
|
|
74
|
+
examples: extractors.slice(0, 5),
|
|
75
|
+
howToCreate: `1. Criar interface: \`I{Tipo}Extractor\`
|
|
76
|
+
2. Implementar: \`{Tipo}Extractor implements I{Tipo}Extractor\`
|
|
77
|
+
3. Método principal: \`extract(source): ExtractedData\`
|
|
78
|
+
4. Testar com fixtures (dados de exemplo)
|
|
79
|
+
5. Tratar edge cases: dados vazios, formato inválido, timeout`,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Detect Repository pattern
|
|
84
|
+
const repositories = allNames.filter(n => /repository|repo/i.test(n));
|
|
85
|
+
if (repositories.length > 0) {
|
|
86
|
+
patterns.push({
|
|
87
|
+
name: 'Repository Pattern',
|
|
88
|
+
description: 'Repositories abstraem o acesso a dados, separando lógica de negócio da persistência.',
|
|
89
|
+
examples: repositories.slice(0, 5),
|
|
90
|
+
howToCreate: `1. Criar interface: \`I{Entidade}Repository\`
|
|
91
|
+
2. Métodos padrão: findById, findAll, save, delete
|
|
92
|
+
3. Implementar com ORM ou query builder
|
|
93
|
+
4. Testar com banco in-memory ou mock`,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Detect Middleware/Guard pattern
|
|
98
|
+
const middlewares = allNames.filter(n => /middleware|guard|interceptor|pipe/i.test(n));
|
|
99
|
+
if (middlewares.length > 0) {
|
|
100
|
+
patterns.push({
|
|
101
|
+
name: 'Middleware/Guard Pattern',
|
|
102
|
+
description: 'Middlewares e Guards implementam cross-cutting concerns (auth, logging, validation).',
|
|
103
|
+
examples: middlewares.slice(0, 5),
|
|
104
|
+
howToCreate: `1. Criar middleware/guard com interface do framework
|
|
105
|
+
2. Implementar lógica de interceptação
|
|
106
|
+
3. Registrar no pipeline de request
|
|
107
|
+
4. Testar isoladamente com request mocking`,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Detect DTO/Schema pattern
|
|
112
|
+
const dtos = allNames.filter(n => /dto|schema|model|entity/i.test(n));
|
|
113
|
+
if (dtos.length > 2) { // Only if there are several
|
|
114
|
+
patterns.push({
|
|
115
|
+
name: 'DTO/Schema Pattern',
|
|
116
|
+
description: 'DTOs e Schemas definem contratos de entrada/saída e validações.',
|
|
117
|
+
examples: dtos.slice(0, 5),
|
|
118
|
+
howToCreate: `1. Criar DTO/Schema para cada endpoint
|
|
119
|
+
2. Validações no DTO (não no controller)
|
|
120
|
+
3. Separar RequestDTO e ResponseDTO
|
|
121
|
+
4. Documentar campos obrigatórios e opcionais
|
|
122
|
+
5. Usar validação automática do framework`,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Detect Service Layer pattern (almost always present)
|
|
127
|
+
if (allServices.length > 1) {
|
|
128
|
+
patterns.push({
|
|
129
|
+
name: 'Service Layer Pattern',
|
|
130
|
+
description: 'Services encapsulam toda a lógica de negócio, mantendo controllers finos.',
|
|
131
|
+
examples: allServices.slice(0, 5),
|
|
132
|
+
howToCreate: `1. Criar service: \`{Domínio}Service\`
|
|
133
|
+
2. Injetar dependências via constructor
|
|
134
|
+
3. Um método por caso de uso (SRP)
|
|
135
|
+
4. Lançar exceções de domínio (não HTTP)
|
|
136
|
+
5. Testar unitariamente com mocks de dependências`,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return patterns;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Gera conteúdo do skill principal do projeto
|
|
145
|
+
*/
|
|
146
|
+
export function generateProjectSkills(ctx: TemplateContext | EnrichedTemplateContext): string | null {
|
|
147
|
+
const enriched = getEnriched(ctx);
|
|
148
|
+
const patterns = detectPatterns(ctx);
|
|
149
|
+
const stack = 'stack' in ctx ? ctx.stack : undefined;
|
|
150
|
+
const domain = enriched.domain;
|
|
151
|
+
|
|
152
|
+
if (patterns.length === 0) {
|
|
153
|
+
return null; // Não gerar se não houver padrões detectados
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const langs = stack?.languages.map((l) => l.toLowerCase()) || [];
|
|
157
|
+
const isPython = langs.includes('python');
|
|
158
|
+
const isDart = langs.includes('dart');
|
|
159
|
+
const isGo = langs.includes('go');
|
|
160
|
+
|
|
161
|
+
// Naming convention per language
|
|
162
|
+
let fileConvention = 'camelCase para arquivos, PascalCase para classes';
|
|
163
|
+
if (isPython) fileConvention = 'snake_case para arquivos e funções, PascalCase para classes';
|
|
164
|
+
else if (isDart) fileConvention = 'snake_case para arquivos, camelCase para funções, PascalCase para classes';
|
|
165
|
+
else if (isGo) fileConvention = 'lowercase para pacotes, PascalCase para exports, camelCase para privados';
|
|
166
|
+
|
|
167
|
+
// Build frameworks label from enriched detectedFrameworks (most accurate) or stack.frameworks
|
|
168
|
+
const detectedFw = enriched.detectedFrameworks;
|
|
169
|
+
const frameworksLabel = detectedFw && detectedFw.length > 0
|
|
170
|
+
? detectedFw.map(f => f.version ? `${f.name} v${f.version}` : f.name).join(', ')
|
|
171
|
+
: (stack?.frameworks.length ? stack.frameworks.join(', ') : 'Não detectados');
|
|
172
|
+
|
|
173
|
+
const patternsContent = patterns.map(p => `### ${p.name}
|
|
174
|
+
|
|
175
|
+
${p.description}
|
|
176
|
+
|
|
177
|
+
**Exemplos no projeto:**
|
|
178
|
+
${p.examples.map(e => `- \`${e}\``).join('\n')}
|
|
179
|
+
|
|
180
|
+
**Como criar um novo:**
|
|
181
|
+
${p.howToCreate}
|
|
182
|
+
`).join('\n---\n\n');
|
|
183
|
+
|
|
184
|
+
const domainSection = domain ? `
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Padrões de Domínio: ${domain.domain}${domain.subDomain ? ` / ${domain.subDomain}` : ''}
|
|
188
|
+
|
|
189
|
+
${domain.businessEntities?.length ? `### Entidades de Negócio
|
|
190
|
+
${domain.businessEntities.map(e => `- **${e.name}**: ${e.fields?.join(', ') || 'campos detectados'}`).join('\n')}` : ''}
|
|
191
|
+
|
|
192
|
+
${domain.integrations?.length ? `### Integrações
|
|
193
|
+
${domain.integrations.map(i => `- **${i.name}** (${i.type})`).join('\n')}` : ''}
|
|
194
|
+
|
|
195
|
+
${domain.compliance?.length ? `### Compliance
|
|
196
|
+
${domain.compliance.map(c => `- **${c.name}**: ${c.reason}`).join('\n')}` : ''}
|
|
197
|
+
` : '';
|
|
198
|
+
|
|
199
|
+
return `---
|
|
200
|
+
antigravity:
|
|
201
|
+
trigger: 'on_demand'
|
|
202
|
+
description: 'Padrões e convenções específicos do projeto'
|
|
203
|
+
version: 3.1.0
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
# 📚 Skills: Padrões do Projeto
|
|
207
|
+
|
|
208
|
+
> Referência rápida dos padrões arquiteturais detectados e como seguí-los.
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Convenções
|
|
213
|
+
|
|
214
|
+
- **Nomenclatura de arquivos:** ${fileConvention}
|
|
215
|
+
- **Stack:** ${stack?.languages.join(', ') || 'Não detectada'}
|
|
216
|
+
- **Frameworks:** ${frameworksLabel}
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Padrões Arquiteturais Detectados
|
|
221
|
+
|
|
222
|
+
${patternsContent}
|
|
223
|
+
${domainSection}
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Checklist para Novo Código
|
|
227
|
+
|
|
228
|
+
\`\`\`
|
|
229
|
+
□ Segue os padrões acima?
|
|
230
|
+
□ Testes escritos antes do código (TDD)?
|
|
231
|
+
□ Nomenclatura consistente com convenções?
|
|
232
|
+
□ Sem duplicação de lógica existente?
|
|
233
|
+
□ Documentação atualizada (JSDoc/docstring)?
|
|
234
|
+
\`\`\`
|
|
235
|
+
`;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Generates ARCHITECT-INTEGRATION.md skill with real project data
|
|
240
|
+
*/
|
|
241
|
+
export function generateArchitectIntegrationSkill(ctx: TemplateContext | EnrichedTemplateContext): string {
|
|
242
|
+
// @ts-ignore - Audit cleanup unused variable
|
|
243
|
+
const enriched = getEnriched(ctx);
|
|
244
|
+
const projectName = ctx.projectName;
|
|
245
|
+
const report = ctx.report;
|
|
246
|
+
const config = ctx.config;
|
|
247
|
+
|
|
248
|
+
return `---
|
|
249
|
+
antigravity:
|
|
250
|
+
trigger: 'on_demand'
|
|
251
|
+
description: 'Como usar o Architect para análise contínua de arquitetura'
|
|
252
|
+
version: 5.1.0
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
# 🏗️ Skill: Architect Integration — ${projectName}
|
|
256
|
+
|
|
257
|
+
> Como usar \`@girardelli/architect\` para manter a qualidade arquitetural.
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## Instalação
|
|
262
|
+
|
|
263
|
+
\`\`\`bash
|
|
264
|
+
npm install -g @girardelli/architect
|
|
265
|
+
\`\`\`
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Comandos Disponíveis
|
|
270
|
+
|
|
271
|
+
### Análise completa
|
|
272
|
+
\`\`\`bash
|
|
273
|
+
# Gera HTML report + JSON + .agent/ framework
|
|
274
|
+
architect analyze .
|
|
275
|
+
|
|
276
|
+
# Output:
|
|
277
|
+
# → architect-report.html (visual)
|
|
278
|
+
# → architect-report.json (dados)
|
|
279
|
+
# → .agent/ (framework de agentes)
|
|
280
|
+
\`\`\`
|
|
281
|
+
|
|
282
|
+
### Score rápido
|
|
283
|
+
\`\`\`bash
|
|
284
|
+
# Verificação rápida do score
|
|
285
|
+
architect score .
|
|
286
|
+
|
|
287
|
+
# JSON output (para CI)
|
|
288
|
+
architect score . --json
|
|
289
|
+
\`\`\`
|
|
290
|
+
|
|
291
|
+
### Regenerar agentes
|
|
292
|
+
\`\`\`bash
|
|
293
|
+
# Regenera .agent/ com dados atualizados
|
|
294
|
+
architect agents .
|
|
295
|
+
\`\`\`
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## Estado Atual — ${projectName}
|
|
300
|
+
|
|
301
|
+
| Métrica | Valor |
|
|
302
|
+
|---------|-------|
|
|
303
|
+
| **Score** | ${report.score.overall}/100 |
|
|
304
|
+
| **Meta** | ${config.scoreThreshold}/100 (mínimo) |
|
|
305
|
+
| **Score Modularity** | ${report.score.breakdown.modularity}/100 |
|
|
306
|
+
| **Score Coupling** | ${report.score.breakdown.coupling}/100 |
|
|
307
|
+
| **Score Cohesion** | ${report.score.breakdown.cohesion}/100 |
|
|
308
|
+
| **Score Layering** | ${report.score.breakdown.layering}/100 |
|
|
309
|
+
| **Anti-patterns** | ${report.antiPatterns.length} |
|
|
310
|
+
| **Arquivos** | ${report.projectInfo.totalFiles} |
|
|
311
|
+
| **Linhas** | ${report.projectInfo.totalLines.toLocaleString()} |
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## Integração no Workflow
|
|
316
|
+
|
|
317
|
+
### Antes de criar PR
|
|
318
|
+
\`\`\`bash
|
|
319
|
+
# Verificar que o score não regrediu
|
|
320
|
+
architect score .
|
|
321
|
+
# Se score < ${config.scoreThreshold} → NÃO criar PR
|
|
322
|
+
\`\`\`
|
|
323
|
+
|
|
324
|
+
### Após refatoração
|
|
325
|
+
\`\`\`bash
|
|
326
|
+
# Verificar melhoria
|
|
327
|
+
architect analyze .
|
|
328
|
+
# Comparar com score anterior
|
|
329
|
+
\`\`\`
|
|
330
|
+
|
|
331
|
+
### Revisão de arquitetura
|
|
332
|
+
\`\`\`bash
|
|
333
|
+
# Gerar report completo para code review
|
|
334
|
+
architect analyze . --output-dir docs/
|
|
335
|
+
\`\`\`
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
## Quality Gates
|
|
340
|
+
|
|
341
|
+
\`\`\`
|
|
342
|
+
Score mínimo para PR: ${config.scoreThreshold}/100
|
|
343
|
+
Cobertura mínima: ${config.coverageMinimum}%
|
|
344
|
+
Zero anti-patterns CRITICAL: Obrigatório
|
|
345
|
+
Regressão de score: Proibida
|
|
346
|
+
\`\`\`
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
**Gerado por Architect v5.1 · Score: ${report.score.overall}/100**
|
|
351
|
+
`;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Generates CI-PIPELINE.md skill with real toolchain data
|
|
356
|
+
*/
|
|
357
|
+
export function generateCIPipelineSkill(ctx: TemplateContext | EnrichedTemplateContext): string {
|
|
358
|
+
const enriched = getEnriched(ctx);
|
|
359
|
+
const projectName = ctx.projectName;
|
|
360
|
+
const tc = enriched.toolchain;
|
|
361
|
+
const config = ctx.config;
|
|
362
|
+
const report = ctx.report;
|
|
363
|
+
|
|
364
|
+
const buildCmd = tc?.buildCmd || 'npm run build';
|
|
365
|
+
const testCmd = tc?.testCmd || 'npm test';
|
|
366
|
+
const lintCmd = tc?.lintCmd || 'npx eslint .';
|
|
367
|
+
const coverageCmd = tc?.coverageCmd || 'npm run test -- --coverage';
|
|
368
|
+
const installCmd = tc?.installCmd || 'npm install';
|
|
369
|
+
|
|
370
|
+
return `---
|
|
371
|
+
antigravity:
|
|
372
|
+
trigger: 'on_demand'
|
|
373
|
+
description: 'Integração CI/CD com verificação de arquitetura'
|
|
374
|
+
version: 5.1.0
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
# 🔄 Skill: CI Pipeline — ${projectName}
|
|
378
|
+
|
|
379
|
+
> Pipeline de integração contínua com gates de qualidade arquitetural.
|
|
380
|
+
|
|
381
|
+
---
|
|
382
|
+
|
|
383
|
+
## GitHub Actions
|
|
384
|
+
|
|
385
|
+
\`\`\`yaml
|
|
386
|
+
# .github/workflows/architect-ci.yml
|
|
387
|
+
name: Architecture CI
|
|
388
|
+
|
|
389
|
+
on:
|
|
390
|
+
pull_request:
|
|
391
|
+
branches: [main, develop, staging]
|
|
392
|
+
|
|
393
|
+
jobs:
|
|
394
|
+
quality:
|
|
395
|
+
runs-on: ubuntu-latest
|
|
396
|
+
steps:
|
|
397
|
+
- uses: actions/checkout@v4
|
|
398
|
+
|
|
399
|
+
- uses: actions/setup-node@v4
|
|
400
|
+
with:
|
|
401
|
+
node-version: '20'
|
|
402
|
+
cache: 'npm'
|
|
403
|
+
|
|
404
|
+
- name: Install dependencies
|
|
405
|
+
run: ${installCmd}
|
|
406
|
+
|
|
407
|
+
- name: Build
|
|
408
|
+
run: ${buildCmd}
|
|
409
|
+
|
|
410
|
+
- name: Lint
|
|
411
|
+
run: ${lintCmd}
|
|
412
|
+
|
|
413
|
+
- name: Test
|
|
414
|
+
run: ${testCmd}
|
|
415
|
+
|
|
416
|
+
- name: Coverage
|
|
417
|
+
run: ${coverageCmd}
|
|
418
|
+
|
|
419
|
+
- name: Architecture Score
|
|
420
|
+
run: |
|
|
421
|
+
npm install -g @girardelli/architect
|
|
422
|
+
SCORE=$(architect score . --json | jq '.overall')
|
|
423
|
+
echo "Architecture Score: $SCORE/100"
|
|
424
|
+
if [ "$SCORE" -lt ${config.scoreThreshold} ]; then
|
|
425
|
+
echo "::error::Score ($SCORE) below threshold (${config.scoreThreshold})"
|
|
426
|
+
exit 1
|
|
427
|
+
fi
|
|
428
|
+
|
|
429
|
+
- name: No Score Regression
|
|
430
|
+
run: |
|
|
431
|
+
# Compare with main branch score
|
|
432
|
+
CURRENT=$(architect score . --json | jq '.overall')
|
|
433
|
+
echo "Current: $CURRENT/100, Minimum: ${config.scoreThreshold}/100"
|
|
434
|
+
\`\`\`
|
|
435
|
+
|
|
436
|
+
---
|
|
437
|
+
|
|
438
|
+
## Comandos do Pipeline
|
|
439
|
+
|
|
440
|
+
| Step | Comando | Gate |
|
|
441
|
+
|------|---------|------|
|
|
442
|
+
| Install | \`${installCmd}\` | — |
|
|
443
|
+
| Build | \`${buildCmd}\` | ❌ Bloqueia se falhar |
|
|
444
|
+
| Lint | \`${lintCmd}\` | ❌ Bloqueia se falhar |
|
|
445
|
+
| Test | \`${testCmd}\` | ❌ Bloqueia se falhar |
|
|
446
|
+
| Coverage | \`${coverageCmd}\` | ⚠️ Mínimo ${config.coverageMinimum}% |
|
|
447
|
+
| Score | \`architect score .\` | ❌ Mínimo ${config.scoreThreshold}/100 |
|
|
448
|
+
|
|
449
|
+
---
|
|
450
|
+
|
|
451
|
+
## GitLab CI
|
|
452
|
+
|
|
453
|
+
\`\`\`yaml
|
|
454
|
+
# .gitlab-ci.yml
|
|
455
|
+
stages:
|
|
456
|
+
- build
|
|
457
|
+
- test
|
|
458
|
+
- quality
|
|
459
|
+
|
|
460
|
+
build:
|
|
461
|
+
stage: build
|
|
462
|
+
script:
|
|
463
|
+
- ${installCmd}
|
|
464
|
+
- ${buildCmd}
|
|
465
|
+
|
|
466
|
+
test:
|
|
467
|
+
stage: test
|
|
468
|
+
script:
|
|
469
|
+
- ${testCmd}
|
|
470
|
+
- ${coverageCmd}
|
|
471
|
+
|
|
472
|
+
architecture:
|
|
473
|
+
stage: quality
|
|
474
|
+
script:
|
|
475
|
+
- npm install -g @girardelli/architect
|
|
476
|
+
- architect score . --json
|
|
477
|
+
allow_failure: false
|
|
478
|
+
\`\`\`
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
**Gerado por Architect v5.1 · Score: ${report.score.overall}/100**
|
|
483
|
+
`;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* Generates MONOREPO-GUIDE.md skill with real workspace data.
|
|
488
|
+
* Only generated when projectStructure === 'monorepo'.
|
|
489
|
+
*/
|
|
490
|
+
export function generateMonorepoGuideSkill(ctx: TemplateContext | EnrichedTemplateContext): string | null {
|
|
491
|
+
const enriched = getEnriched(ctx);
|
|
492
|
+
if (enriched.projectStructure !== 'monorepo') return null;
|
|
493
|
+
|
|
494
|
+
const projectName = ctx.projectName;
|
|
495
|
+
const modules = enriched.modules || [];
|
|
496
|
+
const tc = enriched.toolchain;
|
|
497
|
+
|
|
498
|
+
if (modules.length === 0) return null;
|
|
499
|
+
|
|
500
|
+
const moduleTable = modules.map(m =>
|
|
501
|
+
`| ${m.name} | \`${m.path}\` | ${m.fileCount} | ${m.lineCount > 0 ? m.lineCount.toLocaleString() : '—'} | ${m.hasTests ? '✅' : '❌'} | ${m.layer} |`
|
|
502
|
+
).join('\n');
|
|
503
|
+
|
|
504
|
+
return `---
|
|
505
|
+
antigravity:
|
|
506
|
+
trigger: 'on_demand'
|
|
507
|
+
description: 'Guia de navegação e desenvolvimento no monorepo'
|
|
508
|
+
version: 5.1.0
|
|
509
|
+
---
|
|
510
|
+
|
|
511
|
+
# 📦 Skill: Monorepo Guide — ${projectName}
|
|
512
|
+
|
|
513
|
+
> Estrutura, convenções e fluxos de trabalho do monorepo.
|
|
514
|
+
|
|
515
|
+
---
|
|
516
|
+
|
|
517
|
+
## Workspace Map
|
|
518
|
+
|
|
519
|
+
| Package | Path | Arquivos | Linhas | Testes | Camada |
|
|
520
|
+
|---------|------|----------|--------|--------|--------|
|
|
521
|
+
${moduleTable}
|
|
522
|
+
|
|
523
|
+
---
|
|
524
|
+
|
|
525
|
+
## Regras do Monorepo
|
|
526
|
+
|
|
527
|
+
### Dependency Direction
|
|
528
|
+
\`\`\`
|
|
529
|
+
╔════════════════════════════════════════════╗
|
|
530
|
+
║ types → events → core → bridge → mcp ║
|
|
531
|
+
║ ║
|
|
532
|
+
║ Dependências SEMPRE de baixo para cima. ║
|
|
533
|
+
║ NUNCA criar referência circular. ║
|
|
534
|
+
╚════════════════════════════════════════════╝
|
|
535
|
+
\`\`\`
|
|
536
|
+
|
|
537
|
+
### Boas Práticas
|
|
538
|
+
|
|
539
|
+
1. **Cada package tem seu package.json** — versão independente
|
|
540
|
+
2. **Types compartilhados** ficam no package \`types\`
|
|
541
|
+
3. **Nunca importar de outro package via path relativo** — usar \`@scope/package\`
|
|
542
|
+
4. **Testes rodam por package** — \`npm test --workspace=packages/<nome>\`
|
|
543
|
+
5. **Build ordem** — respeitar dependências (types primeiro)
|
|
544
|
+
|
|
545
|
+
### Comandos por Workspace
|
|
546
|
+
|
|
547
|
+
\`\`\`bash
|
|
548
|
+
# Rodar testes de um package específico
|
|
549
|
+
npm test --workspace=packages/<nome>
|
|
550
|
+
|
|
551
|
+
# Build de um package específico
|
|
552
|
+
npm run build --workspace=packages/<nome>
|
|
553
|
+
|
|
554
|
+
# Instalar deps de todos os workspaces
|
|
555
|
+
${tc?.installCmd || 'npm install'}
|
|
556
|
+
|
|
557
|
+
# Build de todos
|
|
558
|
+
${tc?.buildCmd || 'npm run build'}
|
|
559
|
+
|
|
560
|
+
# Testes de todos
|
|
561
|
+
${tc?.testCmd || 'npm test'}
|
|
562
|
+
\`\`\`
|
|
563
|
+
|
|
564
|
+
---
|
|
565
|
+
|
|
566
|
+
## Quando Criar um Novo Package
|
|
567
|
+
|
|
568
|
+
1. **Justificativa:** O código é reutilizável por 2+ packages?
|
|
569
|
+
2. **Escopo:** O package tem responsabilidade única?
|
|
570
|
+
3. **Testes:** O package pode ser testado isoladamente?
|
|
571
|
+
4. **Deps:** As dependências são explícitas no package.json?
|
|
572
|
+
|
|
573
|
+
### Template
|
|
574
|
+
|
|
575
|
+
\`\`\`bash
|
|
576
|
+
mkdir packages/<nome>
|
|
577
|
+
cd packages/<nome>
|
|
578
|
+
npm init -y
|
|
579
|
+
# Configurar tsconfig.json, jest.config, etc.
|
|
580
|
+
\`\`\`
|
|
581
|
+
|
|
582
|
+
---
|
|
583
|
+
|
|
584
|
+
**Gerado por Architect v5.1 · ${modules.length} packages detectados**
|
|
585
|
+
`;
|
|
586
|
+
}
|