@evolith/smart-cli 0.0.1-beta

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 (241) hide show
  1. package/ARCHITECTURE.md +121 -0
  2. package/README.es.md +425 -0
  3. package/README.md +419 -0
  4. package/dist/app.module.d.ts +2 -0
  5. package/dist/app.module.js +59 -0
  6. package/dist/app.module.js.map +1 -0
  7. package/dist/application/services/index.d.ts +54 -0
  8. package/dist/application/services/index.js +307 -0
  9. package/dist/application/services/index.js.map +1 -0
  10. package/dist/application/services/services.test.d.ts +1 -0
  11. package/dist/application/services/services.test.js +176 -0
  12. package/dist/application/services/services.test.js.map +1 -0
  13. package/dist/application/use-cases/validate-satellite.use-case.d.ts +18 -0
  14. package/dist/application/use-cases/validate-satellite.use-case.js +92 -0
  15. package/dist/application/use-cases/validate-satellite.use-case.js.map +1 -0
  16. package/dist/application/use-cases/validate-satellite.use-case.spec.d.ts +1 -0
  17. package/dist/application/use-cases/validate-satellite.use-case.spec.js +102 -0
  18. package/dist/application/use-cases/validate-satellite.use-case.spec.js.map +1 -0
  19. package/dist/commands/adr/adr.command.d.ts +28 -0
  20. package/dist/commands/adr/adr.command.js +357 -0
  21. package/dist/commands/adr/adr.command.js.map +1 -0
  22. package/dist/commands/architecture/scaffold.command.d.ts +7 -0
  23. package/dist/commands/architecture/scaffold.command.js +162 -0
  24. package/dist/commands/architecture/scaffold.command.js.map +1 -0
  25. package/dist/commands/commands.test.d.ts +1 -0
  26. package/dist/commands/commands.test.js +131 -0
  27. package/dist/commands/commands.test.js.map +1 -0
  28. package/dist/commands/completion/completion.command.d.ts +20 -0
  29. package/dist/commands/completion/completion.command.js +215 -0
  30. package/dist/commands/completion/completion.command.js.map +1 -0
  31. package/dist/commands/docs/docs.command.d.ts +9 -0
  32. package/dist/commands/docs/docs.command.js +77 -0
  33. package/dist/commands/docs/docs.command.js.map +1 -0
  34. package/dist/commands/history/history.command.d.ts +29 -0
  35. package/dist/commands/history/history.command.js +268 -0
  36. package/dist/commands/history/history.command.js.map +1 -0
  37. package/dist/commands/init/agents.command.d.ts +22 -0
  38. package/dist/commands/init/agents.command.js +502 -0
  39. package/dist/commands/init/agents.command.js.map +1 -0
  40. package/dist/commands/init/init.command.d.ts +20 -0
  41. package/dist/commands/init/init.command.js +329 -0
  42. package/dist/commands/init/init.command.js.map +1 -0
  43. package/dist/commands/init/upgrade.command.d.ts +9 -0
  44. package/dist/commands/init/upgrade.command.js +77 -0
  45. package/dist/commands/init/upgrade.command.js.map +1 -0
  46. package/dist/commands/mcp/mcp-serve.command.d.ts +15 -0
  47. package/dist/commands/mcp/mcp-serve.command.js +106 -0
  48. package/dist/commands/mcp/mcp-serve.command.js.map +1 -0
  49. package/dist/commands/sdlc/generate-domain.command.d.ts +5 -0
  50. package/dist/commands/sdlc/generate-domain.command.js +55 -0
  51. package/dist/commands/sdlc/generate-domain.command.js.map +1 -0
  52. package/dist/commands/sdlc/handoff.command.d.ts +22 -0
  53. package/dist/commands/sdlc/handoff.command.js +273 -0
  54. package/dist/commands/sdlc/handoff.command.js.map +1 -0
  55. package/dist/commands/sdlc/sdlc.command.d.ts +4 -0
  56. package/dist/commands/sdlc/sdlc.command.js +34 -0
  57. package/dist/commands/sdlc/sdlc.command.js.map +1 -0
  58. package/dist/commands/standards/standards.command.d.ts +27 -0
  59. package/dist/commands/standards/standards.command.js +308 -0
  60. package/dist/commands/standards/standards.command.js.map +1 -0
  61. package/dist/commands/validate/validate.command.d.ts +19 -0
  62. package/dist/commands/validate/validate.command.js +231 -0
  63. package/dist/commands/validate/validate.command.js.map +1 -0
  64. package/dist/config/runtimes.json +196 -0
  65. package/dist/config/tool-catalog.json +343 -0
  66. package/dist/core/abstractions/index.d.ts +6 -0
  67. package/dist/core/abstractions/index.js +23 -0
  68. package/dist/core/abstractions/index.js.map +1 -0
  69. package/dist/core/abstractions/interfaces.d.ts +60 -0
  70. package/dist/core/abstractions/interfaces.js +5 -0
  71. package/dist/core/abstractions/interfaces.js.map +1 -0
  72. package/dist/core/abstractions/providers/config-parser.provider.d.ts +15 -0
  73. package/dist/core/abstractions/providers/config-parser.provider.js +68 -0
  74. package/dist/core/abstractions/providers/config-parser.provider.js.map +1 -0
  75. package/dist/core/abstractions/providers/logger.provider.d.ts +10 -0
  76. package/dist/core/abstractions/providers/logger.provider.js +84 -0
  77. package/dist/core/abstractions/providers/logger.provider.js.map +1 -0
  78. package/dist/core/abstractions/providers/mock-filesystem.provider.d.ts +30 -0
  79. package/dist/core/abstractions/providers/mock-filesystem.provider.js +122 -0
  80. package/dist/core/abstractions/providers/mock-filesystem.provider.js.map +1 -0
  81. package/dist/core/abstractions/providers/node-filesystem.provider.d.ts +19 -0
  82. package/dist/core/abstractions/providers/node-filesystem.provider.js +104 -0
  83. package/dist/core/abstractions/providers/node-filesystem.provider.js.map +1 -0
  84. package/dist/core/architecture/nx-workspace.strategy.d.ts +11 -0
  85. package/dist/core/architecture/nx-workspace.strategy.js +107 -0
  86. package/dist/core/architecture/nx-workspace.strategy.js.map +1 -0
  87. package/dist/core/architecture/workspace-manager.strategy.d.ts +7 -0
  88. package/dist/core/architecture/workspace-manager.strategy.js +3 -0
  89. package/dist/core/architecture/workspace-manager.strategy.js.map +1 -0
  90. package/dist/core/config/config.service.d.ts +15 -0
  91. package/dist/core/config/config.service.js +55 -0
  92. package/dist/core/config/config.service.js.map +1 -0
  93. package/dist/core/config/config.service.spec.d.ts +1 -0
  94. package/dist/core/config/config.service.spec.js +43 -0
  95. package/dist/core/config/config.service.spec.js.map +1 -0
  96. package/dist/core/di/container.d.ts +25 -0
  97. package/dist/core/di/container.js +87 -0
  98. package/dist/core/di/container.js.map +1 -0
  99. package/dist/core/di/container.spec.d.ts +1 -0
  100. package/dist/core/di/container.spec.js +137 -0
  101. package/dist/core/di/container.spec.js.map +1 -0
  102. package/dist/core/errors/index.d.ts +26 -0
  103. package/dist/core/errors/index.js +67 -0
  104. package/dist/core/errors/index.js.map +1 -0
  105. package/dist/core/filesystem/file-manager.service.d.ts +4 -0
  106. package/dist/core/filesystem/file-manager.service.js +96 -0
  107. package/dist/core/filesystem/file-manager.service.js.map +1 -0
  108. package/dist/core/filesystem/file-manager.service.spec.d.ts +1 -0
  109. package/dist/core/filesystem/file-manager.service.spec.js +103 -0
  110. package/dist/core/filesystem/file-manager.service.spec.js.map +1 -0
  111. package/dist/core/mcp/mcp-server.service.d.ts +7 -0
  112. package/dist/core/mcp/mcp-server.service.js +31 -0
  113. package/dist/core/mcp/mcp-server.service.js.map +1 -0
  114. package/dist/core/mcp/metrics.service.d.ts +37 -0
  115. package/dist/core/mcp/metrics.service.js +72 -0
  116. package/dist/core/mcp/metrics.service.js.map +1 -0
  117. package/dist/core/mcp/prompts/index.d.ts +22 -0
  118. package/dist/core/mcp/prompts/index.js +175 -0
  119. package/dist/core/mcp/prompts/index.js.map +1 -0
  120. package/dist/core/mcp/resources/index.d.ts +11 -0
  121. package/dist/core/mcp/resources/index.js +193 -0
  122. package/dist/core/mcp/resources/index.js.map +1 -0
  123. package/dist/core/mcp/server.d.ts +25 -0
  124. package/dist/core/mcp/server.js +413 -0
  125. package/dist/core/mcp/server.js.map +1 -0
  126. package/dist/core/mcp/tools/agent.d.ts +41 -0
  127. package/dist/core/mcp/tools/agent.js +195 -0
  128. package/dist/core/mcp/tools/agent.js.map +1 -0
  129. package/dist/core/mcp/tools/architecture.d.ts +27 -0
  130. package/dist/core/mcp/tools/architecture.js +166 -0
  131. package/dist/core/mcp/tools/architecture.js.map +1 -0
  132. package/dist/core/mcp/tools/sdlc.d.ts +32 -0
  133. package/dist/core/mcp/tools/sdlc.js +189 -0
  134. package/dist/core/mcp/tools/sdlc.js.map +1 -0
  135. package/dist/core/mcp/tools/tool-utils.d.ts +4 -0
  136. package/dist/core/mcp/tools/tool-utils.js +18 -0
  137. package/dist/core/mcp/tools/tool-utils.js.map +1 -0
  138. package/dist/core/mcp/tools/validate.d.ts +18 -0
  139. package/dist/core/mcp/tools/validate.js +56 -0
  140. package/dist/core/mcp/tools/validate.js.map +1 -0
  141. package/dist/core/mcp/watcher.service.d.ts +8 -0
  142. package/dist/core/mcp/watcher.service.js +82 -0
  143. package/dist/core/mcp/watcher.service.js.map +1 -0
  144. package/dist/core/mcp/watcher.service.spec.d.ts +1 -0
  145. package/dist/core/mcp/watcher.service.spec.js +70 -0
  146. package/dist/core/mcp/watcher.service.spec.js.map +1 -0
  147. package/dist/core/observability/command-watcher.d.ts +45 -0
  148. package/dist/core/observability/command-watcher.js +168 -0
  149. package/dist/core/observability/command-watcher.js.map +1 -0
  150. package/dist/core/observability/error-reporter.d.ts +47 -0
  151. package/dist/core/observability/error-reporter.js +163 -0
  152. package/dist/core/observability/error-reporter.js.map +1 -0
  153. package/dist/core/observability/index.d.ts +4 -0
  154. package/dist/core/observability/index.js +24 -0
  155. package/dist/core/observability/index.js.map +1 -0
  156. package/dist/core/observability/observability.test.d.ts +1 -0
  157. package/dist/core/observability/observability.test.js +224 -0
  158. package/dist/core/observability/observability.test.js.map +1 -0
  159. package/dist/core/observability/structured-logger.d.ts +53 -0
  160. package/dist/core/observability/structured-logger.js +123 -0
  161. package/dist/core/observability/structured-logger.js.map +1 -0
  162. package/dist/core/observability/timing.d.ts +23 -0
  163. package/dist/core/observability/timing.js +140 -0
  164. package/dist/core/observability/timing.js.map +1 -0
  165. package/dist/core/services/command-executor.service.d.ts +3 -0
  166. package/dist/core/services/command-executor.service.js +12 -0
  167. package/dist/core/services/command-executor.service.js.map +1 -0
  168. package/dist/core/services/command-history.service.d.ts +38 -0
  169. package/dist/core/services/command-history.service.js +146 -0
  170. package/dist/core/services/command-history.service.js.map +1 -0
  171. package/dist/core/services/command-providers.d.ts +1 -0
  172. package/dist/core/services/command-providers.js +17 -0
  173. package/dist/core/services/command-providers.js.map +1 -0
  174. package/dist/core/services/runtime-catalog.service.d.ts +2 -0
  175. package/dist/core/services/runtime-catalog.service.js +7 -0
  176. package/dist/core/services/runtime-catalog.service.js.map +1 -0
  177. package/dist/core/sync/sync.service.d.ts +4 -0
  178. package/dist/core/sync/sync.service.js +81 -0
  179. package/dist/core/sync/sync.service.js.map +1 -0
  180. package/dist/core/sync/sync.service.spec.d.ts +1 -0
  181. package/dist/core/sync/sync.service.spec.js +63 -0
  182. package/dist/core/sync/sync.service.spec.js.map +1 -0
  183. package/dist/core/validators/ruleset-validator.service.d.ts +56 -0
  184. package/dist/core/validators/ruleset-validator.service.js +263 -0
  185. package/dist/core/validators/ruleset-validator.service.js.map +1 -0
  186. package/dist/core/validators/ruleset-validator.service.spec.d.ts +1 -0
  187. package/dist/core/validators/ruleset-validator.service.spec.js +121 -0
  188. package/dist/core/validators/ruleset-validator.service.spec.js.map +1 -0
  189. package/dist/domain/entities/index.d.ts +72 -0
  190. package/dist/domain/entities/index.js +119 -0
  191. package/dist/domain/entities/index.js.map +1 -0
  192. package/dist/domain/interfaces.d.ts +224 -0
  193. package/dist/domain/interfaces.js +3 -0
  194. package/dist/domain/interfaces.js.map +1 -0
  195. package/dist/domain/services/adr.service.d.ts +50 -0
  196. package/dist/domain/services/adr.service.js +125 -0
  197. package/dist/domain/services/adr.service.js.map +1 -0
  198. package/dist/domain/services/agent-registry.service.d.ts +26 -0
  199. package/dist/domain/services/agent-registry.service.js +152 -0
  200. package/dist/domain/services/agent-registry.service.js.map +1 -0
  201. package/dist/domain/services/index.d.ts +33 -0
  202. package/dist/domain/services/index.js +126 -0
  203. package/dist/domain/services/index.js.map +1 -0
  204. package/dist/domain/services/services.test.d.ts +1 -0
  205. package/dist/domain/services/services.test.js +236 -0
  206. package/dist/domain/services/services.test.js.map +1 -0
  207. package/dist/domain/services/standards.service.d.ts +47 -0
  208. package/dist/domain/services/standards.service.js +129 -0
  209. package/dist/domain/services/standards.service.js.map +1 -0
  210. package/dist/domain/services/tool-usage-telemetry.service.d.ts +46 -0
  211. package/dist/domain/services/tool-usage-telemetry.service.js +181 -0
  212. package/dist/domain/services/tool-usage-telemetry.service.js.map +1 -0
  213. package/dist/infrastructure/catalog/catalog-loader.d.ts +22 -0
  214. package/dist/infrastructure/catalog/catalog-loader.js +135 -0
  215. package/dist/infrastructure/catalog/catalog-loader.js.map +1 -0
  216. package/dist/infrastructure/catalog/catalog-loader.test.d.ts +1 -0
  217. package/dist/infrastructure/catalog/catalog-loader.test.js +184 -0
  218. package/dist/infrastructure/catalog/catalog-loader.test.js.map +1 -0
  219. package/dist/infrastructure/cli/command-executor.d.ts +20 -0
  220. package/dist/infrastructure/cli/command-executor.js +109 -0
  221. package/dist/infrastructure/cli/command-executor.js.map +1 -0
  222. package/dist/infrastructure/cli/command-executor.test.d.ts +1 -0
  223. package/dist/infrastructure/cli/command-executor.test.js +98 -0
  224. package/dist/infrastructure/cli/command-executor.test.js.map +1 -0
  225. package/dist/infrastructure/cli/providers/index.d.ts +52 -0
  226. package/dist/infrastructure/cli/providers/index.js +175 -0
  227. package/dist/infrastructure/cli/providers/index.js.map +1 -0
  228. package/dist/infrastructure/formatters/output-formatter.service.d.ts +28 -0
  229. package/dist/infrastructure/formatters/output-formatter.service.js +198 -0
  230. package/dist/infrastructure/formatters/output-formatter.service.js.map +1 -0
  231. package/dist/main.d.ts +2 -0
  232. package/dist/main.js +10 -0
  233. package/dist/main.js.map +1 -0
  234. package/dist/test/mocks/index.d.ts +44 -0
  235. package/dist/test/mocks/index.js +135 -0
  236. package/dist/test/mocks/index.js.map +1 -0
  237. package/package.json +80 -0
  238. package/shell/completion.bash +85 -0
  239. package/shell/completion.fish +72 -0
  240. package/shell/completion.zsh +83 -0
  241. package/templates/evolith.yaml.example +45 -0
@@ -0,0 +1,343 @@
1
+ {
2
+ "_comment": "Evolith Tool Catalog per Phase - Extensible, runtime-aware",
3
+ "catalogVersion": "1.0.0",
4
+ "lastUpdated": "2026-06-06",
5
+ "phases": {
6
+ "phase-0": {
7
+ "description": "Foundation - Repository initialized",
8
+ "gateChecks": ["evolith.yaml exists", "coreRef.version pinned"],
9
+ "artifacts": ["evolith.yaml", "README.md", "evolith-product-vision-master.md"]
10
+ },
11
+ "phase-1": {
12
+ "description": "Structure - Project scaffolded",
13
+ "gateChecks": ["package.json exists", "src/ directory exists", "bilingual README"],
14
+ "artifacts": ["package.json", "src/", "README.es.md"],
15
+ "toolGroups": {
16
+ "runtime": {
17
+ "question": "¿Qué runtime usarás?",
18
+ "defaultOption": "nodejs",
19
+ "optionsFromCatalog": true,
20
+ "toolMapping": {
21
+ "nodejs": ["tsc", "jest", "eslint", "prettier"],
22
+ "typescript": ["tsc", "jest", "eslint", "prettier"],
23
+ "dotnet": ["dotnet CLI", "xUnit", "dotnet-format"],
24
+ "python": ["pytest", "black", "ruff", "mypy"]
25
+ }
26
+ },
27
+ "monorepo": {
28
+ "question": "¿Monorepo? (Convention: None para projects pequeños)",
29
+ "defaultOption": "none",
30
+ "optionsFromCatalog": true,
31
+ "toolMapping": {
32
+ "nx": ["nx", "@nx/js", "@nx/node"],
33
+ "npm-workspaces": ["npm"],
34
+ "pnpm-workspaces": ["pnpm"],
35
+ "rush": ["@microsoft/rush"],
36
+ "none": []
37
+ }
38
+ },
39
+ "architecture": {
40
+ "question": "¿Patrón de arquitectura?",
41
+ "defaultOption": "clean",
42
+ "optionsFromCatalog": true,
43
+ "scaffoldCommands": {
44
+ "clean": "evolith scaffold --pattern=clean",
45
+ "hexagonal": "evolith scaffold --pattern=hexagonal",
46
+ "ddd": "evolith scaffold --pattern=ddd",
47
+ "event-driven": "evolith scaffold --pattern=event-driven"
48
+ }
49
+ },
50
+ "database": {
51
+ "question": "¿Base de datos?",
52
+ "defaultOption": "postgresql",
53
+ "optionsFromCatalog": true,
54
+ "toolMapping": {
55
+ "postgresql": ["typeorm", "pg", "ef-core", "sqlalchemy"],
56
+ "mongodb": ["mongoose", "mongodb-driver", "mongo"],
57
+ "sqlserver": ["ef-core", "mssql"],
58
+ "sqlite": ["better-sqlite3", "ef-core"]
59
+ }
60
+ },
61
+ "apiProtocol": {
62
+ "question": "¿Protocolo API?",
63
+ "defaultOption": "rest",
64
+ "optionsFromCatalog": true,
65
+ "toolMapping": {
66
+ "rest": ["swagger", "openapi"],
67
+ "graphql": ["apollo", "graphql"],
68
+ "grpc": ["grpc-tools", "protobuf"]
69
+ }
70
+ }
71
+ },
72
+ "defaultTools": {
73
+ "nodejs": ["typescript", "jest", "eslint", "prettier", "husky"],
74
+ "typescript": ["typescript", "jest", "eslint", "prettier", "husky"],
75
+ "dotnet": [".NET SDK", "xUnit", "dotnet-format"],
76
+ "python": ["pytest", "black", "ruff", "mypy"]
77
+ }
78
+ },
79
+ "phase-2": {
80
+ "description": "Governance - Rulesets and ACL configured",
81
+ "gateChecks": ["rulesets/ exists", "ACL rules present", ".harness/ exists"],
82
+ "artifacts": ["rulesets/", ".harness/", "acl/"],
83
+ "toolGroups": {
84
+ "acl": {
85
+ "question": "¿Validación ACL?",
86
+ "defaultOption": "yes",
87
+ "options": [
88
+ { "value": "yes", "label": "Sí", "description": "Anti-Corruption Layer con validación de esquemas" },
89
+ { "value": "minimal", "label": "Mínimo", "description": "Solo logging de transformaciones" },
90
+ { "value": "no", "label": "No", "description": "Avanzar sin validación ACL" }
91
+ ],
92
+ "tools": ["acl-schema-validator", "transformation-logger"]
93
+ },
94
+ "adr": {
95
+ "question": "¿Sistema ADR?",
96
+ "defaultOption": "yes",
97
+ "options": [
98
+ { "value": "yes", "label": "Sí", "description": "ADR completo con matriz y templates" },
99
+ { "value": "minimal", "label": "Mínimo", "description": "Solo registro sin template" },
100
+ { "value": "no", "label": "No", "description": "Avanzar sin ADR" }
101
+ ],
102
+ "tools": ["adr-create", "adr-matrix", "adr-template"]
103
+ },
104
+ "hooks": {
105
+ "question": "¿Git hooks?",
106
+ "defaultOption": "yes",
107
+ "options": [
108
+ { "value": "yes", "label": "Sí (Husky)", "description": "Pre-commit con validación Evolith" },
109
+ { "value": "lefthook", "label": "Lefthook", "description": "Alternativa multiplataforma" },
110
+ { "value": "no", "label": "No", "description": "Avanzar sin hooks" }
111
+ ],
112
+ "tools": ["husky", "lefthook"]
113
+ },
114
+ "bilingual": {
115
+ "question": "¿Documentación bilingüe?",
116
+ "defaultOption": "yes",
117
+ "options": [
118
+ { "value": "yes", "label": "Sí", "description": "EN + ES para toda la documentación" },
119
+ { "value": "es-only", "label": "Solo ES", "description": "Solo español" },
120
+ { "value": "no", "label": "No", "description": "Solo inglés" }
121
+ ],
122
+ "tools": ["check-bilingual-parity", "bilingual-coverage"]
123
+ }
124
+ },
125
+ "defaultTools": ["acl-schema-validator", "adr-registry", "husky", "validate-docs", "check-bilingual-parity"]
126
+ },
127
+ "phase-3": {
128
+ "description": "Architecture - ADRs and Bounded Contexts defined",
129
+ "gateChecks": ["ADR exists", "ADR matrix updated", "Bounded context map defined"],
130
+ "artifacts": ["reference/architecture/adrs/", "bounded-context-map.json"],
131
+ "toolGroups": {
132
+ "contextMapping": {
133
+ "question": "¿Context Mapping?",
134
+ "defaultOption": "yes",
135
+ "options": [
136
+ { "value": "yes", "label": "Sí", "description": "Bounded Context Map completo" },
137
+ { "value": "minimal", "label": "Mínimo", "description": "Solo lista de contextos" },
138
+ { "value": "no", "label": "No", "description": "Avanzar sin context mapping" }
139
+ ],
140
+ "tools": ["context-mapper", "context-map-renderer"]
141
+ },
142
+ "adrCreation": {
143
+ "question": "¿Creación ADR?",
144
+ "defaultOption": "yes",
145
+ "options": [
146
+ { "value": "yes", "label": "Sí", "description": "Templates y COMandos ADR" },
147
+ { "value": "manual", "label": "Manual", "description": "Solo templates, sin comandos" },
148
+ { "value": "no", "label": "No", "description": "Avanzar sin ADR tooling" }
149
+ ],
150
+ "tools": ["adr-create", "adr-template"]
151
+ },
152
+ "contracts": {
153
+ "question": "¿Contracts Registry?",
154
+ "defaultOption": "yes",
155
+ "options": [
156
+ { "value": "yes", "label": "Sí", "description": "Inter-context contracts documentados" },
157
+ { "value": "openapi", "label": "OpenAPI only", "description": "Contracts via OpenAPI spec" },
158
+ { "value": "no", "label": "No", "description": "Avanzar sin contract registry" }
159
+ ],
160
+ "tools": ["contract-registry", "openapi-generator"]
161
+ },
162
+ "events": {
163
+ "question": "¿Event Schemas?",
164
+ "defaultOption": "yes",
165
+ "options": [
166
+ { "value": "yes", "label": "Sí", "description": "Event Schema Registry completo" },
167
+ { "value": "kafka", "label": "Kafka Schema Registry", "description": "Confluent Schema Registry" },
168
+ { "value": "no", "label": "No", "description": "Avanzar sin event schemas" }
169
+ ],
170
+ "tools": ["event-schema-registry", "schema-validator"]
171
+ },
172
+ "patterns": {
173
+ "question": "¿Patrones adicionales?",
174
+ "defaultOption": "none",
175
+ "options": [
176
+ { "value": "none", "label": "Ninguno", "description": "Sin patrones adicionales" },
177
+ { "value": "event-sourcing", "label": "Event Sourcing", "description": "Event store para agregados" },
178
+ { "value": "cqrs", "label": "CQRS", "description": "Command Query Separation" },
179
+ { "value": " saga", "label": "Saga/Orchestration", "description": "Transacciones distribuidas" }
180
+ ],
181
+ "tools": ["event-store", "cqrs-projections", "saga-orchestrator"]
182
+ }
183
+ },
184
+ "defaultTools": ["context-mapper", "adr-create", "contract-registry", "event-schema-registry"]
185
+ },
186
+ "phase-4": {
187
+ "description": "Production - Container, CI/CD, Observability",
188
+ "gateChecks": ["Dockerfile exists", "CI/CD configured", "DORA metrics"],
189
+ "artifacts": ["Dockerfile", ".github/workflows/", "observability.config.json"],
190
+ "toolGroups": {
191
+ "container": {
192
+ "question": "¿Container?",
193
+ "defaultOption": "docker",
194
+ "options": [
195
+ { "value": "docker", "label": "Docker", "description": "Dockerfile + Docker Compose" },
196
+ { "value": "docker-kaniko", "label": "Docker + Kaniko", "description": "Build sin Docker daemon" },
197
+ { "value": "buildpacks", "label": "Cloud Native Buildpacks", "description": "Pack para builds automáticos" },
198
+ { "value": "none", "label": "No", "description": "Avanzar sin container" }
199
+ ],
200
+ "tools": ["dockerfile-generator", "docker-compose-dev"]
201
+ },
202
+ "cicd": {
203
+ "question": "¿CI/CD?",
204
+ "defaultOption": "github-actions",
205
+ "options": [
206
+ { "value": "github-actions", "label": "GitHub Actions", "description": "Workflows en .github/workflows/" },
207
+ { "value": "gitlab-ci", "label": "GitLab CI", "description": ".gitlab-ci.yml" },
208
+ { "value": "azure-pipelines", "label": "Azure Pipelines", "description": "azure-pipelines.yml" },
209
+ { "value": "jenkins", "label": "Jenkins", "description": "Jenkinsfile" },
210
+ { "value": "none", "label": "No", "description": "Avanzar sin CI/CD" }
211
+ ],
212
+ "tools": ["ci-workflow-generator", "cd-pipeline"]
213
+ },
214
+ "orchestration": {
215
+ "question": "¿Orquestación?",
216
+ "defaultOption": "none",
217
+ "options": [
218
+ { "value": "none", "label": "None (dev/test)", "description": "Solo Docker, no K8s" },
219
+ { "value": "kubernetes", "label": "Kubernetes", "description": "Helm + manifests" },
220
+ { "value": "docker-swarm", "label": "Docker Swarm", "description": "Stack compose" }
221
+ ],
222
+ "tools": ["k8s-manifests", "helm-chart", "ingress-controller"]
223
+ },
224
+ "secrets": {
225
+ "question": "¿Secrets management?",
226
+ "defaultOption": "env",
227
+ "options": [
228
+ { "value": "env", "label": "Environment vars", "description": "Simple, file-based (.env)" },
229
+ { "value": "vault", "label": "HashiCorp Vault", "description": "Dynamic secrets, rotation" },
230
+ { "value": "aws-secrets", "label": "AWS Secrets Manager", "description": "Para AWS deployments" },
231
+ { "value": "azure-keyvault", "label": "Azure Key Vault", "description": "Para Azure deployments" }
232
+ ],
233
+ "tools": ["secrets-injector", "vault-agent", "aws-secrets-sync"]
234
+ }
235
+ },
236
+ "defaultTools": ["dockerfile", "github-actions", "otel-instrumentation", "env-secrets"]
237
+ },
238
+ "phase-5": {
239
+ "description": "Observability - DORA metrics, alerting, dashboards",
240
+ "gateChecks": ["Metrics collected", "Traces instrumented", "Logs aggregated"],
241
+ "artifacts": ["grafana-dashboard.json", "alert-rules.yaml", "slo-config.json"],
242
+ "toolGroups": {
243
+ "tracing": {
244
+ "question": "¿Tracing?",
245
+ "defaultOption": "jaeger",
246
+ "options": [
247
+ { "value": "jaeger", "label": "Jaeger", "description": "OpenTelemetry-compatible tracer" },
248
+ { "value": "zipkin", "label": "Zipkin", "description": "Legacy compatible" },
249
+ { "value": "aws-xray", "label": "AWS X-Ray", "description": "Para AWS" },
250
+ { "value": "none", "label": "No", "description": "Sin distributed tracing" }
251
+ ],
252
+ "tools": ["jaeger-agent", "otel-collector-trace"]
253
+ },
254
+ "metrics": {
255
+ "question": "¿Metrics?",
256
+ "defaultOption": "prometheus",
257
+ "options": [
258
+ { "value": "prometheus", "label": "Prometheus", "description": "Pull-based metrics" },
259
+ { "value": "datadog", "label": "Datadog", "description": "APM + metrics" },
260
+ { "value": "cloudwatch", "label": "CloudWatch", "description": "AWS metrics" },
261
+ { "value": "none", "label": "No", "description": "Sin metrics" }
262
+ ],
263
+ "tools": ["prometheus-server", "node-exporter", "metrics-adapter"]
264
+ },
265
+ "logs": {
266
+ "question": "¿Log aggregation?",
267
+ "defaultOption": "loki",
268
+ "options": [
269
+ { "value": "loki", "label": "Loki", "description": "Log aggregation, Prometheus-compatible" },
270
+ { "value": "elasticsearch", "label": "Elasticsearch", "description": "ELK stack" },
271
+ { "value": "cloudwatch-logs", "label": "CloudWatch Logs", "description": "AWS log aggregation" },
272
+ { "value": "none", "label": "No", "description": "Sin log aggregation" }
273
+ ],
274
+ "tools": ["loki", "promtail", "logcli"]
275
+ },
276
+ "visualization": {
277
+ "question": "¿Dashboards?",
278
+ "defaultOption": "grafana",
279
+ "options": [
280
+ { "value": "grafana", "label": "Grafana", "description": "Dashboards + alerting" },
281
+ { "value": "datadog-dashboards", "label": "Datadog", "description": "Dashboards Included" },
282
+ { "value": "none", "label": "No", "description": "Sin dashboards" }
283
+ ],
284
+ "tools": ["grafana-server", "datasource-config", "dashboard-templates"]
285
+ },
286
+ "alerting": {
287
+ "question": "¿Alerting?",
288
+ "defaultOption": "grafana-alerts",
289
+ "options": [
290
+ { "value": "grafana-alerts", "label": "Grafana Alerting", "description": "Integrado con Grafana" },
291
+ { "value": "pagerduty", "label": "PagerDuty", "description": "Incident management" },
292
+ { "value": "opsgenie", "label": "OpsGenie", "description": "Alert routing" },
293
+ { "value": "none", "label": "No", "description": "Sin alerting configurado" }
294
+ ],
295
+ "tools": ["alert-rules", "notification-channel", "incident-routing"]
296
+ },
297
+ "dora": {
298
+ "question": "¿DORA metrics?",
299
+ "defaultOption": "yes",
300
+ "options": [
301
+ { "value": "yes", "label": "Sí", "description": "Deployment frequency, Lead time, MTTR, Change failure rate" },
302
+ { "value": "minimal", "label": "Mínimo", "description": "Solo deployment frequency" },
303
+ { "value": "no", "label": "No", "description": "Sin tracking DORA" }
304
+ ],
305
+ "tools": ["dora-collector", "dora-dashboard", "devopsyaml"]
306
+ }
307
+ },
308
+ "defaultTools": ["jaeger", "prometheus", "loki", "grafana", "otel-collector", "dora-metrics"]
309
+ }
310
+ },
311
+ "toolMetadata": {
312
+ "acl-schema-validator": {
313
+ "description": "Valida datos externos contra esquemas Core",
314
+ "runtimeAgnostic": true,
315
+ "phase": "phase-2"
316
+ },
317
+ "adr-create": {
318
+ "description": "Genera templates y comandos ADR",
319
+ "runtimeAgnostic": true,
320
+ "phase": "phase-3"
321
+ },
322
+ "context-mapper": {
323
+ "description": "Define y documenta bounded contexts",
324
+ "runtimeAgnostic": true,
325
+ "phase": "phase-3"
326
+ },
327
+ "dockerfile-generator": {
328
+ "description": "Genera Dockerfile optimizado por runtime",
329
+ "runtimeAware": true,
330
+ "phase": "phase-4"
331
+ },
332
+ "otel-instrumentation": {
333
+ "description": "Instrumentación OpenTelemetry",
334
+ "runtimeAware": true,
335
+ "phase": "phase-4"
336
+ },
337
+ "dora-metrics": {
338
+ "description": "Colección automática de DORA metrics",
339
+ "runtimeAgnostic": true,
340
+ "phase": "phase-5"
341
+ }
342
+ }
343
+ }
@@ -0,0 +1,6 @@
1
+ export * from './interfaces';
2
+ export * from './providers/node-filesystem.provider';
3
+ export * from './providers/config-parser.provider';
4
+ export * from './providers/logger.provider';
5
+ export * from './providers/mock-filesystem.provider';
6
+ export * from '../di/container';
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./interfaces"), exports);
18
+ __exportStar(require("./providers/node-filesystem.provider"), exports);
19
+ __exportStar(require("./providers/config-parser.provider"), exports);
20
+ __exportStar(require("./providers/logger.provider"), exports);
21
+ __exportStar(require("./providers/mock-filesystem.provider"), exports);
22
+ __exportStar(require("../di/container"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/abstractions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,uEAAqD;AACrD,qEAAmD;AACnD,8DAA4C;AAC5C,uEAAqD;AACrD,kDAAgC"}
@@ -0,0 +1,60 @@
1
+ export interface FileExistsOptions {
2
+ cwd?: string;
3
+ }
4
+ export interface FileReadOptions {
5
+ encoding?: BufferEncoding;
6
+ cwd?: string;
7
+ }
8
+ export interface FileWriteOptions {
9
+ encoding?: BufferEncoding;
10
+ cwd?: string;
11
+ }
12
+ export interface DirEntry {
13
+ name: string;
14
+ isDirectory: () => boolean;
15
+ isFile: () => boolean;
16
+ }
17
+ export interface IFileSystem {
18
+ exists(path: string, options?: FileExistsOptions): Promise<boolean>;
19
+ existsSync(path: string): boolean;
20
+ readFile(path: string, options?: FileReadOptions): Promise<string>;
21
+ readJson(path: string, options?: FileReadOptions): Promise<unknown>;
22
+ writeFile(path: string, content: string, options?: FileWriteOptions): Promise<void>;
23
+ writeJson(path: string, data: unknown, options?: FileWriteOptions): Promise<void>;
24
+ readdir(path: string): Promise<DirEntry[]>;
25
+ readdirNames(path: string): Promise<string[]>;
26
+ remove(path: string): Promise<void>;
27
+ ensureDir(path: string): Promise<void>;
28
+ stat(path: string): Promise<{
29
+ isDirectory: () => boolean;
30
+ isFile: () => boolean;
31
+ }>;
32
+ }
33
+ export interface IConfigParser {
34
+ parse(content: string): unknown;
35
+ stringify(data: unknown): string;
36
+ }
37
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
38
+ export interface LogEntry {
39
+ level: LogLevel;
40
+ message: string;
41
+ context?: string;
42
+ timestamp: string;
43
+ }
44
+ export interface ILogger {
45
+ debug(message: string, context?: string): void;
46
+ info(message: string, context?: string): void;
47
+ warn(message: string, context?: string): void;
48
+ error(message: string, context?: string): void;
49
+ }
50
+ export interface ILoggerProvider {
51
+ createLogger(context: string): ILogger;
52
+ }
53
+ export interface IFileSystemProvider {
54
+ createFileSystem(): IFileSystem;
55
+ }
56
+ export interface IConfigParserProvider {
57
+ createConfigParser(format: string): IConfigParser;
58
+ }
59
+ export declare const SUPPORTED_FORMATS: readonly ["yaml", "json"];
60
+ export type SupportedFormat = typeof SUPPORTED_FORMATS[number];
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SUPPORTED_FORMATS = void 0;
4
+ exports.SUPPORTED_FORMATS = ['yaml', 'json'];
5
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/core/abstractions/interfaces.ts"],"names":[],"mappings":";;;AAmEa,QAAA,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAU,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { IConfigParser, IConfigParserProvider } from '../interfaces';
2
+ export declare class YamlConfigParserProvider implements IConfigParserProvider {
3
+ createConfigParser(_format: string): IConfigParser;
4
+ }
5
+ export declare class YamlConfigParserImpl implements IConfigParser {
6
+ parse(content: string): unknown;
7
+ stringify(data: unknown): string;
8
+ }
9
+ export declare class JsonConfigParserProvider implements IConfigParserProvider {
10
+ createConfigParser(_format: string): IConfigParser;
11
+ }
12
+ export declare class JsonConfigParserImpl implements IConfigParser {
13
+ parse(content: string): unknown;
14
+ stringify(data: unknown): string;
15
+ }
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.JsonConfigParserImpl = exports.JsonConfigParserProvider = exports.YamlConfigParserImpl = exports.YamlConfigParserProvider = void 0;
37
+ const yaml = __importStar(require("yaml"));
38
+ class YamlConfigParserProvider {
39
+ createConfigParser(_format) {
40
+ return new YamlConfigParserImpl();
41
+ }
42
+ }
43
+ exports.YamlConfigParserProvider = YamlConfigParserProvider;
44
+ class YamlConfigParserImpl {
45
+ parse(content) {
46
+ return yaml.parse(content);
47
+ }
48
+ stringify(data) {
49
+ return yaml.stringify(data);
50
+ }
51
+ }
52
+ exports.YamlConfigParserImpl = YamlConfigParserImpl;
53
+ class JsonConfigParserProvider {
54
+ createConfigParser(_format) {
55
+ return new JsonConfigParserImpl();
56
+ }
57
+ }
58
+ exports.JsonConfigParserProvider = JsonConfigParserProvider;
59
+ class JsonConfigParserImpl {
60
+ parse(content) {
61
+ return JSON.parse(content);
62
+ }
63
+ stringify(data) {
64
+ return JSON.stringify(data, null, 2);
65
+ }
66
+ }
67
+ exports.JsonConfigParserImpl = JsonConfigParserImpl;
68
+ //# sourceMappingURL=config-parser.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-parser.provider.js","sourceRoot":"","sources":["../../../../src/core/abstractions/providers/config-parser.provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAG7B,MAAa,wBAAwB;IACnC,kBAAkB,CAAC,OAAe;QAChC,OAAO,IAAI,oBAAoB,EAAE,CAAC;IACpC,CAAC;CACF;AAJD,4DAIC;AAED,MAAa,oBAAoB;IAC/B,KAAK,CAAC,OAAe;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS,CAAC,IAAa;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;CACF;AARD,oDAQC;AAED,MAAa,wBAAwB;IACnC,kBAAkB,CAAC,OAAe;QAChC,OAAO,IAAI,oBAAoB,EAAE,CAAC;IACpC,CAAC;CACF;AAJD,4DAIC;AAED,MAAa,oBAAoB;IAC/B,KAAK,CAAC,OAAe;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS,CAAC,IAAa;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;CACF;AARD,oDAQC"}
@@ -0,0 +1,10 @@
1
+ import { ILogger, ILoggerProvider } from '../interfaces';
2
+ export declare class NestLoggerProvider implements ILoggerProvider {
3
+ createLogger(context: string): ILogger;
4
+ }
5
+ export declare class NoOpLoggerProvider implements ILoggerProvider {
6
+ createLogger(_context: string): ILogger;
7
+ }
8
+ export declare class ConsoleLoggerProvider implements ILoggerProvider {
9
+ createLogger(context: string): ILogger;
10
+ }
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConsoleLoggerProvider = exports.NoOpLoggerProvider = exports.NestLoggerProvider = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ class NestLoggerProvider {
6
+ createLogger(context) {
7
+ return new NestLogger(context);
8
+ }
9
+ }
10
+ exports.NestLoggerProvider = NestLoggerProvider;
11
+ class NestLogger {
12
+ constructor(context) {
13
+ this.logger = new common_1.Logger(context);
14
+ }
15
+ debug(message, context) {
16
+ this.logger.debug(message, context);
17
+ }
18
+ info(message, context) {
19
+ this.logger.log(message, context);
20
+ }
21
+ warn(message, context) {
22
+ this.logger.warn(message, context);
23
+ }
24
+ error(message, context) {
25
+ this.logger.error(message, context);
26
+ }
27
+ }
28
+ class NoOpLoggerProvider {
29
+ createLogger(_context) {
30
+ return new NoOpLogger();
31
+ }
32
+ }
33
+ exports.NoOpLoggerProvider = NoOpLoggerProvider;
34
+ class NoOpLogger {
35
+ constructor() {
36
+ this.logs = [];
37
+ }
38
+ debug(message, _context) {
39
+ this.logs.push({ level: 'debug', message, timestamp: new Date().toISOString() });
40
+ }
41
+ info(message, _context) {
42
+ this.logs.push({ level: 'info', message, timestamp: new Date().toISOString() });
43
+ }
44
+ warn(message, _context) {
45
+ this.logs.push({ level: 'warn', message, timestamp: new Date().toISOString() });
46
+ }
47
+ error(message, _context) {
48
+ this.logs.push({ level: 'error', message, timestamp: new Date().toISOString() });
49
+ }
50
+ getLogs() {
51
+ return [...this.logs];
52
+ }
53
+ clear() {
54
+ this.logs = [];
55
+ }
56
+ }
57
+ class ConsoleLoggerProvider {
58
+ createLogger(context) {
59
+ return new ConsoleLogger(context);
60
+ }
61
+ }
62
+ exports.ConsoleLoggerProvider = ConsoleLoggerProvider;
63
+ class ConsoleLogger {
64
+ constructor(context) {
65
+ this.context = context;
66
+ }
67
+ format(level, message) {
68
+ const timestamp = new Date().toISOString();
69
+ return `[${timestamp}] [${level.toUpperCase()}] [${this.context}] ${message}`;
70
+ }
71
+ debug(message, _context) {
72
+ console.debug(this.format('debug', message));
73
+ }
74
+ info(message, _context) {
75
+ console.info(this.format('info', message));
76
+ }
77
+ warn(message, _context) {
78
+ console.warn(this.format('warn', message));
79
+ }
80
+ error(message, _context) {
81
+ console.error(this.format('error', message));
82
+ }
83
+ }
84
+ //# sourceMappingURL=logger.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.provider.js","sourceRoot":"","sources":["../../../../src/core/abstractions/providers/logger.provider.ts"],"names":[],"mappings":"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"}