@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.
Files changed (258) hide show
  1. package/dist/src/core/agent-generator/context-enricher.d.ts +17 -0
  2. package/dist/src/core/agent-generator/context-enricher.js +51 -0
  3. package/dist/src/core/agent-generator/context-enricher.js.map +1 -0
  4. package/dist/src/core/agent-generator/detectors/base-detector.d.ts +8 -0
  5. package/dist/src/core/agent-generator/detectors/base-detector.js +12 -0
  6. package/dist/src/core/agent-generator/detectors/base-detector.js.map +1 -0
  7. package/dist/src/core/agent-generator/detectors/dart-detector.d.ts +5 -0
  8. package/dist/src/core/agent-generator/detectors/dart-detector.js +16 -0
  9. package/dist/src/core/agent-generator/detectors/dart-detector.js.map +1 -0
  10. package/dist/src/core/agent-generator/detectors/framework-registry.d.ts +5 -0
  11. package/dist/src/core/agent-generator/detectors/framework-registry.js +81 -0
  12. package/dist/src/core/agent-generator/detectors/framework-registry.js.map +1 -0
  13. package/dist/src/core/agent-generator/detectors/go-detector.d.ts +5 -0
  14. package/dist/src/core/agent-generator/detectors/go-detector.js +25 -0
  15. package/dist/src/core/agent-generator/detectors/go-detector.js.map +1 -0
  16. package/dist/src/core/agent-generator/detectors/java-detector.d.ts +5 -0
  17. package/dist/src/core/agent-generator/detectors/java-detector.js +44 -0
  18. package/dist/src/core/agent-generator/detectors/java-detector.js.map +1 -0
  19. package/dist/src/core/agent-generator/detectors/node-detector.d.ts +5 -0
  20. package/dist/src/core/agent-generator/detectors/node-detector.js +28 -0
  21. package/dist/src/core/agent-generator/detectors/node-detector.js.map +1 -0
  22. package/dist/src/core/agent-generator/detectors/php-detector.d.ts +5 -0
  23. package/dist/src/core/agent-generator/detectors/php-detector.js +28 -0
  24. package/dist/src/core/agent-generator/detectors/php-detector.js.map +1 -0
  25. package/dist/src/core/agent-generator/detectors/python-detector.d.ts +7 -0
  26. package/dist/src/core/agent-generator/detectors/python-detector.js +116 -0
  27. package/dist/src/core/agent-generator/detectors/python-detector.js.map +1 -0
  28. package/dist/src/core/agent-generator/detectors/ruby-detector.d.ts +5 -0
  29. package/dist/src/core/agent-generator/detectors/ruby-detector.js +23 -0
  30. package/dist/src/core/agent-generator/detectors/ruby-detector.js.map +1 -0
  31. package/dist/src/core/agent-generator/detectors/rust-detector.d.ts +5 -0
  32. package/dist/src/core/agent-generator/detectors/rust-detector.js +18 -0
  33. package/dist/src/core/agent-generator/detectors/rust-detector.js.map +1 -0
  34. package/dist/src/core/agent-generator/detectors/structure-detector.d.ts +4 -0
  35. package/dist/src/core/agent-generator/detectors/structure-detector.js +35 -0
  36. package/dist/src/core/agent-generator/detectors/structure-detector.js.map +1 -0
  37. package/dist/src/core/agent-generator/detectors/toolchain-detector.d.ts +5 -0
  38. package/dist/src/core/agent-generator/detectors/toolchain-detector.js +164 -0
  39. package/dist/src/core/agent-generator/detectors/toolchain-detector.js.map +1 -0
  40. package/dist/src/core/agent-generator/domain-inferrer.d.ts +51 -0
  41. package/dist/src/core/agent-generator/domain-inferrer.js +585 -0
  42. package/dist/src/core/agent-generator/domain-inferrer.js.map +1 -0
  43. package/dist/src/core/agent-generator/engines/audit-engine.d.ts +8 -0
  44. package/dist/src/core/agent-generator/engines/audit-engine.js +84 -0
  45. package/dist/src/core/agent-generator/engines/audit-engine.js.map +1 -0
  46. package/dist/src/core/agent-generator/engines/context-builder.d.ts +12 -0
  47. package/dist/src/core/agent-generator/engines/context-builder.js +84 -0
  48. package/dist/src/core/agent-generator/engines/context-builder.js.map +1 -0
  49. package/dist/src/core/agent-generator/engines/generation-engine.d.ts +7 -0
  50. package/dist/src/core/agent-generator/engines/generation-engine.js +160 -0
  51. package/dist/src/core/agent-generator/engines/generation-engine.js.map +1 -0
  52. package/dist/src/core/agent-generator/engines/generation-engine_deps.d.ts +21 -0
  53. package/dist/src/core/agent-generator/engines/generation-engine_deps.js +17 -0
  54. package/dist/src/core/agent-generator/engines/generation-engine_deps.js.map +1 -0
  55. package/dist/src/core/agent-generator/engines/suggestion-engine.d.ts +13 -0
  56. package/dist/src/core/agent-generator/engines/suggestion-engine.js +171 -0
  57. package/dist/src/core/agent-generator/engines/suggestion-engine.js.map +1 -0
  58. package/dist/src/core/agent-generator/engines/suggestion-engine_deps.d.ts +8 -0
  59. package/dist/src/core/agent-generator/engines/suggestion-engine_deps.js +5 -0
  60. package/dist/src/core/agent-generator/engines/suggestion-engine_deps.js.map +1 -0
  61. package/dist/src/core/agent-generator/enrichers/analysis-helpers.d.ts +9 -0
  62. package/dist/src/core/agent-generator/enrichers/analysis-helpers.js +51 -0
  63. package/dist/src/core/agent-generator/enrichers/analysis-helpers.js.map +1 -0
  64. package/dist/src/core/agent-generator/enrichers/description-generator.d.ts +4 -0
  65. package/dist/src/core/agent-generator/enrichers/description-generator.js +82 -0
  66. package/dist/src/core/agent-generator/enrichers/description-generator.js.map +1 -0
  67. package/dist/src/core/agent-generator/enrichers/endpoint-extractor.d.ts +7 -0
  68. package/dist/src/core/agent-generator/enrichers/endpoint-extractor.js +90 -0
  69. package/dist/src/core/agent-generator/enrichers/endpoint-extractor.js.map +1 -0
  70. package/dist/src/core/agent-generator/enrichers/layer-classifier.d.ts +12 -0
  71. package/dist/src/core/agent-generator/enrichers/layer-classifier.js +152 -0
  72. package/dist/src/core/agent-generator/enrichers/layer-classifier.js.map +1 -0
  73. package/dist/src/core/agent-generator/enrichers/module-extractor.d.ts +10 -0
  74. package/dist/src/core/agent-generator/enrichers/module-extractor.js +173 -0
  75. package/dist/src/core/agent-generator/enrichers/module-extractor.js.map +1 -0
  76. package/dist/src/core/agent-generator/framework-detector.d.ts +17 -0
  77. package/dist/src/core/agent-generator/framework-detector.js +56 -0
  78. package/dist/src/core/agent-generator/framework-detector.js.map +1 -0
  79. package/dist/src/core/agent-generator/index.d.ts +25 -0
  80. package/dist/src/core/agent-generator/index.js +37 -0
  81. package/dist/src/core/agent-generator/index.js.map +1 -0
  82. package/dist/src/core/agent-generator/stack-detector.d.ts +13 -0
  83. package/dist/src/core/agent-generator/stack-detector.js +124 -0
  84. package/dist/src/core/agent-generator/stack-detector.js.map +1 -0
  85. package/dist/src/core/agent-generator/templates/core/agents.d.ts +9 -0
  86. package/dist/src/core/agent-generator/templates/core/agents.js +1127 -0
  87. package/dist/src/core/agent-generator/templates/core/agents.js.map +1 -0
  88. package/dist/src/core/agent-generator/templates/core/architecture-rules.d.ts +6 -0
  89. package/dist/src/core/agent-generator/templates/core/architecture-rules.js +275 -0
  90. package/dist/src/core/agent-generator/templates/core/architecture-rules.js.map +1 -0
  91. package/dist/src/core/agent-generator/templates/core/general-rules.d.ts +7 -0
  92. package/dist/src/core/agent-generator/templates/core/general-rules.js +301 -0
  93. package/dist/src/core/agent-generator/templates/core/general-rules.js.map +1 -0
  94. package/dist/src/core/agent-generator/templates/core/hooks-generator.d.ts +20 -0
  95. package/dist/src/core/agent-generator/templates/core/hooks-generator.js +235 -0
  96. package/dist/src/core/agent-generator/templates/core/hooks-generator.js.map +1 -0
  97. package/dist/src/core/agent-generator/templates/core/index-md.d.ts +6 -0
  98. package/dist/src/core/agent-generator/templates/core/index-md.js +247 -0
  99. package/dist/src/core/agent-generator/templates/core/index-md.js.map +1 -0
  100. package/dist/src/core/agent-generator/templates/core/orchestrator.d.ts +7 -0
  101. package/dist/src/core/agent-generator/templates/core/orchestrator.js +423 -0
  102. package/dist/src/core/agent-generator/templates/core/orchestrator.js.map +1 -0
  103. package/dist/src/core/agent-generator/templates/core/preflight.d.ts +7 -0
  104. package/dist/src/core/agent-generator/templates/core/preflight.js +213 -0
  105. package/dist/src/core/agent-generator/templates/core/preflight.js.map +1 -0
  106. package/dist/src/core/agent-generator/templates/core/quality-gates.d.ts +10 -0
  107. package/dist/src/core/agent-generator/templates/core/quality-gates.js +255 -0
  108. package/dist/src/core/agent-generator/templates/core/quality-gates.js.map +1 -0
  109. package/dist/src/core/agent-generator/templates/core/security-rules.d.ts +6 -0
  110. package/dist/src/core/agent-generator/templates/core/security-rules.js +529 -0
  111. package/dist/src/core/agent-generator/templates/core/security-rules.js.map +1 -0
  112. package/dist/src/core/agent-generator/templates/core/skills-generator.d.ts +18 -0
  113. package/dist/src/core/agent-generator/templates/core/skills-generator.js +547 -0
  114. package/dist/src/core/agent-generator/templates/core/skills-generator.js.map +1 -0
  115. package/dist/src/core/agent-generator/templates/core/workflow-fix-bug.d.ts +6 -0
  116. package/dist/src/core/agent-generator/templates/core/workflow-fix-bug.js +238 -0
  117. package/dist/src/core/agent-generator/templates/core/workflow-fix-bug.js.map +1 -0
  118. package/dist/src/core/agent-generator/templates/core/workflow-new-feature.d.ts +7 -0
  119. package/dist/src/core/agent-generator/templates/core/workflow-new-feature.js +321 -0
  120. package/dist/src/core/agent-generator/templates/core/workflow-new-feature.js.map +1 -0
  121. package/dist/src/core/agent-generator/templates/core/workflow-review.d.ts +6 -0
  122. package/dist/src/core/agent-generator/templates/core/workflow-review.js +105 -0
  123. package/dist/src/core/agent-generator/templates/core/workflow-review.js.map +1 -0
  124. package/dist/src/core/agent-generator/templates/domain/index.d.ts +21 -0
  125. package/dist/src/core/agent-generator/templates/domain/index.js +1179 -0
  126. package/dist/src/core/agent-generator/templates/domain/index.js.map +1 -0
  127. package/dist/src/core/agent-generator/templates/helpers/base-helpers.d.ts +10 -0
  128. package/dist/src/core/agent-generator/templates/helpers/base-helpers.js +20 -0
  129. package/dist/src/core/agent-generator/templates/helpers/base-helpers.js.map +1 -0
  130. package/dist/src/core/agent-generator/templates/helpers/cross-ref-helpers.d.ts +2 -0
  131. package/dist/src/core/agent-generator/templates/helpers/cross-ref-helpers.js +77 -0
  132. package/dist/src/core/agent-generator/templates/helpers/cross-ref-helpers.js.map +1 -0
  133. package/dist/src/core/agent-generator/templates/helpers/security-helpers.d.ts +2 -0
  134. package/dist/src/core/agent-generator/templates/helpers/security-helpers.js +182 -0
  135. package/dist/src/core/agent-generator/templates/helpers/security-helpers.js.map +1 -0
  136. package/dist/src/core/agent-generator/templates/helpers/stack-helpers.d.ts +4 -0
  137. package/dist/src/core/agent-generator/templates/helpers/stack-helpers.js +69 -0
  138. package/dist/src/core/agent-generator/templates/helpers/stack-helpers.js.map +1 -0
  139. package/dist/src/core/agent-generator/templates/helpers/structure-helpers.d.ts +2 -0
  140. package/dist/src/core/agent-generator/templates/helpers/structure-helpers.js +275 -0
  141. package/dist/src/core/agent-generator/templates/helpers/structure-helpers.js.map +1 -0
  142. package/dist/src/core/agent-generator/templates/helpers/summary-helpers.d.ts +6 -0
  143. package/dist/src/core/agent-generator/templates/helpers/summary-helpers.js +56 -0
  144. package/dist/src/core/agent-generator/templates/helpers/summary-helpers.js.map +1 -0
  145. package/dist/src/core/agent-generator/templates/stack/index.d.ts +7 -0
  146. package/dist/src/core/agent-generator/templates/stack/index.js +695 -0
  147. package/dist/src/core/agent-generator/templates/stack/index.js.map +1 -0
  148. package/dist/src/core/agent-generator/templates/template-helpers.d.ts +11 -0
  149. package/dist/src/core/agent-generator/templates/template-helpers.js +12 -0
  150. package/dist/src/core/agent-generator/templates/template-helpers.js.map +1 -0
  151. package/dist/src/core/agent-generator/types/agent.d.ts +39 -0
  152. package/dist/src/core/agent-generator/types/agent.js +27 -0
  153. package/dist/src/core/agent-generator/types/agent.js.map +1 -0
  154. package/dist/src/core/agent-generator/types/domain.d.ts +58 -0
  155. package/dist/src/core/agent-generator/types/domain.js +2 -0
  156. package/dist/src/core/agent-generator/types/domain.js.map +1 -0
  157. package/dist/src/core/agent-generator/types/stack.d.ts +36 -0
  158. package/dist/src/core/agent-generator/types/stack.js +2 -0
  159. package/dist/src/core/agent-generator/types/stack.js.map +1 -0
  160. package/dist/src/core/agent-generator/types/template.d.ts +29 -0
  161. package/dist/src/core/agent-generator/types/template.js +2 -0
  162. package/dist/src/core/agent-generator/types/template.js.map +1 -0
  163. package/dist/src/core/agent-runtime/ai-provider.d.ts +33 -0
  164. package/dist/src/core/agent-runtime/ai-provider.js +146 -0
  165. package/dist/src/core/agent-runtime/ai-provider.js.map +1 -0
  166. package/dist/src/core/agent-runtime/executor.d.ts +13 -0
  167. package/dist/src/core/agent-runtime/executor.js +138 -0
  168. package/dist/src/core/agent-runtime/executor.js.map +1 -0
  169. package/dist/src/core/agent-runtime/human-gate.d.ts +16 -0
  170. package/dist/src/core/agent-runtime/human-gate.js +70 -0
  171. package/dist/src/core/agent-runtime/human-gate.js.map +1 -0
  172. package/dist/tests/agent-generator.test.d.ts +1 -0
  173. package/dist/tests/agent-generator.test.js +349 -0
  174. package/dist/tests/agent-generator.test.js.map +1 -0
  175. package/dist/tests/agent-runtime.test.d.ts +1 -0
  176. package/dist/tests/agent-runtime.test.js +107 -0
  177. package/dist/tests/agent-runtime.test.js.map +1 -0
  178. package/dist/tests/context-enricher.test.d.ts +1 -0
  179. package/dist/tests/context-enricher.test.js +875 -0
  180. package/dist/tests/context-enricher.test.js.map +1 -0
  181. package/dist/tests/framework-detector.test.d.ts +1 -0
  182. package/dist/tests/framework-detector.test.js +882 -0
  183. package/dist/tests/framework-detector.test.js.map +1 -0
  184. package/dist/tests/stack-detector.test.d.ts +1 -0
  185. package/dist/tests/stack-detector.test.js +183 -0
  186. package/dist/tests/stack-detector.test.js.map +1 -0
  187. package/dist/tests/template-generation.test.d.ts +1 -0
  188. package/dist/tests/template-generation.test.js +571 -0
  189. package/dist/tests/template-generation.test.js.map +1 -0
  190. package/dist/tests/template-helpers.test.d.ts +1 -0
  191. package/dist/tests/template-helpers.test.js +967 -0
  192. package/dist/tests/template-helpers.test.js.map +1 -0
  193. package/package.json +24 -0
  194. package/src/core/agent-generator/context-enricher.ts +67 -0
  195. package/src/core/agent-generator/detectors/base-detector.ts +18 -0
  196. package/src/core/agent-generator/detectors/dart-detector.ts +17 -0
  197. package/src/core/agent-generator/detectors/framework-registry.ts +82 -0
  198. package/src/core/agent-generator/detectors/go-detector.ts +26 -0
  199. package/src/core/agent-generator/detectors/java-detector.ts +46 -0
  200. package/src/core/agent-generator/detectors/node-detector.ts +28 -0
  201. package/src/core/agent-generator/detectors/php-detector.ts +28 -0
  202. package/src/core/agent-generator/detectors/python-detector.ts +125 -0
  203. package/src/core/agent-generator/detectors/ruby-detector.ts +24 -0
  204. package/src/core/agent-generator/detectors/rust-detector.ts +19 -0
  205. package/src/core/agent-generator/detectors/structure-detector.ts +38 -0
  206. package/src/core/agent-generator/detectors/toolchain-detector.ts +181 -0
  207. package/src/core/agent-generator/domain-inferrer.ts +630 -0
  208. package/src/core/agent-generator/engines/audit-engine.ts +98 -0
  209. package/src/core/agent-generator/engines/context-builder.ts +96 -0
  210. package/src/core/agent-generator/engines/generation-engine.ts +184 -0
  211. package/src/core/agent-generator/engines/generation-engine_deps.ts +21 -0
  212. package/src/core/agent-generator/engines/suggestion-engine.ts +202 -0
  213. package/src/core/agent-generator/engines/suggestion-engine_deps.ts +8 -0
  214. package/src/core/agent-generator/enrichers/analysis-helpers.ts +58 -0
  215. package/src/core/agent-generator/enrichers/description-generator.ts +91 -0
  216. package/src/core/agent-generator/enrichers/endpoint-extractor.ts +114 -0
  217. package/src/core/agent-generator/enrichers/layer-classifier.ts +156 -0
  218. package/src/core/agent-generator/enrichers/module-extractor.ts +203 -0
  219. package/src/core/agent-generator/framework-detector.ts +66 -0
  220. package/src/core/agent-generator/index.ts +55 -0
  221. package/src/core/agent-generator/stack-detector.ts +115 -0
  222. package/src/core/agent-generator/templates/core/agents.ts +1168 -0
  223. package/src/core/agent-generator/templates/core/architecture-rules.ts +288 -0
  224. package/src/core/agent-generator/templates/core/general-rules.ts +306 -0
  225. package/src/core/agent-generator/templates/core/hooks-generator.ts +244 -0
  226. package/src/core/agent-generator/templates/core/index-md.ts +261 -0
  227. package/src/core/agent-generator/templates/core/orchestrator.ts +462 -0
  228. package/src/core/agent-generator/templates/core/preflight.ts +216 -0
  229. package/src/core/agent-generator/templates/core/quality-gates.ts +257 -0
  230. package/src/core/agent-generator/templates/core/security-rules.ts +544 -0
  231. package/src/core/agent-generator/templates/core/skills-generator.ts +586 -0
  232. package/src/core/agent-generator/templates/core/workflow-fix-bug.ts +240 -0
  233. package/src/core/agent-generator/templates/core/workflow-new-feature.ts +323 -0
  234. package/src/core/agent-generator/templates/core/workflow-review.ts +107 -0
  235. package/src/core/agent-generator/templates/domain/index.ts +1204 -0
  236. package/src/core/agent-generator/templates/helpers/base-helpers.ts +33 -0
  237. package/src/core/agent-generator/templates/helpers/cross-ref-helpers.ts +79 -0
  238. package/src/core/agent-generator/templates/helpers/security-helpers.ts +198 -0
  239. package/src/core/agent-generator/templates/helpers/stack-helpers.ts +80 -0
  240. package/src/core/agent-generator/templates/helpers/structure-helpers.ts +293 -0
  241. package/src/core/agent-generator/templates/helpers/summary-helpers.ts +67 -0
  242. package/src/core/agent-generator/templates/stack/index.ts +705 -0
  243. package/src/core/agent-generator/templates/template-helpers.ts +12 -0
  244. package/src/core/agent-generator/types/agent.ts +65 -0
  245. package/src/core/agent-generator/types/domain.ts +63 -0
  246. package/src/core/agent-generator/types/stack.ts +38 -0
  247. package/src/core/agent-generator/types/template.ts +31 -0
  248. package/src/core/agent-runtime/ai-provider.ts +178 -0
  249. package/src/core/agent-runtime/executor.ts +148 -0
  250. package/src/core/agent-runtime/human-gate.ts +69 -0
  251. package/tests/agent-generator.test.ts +428 -0
  252. package/tests/agent-runtime.test.ts +125 -0
  253. package/tests/context-enricher.test.ts +972 -0
  254. package/tests/framework-detector.test.ts +1172 -0
  255. package/tests/stack-detector.test.ts +241 -0
  256. package/tests/template-generation.test.ts +709 -0
  257. package/tests/template-helpers.test.ts +1130 -0
  258. 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
+ }