@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,585 @@
1
+ import { existsSync, readFileSync } from 'fs';
2
+ import { join } from 'path';
3
+ /**
4
+ * DomainInferrer — Analyzes project metadata, file names, module structure,
5
+ * README content, and keywords to infer the business domain and context.
6
+ *
7
+ * This enables context-aware agent generation that understands WHAT the
8
+ * project does, not just HOW it's built.
9
+ */
10
+ export class DomainInferrer {
11
+ // Domain keyword mappings - patterns that indicate specific domains
12
+ static DOMAIN_PATTERNS = {
13
+ fintech: {
14
+ keywords: ['payment', 'transaction', 'invoice', 'billing', 'ledger', 'account', 'transfer', 'wallet', 'bank', 'loan', 'credit', 'debit', 'finance', 'fiscal', 'tax', 'irpf', 'imposto', 'receita', 'declaracao', 'contribuinte', 'pix', 'boleto', 'nfe', 'nota-fiscal'],
15
+ subDomains: {
16
+ 'tax-processing': ['irpf', 'tax', 'imposto', 'fiscal', 'receita', 'declaracao', 'contribuinte', 'deducao', 'rendimento'],
17
+ 'payment-gateway': ['payment', 'pix', 'boleto', 'stripe', 'checkout', 'charge'],
18
+ 'banking': ['bank', 'account', 'transfer', 'balance', 'statement', 'ledger'],
19
+ 'invoicing': ['invoice', 'billing', 'nfe', 'nota-fiscal', 'fatura'],
20
+ 'lending': ['loan', 'credit', 'installment', 'interest', 'amortization'],
21
+ },
22
+ },
23
+ healthtech: {
24
+ keywords: ['patient', 'medical', 'health', 'diagnosis', 'prescription', 'clinical', 'hospital', 'doctor', 'appointment', 'ehr', 'fhir', 'dicom', 'sus', 'prontuario', 'consulta', 'exame'],
25
+ subDomains: {
26
+ 'ehr': ['patient', 'record', 'prontuario', 'clinical', 'ehr'],
27
+ 'telemedicine': ['appointment', 'consulta', 'video', 'teleconsulta'],
28
+ 'diagnostics': ['diagnosis', 'exame', 'lab', 'result'],
29
+ },
30
+ },
31
+ 'e-commerce': {
32
+ keywords: ['product', 'cart', 'order', 'catalog', 'shipping', 'checkout', 'inventory', 'price', 'discount', 'coupon', 'store', 'shop', 'marketplace', 'seller', 'buyer', 'carrinho', 'pedido', 'estoque', 'frete'],
33
+ subDomains: {
34
+ 'marketplace': ['seller', 'buyer', 'marketplace', 'commission'],
35
+ 'retail': ['product', 'catalog', 'inventory', 'store', 'shop'],
36
+ 'logistics': ['shipping', 'delivery', 'frete', 'tracking', 'warehouse'],
37
+ },
38
+ },
39
+ edtech: {
40
+ keywords: ['student', 'course', 'lesson', 'quiz', 'grade', 'enrollment', 'teacher', 'classroom', 'curriculum', 'lms', 'aluno', 'aula', 'nota', 'matricula', 'professor'],
41
+ subDomains: {
42
+ 'lms': ['course', 'lesson', 'enrollment', 'lms', 'aula'],
43
+ 'assessment': ['quiz', 'grade', 'exam', 'prova', 'nota'],
44
+ },
45
+ },
46
+ devtools: {
47
+ keywords: ['analyzer', 'analysis', 'architect', 'lint', 'linter', 'ast', 'parser', 'scanner', 'refactor', 'mcp', 'cli', 'plugin', 'extension', 'sdk', 'compiler', 'transpiler', 'bundler', 'formatter', 'debugger', 'profiler', 'intelligence', 'code-review', 'anti-pattern', 'score', 'metric', 'dependency-graph'],
48
+ subDomains: {
49
+ 'code-intelligence': ['analyzer', 'analysis', 'architect', 'anti-pattern', 'score', 'metric', 'intelligence', 'refactor'],
50
+ 'mcp-server': ['mcp', 'perception', 'reasoning', 'validation', 'tool-calling'],
51
+ 'cli-tool': ['cli', 'command', 'terminal', 'argv', 'yargs', 'commander'],
52
+ 'ide-extension': ['extension', 'plugin', 'language-server', 'lsp', 'vscode'],
53
+ 'build-tool': ['bundler', 'compiler', 'transpiler', 'webpack', 'esbuild', 'vite'],
54
+ },
55
+ },
56
+ saas: {
57
+ keywords: ['tenant', 'subscription', 'plan', 'workspace', 'organization', 'team', 'member', 'role', 'permission', 'billing', 'api-key', 'webhook', 'dashboard'],
58
+ subDomains: {
59
+ 'multi-tenant': ['tenant', 'workspace', 'organization'],
60
+ 'subscription': ['subscription', 'plan', 'billing', 'trial'],
61
+ },
62
+ },
63
+ iot: {
64
+ keywords: ['device', 'sensor', 'telemetry', 'mqtt', 'gateway', 'firmware', 'signal', 'measurement', 'monitoring', 'alert', 'threshold'],
65
+ subDomains: {
66
+ 'monitoring': ['sensor', 'telemetry', 'monitoring', 'measurement'],
67
+ 'device-management': ['device', 'firmware', 'gateway', 'provision'],
68
+ },
69
+ },
70
+ 'content-management': {
71
+ keywords: ['article', 'post', 'blog', 'page', 'cms', 'content', 'media', 'publish', 'author', 'category', 'tag', 'comment'],
72
+ subDomains: {
73
+ 'cms': ['article', 'post', 'publish', 'cms', 'content'],
74
+ 'media': ['media', 'image', 'video', 'upload', 'gallery'],
75
+ },
76
+ },
77
+ 'real-estate': {
78
+ keywords: ['property', 'listing', 'tenant', 'landlord', 'rent', 'lease', 'imovel', 'aluguel', 'inquilino', 'condominio'],
79
+ subDomains: {
80
+ 'property-management': ['property', 'tenant', 'rent', 'lease', 'condominio'],
81
+ 'listings': ['listing', 'search', 'filter', 'imovel'],
82
+ },
83
+ },
84
+ logistics: {
85
+ keywords: ['shipment', 'route', 'delivery', 'warehouse', 'fleet', 'driver', 'tracking', 'dispatch', 'load', 'cargo', 'entrega', 'rastreamento', 'frota', 'motorista'],
86
+ subDomains: {
87
+ 'fleet-management': ['fleet', 'driver', 'vehicle', 'frota', 'motorista'],
88
+ 'delivery': ['delivery', 'shipment', 'tracking', 'entrega', 'rastreamento'],
89
+ 'warehouse': ['warehouse', 'inventory', 'stock', 'storage'],
90
+ },
91
+ },
92
+ 'hr-management': {
93
+ keywords: ['employee', 'payroll', 'leave', 'attendance', 'hiring', 'candidate', 'department', 'salary', 'benefit', 'funcionario', 'folha', 'ferias', 'ponto', 'contratacao'],
94
+ subDomains: {
95
+ 'payroll': ['payroll', 'salary', 'folha', 'benefit', 'compensation'],
96
+ 'recruitment': ['hiring', 'candidate', 'interview', 'contratacao'],
97
+ 'time-tracking': ['attendance', 'leave', 'ponto', 'ferias'],
98
+ },
99
+ },
100
+ };
101
+ // Compliance mappings based on domain and geography
102
+ static COMPLIANCE_MAP = {
103
+ fintech: [
104
+ {
105
+ name: 'PCI-DSS',
106
+ reason: 'Handles financial/payment data',
107
+ mandatoryChecks: [
108
+ 'Credit card data never stored in plaintext',
109
+ 'Payment tokens used instead of raw card numbers',
110
+ 'Audit trail for all financial transactions',
111
+ 'Encryption at rest for financial data',
112
+ 'Access controls with principle of least privilege',
113
+ ],
114
+ },
115
+ ],
116
+ 'tax-processing': [
117
+ {
118
+ name: 'LGPD',
119
+ reason: 'Processes Brazilian taxpayer personal data (CPF, income, assets)',
120
+ mandatoryChecks: [
121
+ 'CPF/CNPJ data encrypted at rest and in transit',
122
+ 'Consent management for data processing',
123
+ 'Right to deletion (direito ao esquecimento)',
124
+ 'Data minimization — only collect necessary fields',
125
+ 'Data breach notification procedures',
126
+ 'DPO (Data Protection Officer) contact documented',
127
+ 'Cross-border data transfer restrictions',
128
+ ],
129
+ },
130
+ {
131
+ name: 'RFB-Compliance',
132
+ reason: 'Integrates with Receita Federal do Brasil systems',
133
+ mandatoryChecks: [
134
+ 'Digital certificate (e-CPF/e-CNPJ) handling',
135
+ 'XML schema validation against RFB specifications',
136
+ 'Audit log for all tax calculation modifications',
137
+ 'Retention period compliance (5 years minimum)',
138
+ 'Hash validation for submitted declarations',
139
+ ],
140
+ },
141
+ ],
142
+ healthtech: [
143
+ {
144
+ name: 'HIPAA',
145
+ reason: 'Handles protected health information (PHI)',
146
+ mandatoryChecks: [
147
+ 'PHI encryption at rest and in transit',
148
+ 'Access audit logging for all PHI access',
149
+ 'Minimum necessary access principle',
150
+ 'Business Associate Agreements (BAA) tracking',
151
+ 'Breach notification within 60 days',
152
+ ],
153
+ },
154
+ {
155
+ name: 'LGPD-Health',
156
+ reason: 'Processes sensitive health data under Brazilian law',
157
+ mandatoryChecks: [
158
+ 'Explicit consent for health data processing',
159
+ 'Data anonymization where possible',
160
+ 'Restricted access to health records',
161
+ 'CFM/CRM compliance for medical data',
162
+ ],
163
+ },
164
+ ],
165
+ 'e-commerce': [
166
+ {
167
+ name: 'CDC',
168
+ reason: 'Consumer Defense Code (Código de Defesa do Consumidor)',
169
+ mandatoryChecks: [
170
+ 'Clear pricing display (no hidden fees)',
171
+ 'Right of withdrawal (7 days for online purchases)',
172
+ 'Order tracking transparency',
173
+ 'Invoice generation for all transactions',
174
+ ],
175
+ },
176
+ ],
177
+ 'hr-management': [
178
+ {
179
+ name: 'LGPD-Employment',
180
+ reason: 'Processes employee personal and financial data',
181
+ mandatoryChecks: [
182
+ 'Employee data encrypted at rest',
183
+ 'Salary data access restricted to HR and payroll',
184
+ 'Data retention aligned with labor law (5 years after termination)',
185
+ 'Consent for data processing beyond employment',
186
+ ],
187
+ },
188
+ ],
189
+ };
190
+ /**
191
+ * Infer domain insights from the analysis report.
192
+ */
193
+ infer(report, projectPath) {
194
+ const allKeywords = this.extractAllKeywords(report);
195
+ // Boost keywords from project files (pyproject.toml, README, package.json)
196
+ const fileKeywords = this.extractKeywordsFromProjectFiles(projectPath);
197
+ for (const kw of fileKeywords) {
198
+ if (!allKeywords.includes(kw))
199
+ allKeywords.push(kw);
200
+ }
201
+ const { domain, subDomain, confidence } = this.classifyDomain(allKeywords);
202
+ const businessEntities = this.extractBusinessEntities(report);
203
+ const compliance = this.inferCompliance(domain, subDomain, allKeywords);
204
+ const integrations = this.detectIntegrations(report, allKeywords);
205
+ const description = this.buildDescription(report, domain, subDomain);
206
+ return {
207
+ domain,
208
+ subDomain,
209
+ description,
210
+ businessEntities,
211
+ compliance,
212
+ integrations,
213
+ keywords: allKeywords,
214
+ confidence,
215
+ };
216
+ }
217
+ /**
218
+ * Extract all relevant keywords from the project.
219
+ */
220
+ extractAllKeywords(report) {
221
+ const keywords = new Set();
222
+ // From ProjectSummary keywords
223
+ if (report.projectSummary?.keywords) {
224
+ for (const kw of report.projectSummary.keywords) {
225
+ keywords.add(kw.toLowerCase());
226
+ }
227
+ }
228
+ // From module names
229
+ if (report.projectSummary?.modules) {
230
+ for (const mod of report.projectSummary.modules) {
231
+ keywords.add(mod.name.toLowerCase());
232
+ // Split camelCase/snake_case module names
233
+ for (const part of this.splitIdentifier(mod.name)) {
234
+ keywords.add(part.toLowerCase());
235
+ }
236
+ }
237
+ }
238
+ // From file paths — extract meaningful segments
239
+ for (const node of report.dependencyGraph.nodes) {
240
+ const segments = node.split('/').filter(s => !['src', 'lib', 'app', 'core', 'common', 'shared', 'utils', 'helpers',
241
+ 'index', 'main', '__init__', 'test', 'tests', 'spec', '__tests__',
242
+ 'node_modules', 'dist', 'build', '.git'].includes(s.toLowerCase()));
243
+ for (const seg of segments) {
244
+ const name = seg.replace(/\.[^.]+$/, ''); // remove extension
245
+ for (const part of this.splitIdentifier(name)) {
246
+ if (part.length > 2) {
247
+ keywords.add(part.toLowerCase());
248
+ }
249
+ }
250
+ }
251
+ }
252
+ // From project name
253
+ if (report.projectInfo.name) {
254
+ for (const part of this.splitIdentifier(report.projectInfo.name)) {
255
+ keywords.add(part.toLowerCase());
256
+ }
257
+ }
258
+ // From description/purpose
259
+ if (report.projectSummary?.description) {
260
+ const words = report.projectSummary.description.toLowerCase().split(/\s+/);
261
+ for (const w of words) {
262
+ if (w.length > 3)
263
+ keywords.add(w.replace(/[^a-z0-9]/g, ''));
264
+ }
265
+ }
266
+ return [...keywords].filter(k => k.length > 0);
267
+ }
268
+ /**
269
+ * Classify project domain based on keyword matching.
270
+ */
271
+ classifyDomain(keywords) {
272
+ let bestDomain = 'general';
273
+ let bestSubDomain = 'general';
274
+ let bestScore = 0;
275
+ let bestMaxPossible = 1;
276
+ for (const [domain, config] of Object.entries(DomainInferrer.DOMAIN_PATTERNS)) {
277
+ const matchedKeywords = config.keywords.filter(kw => keywords.some(k => k.includes(kw) || kw.includes(k)));
278
+ const score = matchedKeywords.length;
279
+ if (score > bestScore) {
280
+ bestScore = score;
281
+ bestDomain = domain;
282
+ bestMaxPossible = config.keywords.length;
283
+ // Find best sub-domain
284
+ let bestSubScore = 0;
285
+ for (const [subDomain, subKeywords] of Object.entries(config.subDomains)) {
286
+ const subMatched = subKeywords.filter(kw => keywords.some(k => k.includes(kw) || kw.includes(k))).length;
287
+ if (subMatched > bestSubScore) {
288
+ bestSubScore = subMatched;
289
+ bestSubDomain = subDomain;
290
+ }
291
+ }
292
+ }
293
+ }
294
+ // Confidence formula:
295
+ // - Base: matched keywords / min(total possible, 8) (lower denominator = easier to reach high confidence)
296
+ // - Boost: +0.1 if sub-domain also matched (cross-validation)
297
+ // - Boost: +0.1 if multiple entities or integrations hint at the same domain
298
+ // - Cap at 0.95 (never 100% without manual confirmation)
299
+ let confidence = bestScore > 0 ? Math.min(1, bestScore / Math.min(bestMaxPossible, 8)) : 0;
300
+ // Sub-domain match boost
301
+ if (bestSubDomain !== 'general' && bestSubDomain !== bestDomain) {
302
+ confidence = Math.min(1, confidence + 0.1);
303
+ }
304
+ // Second-best domain gap boost (high gap = more certain)
305
+ let secondBestScore = 0;
306
+ for (const [domain, config] of Object.entries(DomainInferrer.DOMAIN_PATTERNS)) {
307
+ if (domain === bestDomain)
308
+ continue;
309
+ const matchedKeywords = config.keywords.filter(kw => keywords.some(k => k.includes(kw) || kw.includes(k)));
310
+ if (matchedKeywords.length > secondBestScore) {
311
+ secondBestScore = matchedKeywords.length;
312
+ }
313
+ }
314
+ if (bestScore > 0 && bestScore >= secondBestScore * 2) {
315
+ confidence = Math.min(1, confidence + 0.1);
316
+ }
317
+ // Cap at 0.95
318
+ confidence = Math.min(0.95, confidence);
319
+ return { domain: bestDomain, subDomain: bestSubDomain, confidence };
320
+ }
321
+ /**
322
+ * Extract business entities from model/entity/schema file names.
323
+ */
324
+ extractBusinessEntities(report) {
325
+ const entities = [];
326
+ const entityPatterns = [
327
+ /(?:models?|entities|entity|schemas?)\/([^/]+)\./i,
328
+ /([^/]+)\.(model|entity|schema)\./i,
329
+ /([^/]+)\.models?\./i,
330
+ ];
331
+ for (const filePath of report.dependencyGraph.nodes) {
332
+ for (const pattern of entityPatterns) {
333
+ const match = filePath.match(pattern);
334
+ if (match) {
335
+ const name = match[1].replace(/[-_]/g, ' ').replace(/\b\w/g, l => l.toUpperCase()).trim();
336
+ if (name && name !== 'Index' && name !== 'Base' && name !== 'Init') {
337
+ const layer = this.inferEntityLayer(filePath);
338
+ entities.push({
339
+ name,
340
+ source: filePath,
341
+ fields: [], // Would need AST parsing for fields
342
+ relationships: [],
343
+ layer,
344
+ });
345
+ }
346
+ }
347
+ }
348
+ }
349
+ // Deduplicate by name
350
+ const seen = new Set();
351
+ return entities.filter(e => {
352
+ const key = e.name.toLowerCase();
353
+ if (seen.has(key))
354
+ return false;
355
+ seen.add(key);
356
+ return true;
357
+ });
358
+ }
359
+ inferEntityLayer(filePath) {
360
+ const lower = filePath.toLowerCase();
361
+ if (lower.includes('/model'))
362
+ return 'model';
363
+ if (lower.includes('/entity') || lower.includes('/entities'))
364
+ return 'entity';
365
+ if (lower.includes('/schema'))
366
+ return 'schema';
367
+ if (lower.includes('/dto'))
368
+ return 'dto';
369
+ return 'unknown';
370
+ }
371
+ /**
372
+ * Infer compliance requirements from domain and keywords.
373
+ */
374
+ inferCompliance(domain, subDomain, keywords) {
375
+ const requirements = [];
376
+ // Domain-level compliance
377
+ const domainCompliance = DomainInferrer.COMPLIANCE_MAP[domain];
378
+ if (domainCompliance) {
379
+ requirements.push(...domainCompliance);
380
+ }
381
+ // Sub-domain specific compliance
382
+ const subCompliance = DomainInferrer.COMPLIANCE_MAP[subDomain];
383
+ if (subCompliance) {
384
+ requirements.push(...subCompliance);
385
+ }
386
+ // Generic LGPD if Brazilian indicators found
387
+ const brIndicators = ['cpf', 'cnpj', 'cep', 'lgpd', 'brasil', 'brazil', 'pt-br', 'ptbr', 'receita'];
388
+ const hasBrazilianContext = keywords.some(k => brIndicators.some(br => k.includes(br)));
389
+ if (hasBrazilianContext && !requirements.some(r => r.name.includes('LGPD'))) {
390
+ requirements.push({
391
+ name: 'LGPD',
392
+ reason: 'Brazilian context detected — personal data processing requires LGPD compliance',
393
+ mandatoryChecks: [
394
+ 'Personal data encrypted at rest and in transit',
395
+ 'Consent management for data processing',
396
+ 'Right to deletion implementation',
397
+ 'Data breach notification procedures',
398
+ ],
399
+ });
400
+ }
401
+ // PII detection regardless of domain
402
+ const piiIndicators = ['email', 'password', 'phone', 'address', 'ssn', 'cpf', 'passport', 'birth'];
403
+ const hasPII = keywords.some(k => piiIndicators.some(p => k.includes(p)));
404
+ if (hasPII && !requirements.some(r => r.name === 'LGPD' || r.name === 'GDPR')) {
405
+ requirements.push({
406
+ name: 'PII-Protection',
407
+ reason: 'Personal Identifiable Information (PII) detected in project entities',
408
+ mandatoryChecks: [
409
+ 'PII fields encrypted at rest',
410
+ 'Access logging for PII data',
411
+ 'Data masking in logs and error messages',
412
+ 'Secure deletion procedures',
413
+ ],
414
+ });
415
+ }
416
+ return requirements;
417
+ }
418
+ /**
419
+ * Detect external integrations from file names, imports, and keywords.
420
+ */
421
+ detectIntegrations(report, keywords) {
422
+ const integrations = [];
423
+ const allFiles = report.dependencyGraph.nodes.join(' ').toLowerCase();
424
+ const integrationPatterns = [
425
+ // Payment
426
+ { name: 'Stripe', type: 'payment', signals: ['stripe'] },
427
+ { name: 'PagSeguro', type: 'payment', signals: ['pagseguro'] },
428
+ { name: 'Mercado Pago', type: 'payment', signals: ['mercadopago', 'mercado-pago'] },
429
+ { name: 'PIX', type: 'payment', signals: ['pix'] },
430
+ // Auth
431
+ { name: 'OAuth2/OIDC', type: 'auth', signals: ['oauth', 'oidc', 'openid'] },
432
+ { name: 'JWT', type: 'auth', signals: ['jwt', 'jsonwebtoken'] },
433
+ { name: 'Keycloak', type: 'auth', signals: ['keycloak'] },
434
+ { name: 'Auth0', type: 'auth', signals: ['auth0'] },
435
+ // Database
436
+ { name: 'PostgreSQL', type: 'database', signals: ['postgres', 'postgresql', 'pg'] },
437
+ { name: 'MongoDB', type: 'database', signals: ['mongo', 'mongodb', 'mongoose'] },
438
+ { name: 'Redis', type: 'database', signals: ['redis', 'ioredis'] },
439
+ { name: 'MySQL', type: 'database', signals: ['mysql', 'mysql2'] },
440
+ { name: 'SQLite', type: 'database', signals: ['sqlite'] },
441
+ // Queue/Messaging
442
+ { name: 'RabbitMQ', type: 'queue', signals: ['rabbitmq', 'amqp'] },
443
+ { name: 'Kafka', type: 'queue', signals: ['kafka'] },
444
+ { name: 'AWS SQS', type: 'queue', signals: ['sqs'] },
445
+ { name: 'BullMQ', type: 'queue', signals: ['bull', 'bullmq'] },
446
+ // Storage
447
+ { name: 'AWS S3', type: 'storage', signals: ['s3', 'aws-sdk'] },
448
+ { name: 'MinIO', type: 'storage', signals: ['minio'] },
449
+ // Government APIs
450
+ { name: 'Receita Federal', type: 'government', signals: ['receita', 'rfb', 'ecac', 'sefaz'] },
451
+ { name: 'SERPRO', type: 'government', signals: ['serpro'] },
452
+ { name: 'eSocial', type: 'government', signals: ['esocial'] },
453
+ // Other
454
+ { name: 'Email (SMTP)', type: 'other', signals: ['smtp', 'nodemailer', 'sendgrid', 'ses'] },
455
+ { name: 'ElasticSearch', type: 'other', signals: ['elastic', 'elasticsearch'] },
456
+ { name: 'Sentry', type: 'other', signals: ['sentry'] },
457
+ ];
458
+ for (const pattern of integrationPatterns) {
459
+ const matched = pattern.signals.find(s => allFiles.includes(s) || keywords.some(k => k.includes(s)));
460
+ if (matched) {
461
+ integrations.push({
462
+ name: pattern.name,
463
+ type: pattern.type,
464
+ detectedFrom: matched,
465
+ });
466
+ }
467
+ }
468
+ return integrations;
469
+ }
470
+ /**
471
+ * Build a human-readable description of the project.
472
+ */
473
+ buildDescription(report, domain, subDomain) {
474
+ const summary = report.projectSummary;
475
+ if (summary?.description && summary.description.length > 20) {
476
+ return summary.description;
477
+ }
478
+ const name = report.projectInfo.name || 'Project';
479
+ const langs = report.projectInfo.primaryLanguages.join('/');
480
+ const files = report.projectInfo.totalFiles;
481
+ const lines = report.projectInfo.totalLines.toLocaleString();
482
+ if (domain !== 'general') {
483
+ return `${name} — ${domain}/${subDomain} application built with ${langs}. ${files} files, ${lines} lines.`;
484
+ }
485
+ return `${name} — ${langs} application with ${files} files and ${lines} lines.`;
486
+ }
487
+ /**
488
+ * Split camelCase, PascalCase, snake_case, kebab-case identifiers into parts.
489
+ */
490
+ /**
491
+ * Extract keywords from project files on disk (pyproject.toml, README.md, package.json).
492
+ * These provide high-value domain signals that the scanner may miss.
493
+ */
494
+ extractKeywordsFromProjectFiles(projectPath) {
495
+ const keywords = [];
496
+ // pyproject.toml — description, classifiers, project name
497
+ const pyprojectPath = join(projectPath, 'pyproject.toml');
498
+ if (existsSync(pyprojectPath)) {
499
+ try {
500
+ const content = readFileSync(pyprojectPath, 'utf-8');
501
+ // Extract description
502
+ const descMatch = content.match(/description\s*=\s*"([^"]+)"/);
503
+ if (descMatch) {
504
+ const words = descMatch[1].toLowerCase().split(/\s+/);
505
+ for (const w of words) {
506
+ if (w.length > 3)
507
+ keywords.push(w.replace(/[^a-z0-9]/g, ''));
508
+ }
509
+ }
510
+ // Extract classifiers (e.g., "Topic :: Office/Business :: Financial")
511
+ const classifiers = content.match(/classifiers\s*=\s*\[([\s\S]*?)\]/);
512
+ if (classifiers) {
513
+ const topics = classifiers[1].match(/"Topic\s*::\s*([^"]+)"/g);
514
+ if (topics) {
515
+ for (const topic of topics) {
516
+ const parts = topic.replace(/"/g, '').split('::').map(p => p.trim().toLowerCase());
517
+ for (const p of parts) {
518
+ if (p.length > 3 && p !== 'topic')
519
+ keywords.push(p.replace(/[^a-z0-9]/g, ''));
520
+ }
521
+ }
522
+ }
523
+ }
524
+ // Extract project name
525
+ const nameMatch = content.match(/\[project\]\s*\n(?:[\s\S]*?)name\s*=\s*"([^"]+)"/);
526
+ if (nameMatch) {
527
+ for (const part of this.splitIdentifier(nameMatch[1])) {
528
+ keywords.push(part.toLowerCase());
529
+ }
530
+ }
531
+ }
532
+ catch { /* ignore read errors */ }
533
+ }
534
+ // README.md — first 500 chars for domain keywords
535
+ const readmePaths = ['README.md', 'readme.md', 'README.rst'];
536
+ for (const readmeName of readmePaths) {
537
+ const readmePath = join(projectPath, readmeName);
538
+ if (existsSync(readmePath)) {
539
+ try {
540
+ const content = readFileSync(readmePath, 'utf-8').slice(0, 1500);
541
+ // Extract heading and first paragraph
542
+ const lines = content.split('\n').filter(l => l.trim().length > 0).slice(0, 10);
543
+ for (const line of lines) {
544
+ const words = line.replace(/[#*_`\[\]()]/g, '').toLowerCase().split(/\s+/);
545
+ for (const w of words) {
546
+ if (w.length > 3)
547
+ keywords.push(w.replace(/[^a-z0-9]/g, ''));
548
+ }
549
+ }
550
+ }
551
+ catch { /* ignore */ }
552
+ break;
553
+ }
554
+ }
555
+ // package.json — description and keywords
556
+ const pkgPath = join(projectPath, 'package.json');
557
+ if (existsSync(pkgPath)) {
558
+ try {
559
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
560
+ if (pkg.description) {
561
+ const words = pkg.description.toLowerCase().split(/\s+/);
562
+ for (const w of words) {
563
+ if (w.length > 3)
564
+ keywords.push(w.replace(/[^a-z0-9]/g, ''));
565
+ }
566
+ }
567
+ if (Array.isArray(pkg.keywords)) {
568
+ for (const kw of pkg.keywords) {
569
+ keywords.push(kw.toLowerCase());
570
+ }
571
+ }
572
+ }
573
+ catch { /* ignore */ }
574
+ }
575
+ return keywords.filter(k => k.length > 0);
576
+ }
577
+ splitIdentifier(name) {
578
+ return name
579
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
580
+ .replace(/[-_./\\]/g, ' ')
581
+ .split(/\s+/)
582
+ .filter(p => p.length > 0);
583
+ }
584
+ }
585
+ //# sourceMappingURL=domain-inferrer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-inferrer.js","sourceRoot":"","sources":["../../../../src/core/agent-generator/domain-inferrer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { AnalysisReport } from '@girardelli/architect-core/src/core/types/core.js';
2
+ import { RefactoringPlan } from '@girardelli/architect-core/src/core/types/rules.js';
3
+ import { StackInfo } from '@girardelli/architect-agents/src/core/agent-generator/types/stack.js';
4
+ import { AgentAuditFinding } from '@girardelli/architect-agents/src/core/agent-generator/types/agent.js';
5
+ export declare class AuditEngine {
6
+ auditExisting(agentDir: string, stack: StackInfo, report: AnalysisReport, plan: RefactoringPlan): AgentAuditFinding[];
7
+ findAgentByRole(agentDir: string, role: string): string | null;
8
+ }