@evolith/smart-cli 1.1.0 → 1.1.2

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 (481) hide show
  1. package/ARCHITECTURE.md +1 -1
  2. package/LICENSE +21 -0
  3. package/README.es.md +31 -3
  4. package/README.md +915 -170
  5. package/package.json +50 -41
  6. package/shell/hooks.bash +68 -0
  7. package/shell/hooks.fish +57 -0
  8. package/shell/hooks.zsh +68 -0
  9. package/dist/app.module.d.ts +0 -2
  10. package/dist/app.module.js +0 -61
  11. package/dist/app.module.js.map +0 -1
  12. package/dist/app.module.spec.d.ts +0 -1
  13. package/dist/app.module.spec.js +0 -305
  14. package/dist/app.module.spec.js.map +0 -1
  15. package/dist/application/ports/webhook-notifier.port.d.ts +0 -4
  16. package/dist/application/ports/webhook-notifier.port.js +0 -3
  17. package/dist/application/ports/webhook-notifier.port.js.map +0 -1
  18. package/dist/application/services/index.d.ts +0 -64
  19. package/dist/application/services/index.js +0 -371
  20. package/dist/application/services/index.js.map +0 -1
  21. package/dist/application/services/initialize-project.spec.d.ts +0 -1
  22. package/dist/application/services/initialize-project.spec.js +0 -211
  23. package/dist/application/services/initialize-project.spec.js.map +0 -1
  24. package/dist/application/services/phase-transition.use-case.spec.d.ts +0 -1
  25. package/dist/application/services/phase-transition.use-case.spec.js +0 -297
  26. package/dist/application/services/phase-transition.use-case.spec.js.map +0 -1
  27. package/dist/application/services/services.test.d.ts +0 -1
  28. package/dist/application/services/services.test.js +0 -176
  29. package/dist/application/services/services.test.js.map +0 -1
  30. package/dist/application/use-cases/evaluate-gate.use-case.d.ts +0 -20
  31. package/dist/application/use-cases/evaluate-gate.use-case.js +0 -72
  32. package/dist/application/use-cases/evaluate-gate.use-case.js.map +0 -1
  33. package/dist/application/use-cases/validate-satellite.use-case.d.ts +0 -19
  34. package/dist/application/use-cases/validate-satellite.use-case.js +0 -96
  35. package/dist/application/use-cases/validate-satellite.use-case.js.map +0 -1
  36. package/dist/application/use-cases/validate-satellite.use-case.spec.d.ts +0 -1
  37. package/dist/application/use-cases/validate-satellite.use-case.spec.js +0 -102
  38. package/dist/application/use-cases/validate-satellite.use-case.spec.js.map +0 -1
  39. package/dist/commands/adr/adr.command.d.ts +0 -30
  40. package/dist/commands/adr/adr.command.js +0 -379
  41. package/dist/commands/adr/adr.command.js.map +0 -1
  42. package/dist/commands/adr/adr.command.spec.d.ts +0 -1
  43. package/dist/commands/adr/adr.command.spec.js +0 -409
  44. package/dist/commands/adr/adr.command.spec.js.map +0 -1
  45. package/dist/commands/architecture/scaffold.command.d.ts +0 -8
  46. package/dist/commands/architecture/scaffold.command.js +0 -184
  47. package/dist/commands/architecture/scaffold.command.js.map +0 -1
  48. package/dist/commands/architecture/scaffold.command.spec.d.ts +0 -1
  49. package/dist/commands/architecture/scaffold.command.spec.js +0 -207
  50. package/dist/commands/architecture/scaffold.command.spec.js.map +0 -1
  51. package/dist/commands/commands.test.d.ts +0 -1
  52. package/dist/commands/commands.test.js +0 -131
  53. package/dist/commands/commands.test.js.map +0 -1
  54. package/dist/commands/completion/completion.command.d.ts +0 -20
  55. package/dist/commands/completion/completion.command.js +0 -215
  56. package/dist/commands/completion/completion.command.js.map +0 -1
  57. package/dist/commands/completion/completion.command.spec.d.ts +0 -1
  58. package/dist/commands/completion/completion.command.spec.js +0 -240
  59. package/dist/commands/completion/completion.command.spec.js.map +0 -1
  60. package/dist/commands/docs/docs.command.d.ts +0 -14
  61. package/dist/commands/docs/docs.command.js +0 -233
  62. package/dist/commands/docs/docs.command.js.map +0 -1
  63. package/dist/commands/docs/docs.command.spec.d.ts +0 -1
  64. package/dist/commands/docs/docs.command.spec.js +0 -87
  65. package/dist/commands/docs/docs.command.spec.js.map +0 -1
  66. package/dist/commands/drift/drift.command.d.ts +0 -24
  67. package/dist/commands/drift/drift.command.js +0 -250
  68. package/dist/commands/drift/drift.command.js.map +0 -1
  69. package/dist/commands/drift/drift.command.spec.d.ts +0 -1
  70. package/dist/commands/drift/drift.command.spec.js +0 -327
  71. package/dist/commands/drift/drift.command.spec.js.map +0 -1
  72. package/dist/commands/gate/gate.command.d.ts +0 -23
  73. package/dist/commands/gate/gate.command.js +0 -210
  74. package/dist/commands/gate/gate.command.js.map +0 -1
  75. package/dist/commands/history/history.command.d.ts +0 -29
  76. package/dist/commands/history/history.command.js +0 -268
  77. package/dist/commands/history/history.command.js.map +0 -1
  78. package/dist/commands/history/history.command.spec.d.ts +0 -1
  79. package/dist/commands/history/history.command.spec.js +0 -392
  80. package/dist/commands/history/history.command.spec.js.map +0 -1
  81. package/dist/commands/init/agents.command.d.ts +0 -22
  82. package/dist/commands/init/agents.command.js +0 -502
  83. package/dist/commands/init/agents.command.js.map +0 -1
  84. package/dist/commands/init/agents.command.spec.d.ts +0 -1
  85. package/dist/commands/init/agents.command.spec.js +0 -550
  86. package/dist/commands/init/agents.command.spec.js.map +0 -1
  87. package/dist/commands/init/init.command.d.ts +0 -20
  88. package/dist/commands/init/init.command.js +0 -329
  89. package/dist/commands/init/init.command.js.map +0 -1
  90. package/dist/commands/init/init.command.spec.d.ts +0 -1
  91. package/dist/commands/init/init.command.spec.js +0 -272
  92. package/dist/commands/init/init.command.spec.js.map +0 -1
  93. package/dist/commands/init/upgrade.command.d.ts +0 -19
  94. package/dist/commands/init/upgrade.command.js +0 -210
  95. package/dist/commands/init/upgrade.command.js.map +0 -1
  96. package/dist/commands/init/upgrade.command.spec.d.ts +0 -1
  97. package/dist/commands/init/upgrade.command.spec.js +0 -378
  98. package/dist/commands/init/upgrade.command.spec.js.map +0 -1
  99. package/dist/commands/mcp/mcp-serve.command.d.ts +0 -15
  100. package/dist/commands/mcp/mcp-serve.command.js +0 -106
  101. package/dist/commands/mcp/mcp-serve.command.js.map +0 -1
  102. package/dist/commands/mcp/mcp-serve.command.spec.d.ts +0 -1
  103. package/dist/commands/mcp/mcp-serve.command.spec.js +0 -58
  104. package/dist/commands/mcp/mcp-serve.command.spec.js.map +0 -1
  105. package/dist/commands/sdlc/gate-status.command.d.ts +0 -7
  106. package/dist/commands/sdlc/gate-status.command.js +0 -189
  107. package/dist/commands/sdlc/gate-status.command.js.map +0 -1
  108. package/dist/commands/sdlc/gate-status.command.spec.d.ts +0 -1
  109. package/dist/commands/sdlc/gate-status.command.spec.js +0 -302
  110. package/dist/commands/sdlc/gate-status.command.spec.js.map +0 -1
  111. package/dist/commands/sdlc/generate-domain.command.d.ts +0 -7
  112. package/dist/commands/sdlc/generate-domain.command.js +0 -166
  113. package/dist/commands/sdlc/generate-domain.command.js.map +0 -1
  114. package/dist/commands/sdlc/generate-domain.command.spec.d.ts +0 -1
  115. package/dist/commands/sdlc/generate-domain.command.spec.js +0 -121
  116. package/dist/commands/sdlc/generate-domain.command.spec.js.map +0 -1
  117. package/dist/commands/sdlc/handoff.command.d.ts +0 -22
  118. package/dist/commands/sdlc/handoff.command.js +0 -273
  119. package/dist/commands/sdlc/handoff.command.js.map +0 -1
  120. package/dist/commands/sdlc/handoff.command.spec.d.ts +0 -1
  121. package/dist/commands/sdlc/handoff.command.spec.js +0 -395
  122. package/dist/commands/sdlc/handoff.command.spec.js.map +0 -1
  123. package/dist/commands/sdlc/sdlc.command.d.ts +0 -4
  124. package/dist/commands/sdlc/sdlc.command.js +0 -70
  125. package/dist/commands/sdlc/sdlc.command.js.map +0 -1
  126. package/dist/commands/sdlc/sdlc.command.spec.d.ts +0 -1
  127. package/dist/commands/sdlc/sdlc.command.spec.js +0 -79
  128. package/dist/commands/sdlc/sdlc.command.spec.js.map +0 -1
  129. package/dist/commands/standards/standards.command.d.ts +0 -27
  130. package/dist/commands/standards/standards.command.js +0 -308
  131. package/dist/commands/standards/standards.command.js.map +0 -1
  132. package/dist/commands/standards/standards.command.spec.d.ts +0 -1
  133. package/dist/commands/standards/standards.command.spec.js +0 -311
  134. package/dist/commands/standards/standards.command.spec.js.map +0 -1
  135. package/dist/commands/validate/validate.command.d.ts +0 -25
  136. package/dist/commands/validate/validate.command.js +0 -284
  137. package/dist/commands/validate/validate.command.js.map +0 -1
  138. package/dist/commands/validate/validate.command.spec.d.ts +0 -1
  139. package/dist/commands/validate/validate.command.spec.js +0 -368
  140. package/dist/commands/validate/validate.command.spec.js.map +0 -1
  141. package/dist/config/runtimes.json +0 -196
  142. package/dist/config/tool-catalog.json +0 -343
  143. package/dist/core/abstractions/index.d.ts +0 -6
  144. package/dist/core/abstractions/index.js +0 -23
  145. package/dist/core/abstractions/index.js.map +0 -1
  146. package/dist/core/abstractions/interfaces.d.ts +0 -61
  147. package/dist/core/abstractions/interfaces.js +0 -5
  148. package/dist/core/abstractions/interfaces.js.map +0 -1
  149. package/dist/core/abstractions/providers/config-parser.provider.d.ts +0 -15
  150. package/dist/core/abstractions/providers/config-parser.provider.js +0 -68
  151. package/dist/core/abstractions/providers/config-parser.provider.js.map +0 -1
  152. package/dist/core/abstractions/providers/config-parser.provider.spec.d.ts +0 -1
  153. package/dist/core/abstractions/providers/config-parser.provider.spec.js +0 -18
  154. package/dist/core/abstractions/providers/config-parser.provider.spec.js.map +0 -1
  155. package/dist/core/abstractions/providers/logger.provider.d.ts +0 -10
  156. package/dist/core/abstractions/providers/logger.provider.js +0 -84
  157. package/dist/core/abstractions/providers/logger.provider.js.map +0 -1
  158. package/dist/core/abstractions/providers/logger.provider.spec.d.ts +0 -1
  159. package/dist/core/abstractions/providers/logger.provider.spec.js +0 -212
  160. package/dist/core/abstractions/providers/logger.provider.spec.js.map +0 -1
  161. package/dist/core/abstractions/providers/mock-filesystem.provider.d.ts +0 -31
  162. package/dist/core/abstractions/providers/mock-filesystem.provider.js +0 -126
  163. package/dist/core/abstractions/providers/mock-filesystem.provider.js.map +0 -1
  164. package/dist/core/abstractions/providers/mock-filesystem.provider.spec.d.ts +0 -1
  165. package/dist/core/abstractions/providers/mock-filesystem.provider.spec.js +0 -56
  166. package/dist/core/abstractions/providers/mock-filesystem.provider.spec.js.map +0 -1
  167. package/dist/core/abstractions/providers/node-filesystem.provider.d.ts +0 -20
  168. package/dist/core/abstractions/providers/node-filesystem.provider.js +0 -108
  169. package/dist/core/abstractions/providers/node-filesystem.provider.js.map +0 -1
  170. package/dist/core/agents/agent-ruleset-builder.d.ts +0 -30
  171. package/dist/core/agents/agent-ruleset-builder.js +0 -75
  172. package/dist/core/agents/agent-ruleset-builder.js.map +0 -1
  173. package/dist/core/agents/agent-ruleset-builder.spec.d.ts +0 -1
  174. package/dist/core/agents/agent-ruleset-builder.spec.js +0 -135
  175. package/dist/core/agents/agent-ruleset-builder.spec.js.map +0 -1
  176. package/dist/core/architecture/nx-workspace.strategy.d.ts +0 -14
  177. package/dist/core/architecture/nx-workspace.strategy.js +0 -136
  178. package/dist/core/architecture/nx-workspace.strategy.js.map +0 -1
  179. package/dist/core/architecture/nx-workspace.strategy.spec.d.ts +0 -1
  180. package/dist/core/architecture/nx-workspace.strategy.spec.js +0 -187
  181. package/dist/core/architecture/nx-workspace.strategy.spec.js.map +0 -1
  182. package/dist/core/architecture/workspace-manager.strategy.d.ts +0 -8
  183. package/dist/core/architecture/workspace-manager.strategy.js +0 -3
  184. package/dist/core/architecture/workspace-manager.strategy.js.map +0 -1
  185. package/dist/core/config/config.service.d.ts +0 -15
  186. package/dist/core/config/config.service.js +0 -55
  187. package/dist/core/config/config.service.js.map +0 -1
  188. package/dist/core/config/config.service.spec.d.ts +0 -1
  189. package/dist/core/config/config.service.spec.js +0 -43
  190. package/dist/core/config/config.service.spec.js.map +0 -1
  191. package/dist/core/di/container.d.ts +0 -25
  192. package/dist/core/di/container.js +0 -87
  193. package/dist/core/di/container.js.map +0 -1
  194. package/dist/core/di/container.spec.d.ts +0 -1
  195. package/dist/core/di/container.spec.js +0 -301
  196. package/dist/core/di/container.spec.js.map +0 -1
  197. package/dist/core/errors/index.d.ts +0 -26
  198. package/dist/core/errors/index.js +0 -67
  199. package/dist/core/errors/index.js.map +0 -1
  200. package/dist/core/filesystem/file-manager.service.d.ts +0 -4
  201. package/dist/core/filesystem/file-manager.service.js +0 -96
  202. package/dist/core/filesystem/file-manager.service.js.map +0 -1
  203. package/dist/core/filesystem/file-manager.service.spec.d.ts +0 -1
  204. package/dist/core/filesystem/file-manager.service.spec.js +0 -103
  205. package/dist/core/filesystem/file-manager.service.spec.js.map +0 -1
  206. package/dist/core/generators/hexagonal-scaffolder.d.ts +0 -6
  207. package/dist/core/generators/hexagonal-scaffolder.js +0 -260
  208. package/dist/core/generators/hexagonal-scaffolder.js.map +0 -1
  209. package/dist/core/generators/hexagonal-scaffolder.spec.d.ts +0 -1
  210. package/dist/core/generators/hexagonal-scaffolder.spec.js +0 -164
  211. package/dist/core/generators/hexagonal-scaffolder.spec.js.map +0 -1
  212. package/dist/core/generators/mermaid-class-parser.d.ts +0 -38
  213. package/dist/core/generators/mermaid-class-parser.js +0 -183
  214. package/dist/core/generators/mermaid-class-parser.js.map +0 -1
  215. package/dist/core/generators/mermaid-class-parser.spec.d.ts +0 -1
  216. package/dist/core/generators/mermaid-class-parser.spec.js +0 -148
  217. package/dist/core/generators/mermaid-class-parser.spec.js.map +0 -1
  218. package/dist/core/mcp/mcp-server.service.d.ts +0 -7
  219. package/dist/core/mcp/mcp-server.service.js +0 -31
  220. package/dist/core/mcp/mcp-server.service.js.map +0 -1
  221. package/dist/core/mcp/metrics.service.d.ts +0 -37
  222. package/dist/core/mcp/metrics.service.js +0 -72
  223. package/dist/core/mcp/metrics.service.js.map +0 -1
  224. package/dist/core/mcp/metrics.service.spec.d.ts +0 -1
  225. package/dist/core/mcp/metrics.service.spec.js +0 -159
  226. package/dist/core/mcp/metrics.service.spec.js.map +0 -1
  227. package/dist/core/mcp/prompts/index.d.ts +0 -22
  228. package/dist/core/mcp/prompts/index.js +0 -211
  229. package/dist/core/mcp/prompts/index.js.map +0 -1
  230. package/dist/core/mcp/prompts/index.spec.d.ts +0 -1
  231. package/dist/core/mcp/prompts/index.spec.js +0 -150
  232. package/dist/core/mcp/prompts/index.spec.js.map +0 -1
  233. package/dist/core/mcp/resources/index.d.ts +0 -11
  234. package/dist/core/mcp/resources/index.js +0 -209
  235. package/dist/core/mcp/resources/index.js.map +0 -1
  236. package/dist/core/mcp/resources/index.spec.d.ts +0 -1
  237. package/dist/core/mcp/resources/index.spec.js +0 -212
  238. package/dist/core/mcp/resources/index.spec.js.map +0 -1
  239. package/dist/core/mcp/server.d.ts +0 -33
  240. package/dist/core/mcp/server.js +0 -693
  241. package/dist/core/mcp/server.js.map +0 -1
  242. package/dist/core/mcp/server.spec.d.ts +0 -1
  243. package/dist/core/mcp/server.spec.js +0 -579
  244. package/dist/core/mcp/server.spec.js.map +0 -1
  245. package/dist/core/mcp/tools/agent.d.ts +0 -41
  246. package/dist/core/mcp/tools/agent.js +0 -195
  247. package/dist/core/mcp/tools/agent.js.map +0 -1
  248. package/dist/core/mcp/tools/agent.spec.d.ts +0 -1
  249. package/dist/core/mcp/tools/agent.spec.js +0 -171
  250. package/dist/core/mcp/tools/agent.spec.js.map +0 -1
  251. package/dist/core/mcp/tools/architecture.d.ts +0 -29
  252. package/dist/core/mcp/tools/architecture.js +0 -234
  253. package/dist/core/mcp/tools/architecture.js.map +0 -1
  254. package/dist/core/mcp/tools/architecture.spec.d.ts +0 -1
  255. package/dist/core/mcp/tools/architecture.spec.js +0 -145
  256. package/dist/core/mcp/tools/architecture.spec.js.map +0 -1
  257. package/dist/core/mcp/tools/gate.d.ts +0 -1
  258. package/dist/core/mcp/tools/gate.js +0 -68
  259. package/dist/core/mcp/tools/gate.js.map +0 -1
  260. package/dist/core/mcp/tools/moscow.d.ts +0 -30
  261. package/dist/core/mcp/tools/moscow.js +0 -113
  262. package/dist/core/mcp/tools/moscow.js.map +0 -1
  263. package/dist/core/mcp/tools/moscow.spec.d.ts +0 -1
  264. package/dist/core/mcp/tools/moscow.spec.js +0 -209
  265. package/dist/core/mcp/tools/moscow.spec.js.map +0 -1
  266. package/dist/core/mcp/tools/sdlc.d.ts +0 -32
  267. package/dist/core/mcp/tools/sdlc.js +0 -190
  268. package/dist/core/mcp/tools/sdlc.js.map +0 -1
  269. package/dist/core/mcp/tools/sdlc.spec.d.ts +0 -1
  270. package/dist/core/mcp/tools/sdlc.spec.js +0 -170
  271. package/dist/core/mcp/tools/sdlc.spec.js.map +0 -1
  272. package/dist/core/mcp/tools/tool-utils.d.ts +0 -4
  273. package/dist/core/mcp/tools/tool-utils.js +0 -18
  274. package/dist/core/mcp/tools/tool-utils.js.map +0 -1
  275. package/dist/core/mcp/tools/validate.d.ts +0 -18
  276. package/dist/core/mcp/tools/validate.js +0 -56
  277. package/dist/core/mcp/tools/validate.js.map +0 -1
  278. package/dist/core/mcp/tools/validate.spec.d.ts +0 -1
  279. package/dist/core/mcp/tools/validate.spec.js +0 -130
  280. package/dist/core/mcp/tools/validate.spec.js.map +0 -1
  281. package/dist/core/mcp/watcher.service.d.ts +0 -8
  282. package/dist/core/mcp/watcher.service.js +0 -82
  283. package/dist/core/mcp/watcher.service.js.map +0 -1
  284. package/dist/core/mcp/watcher.service.spec.d.ts +0 -1
  285. package/dist/core/mcp/watcher.service.spec.js +0 -171
  286. package/dist/core/mcp/watcher.service.spec.js.map +0 -1
  287. package/dist/core/metrics/dora-calculator.d.ts +0 -18
  288. package/dist/core/metrics/dora-calculator.js +0 -146
  289. package/dist/core/metrics/dora-calculator.js.map +0 -1
  290. package/dist/core/metrics/dora-calculator.spec.d.ts +0 -1
  291. package/dist/core/metrics/dora-calculator.spec.js +0 -164
  292. package/dist/core/metrics/dora-calculator.spec.js.map +0 -1
  293. package/dist/core/metrics/git-log-reader.d.ts +0 -14
  294. package/dist/core/metrics/git-log-reader.js +0 -39
  295. package/dist/core/metrics/git-log-reader.js.map +0 -1
  296. package/dist/core/metrics/git-log-reader.spec.d.ts +0 -1
  297. package/dist/core/metrics/git-log-reader.spec.js +0 -108
  298. package/dist/core/metrics/git-log-reader.spec.js.map +0 -1
  299. package/dist/core/observability/command-watcher.d.ts +0 -45
  300. package/dist/core/observability/command-watcher.js +0 -168
  301. package/dist/core/observability/command-watcher.js.map +0 -1
  302. package/dist/core/observability/command-watcher.spec.d.ts +0 -1
  303. package/dist/core/observability/command-watcher.spec.js +0 -123
  304. package/dist/core/observability/command-watcher.spec.js.map +0 -1
  305. package/dist/core/observability/error-reporter.d.ts +0 -47
  306. package/dist/core/observability/error-reporter.js +0 -163
  307. package/dist/core/observability/error-reporter.js.map +0 -1
  308. package/dist/core/observability/error-reporter.spec.d.ts +0 -1
  309. package/dist/core/observability/error-reporter.spec.js +0 -291
  310. package/dist/core/observability/error-reporter.spec.js.map +0 -1
  311. package/dist/core/observability/index.d.ts +0 -5
  312. package/dist/core/observability/index.js +0 -26
  313. package/dist/core/observability/index.js.map +0 -1
  314. package/dist/core/observability/observability.test.d.ts +0 -1
  315. package/dist/core/observability/observability.test.js +0 -224
  316. package/dist/core/observability/observability.test.js.map +0 -1
  317. package/dist/core/observability/structured-logger.d.ts +0 -53
  318. package/dist/core/observability/structured-logger.js +0 -123
  319. package/dist/core/observability/structured-logger.js.map +0 -1
  320. package/dist/core/observability/structured-logger.spec.d.ts +0 -1
  321. package/dist/core/observability/structured-logger.spec.js +0 -197
  322. package/dist/core/observability/structured-logger.spec.js.map +0 -1
  323. package/dist/core/observability/timing.d.ts +0 -23
  324. package/dist/core/observability/timing.js +0 -140
  325. package/dist/core/observability/timing.js.map +0 -1
  326. package/dist/core/observability/timing.spec.d.ts +0 -1
  327. package/dist/core/observability/timing.spec.js +0 -216
  328. package/dist/core/observability/timing.spec.js.map +0 -1
  329. package/dist/core/observability/tool-usage-telemetry.service.d.ts +0 -46
  330. package/dist/core/observability/tool-usage-telemetry.service.js +0 -181
  331. package/dist/core/observability/tool-usage-telemetry.service.js.map +0 -1
  332. package/dist/core/services/command-executor.service.d.ts +0 -3
  333. package/dist/core/services/command-executor.service.js +0 -12
  334. package/dist/core/services/command-executor.service.js.map +0 -1
  335. package/dist/core/services/command-history.service.d.ts +0 -39
  336. package/dist/core/services/command-history.service.js +0 -150
  337. package/dist/core/services/command-history.service.js.map +0 -1
  338. package/dist/core/services/command-history.service.spec.d.ts +0 -1
  339. package/dist/core/services/command-history.service.spec.js +0 -257
  340. package/dist/core/services/command-history.service.spec.js.map +0 -1
  341. package/dist/core/services/command-providers.d.ts +0 -1
  342. package/dist/core/services/command-providers.js +0 -17
  343. package/dist/core/services/command-providers.js.map +0 -1
  344. package/dist/core/services/runtime-catalog.service.d.ts +0 -2
  345. package/dist/core/services/runtime-catalog.service.js +0 -7
  346. package/dist/core/services/runtime-catalog.service.js.map +0 -1
  347. package/dist/core/sync/sync.service.d.ts +0 -4
  348. package/dist/core/sync/sync.service.js +0 -81
  349. package/dist/core/sync/sync.service.js.map +0 -1
  350. package/dist/core/sync/sync.service.spec.d.ts +0 -1
  351. package/dist/core/sync/sync.service.spec.js +0 -63
  352. package/dist/core/sync/sync.service.spec.js.map +0 -1
  353. package/dist/core/upgrade/satellite-upgrade.service.d.ts +0 -48
  354. package/dist/core/upgrade/satellite-upgrade.service.js +0 -358
  355. package/dist/core/upgrade/satellite-upgrade.service.js.map +0 -1
  356. package/dist/core/upgrade/satellite-upgrade.service.spec.d.ts +0 -1
  357. package/dist/core/upgrade/satellite-upgrade.service.spec.js +0 -223
  358. package/dist/core/upgrade/satellite-upgrade.service.spec.js.map +0 -1
  359. package/dist/core/validators/architecture-drift.service.d.ts +0 -68
  360. package/dist/core/validators/architecture-drift.service.js +0 -266
  361. package/dist/core/validators/architecture-drift.service.js.map +0 -1
  362. package/dist/core/validators/architecture-drift.service.spec.d.ts +0 -1
  363. package/dist/core/validators/architecture-drift.service.spec.js +0 -315
  364. package/dist/core/validators/architecture-drift.service.spec.js.map +0 -1
  365. package/dist/core/validators/deep-architecture-analyzer.d.ts +0 -58
  366. package/dist/core/validators/deep-architecture-analyzer.js +0 -333
  367. package/dist/core/validators/deep-architecture-analyzer.js.map +0 -1
  368. package/dist/core/validators/deep-architecture-analyzer.spec.d.ts +0 -1
  369. package/dist/core/validators/deep-architecture-analyzer.spec.js +0 -186
  370. package/dist/core/validators/deep-architecture-analyzer.spec.js.map +0 -1
  371. package/dist/core/validators/evaluators/evaluator.interface.d.ts +0 -14
  372. package/dist/core/validators/evaluators/evaluator.interface.js +0 -3
  373. package/dist/core/validators/evaluators/evaluator.interface.js.map +0 -1
  374. package/dist/core/validators/evaluators/native-evaluator.d.ts +0 -31
  375. package/dist/core/validators/evaluators/native-evaluator.js +0 -461
  376. package/dist/core/validators/evaluators/native-evaluator.js.map +0 -1
  377. package/dist/core/validators/evaluators/opa-evaluator.d.ts +0 -20
  378. package/dist/core/validators/evaluators/opa-evaluator.js +0 -249
  379. package/dist/core/validators/evaluators/opa-evaluator.js.map +0 -1
  380. package/dist/core/validators/phase-gate-validator.service.d.ts +0 -75
  381. package/dist/core/validators/phase-gate-validator.service.js +0 -338
  382. package/dist/core/validators/phase-gate-validator.service.js.map +0 -1
  383. package/dist/core/validators/phase-gate-validator.service.spec.d.ts +0 -1
  384. package/dist/core/validators/phase-gate-validator.service.spec.js +0 -326
  385. package/dist/core/validators/phase-gate-validator.service.spec.js.map +0 -1
  386. package/dist/core/validators/rule-evaluation-engine.d.ts +0 -34
  387. package/dist/core/validators/rule-evaluation-engine.js +0 -187
  388. package/dist/core/validators/rule-evaluation-engine.js.map +0 -1
  389. package/dist/core/validators/rule-evaluation-engine.spec.d.ts +0 -1
  390. package/dist/core/validators/rule-evaluation-engine.spec.js +0 -243
  391. package/dist/core/validators/rule-evaluation-engine.spec.js.map +0 -1
  392. package/dist/core/validators/ruleset-validator-architecture.spec.d.ts +0 -1
  393. package/dist/core/validators/ruleset-validator-architecture.spec.js +0 -178
  394. package/dist/core/validators/ruleset-validator-architecture.spec.js.map +0 -1
  395. package/dist/core/validators/ruleset-validator.service.d.ts +0 -82
  396. package/dist/core/validators/ruleset-validator.service.js +0 -682
  397. package/dist/core/validators/ruleset-validator.service.js.map +0 -1
  398. package/dist/core/validators/ruleset-validator.service.spec.d.ts +0 -1
  399. package/dist/core/validators/ruleset-validator.service.spec.js +0 -469
  400. package/dist/core/validators/ruleset-validator.service.spec.js.map +0 -1
  401. package/dist/domain/entities/index.d.ts +0 -72
  402. package/dist/domain/entities/index.js +0 -119
  403. package/dist/domain/entities/index.js.map +0 -1
  404. package/dist/domain/gate-evidence.d.ts +0 -59
  405. package/dist/domain/gate-evidence.js +0 -38
  406. package/dist/domain/gate-evidence.js.map +0 -1
  407. package/dist/domain/interfaces.d.ts +0 -224
  408. package/dist/domain/interfaces.js +0 -3
  409. package/dist/domain/interfaces.js.map +0 -1
  410. package/dist/domain/services/adr.service.d.ts +0 -50
  411. package/dist/domain/services/adr.service.js +0 -129
  412. package/dist/domain/services/adr.service.js.map +0 -1
  413. package/dist/domain/services/adr.service.spec.d.ts +0 -1
  414. package/dist/domain/services/adr.service.spec.js +0 -141
  415. package/dist/domain/services/adr.service.spec.js.map +0 -1
  416. package/dist/domain/services/agent-registry.service.d.ts +0 -26
  417. package/dist/domain/services/agent-registry.service.js +0 -152
  418. package/dist/domain/services/agent-registry.service.js.map +0 -1
  419. package/dist/domain/services/agent-registry.service.spec.d.ts +0 -1
  420. package/dist/domain/services/agent-registry.service.spec.js +0 -162
  421. package/dist/domain/services/agent-registry.service.spec.js.map +0 -1
  422. package/dist/domain/services/index.d.ts +0 -34
  423. package/dist/domain/services/index.js +0 -128
  424. package/dist/domain/services/index.js.map +0 -1
  425. package/dist/domain/services/moscow-prioritization.service.d.ts +0 -44
  426. package/dist/domain/services/moscow-prioritization.service.js +0 -213
  427. package/dist/domain/services/moscow-prioritization.service.js.map +0 -1
  428. package/dist/domain/services/moscow-prioritization.service.spec.d.ts +0 -1
  429. package/dist/domain/services/moscow-prioritization.service.spec.js +0 -285
  430. package/dist/domain/services/moscow-prioritization.service.spec.js.map +0 -1
  431. package/dist/domain/services/services.test.d.ts +0 -1
  432. package/dist/domain/services/services.test.js +0 -236
  433. package/dist/domain/services/services.test.js.map +0 -1
  434. package/dist/domain/services/standards.service.d.ts +0 -47
  435. package/dist/domain/services/standards.service.js +0 -129
  436. package/dist/domain/services/standards.service.js.map +0 -1
  437. package/dist/domain/services/standards.service.spec.d.ts +0 -1
  438. package/dist/domain/services/standards.service.spec.js +0 -600
  439. package/dist/domain/services/standards.service.spec.js.map +0 -1
  440. package/dist/domain/services/tool-usage-telemetry.service.d.ts +0 -46
  441. package/dist/domain/services/tool-usage-telemetry.service.js +0 -181
  442. package/dist/domain/services/tool-usage-telemetry.service.js.map +0 -1
  443. package/dist/domain/services/tool-usage-telemetry.service.spec.d.ts +0 -1
  444. package/dist/domain/services/tool-usage-telemetry.service.spec.js +0 -180
  445. package/dist/domain/services/tool-usage-telemetry.service.spec.js.map +0 -1
  446. package/dist/infrastructure/adapters/webhook.adapter.d.ts +0 -5
  447. package/dist/infrastructure/adapters/webhook.adapter.js +0 -19
  448. package/dist/infrastructure/adapters/webhook.adapter.js.map +0 -1
  449. package/dist/infrastructure/catalog/catalog-loader.d.ts +0 -22
  450. package/dist/infrastructure/catalog/catalog-loader.js +0 -135
  451. package/dist/infrastructure/catalog/catalog-loader.js.map +0 -1
  452. package/dist/infrastructure/catalog/catalog-loader.test.d.ts +0 -1
  453. package/dist/infrastructure/catalog/catalog-loader.test.js +0 -184
  454. package/dist/infrastructure/catalog/catalog-loader.test.js.map +0 -1
  455. package/dist/infrastructure/cli/command-executor.d.ts +0 -20
  456. package/dist/infrastructure/cli/command-executor.js +0 -109
  457. package/dist/infrastructure/cli/command-executor.js.map +0 -1
  458. package/dist/infrastructure/cli/command-executor.spec.d.ts +0 -1
  459. package/dist/infrastructure/cli/command-executor.spec.js +0 -149
  460. package/dist/infrastructure/cli/command-executor.spec.js.map +0 -1
  461. package/dist/infrastructure/cli/command-executor.test.d.ts +0 -1
  462. package/dist/infrastructure/cli/command-executor.test.js +0 -98
  463. package/dist/infrastructure/cli/command-executor.test.js.map +0 -1
  464. package/dist/infrastructure/cli/providers/index.d.ts +0 -52
  465. package/dist/infrastructure/cli/providers/index.js +0 -175
  466. package/dist/infrastructure/cli/providers/index.js.map +0 -1
  467. package/dist/infrastructure/cli/providers/providers.spec.d.ts +0 -1
  468. package/dist/infrastructure/cli/providers/providers.spec.js +0 -251
  469. package/dist/infrastructure/cli/providers/providers.spec.js.map +0 -1
  470. package/dist/infrastructure/formatters/output-formatter.service.d.ts +0 -28
  471. package/dist/infrastructure/formatters/output-formatter.service.js +0 -198
  472. package/dist/infrastructure/formatters/output-formatter.service.js.map +0 -1
  473. package/dist/infrastructure/formatters/output-formatter.service.spec.d.ts +0 -1
  474. package/dist/infrastructure/formatters/output-formatter.service.spec.js +0 -164
  475. package/dist/infrastructure/formatters/output-formatter.service.spec.js.map +0 -1
  476. package/dist/main.d.ts +0 -2
  477. package/dist/main.js +0 -10
  478. package/dist/main.js.map +0 -1
  479. package/dist/test/mocks/index.d.ts +0 -44
  480. package/dist/test/mocks/index.js +0 -135
  481. package/dist/test/mocks/index.js.map +0 -1
@@ -1,249 +0,0 @@
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.OpaEvaluator = void 0;
37
- const path = __importStar(require("path"));
38
- const opa_wasm_1 = require("@open-policy-agent/opa-wasm");
39
- class OpaEvaluator {
40
- constructor(fs, logger) {
41
- this.fs = fs;
42
- this.logger = logger;
43
- this.policyCache = null;
44
- }
45
- async evaluateAll(rules, ctx) {
46
- const wasmPath = path.join(ctx.corePath, 'rulesets', 'opa', 'policy.wasm');
47
- if (!await this.fs.exists(wasmPath)) {
48
- this.logger.warn(`OPA WebAssembly policy not found at ${wasmPath}. Please compile the .rego rules.`);
49
- return rules.map(rule => ({
50
- rule,
51
- result: 'skipped',
52
- message: 'OPA Wasm policy not compiled yet.',
53
- }));
54
- }
55
- try {
56
- if (!this.policyCache) {
57
- const wasmBuffer = await this.fs.readFileBuffer(wasmPath);
58
- this.policyCache = await (0, opa_wasm_1.loadPolicy)(wasmBuffer);
59
- }
60
- const input = await this.buildOpaInput(ctx);
61
- const resultSet = this.policyCache.evaluate(input);
62
- const violations = resultSet && resultSet.length > 0 && resultSet[0].result ? resultSet[0].result : [];
63
- return rules.map(rule => {
64
- const ruleViolations = violations.filter((v) => v.id === rule.id);
65
- if (ruleViolations.length > 0) {
66
- return {
67
- rule,
68
- result: 'failed',
69
- message: ruleViolations.map((v) => v.message).join('; '),
70
- };
71
- }
72
- return {
73
- rule,
74
- result: 'passed'
75
- };
76
- });
77
- }
78
- catch (err) {
79
- const msg = err instanceof Error ? err.message : String(err);
80
- this.logger.error(`Failed to evaluate OPA policy: ${msg}`);
81
- return rules.map(rule => ({
82
- rule,
83
- result: 'skipped',
84
- message: `OPA Engine Error: ${msg}`
85
- }));
86
- }
87
- }
88
- async buildOpaInput(ctx) {
89
- const satelliteWorkflows = await this.readWorkflows(ctx.satellitePath);
90
- const coreEvidence = await this.readEvidence(ctx.corePath);
91
- const mcpServerContent = await this.safeReadFile(path.join(ctx.corePath, 'sdk', 'cli', 'src', 'core', 'mcp', 'server.ts'));
92
- const input = {
93
- satellitePath: ctx.satellitePath,
94
- corePath: ctx.corePath,
95
- satellite: {
96
- packageJson: await this.safeReadJson(path.join(ctx.satellitePath, 'package.json')),
97
- hasPackageLock: await this.fs.exists(path.join(ctx.satellitePath, 'package-lock.json')),
98
- hasDependabot: await this.fs.exists(path.join(ctx.satellitePath, '.github', 'dependabot.yml')),
99
- hasRenovate: await this.fs.exists(path.join(ctx.satellitePath, '.renovaterc.json')),
100
- directories: await this.getTopLevelDirs(ctx.satellitePath),
101
- workflows: satelliteWorkflows,
102
- workspacePackageJsons: await this.readWorkspacePackageJsons(ctx.satellitePath)
103
- },
104
- core: {
105
- packageJson: await this.safeReadJson(path.join(ctx.corePath, 'package.json')),
106
- hasPackageLock: await this.fs.exists(path.join(ctx.corePath, 'package-lock.json')),
107
- hasDependabot: await this.fs.exists(path.join(ctx.corePath, '.github', 'dependabot.yml')),
108
- directories: await this.getTopLevelDirs(ctx.corePath),
109
- adrs: await this.listAdrs(ctx.corePath),
110
- evidence: coreEvidence,
111
- cli: {
112
- hasMainJs: await this.fs.exists(path.join(ctx.corePath, 'sdk', 'cli', 'dist', 'main.js')),
113
- hasTests: await this.hasCompiledTests(ctx.corePath),
114
- hasReadme: await this.fs.exists(path.join(ctx.corePath, 'sdk', 'cli', 'README.md')),
115
- hasArchitectureMd: await this.fs.exists(path.join(ctx.corePath, 'sdk', 'cli', 'ARCHITECTURE.md')),
116
- hasPackageLock: await this.fs.exists(path.join(ctx.corePath, 'sdk', 'cli', 'package-lock.json')),
117
- mcpServerSource: mcpServerContent
118
- }
119
- }
120
- };
121
- return input;
122
- }
123
- async safeReadJson(filePath) {
124
- if (await this.fs.exists(filePath)) {
125
- try {
126
- return await this.fs.readJson(filePath);
127
- }
128
- catch {
129
- return null;
130
- }
131
- }
132
- return null;
133
- }
134
- async safeReadFile(filePath) {
135
- if (await this.fs.exists(filePath)) {
136
- try {
137
- return await this.fs.readFile(filePath);
138
- }
139
- catch {
140
- return null;
141
- }
142
- }
143
- return null;
144
- }
145
- async getTopLevelDirs(dir) {
146
- if (!await this.fs.exists(dir))
147
- return [];
148
- const entries = await this.fs.readdirNames(dir);
149
- const dirs = [];
150
- for (const entry of entries) {
151
- if (entry === '.' || entry === '..')
152
- continue;
153
- const stat = await this.fs.stat(path.join(dir, entry));
154
- if (stat.isDirectory())
155
- dirs.push(entry);
156
- }
157
- return dirs;
158
- }
159
- async readWorkflows(root) {
160
- const workflowsDir = path.join(root, '.github', 'workflows');
161
- const result = {};
162
- if (!await this.fs.exists(workflowsDir))
163
- return result;
164
- const entries = await this.fs.readdirNames(workflowsDir);
165
- for (const entry of entries) {
166
- if (entry.endsWith('.yml') || entry.endsWith('.yaml')) {
167
- const content = await this.safeReadFile(path.join(workflowsDir, entry));
168
- if (content)
169
- result[entry] = content;
170
- }
171
- }
172
- return result;
173
- }
174
- async readEvidence(root) {
175
- const evidenceDir = path.join(root, '.harness', 'evidence');
176
- const result = {};
177
- if (!await this.fs.exists(evidenceDir))
178
- return result;
179
- const entries = await this.fs.readdirNames(evidenceDir);
180
- for (const entry of entries) {
181
- if (entry.endsWith('.json')) {
182
- const content = await this.safeReadJson(path.join(evidenceDir, entry));
183
- if (content)
184
- result[entry] = content;
185
- }
186
- }
187
- return result;
188
- }
189
- async listAdrs(root) {
190
- const adrDir = path.join(root, 'reference', 'architecture', 'adrs');
191
- if (!await this.fs.exists(adrDir))
192
- return [];
193
- return this.listFilesRecursive(adrDir);
194
- }
195
- async listFilesRecursive(dir) {
196
- const files = [];
197
- const entries = await this.fs.readdirNames(dir);
198
- for (const entry of entries) {
199
- if (entry === '.' || entry === '..')
200
- continue;
201
- const full = path.join(dir, entry);
202
- const stat = await this.fs.stat(full);
203
- if (stat.isDirectory()) {
204
- files.push(...await this.listFilesRecursive(full));
205
- }
206
- else {
207
- files.push(full);
208
- }
209
- }
210
- return files;
211
- }
212
- async hasCompiledTests(root) {
213
- const distDir = path.join(root, 'sdk', 'cli', 'dist');
214
- if (!await this.fs.exists(distDir))
215
- return false;
216
- const files = await this.listFilesRecursive(distDir);
217
- return files.some(f => f.includes('.spec.') || f.includes('.test.'));
218
- }
219
- async readWorkspacePackageJsons(rootPath) {
220
- const rootPkgPath = path.join(rootPath, 'package.json');
221
- const files = [];
222
- const rootPkg = await this.safeReadJson(rootPkgPath);
223
- if (!rootPkg)
224
- return files;
225
- files.push({ path: rootPkgPath, content: rootPkg });
226
- const workspaces = rootPkg['workspaces'];
227
- const patterns = Array.isArray(workspaces)
228
- ? workspaces
229
- : (workspaces?.packages ?? []);
230
- for (const pattern of patterns) {
231
- const base = pattern.replace(/\/\*.*$/, '');
232
- const wsBase = path.join(rootPath, base);
233
- if (await this.fs.exists(wsBase)) {
234
- const entries = await this.fs.readdirNames(wsBase);
235
- for (const entry of entries) {
236
- if (entry === '.' || entry === '..')
237
- continue;
238
- const pkgPath = path.join(wsBase, entry, 'package.json');
239
- const pkg = await this.safeReadJson(pkgPath);
240
- if (pkg)
241
- files.push({ path: pkgPath, content: pkg });
242
- }
243
- }
244
- }
245
- return files;
246
- }
247
- }
248
- exports.OpaEvaluator = OpaEvaluator;
249
- //# sourceMappingURL=opa-evaluator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opa-evaluator.js","sourceRoot":"","sources":["../../../../src/core/validators/evaluators/opa-evaluator.ts"],"names":[],"mappings":"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"}
@@ -1,75 +0,0 @@
1
- export interface PhaseGateDefinition {
2
- phase: number;
3
- name: string;
4
- description: string;
5
- mandatoryEvidence: EvidenceRequirement[];
6
- blockingCriteria: BlockingCriterion[];
7
- accountableRole: string;
8
- waiverAuthority: string;
9
- waiverRequiredFields: string[];
10
- }
11
- export interface EvidenceRequirement {
12
- artifact: string;
13
- schemaRef?: string;
14
- status?: string;
15
- validation: string;
16
- }
17
- export interface BlockingCriterion {
18
- criterion: string;
19
- action: string;
20
- }
21
- export interface GateValidationResult {
22
- gateId: string;
23
- phase: number;
24
- name: string;
25
- passed: boolean;
26
- evidenceResults: EvidenceValidationResult[];
27
- blockingChecks: BlockingCheckResult[];
28
- waiverAvailable: boolean;
29
- accountableRole: string;
30
- waiverAuthority: string;
31
- }
32
- export interface EvidenceValidationResult {
33
- artifact: string;
34
- passed: boolean;
35
- found: boolean;
36
- schemaValid: boolean;
37
- validationMessage: string;
38
- required: boolean;
39
- }
40
- export interface BlockingCheckResult {
41
- criterion: string;
42
- triggered: boolean;
43
- action: string;
44
- }
45
- export interface PhaseGatesRuleset {
46
- version?: string;
47
- gates: PhaseGateDefinition[];
48
- }
49
- export declare class PhaseGateValidatorService {
50
- private readonly fs;
51
- private readonly logger;
52
- private readonly rulesetPath;
53
- private cachedRuleset;
54
- private readonly ajv;
55
- private schemaValidator;
56
- constructor(corePath?: string);
57
- loadRuleset(): Promise<PhaseGatesRuleset>;
58
- getRulesetVersion(): Promise<string>;
59
- validateGate(phaseNumber: number, projectPath: string): Promise<GateValidationResult>;
60
- validateAllGates(projectPath: string): Promise<GateValidationResult[]>;
61
- getGateStatus(projectPath: string): Promise<{
62
- currentPhase: number;
63
- gatesPassed: number;
64
- gatesFailed: number;
65
- gatesPending: number;
66
- results: GateValidationResult[];
67
- }>;
68
- private validateEvidence;
69
- private validateSingleEvidence;
70
- private resolveArtifactPath;
71
- private validateSchema;
72
- private checkBlockingCriteria;
73
- private isCriterionTriggered;
74
- private findCorePath;
75
- }
@@ -1,338 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.PhaseGateValidatorService = void 0;
40
- const path = __importStar(require("path"));
41
- const abstractions_1 = require("../abstractions");
42
- const ajv_1 = __importDefault(require("ajv"));
43
- const ajv_formats_1 = __importDefault(require("ajv-formats"));
44
- class PhaseGateValidatorService {
45
- constructor(corePath) {
46
- this.cachedRuleset = null;
47
- const container = (0, abstractions_1.getContainer)();
48
- this.fs = container.createFileSystem();
49
- this.logger = container.createLogger('PhaseGateValidatorService');
50
- const resolvedCorePath = corePath || this.findCorePath(process.cwd());
51
- this.rulesetPath = path.join(resolvedCorePath, 'rulesets', 'sdlc', 'phase-gates.rules.json');
52
- this.ajv = new ajv_1.default({ allErrors: true });
53
- (0, ajv_formats_1.default)(this.ajv);
54
- }
55
- async loadRuleset() {
56
- if (this.cachedRuleset) {
57
- return this.cachedRuleset;
58
- }
59
- try {
60
- const content = await this.fs.readFile(this.rulesetPath);
61
- const parsed = JSON.parse(content);
62
- if (!this.schemaValidator) {
63
- const schemaPath = path.join(path.dirname(this.rulesetPath), '../schema/ruleset-sdlc.schema.json');
64
- const schemaContent = await this.fs.readFile(schemaPath);
65
- this.schemaValidator = this.ajv.compile(JSON.parse(schemaContent));
66
- }
67
- const valid = this.schemaValidator(parsed);
68
- if (!valid) {
69
- throw new Error(`Ruleset validation failed: ${this.ajv.errorsText(this.schemaValidator.errors)}`);
70
- }
71
- this.cachedRuleset = parsed;
72
- return this.cachedRuleset;
73
- }
74
- catch (error) {
75
- const message = error instanceof Error ? error.message : String(error);
76
- this.logger.error(`Failed to load phase gates ruleset: ${message}`);
77
- throw new Error(`Cannot load phase gates ruleset from ${this.rulesetPath}: ${message}`);
78
- }
79
- }
80
- async getRulesetVersion() {
81
- const ruleset = await this.loadRuleset();
82
- return ruleset.version ?? '0.0.0';
83
- }
84
- async validateGate(phaseNumber, projectPath) {
85
- const ruleset = await this.loadRuleset();
86
- const gate = ruleset.gates.find(g => g.phase === phaseNumber);
87
- if (!gate) {
88
- throw new Error(`Phase gate ${phaseNumber} not defined in ruleset`);
89
- }
90
- const evidenceResults = await this.validateEvidence(gate, projectPath);
91
- const blockingChecks = await this.checkBlockingCriteria(gate, projectPath, evidenceResults);
92
- const allEvidencePassed = evidenceResults.every(e => e.passed || !e.required);
93
- const noBlocking = blockingChecks.every(b => !b.triggered);
94
- return {
95
- gateId: `PG-${gate.phase}`,
96
- phase: gate.phase,
97
- name: gate.name,
98
- passed: allEvidencePassed && noBlocking,
99
- evidenceResults,
100
- blockingChecks,
101
- waiverAvailable: true,
102
- accountableRole: gate.accountableRole,
103
- waiverAuthority: gate.waiverAuthority,
104
- };
105
- }
106
- async validateAllGates(projectPath) {
107
- const ruleset = await this.loadRuleset();
108
- const results = [];
109
- for (const gate of ruleset.gates) {
110
- const result = await this.validateGate(gate.phase, projectPath);
111
- results.push(result);
112
- }
113
- return results;
114
- }
115
- async getGateStatus(projectPath) {
116
- const results = await this.validateAllGates(projectPath);
117
- let currentPhase = 0;
118
- let gatesPassed = 0;
119
- let gatesFailed = 0;
120
- let gatesPending = 0;
121
- for (const result of results) {
122
- if (result.passed) {
123
- gatesPassed++;
124
- currentPhase = result.phase;
125
- }
126
- else {
127
- const hasRequiredFailures = result.evidenceResults.some(e => !e.passed && e.required);
128
- if (hasRequiredFailures) {
129
- gatesFailed++;
130
- if (currentPhase === result.phase - 1) {
131
- break;
132
- }
133
- }
134
- else {
135
- gatesPending++;
136
- }
137
- }
138
- }
139
- return {
140
- currentPhase,
141
- gatesPassed,
142
- gatesFailed,
143
- gatesPending: results.length - gatesPassed - gatesFailed,
144
- results,
145
- };
146
- }
147
- async validateEvidence(gate, projectPath) {
148
- const results = [];
149
- for (const evidence of gate.mandatoryEvidence) {
150
- const result = await this.validateSingleEvidence(evidence, projectPath);
151
- results.push(result);
152
- }
153
- return results;
154
- }
155
- async validateSingleEvidence(evidence, projectPath) {
156
- const artifactPath = this.resolveArtifactPath(evidence.artifact, projectPath);
157
- const exists = await this.fs.exists(artifactPath);
158
- if (!exists) {
159
- return {
160
- artifact: evidence.artifact,
161
- passed: false,
162
- found: false,
163
- schemaValid: false,
164
- validationMessage: `Artifact not found: ${artifactPath}`,
165
- required: true,
166
- };
167
- }
168
- let schemaValid = true;
169
- if (evidence.schemaRef) {
170
- schemaValid = await this.validateSchema(evidence.schemaRef, artifactPath, projectPath);
171
- }
172
- const validationMessage = schemaValid
173
- ? `Artifact found and valid: ${artifactPath}`
174
- : `Artifact found but schema validation failed: ${artifactPath}`;
175
- return {
176
- artifact: evidence.artifact,
177
- passed: exists && schemaValid,
178
- found: true,
179
- schemaValid,
180
- validationMessage,
181
- required: true,
182
- };
183
- }
184
- resolveArtifactPath(artifact, projectPath) {
185
- const artifactPaths = {
186
- 'PRD': path.join(projectPath, 'reference', 'governance', 'sdlc', '04-artifact-templates', 'prd-template.md'),
187
- 'Discovery Canvas': path.join(projectPath, 'reference', 'governance', 'sdlc', '04-artifact-templates', 'discovery-canvas-template.md'),
188
- 'Business Case ROI': path.join(projectPath, 'reference', 'governance', 'sdlc', '04-artifact-templates', 'business-case-roi-template.md'),
189
- 'Ballpark Estimation': path.join(projectPath, 'reference', 'governance', 'sdlc', '04-artifact-templates', 'ballpark-estimation-template.md'),
190
- 'MoSCoW Prioritization Matrix': path.join(projectPath, '.evolith', 'moscow', 'phase-0.json'),
191
- 'ADR Registry': path.join(projectPath, 'reference', 'architecture', 'adrs', 'adr-matrix.json'),
192
- 'Functional Stories': path.join(projectPath, 'reference', 'governance', 'sdlc', '04-artifact-templates', 'functional-story-template.md'),
193
- 'Bounded Context Map': path.join(projectPath, 'reference', 'architecture', 'contexts', 'bounded-context-map.md'),
194
- 'Technical Stories': path.join(projectPath, 'reference', 'governance', 'sdlc', '04-artifact-templates', 'technical-story-template.md'),
195
- 'Test Summary Report': path.join(projectPath, 'reference', 'governance', 'sdlc', '04-artifact-templates', 'test-summary-report-template.md'),
196
- 'Release Notes': path.join(projectPath, 'reference', 'governance', 'sdlc', '04-artifact-templates', 'release-notes-template.md'),
197
- 'evolith.yaml': path.join(projectPath, 'evolith.yaml'),
198
- 'package.json': path.join(projectPath, 'package.json'),
199
- 'rulesets': path.join(projectPath, 'rulesets'),
200
- '.harness': path.join(projectPath, '.harness'),
201
- 'src': path.join(projectPath, 'src'),
202
- 'contracts': path.join(projectPath, 'contracts'),
203
- 'Dockerfile': path.join(projectPath, 'Dockerfile'),
204
- };
205
- return artifactPaths[artifact] || path.join(projectPath, artifact);
206
- }
207
- async validateSchema(schemaRef, artifactPath, _projectPath) {
208
- try {
209
- const schemaPath = path.join(path.dirname(this.rulesetPath), schemaRef);
210
- if (!await this.fs.exists(schemaPath)) {
211
- this.logger.warn(`Schema file not found: ${schemaPath}`);
212
- return false;
213
- }
214
- const schemaContent = await this.fs.readFile(schemaPath);
215
- const artifactContent = await this.fs.readFile(artifactPath);
216
- if (!artifactContent || artifactContent.trim().length === 0)
217
- return false;
218
- const schema = JSON.parse(schemaContent);
219
- const artifact = JSON.parse(artifactContent);
220
- const { default: Ajv } = await Promise.resolve().then(() => __importStar(require('ajv')));
221
- const { default: addFormats } = await Promise.resolve().then(() => __importStar(require('ajv-formats')));
222
- const ajv = new Ajv({ strict: false, allErrors: true });
223
- addFormats(ajv);
224
- const validate = ajv.compile(schema);
225
- const valid = validate(artifact);
226
- if (!valid && validate.errors) {
227
- const summary = validate.errors.slice(0, 3).map(e => `${e.instancePath} ${e.message}`).join('; ');
228
- this.logger.warn(`Schema validation failed for ${artifactPath}: ${summary}`);
229
- }
230
- return Boolean(valid);
231
- }
232
- catch (err) {
233
- this.logger.warn(`Schema validation error: ${err instanceof Error ? err.message : String(err)}`);
234
- return false;
235
- }
236
- }
237
- async checkBlockingCriteria(gate, projectPath, evidenceResults) {
238
- const results = [];
239
- for (const criterion of gate.blockingCriteria) {
240
- const triggered = await this.isCriterionTriggered(criterion, projectPath, evidenceResults);
241
- results.push({
242
- criterion: criterion.criterion,
243
- triggered,
244
- action: criterion.action,
245
- });
246
- }
247
- return results;
248
- }
249
- async isCriterionTriggered(criterion, projectPath, evidenceResults) {
250
- const criterionText = criterion.criterion.toLowerCase();
251
- if (criterionText.includes('scope is ambiguous') || criterionText.includes('funding')) {
252
- const prdEvidence = evidenceResults.find(e => e.artifact === 'PRD');
253
- const moscowEvidence = evidenceResults.find(e => e.artifact === 'MoSCoW Prioritization Matrix');
254
- return !prdEvidence?.found || (moscowEvidence !== undefined && !moscowEvidence.found);
255
- }
256
- if (criterionText.includes('architecture decisions are undocumented')) {
257
- const adrEvidence = evidenceResults.find(e => e.artifact === 'ADR Registry');
258
- if (!adrEvidence?.found)
259
- return true;
260
- try {
261
- const adrPath = path.join(projectPath, 'reference', 'architecture', 'adrs', 'adr-matrix.json');
262
- if (await this.fs.exists(adrPath)) {
263
- const content = await this.fs.readFile(adrPath);
264
- const matrix = JSON.parse(content);
265
- if (!matrix.adrs || matrix.adrs.length === 0) {
266
- return true;
267
- }
268
- }
269
- }
270
- catch (err) {
271
- this.logger.warn(`Failed to validate ADR registry content: ${err instanceof Error ? err.message : String(err)}`);
272
- return true;
273
- }
274
- return false;
275
- }
276
- if (criterionText.includes('bounded context')) {
277
- const contextEvidence = evidenceResults.find(e => e.artifact === 'Bounded Context Map');
278
- return !contextEvidence?.found;
279
- }
280
- if (criterionText.includes('functional stories lack acceptance criteria')) {
281
- const storyEvidence = evidenceResults.find(e => e.artifact === 'Functional Stories');
282
- return !storyEvidence?.found;
283
- }
284
- if (criterionText.includes('ci fails')) {
285
- const ciPath = path.join(projectPath, '.github', 'workflows');
286
- return !await this.fs.exists(ciPath);
287
- }
288
- if (criterionText.includes('coverage below')) {
289
- const summaryPath = path.join(projectPath, 'coverage', 'coverage-summary.json');
290
- if (!await this.fs.exists(summaryPath)) {
291
- return true;
292
- }
293
- try {
294
- const content = await this.fs.readFile(summaryPath);
295
- const summary = JSON.parse(content);
296
- const pct = summary.total?.statements?.pct;
297
- if (typeof pct !== 'number' || pct < 80) {
298
- return true;
299
- }
300
- }
301
- catch (err) {
302
- this.logger.warn(`Failed to parse coverage-summary.json: ${err instanceof Error ? err.message : String(err)}`);
303
- return true;
304
- }
305
- return false;
306
- }
307
- if (criterionText.includes('cve')) {
308
- const securityPath = path.join(projectPath, 'security-scan.json');
309
- return !await this.fs.exists(securityPath);
310
- }
311
- if (criterionText.includes('monitoring')) {
312
- const observabilityPath = path.join(projectPath, 'observability');
313
- return !await this.fs.exists(observabilityPath);
314
- }
315
- if (criterionText.includes('rollback')) {
316
- const releaseEvidence = evidenceResults.find(e => e.artifact === 'Release Notes');
317
- return !releaseEvidence?.found;
318
- }
319
- if (criterionText.includes('traceable')) {
320
- const releaseEvidence = evidenceResults.find(e => e.artifact === 'Release Notes');
321
- return !releaseEvidence?.found;
322
- }
323
- return false;
324
- }
325
- findCorePath(projectPath) {
326
- const parts = projectPath.split(path.sep);
327
- while (parts.length > 0) {
328
- parts.pop();
329
- const candidate = path.join(parts.join(path.sep), 'rulesets');
330
- if (this.fs.existsSync(candidate)) {
331
- return parts.join(path.sep);
332
- }
333
- }
334
- return path.join(projectPath, '..', 'evolith');
335
- }
336
- }
337
- exports.PhaseGateValidatorService = PhaseGateValidatorService;
338
- //# sourceMappingURL=phase-gate-validator.service.js.map