@howlil/ez-agents 3.4.2 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (365) hide show
  1. package/README.md +735 -462
  2. package/agents/ez-architect-agent.md +267 -0
  3. package/agents/ez-backend-agent.md +303 -0
  4. package/agents/ez-chief-strategist.md +271 -0
  5. package/agents/ez-codebase-mapper.md +770 -770
  6. package/agents/ez-context-manager.md +319 -0
  7. package/agents/ez-debugger.md +1255 -1255
  8. package/agents/ez-design-expert.md +347 -0
  9. package/agents/ez-devops-agent.md +331 -0
  10. package/agents/ez-executor.md +487 -487
  11. package/agents/ez-frontend-agent.md +322 -0
  12. package/agents/ez-phase-researcher.md +553 -553
  13. package/agents/ez-planner.md +1307 -1307
  14. package/agents/ez-product-engineer.md +435 -0
  15. package/agents/ez-project-researcher.md +629 -629
  16. package/agents/ez-qa-agent.md +320 -0
  17. package/agents/ez-release-agent.md +333 -0
  18. package/agents/ez-requirements-agent.md +377 -0
  19. package/agents/ez-roadmapper.md +650 -650
  20. package/agents/ez-technical-writer.md +551 -0
  21. package/agents/ez-ux-expert.md +393 -0
  22. package/agents/ez-verifier.md +579 -579
  23. package/bin/guards/autonomy-guard.cjs +346 -0
  24. package/bin/guards/context-budget-guard.cjs +278 -0
  25. package/bin/guards/hallucination-guard.cjs +380 -0
  26. package/bin/guards/hidden-state-guard.cjs +182 -0
  27. package/bin/guards/team-overhead-guard.cjs +266 -0
  28. package/bin/guards/tool-sprawl-guard.cjs +271 -0
  29. package/bin/install.js +3221 -3272
  30. package/bin/lib/analytics/analytics-collector.cjs +86 -0
  31. package/bin/lib/analytics/analytics-reporter.cjs +130 -0
  32. package/bin/lib/analytics/cohort-analyzer.cjs +138 -0
  33. package/bin/lib/analytics/funnel-analyzer.cjs +147 -0
  34. package/bin/lib/analytics/nps-tracker.cjs +147 -0
  35. package/bin/lib/archetype-detector.cjs +289 -0
  36. package/bin/lib/assistant-adapter.cjs +361 -0
  37. package/bin/lib/audit-exec.cjs +175 -0
  38. package/bin/lib/auth.cjs +176 -0
  39. package/bin/lib/backup-service.cjs +422 -0
  40. package/bin/lib/bdd-validator.cjs +622 -0
  41. package/bin/lib/business-flow-mapper.cjs +429 -0
  42. package/bin/lib/circuit-breaker.cjs +276 -0
  43. package/bin/lib/code-complexity-analyzer.cjs +360 -0
  44. package/bin/lib/codebase-analyzer.cjs +241 -0
  45. package/bin/lib/commands.cjs +691 -0
  46. package/bin/lib/config.cjs +236 -0
  47. package/bin/lib/constraint-extractor.cjs +526 -0
  48. package/bin/lib/content-scanner.cjs +238 -0
  49. package/bin/lib/context-cache.cjs +154 -0
  50. package/bin/lib/context-compressor.cjs +102 -0
  51. package/bin/lib/context-deduplicator.cjs +105 -0
  52. package/bin/lib/context-errors.cjs +78 -0
  53. package/bin/lib/context-manager.cjs +338 -0
  54. package/bin/lib/context-metadata-tracker.cjs +140 -0
  55. package/bin/lib/context-relevance-scorer.cjs +99 -0
  56. package/bin/lib/core.cjs +507 -0
  57. package/bin/lib/cost-alerts.cjs +174 -0
  58. package/bin/lib/cost-tracker.cjs +275 -0
  59. package/bin/lib/crash-recovery.cjs +220 -0
  60. package/bin/lib/dependency-graph.cjs +319 -0
  61. package/bin/lib/deploy/deploy-audit-log.cjs +76 -0
  62. package/bin/lib/deploy/deploy-detector.cjs +69 -0
  63. package/bin/lib/deploy/deploy-env-manager.cjs +109 -0
  64. package/bin/lib/deploy/deploy-health-check.cjs +88 -0
  65. package/bin/lib/deploy/deploy-pre-flight.cjs +57 -0
  66. package/bin/lib/deploy/deploy-rollback.cjs +72 -0
  67. package/bin/lib/deploy/deploy-runner.cjs +97 -0
  68. package/bin/lib/deploy/deploy-status.cjs +74 -0
  69. package/bin/lib/discussion-synthesizer.cjs +439 -0
  70. package/bin/lib/error-cache.cjs +114 -0
  71. package/bin/lib/error-registry.cjs +177 -0
  72. package/bin/lib/file-access.cjs +207 -0
  73. package/bin/lib/file-lock.cjs +236 -0
  74. package/bin/lib/finops/budget-enforcer.cjs +126 -0
  75. package/bin/lib/finops/cost-reporter.cjs +132 -0
  76. package/bin/lib/finops/finops-analyzer.cjs +112 -0
  77. package/bin/lib/finops/spot-manager.cjs +118 -0
  78. package/bin/lib/framework-detector.cjs +396 -0
  79. package/bin/lib/frontmatter.cjs +313 -0
  80. package/bin/lib/fs-utils.cjs +153 -0
  81. package/bin/lib/gate-executor.cjs +272 -0
  82. package/bin/lib/gates/README.md +374 -0
  83. package/bin/lib/gates/gate-01-requirement.cjs +303 -0
  84. package/bin/lib/gates/gate-02-architecture.cjs +555 -0
  85. package/bin/lib/gates/gate-03-code.cjs +635 -0
  86. package/bin/lib/gates/gate-04-security.cjs +829 -0
  87. package/bin/lib/git-errors.cjs +83 -0
  88. package/bin/lib/git-utils.cjs +321 -0
  89. package/bin/lib/git-workflow-engine.cjs +1157 -0
  90. package/bin/lib/health-check.cjs +227 -0
  91. package/bin/lib/index.cjs +279 -0
  92. package/bin/lib/init.cjs +725 -0
  93. package/bin/lib/lock-logger.cjs +194 -0
  94. package/bin/lib/lock-state.cjs +263 -0
  95. package/bin/lib/lockfile-validator.cjs +227 -0
  96. package/bin/lib/log-rotation.cjs +71 -0
  97. package/bin/lib/logger.cjs +125 -0
  98. package/bin/lib/memory-compression.cjs +256 -0
  99. package/bin/lib/milestone.cjs +247 -0
  100. package/bin/lib/model-provider.cjs +241 -0
  101. package/bin/lib/package-manager-detector.cjs +203 -0
  102. package/bin/lib/package-manager-executor.cjs +385 -0
  103. package/bin/lib/package-manager-service.cjs +216 -0
  104. package/bin/lib/perf/api-monitor.cjs +88 -0
  105. package/bin/lib/perf/db-optimizer.cjs +78 -0
  106. package/bin/lib/perf/frontend-performance.cjs +56 -0
  107. package/bin/lib/perf/perf-analyzer.cjs +77 -0
  108. package/bin/lib/perf/perf-baseline.cjs +102 -0
  109. package/bin/lib/perf/perf-reporter.cjs +117 -0
  110. package/bin/lib/perf/regression-detector.cjs +92 -0
  111. package/bin/lib/phase.cjs +963 -0
  112. package/bin/lib/planning-write.cjs +123 -0
  113. package/bin/lib/project-reporter.cjs +565 -0
  114. package/bin/lib/quality-gate.cjs +332 -0
  115. package/bin/lib/quality-metrics.cjs +324 -0
  116. package/bin/lib/recovery-manager.cjs +98 -0
  117. package/bin/lib/release-validator.cjs +617 -0
  118. package/bin/lib/retry.cjs +119 -0
  119. package/bin/lib/roadmap.cjs +309 -0
  120. package/bin/lib/safe-exec.cjs +173 -0
  121. package/bin/lib/safe-path.cjs +130 -0
  122. package/bin/lib/security-errors.cjs +62 -0
  123. package/bin/lib/session-chain.cjs +304 -0
  124. package/bin/lib/session-errors.cjs +81 -0
  125. package/bin/lib/session-export.cjs +251 -0
  126. package/bin/lib/session-import.cjs +262 -0
  127. package/bin/lib/session-manager.cjs +280 -0
  128. package/bin/lib/skill-context.cjs +148 -0
  129. package/bin/lib/skill-matcher.cjs +236 -0
  130. package/bin/lib/skill-registry.cjs +360 -0
  131. package/bin/lib/skill-resolver.cjs +449 -0
  132. package/bin/lib/skill-triggers.cjs +90 -0
  133. package/bin/lib/skill-validator.cjs +270 -0
  134. package/bin/lib/skill-versioning.cjs +355 -0
  135. package/bin/lib/stack-detector.cjs +399 -0
  136. package/bin/lib/state.cjs +736 -0
  137. package/bin/lib/tech-debt-analyzer.cjs +309 -0
  138. package/bin/lib/temp-file.cjs +239 -0
  139. package/bin/lib/template.cjs +223 -0
  140. package/bin/lib/test-file-lock.cjs +112 -0
  141. package/bin/lib/test-graceful.cjs +93 -0
  142. package/bin/lib/test-logger.cjs +60 -0
  143. package/bin/lib/test-safe-exec.cjs +38 -0
  144. package/bin/lib/test-safe-path.cjs +33 -0
  145. package/bin/lib/test-temp-file.cjs +125 -0
  146. package/bin/lib/tier-manager.cjs +428 -0
  147. package/bin/lib/timeout-exec.cjs +63 -0
  148. package/bin/lib/tradeoff-analyzer.cjs +284 -0
  149. package/bin/lib/url-fetch.cjs +170 -0
  150. package/bin/lib/verify.cjs +863 -0
  151. package/bin/update.js +217 -214
  152. package/commands/deploy.cjs +53 -0
  153. package/commands/ez/add-tests.md +41 -41
  154. package/commands/ez/audit-milestone.md +36 -36
  155. package/commands/ez/complete-milestone.md +136 -136
  156. package/commands/ez/discuss-phase.md +90 -90
  157. package/commands/ez/execute-phase.md +52 -41
  158. package/commands/ez/help.md +22 -22
  159. package/commands/ez/map-codebase.md +71 -71
  160. package/commands/ez/new-milestone.md +44 -44
  161. package/commands/ez/new-project.md +51 -42
  162. package/commands/ez/plan-phase.md +53 -45
  163. package/commands/ez/progress.md +36 -24
  164. package/commands/ez/quick.md +45 -45
  165. package/commands/ez/resume-work.md +40 -40
  166. package/commands/ez/run-phase.md +580 -0
  167. package/commands/ez/settings.md +36 -36
  168. package/commands/ez/update.md +37 -37
  169. package/commands/ez/verify-work.md +402 -38
  170. package/commands/health-check.cjs +44 -0
  171. package/commands/rollback.cjs +47 -0
  172. package/ez-agents/bin/ez-tools.cjs +1692 -716
  173. package/ez-agents/bin/guards/autonomy-guard.cjs +346 -0
  174. package/ez-agents/bin/guards/context-budget-guard.cjs +247 -0
  175. package/ez-agents/bin/guards/hallucination-guard.cjs +271 -0
  176. package/ez-agents/bin/guards/hidden-state-guard.cjs +182 -0
  177. package/ez-agents/bin/guards/team-overhead-guard.cjs +266 -0
  178. package/ez-agents/bin/guards/tool-sprawl-guard.cjs +271 -0
  179. package/ez-agents/bin/lib/analytics/analytics-collector.cjs +86 -0
  180. package/ez-agents/bin/lib/analytics/analytics-reporter.cjs +130 -0
  181. package/ez-agents/bin/lib/analytics/cohort-analyzer.cjs +138 -0
  182. package/ez-agents/bin/lib/analytics/funnel-analyzer.cjs +147 -0
  183. package/ez-agents/bin/lib/analytics/nps-tracker.cjs +147 -0
  184. package/ez-agents/bin/lib/archetype-detector.cjs +289 -0
  185. package/ez-agents/bin/lib/audit-exec.cjs +166 -167
  186. package/ez-agents/bin/lib/auth.cjs +176 -176
  187. package/ez-agents/bin/lib/backup-service.cjs +422 -0
  188. package/ez-agents/bin/lib/bdd-validator.cjs +622 -0
  189. package/ez-agents/bin/lib/business-flow-mapper.cjs +429 -0
  190. package/ez-agents/bin/lib/code-complexity-analyzer.cjs +360 -0
  191. package/ez-agents/bin/lib/codebase-analyzer.cjs +241 -0
  192. package/ez-agents/bin/lib/commands.cjs +685 -685
  193. package/ez-agents/bin/lib/config.cjs +41 -1
  194. package/ez-agents/bin/lib/constraint-extractor.cjs +526 -0
  195. package/ez-agents/bin/lib/content-scanner.cjs +238 -0
  196. package/ez-agents/bin/lib/context-cache.cjs +154 -0
  197. package/ez-agents/bin/lib/context-errors.cjs +71 -0
  198. package/ez-agents/bin/lib/context-manager.cjs +220 -0
  199. package/ez-agents/bin/lib/core.cjs +507 -512
  200. package/ez-agents/bin/lib/cost-tracker.cjs +243 -0
  201. package/ez-agents/bin/lib/crash-recovery.cjs +172 -0
  202. package/ez-agents/bin/lib/dependency-graph.cjs +319 -0
  203. package/ez-agents/bin/lib/deploy/deploy-audit-log.cjs +76 -0
  204. package/ez-agents/bin/lib/deploy/deploy-detector.cjs +69 -0
  205. package/ez-agents/bin/lib/deploy/deploy-env-manager.cjs +109 -0
  206. package/ez-agents/bin/lib/deploy/deploy-health-check.cjs +88 -0
  207. package/ez-agents/bin/lib/deploy/deploy-pre-flight.cjs +57 -0
  208. package/ez-agents/bin/lib/deploy/deploy-rollback.cjs +72 -0
  209. package/ez-agents/bin/lib/deploy/deploy-runner.cjs +97 -0
  210. package/ez-agents/bin/lib/deploy/deploy-status.cjs +74 -0
  211. package/ez-agents/bin/lib/discussion-synthesizer.cjs +458 -0
  212. package/ez-agents/bin/lib/file-access.cjs +207 -0
  213. package/ez-agents/bin/lib/finops/budget-enforcer.cjs +126 -0
  214. package/ez-agents/bin/lib/finops/cost-reporter.cjs +132 -0
  215. package/ez-agents/bin/lib/finops/finops-analyzer.cjs +112 -0
  216. package/ez-agents/bin/lib/finops/spot-manager.cjs +118 -0
  217. package/ez-agents/bin/lib/framework-detector.cjs +396 -0
  218. package/ez-agents/bin/lib/frontmatter.cjs +3 -1
  219. package/ez-agents/bin/lib/gates/README.md +374 -0
  220. package/ez-agents/bin/lib/gates/gate-01-requirement.cjs +303 -0
  221. package/ez-agents/bin/lib/gates/gate-02-architecture.cjs +555 -0
  222. package/ez-agents/bin/lib/gates/gate-03-code.cjs +635 -0
  223. package/ez-agents/bin/lib/gates/gate-04-security.cjs +829 -0
  224. package/ez-agents/bin/lib/git-errors.cjs +83 -0
  225. package/ez-agents/bin/lib/git-utils.cjs +118 -0
  226. package/ez-agents/bin/lib/git-workflow-engine.cjs +1157 -0
  227. package/ez-agents/bin/lib/health-check.cjs +162 -162
  228. package/ez-agents/bin/lib/index.cjs +40 -2
  229. package/ez-agents/bin/lib/init.cjs +0 -2
  230. package/ez-agents/bin/lib/lockfile-validator.cjs +227 -0
  231. package/ez-agents/bin/lib/log-rotation.cjs +71 -0
  232. package/ez-agents/bin/lib/logger.cjs +99 -154
  233. package/ez-agents/bin/lib/memory-compression.cjs +256 -0
  234. package/ez-agents/bin/lib/package-manager-detector.cjs +203 -0
  235. package/ez-agents/bin/lib/package-manager-executor.cjs +385 -0
  236. package/ez-agents/bin/lib/package-manager-service.cjs +216 -0
  237. package/ez-agents/bin/lib/perf/api-monitor.cjs +88 -0
  238. package/ez-agents/bin/lib/perf/db-optimizer.cjs +78 -0
  239. package/ez-agents/bin/lib/perf/frontend-performance.cjs +56 -0
  240. package/ez-agents/bin/lib/perf/perf-analyzer.cjs +77 -0
  241. package/ez-agents/bin/lib/perf/perf-baseline.cjs +102 -0
  242. package/ez-agents/bin/lib/perf/perf-reporter.cjs +117 -0
  243. package/ez-agents/bin/lib/perf/regression-detector.cjs +92 -0
  244. package/ez-agents/bin/lib/project-reporter.cjs +502 -0
  245. package/ez-agents/bin/lib/quality-gate.cjs +332 -0
  246. package/ez-agents/bin/lib/recovery-manager.cjs +98 -0
  247. package/ez-agents/bin/lib/release-validator.cjs +617 -0
  248. package/ez-agents/bin/lib/safe-exec.cjs +128 -214
  249. package/ez-agents/bin/lib/security-errors.cjs +62 -0
  250. package/ez-agents/bin/lib/session-chain.cjs +304 -0
  251. package/ez-agents/bin/lib/session-errors.cjs +81 -0
  252. package/ez-agents/bin/lib/session-export.cjs +251 -0
  253. package/ez-agents/bin/lib/session-import.cjs +262 -0
  254. package/ez-agents/bin/lib/session-manager.cjs +280 -0
  255. package/ez-agents/bin/lib/skill-context.cjs +148 -0
  256. package/ez-agents/bin/lib/skill-matcher.cjs +236 -0
  257. package/ez-agents/bin/lib/skill-registry.cjs +341 -0
  258. package/ez-agents/bin/lib/skill-resolver.cjs +449 -0
  259. package/ez-agents/bin/lib/skill-triggers.cjs +90 -0
  260. package/ez-agents/bin/lib/skill-validator.cjs +270 -0
  261. package/ez-agents/bin/lib/skill-versioning.cjs +355 -0
  262. package/ez-agents/bin/lib/stack-detector.cjs +399 -0
  263. package/ez-agents/bin/lib/tech-debt-analyzer.cjs +309 -0
  264. package/ez-agents/bin/lib/tier-manager.cjs +428 -0
  265. package/ez-agents/bin/lib/tradeoff-analyzer.cjs +284 -0
  266. package/ez-agents/bin/lib/url-fetch.cjs +170 -0
  267. package/ez-agents/bin/lib/verify.cjs +863 -863
  268. package/ez-agents/references/decimal-phase-calculation.md +65 -65
  269. package/ez-agents/references/git-integration.md +248 -248
  270. package/ez-agents/references/git-planning-commit.md +38 -38
  271. package/ez-agents/references/metrics-schema.md +118 -0
  272. package/ez-agents/references/model-profile-resolution.md +34 -34
  273. package/ez-agents/references/model-profiles.md +93 -93
  274. package/ez-agents/references/phase-argument-parsing.md +61 -61
  275. package/ez-agents/references/planning-config.md +340 -200
  276. package/ez-agents/references/tier-strategy.md +103 -0
  277. package/ez-agents/references/ui-brand.md +160 -160
  278. package/ez-agents/references/verification-patterns.md +612 -612
  279. package/ez-agents/templates/DEBUG.md +164 -164
  280. package/ez-agents/templates/UAT.md +247 -247
  281. package/ez-agents/templates/agent-output-format.md +404 -0
  282. package/ez-agents/templates/bdd-feature.md +173 -0
  283. package/ez-agents/templates/codebase/architecture.md +255 -255
  284. package/ez-agents/templates/codebase/structure.md +285 -285
  285. package/ez-agents/templates/copilot-instructions.md +7 -7
  286. package/ez-agents/templates/debug-subagent-prompt.md +91 -91
  287. package/ez-agents/templates/discovery.md +146 -146
  288. package/ez-agents/templates/discussion.md +68 -0
  289. package/ez-agents/templates/handoff-protocol.md +294 -0
  290. package/ez-agents/templates/incident-runbook.md +205 -0
  291. package/ez-agents/templates/mode-workflow-templates.md +301 -0
  292. package/ez-agents/templates/phase-prompt.md +610 -610
  293. package/ez-agents/templates/planner-subagent-prompt.md +117 -117
  294. package/ez-agents/templates/project.md +184 -184
  295. package/ez-agents/templates/release-checklist.md +136 -0
  296. package/ez-agents/templates/research.md +552 -552
  297. package/ez-agents/templates/rollback-plan.md +201 -0
  298. package/ez-agents/templates/security-user-setup.md +244 -0
  299. package/ez-agents/templates/skill-validation-rules.md +476 -0
  300. package/ez-agents/templates/state.md +180 -176
  301. package/ez-agents/templates/summary-complex.md +59 -59
  302. package/ez-agents/tests/gates/gate-01-02.test.cjs +812 -0
  303. package/ez-agents/tests/gates/gate-03-04.test.cjs +762 -0
  304. package/ez-agents/tests/gates/gate-05-validator.test.cjs +145 -0
  305. package/ez-agents/tests/gates/gate-06-docs-validator.test.cjs +244 -0
  306. package/ez-agents/tests/gates/gate-07-release-validator.test.cjs +219 -0
  307. package/ez-agents/tests/guards/context-budget-guard.test.cjs +145 -0
  308. package/ez-agents/tests/guards/edge-case-guards.test.cjs +238 -0
  309. package/ez-agents/tests/guards/hallucination-guard.test.cjs +124 -0
  310. package/ez-agents/workflows/audit-milestone.md +1 -1
  311. package/ez-agents/workflows/autonomous.md +131 -30
  312. package/ez-agents/workflows/complete-milestone.md +1 -1
  313. package/ez-agents/workflows/discuss-phase.md +1 -1
  314. package/ez-agents/workflows/execute-phase.md +169 -3
  315. package/ez-agents/workflows/help.md +86 -133
  316. package/ez-agents/workflows/hotfix.md +291 -0
  317. package/ez-agents/workflows/new-milestone.md +340 -11
  318. package/ez-agents/workflows/new-project.md +294 -318
  319. package/ez-agents/workflows/plan-phase.md +22 -40
  320. package/ez-agents/workflows/progress.md +15 -25
  321. package/ez-agents/workflows/release.md +253 -0
  322. package/ez-agents/workflows/resume-session.md +215 -0
  323. package/ez-agents/workflows/run-phase.md +531 -0
  324. package/ez-agents/workflows/settings.md +2 -35
  325. package/hooks/dist/ez-check-update.js +81 -81
  326. package/hooks/dist/ez-context-monitor.js +148 -141
  327. package/hooks/dist/ez-statusline.js +115 -115
  328. package/package.json +78 -64
  329. package/scripts/fix-qwen-installation.js +144 -144
  330. package/agents/ez-integration-checker.md +0 -443
  331. package/agents/ez-nyquist-auditor.md +0 -176
  332. package/agents/ez-plan-checker.md +0 -706
  333. package/agents/ez-research-synthesizer.md +0 -247
  334. package/agents/ez-ui-auditor.md +0 -439
  335. package/agents/ez-ui-checker.md +0 -300
  336. package/agents/ez-ui-researcher.md +0 -353
  337. package/commands/ez/add-phase.md +0 -43
  338. package/commands/ez/add-todo.md +0 -47
  339. package/commands/ez/auth.md +0 -87
  340. package/commands/ez/autonomous.md +0 -41
  341. package/commands/ez/check-todos.md +0 -45
  342. package/commands/ez/cleanup.md +0 -18
  343. package/commands/ez/debug.md +0 -168
  344. package/commands/ez/health.md +0 -22
  345. package/commands/ez/insert-phase.md +0 -32
  346. package/commands/ez/join-discord.md +0 -18
  347. package/commands/ez/list-phase-assumptions.md +0 -46
  348. package/commands/ez/pause-work.md +0 -38
  349. package/commands/ez/plan-milestone-gaps.md +0 -34
  350. package/commands/ez/reapply-patches.md +0 -124
  351. package/commands/ez/remove-phase.md +0 -31
  352. package/commands/ez/research-phase.md +0 -190
  353. package/commands/ez/set-profile.md +0 -34
  354. package/commands/ez/stats.md +0 -18
  355. package/commands/ez/ui-phase.md +0 -34
  356. package/commands/ez/ui-review.md +0 -32
  357. package/commands/ez/validate-phase.md +0 -35
  358. package/ez-agents/templates/UI-SPEC.md +0 -100
  359. package/ez-agents/templates/VALIDATION.md +0 -76
  360. package/ez-agents/templates/context.md +0 -352
  361. package/ez-agents/templates/verification-report.md +0 -322
  362. package/ez-agents/workflows/research-phase.md +0 -74
  363. package/ez-agents/workflows/ui-phase.md +0 -290
  364. package/ez-agents/workflows/ui-review.md +0 -157
  365. package/ez-agents/workflows/validate-phase.md +0 -167
@@ -0,0 +1,303 @@
1
+ /**
2
+ * Gate 1: Requirement Completeness
3
+ *
4
+ * Validates that all requirements are properly mapped to tasks/phases
5
+ * and have clear acceptance criteria in Given-When-Then format.
6
+ *
7
+ * Checks:
8
+ * 1. All REQ-IDs are mapped to tasks or phases
9
+ * 2. Acceptance criteria exist and follow Given-When-Then format
10
+ * 3. Returns structured errors for unmapped or incomplete requirements
11
+ *
12
+ * @module gates/gate-01-requirement
13
+ */
14
+
15
+ const { z } = require('zod');
16
+
17
+ /**
18
+ * Zod schema for a single requirement
19
+ * @type {z.ZodSchema}
20
+ */
21
+ const requirementSchema = z.object({
22
+ /** Unique requirement identifier (e.g., 'REQ-001', 'GRAPH-01') */
23
+ id: z.string().min(1, 'Requirement ID is required'),
24
+ /** Human-readable requirement description */
25
+ description: z.string().min(1, 'Requirement description is required'),
26
+ /** Acceptance criteria array (each should follow Given-When-Then format) */
27
+ acceptanceCriteria: z.array(z.string()).min(1, 'At least one acceptance criterion is required'),
28
+ /** Optional: Array of task IDs that implement this requirement */
29
+ mappedTasks: z.array(z.string()).optional(),
30
+ /** Optional: Array of phase IDs that cover this requirement */
31
+ mappedPhases: z.array(z.string()).optional(),
32
+ });
33
+
34
+ /**
35
+ * Zod schema for a single task
36
+ * @type {z.ZodSchema}
37
+ */
38
+ const taskSchema = z.object({
39
+ /** Unique task identifier */
40
+ id: z.string(),
41
+ /** Task name/title */
42
+ name: z.string(),
43
+ /** Optional: Requirements this task addresses */
44
+ requirements: z.array(z.string()).optional(),
45
+ });
46
+
47
+ /**
48
+ * Zod schema for a single phase
49
+ * @type {z.ZodSchema}
50
+ */
51
+ const phaseSchema = z.object({
52
+ /** Unique phase identifier */
53
+ id: z.string(),
54
+ /** Phase name/title */
55
+ name: z.string(),
56
+ /** Optional: Requirements this phase covers */
57
+ requirements: z.array(z.string()).optional(),
58
+ });
59
+
60
+ /**
61
+ * Zod schema for the gate context
62
+ * @type {z.ZodSchema}
63
+ */
64
+ const gateContextSchema = z.object({
65
+ /** Array of all requirements to validate */
66
+ requirements: z.array(requirementSchema),
67
+ /** Optional: Array of tasks for mapping validation */
68
+ tasks: z.array(taskSchema).optional(),
69
+ /** Optional: Array of phases for mapping validation */
70
+ phases: z.array(phaseSchema).optional(),
71
+ });
72
+
73
+ /**
74
+ * Check if acceptance criteria follow Given-When-Then format
75
+ *
76
+ * Accepts variations:
77
+ * - "Given X, When Y, Then Z" (single line)
78
+ * - "Given X\nWhen Y\nThen Z" (multi-line)
79
+ * - "Given: X\nWhen: Y\nThen: Z" (with colons)
80
+ * - Separate "Given...", "When...", "Then..." entries
81
+ *
82
+ * @param {string[]} acceptanceCriteria - Array of acceptance criteria strings
83
+ * @returns {{ valid: boolean, missingComponents: string[], suggestion: string }}
84
+ */
85
+ function checkGivenWhenThenFormat(acceptanceCriteria) {
86
+ const result = {
87
+ valid: true,
88
+ missingComponents: [],
89
+ suggestion: '',
90
+ };
91
+
92
+ if (!acceptanceCriteria || acceptanceCriteria.length === 0) {
93
+ result.valid = false;
94
+ result.missingComponents = ['Given', 'When', 'Then'];
95
+ result.suggestion = 'Add acceptance criteria in Given-When-Then format';
96
+ return result;
97
+ }
98
+
99
+ // Combine all criteria into single text for analysis
100
+ const fullText = acceptanceCriteria.join('\n').toLowerCase();
101
+
102
+ // Check for Given-When-Then components
103
+ const hasGiven = /given[:\s]/.test(fullText);
104
+ const hasWhen = /when[:\s]/.test(fullText);
105
+ const hasThen = /then[:\s]/.test(fullText);
106
+
107
+ if (!hasGiven) {
108
+ result.missingComponents.push('Given');
109
+ }
110
+ if (!hasWhen) {
111
+ result.missingComponents.push('When');
112
+ }
113
+ if (!hasThen) {
114
+ result.missingComponents.push('Then');
115
+ }
116
+
117
+ if (result.missingComponents.length > 0) {
118
+ result.valid = false;
119
+ result.suggestion = `Missing BDD components: ${result.missingComponents.join(', ')}. ` +
120
+ 'Format: "Given [context], When [action], Then [expected outcome]"';
121
+ }
122
+
123
+ return result;
124
+ }
125
+
126
+ /**
127
+ * Extract REQ-IDs from a text string
128
+ * Matches patterns like: REQ-001, GRAPH-02, GATE-01, etc.
129
+ *
130
+ * @param {string} text - Text to search for requirement IDs
131
+ * @returns {string[]} Array of found requirement IDs
132
+ */
133
+ function extractRequirementIds(text) {
134
+ if (!text) return [];
135
+
136
+ // Match patterns like REQ-001, GRAPH-02, GATE-01, etc.
137
+ const pattern = /\b([A-Z]+-\d+)\b/g;
138
+ const matches = text.match(pattern);
139
+ return matches ? [...new Set(matches)] : [];
140
+ }
141
+
142
+ /**
143
+ * Build a map of requirement IDs to their mappings from tasks
144
+ *
145
+ * @param {Array} tasks - Array of task objects
146
+ * @returns {Map<string, Set<string>>} Map of reqId -> Set of task IDs
147
+ */
148
+ function buildRequirementTaskMap(tasks) {
149
+ const map = new Map();
150
+
151
+ if (!tasks || !Array.isArray(tasks)) {
152
+ return map;
153
+ }
154
+
155
+ for (const task of tasks) {
156
+ const reqs = task.requirements || [];
157
+ for (const reqId of reqs) {
158
+ if (!map.has(reqId)) {
159
+ map.set(reqId, new Set());
160
+ }
161
+ map.get(reqId).add(task.id);
162
+ }
163
+
164
+ // Also check task name and description for implicit references
165
+ const implicitRefs = extractRequirementIds(`${task.name} ${task.description || ''}`);
166
+ for (const reqId of implicitRefs) {
167
+ if (!map.has(reqId)) {
168
+ map.set(reqId, new Set());
169
+ }
170
+ map.get(reqId).add(task.id);
171
+ }
172
+ }
173
+
174
+ return map;
175
+ }
176
+
177
+ /**
178
+ * Build a map of requirement IDs to their mappings from phases
179
+ *
180
+ * @param {Array} phases - Array of phase objects
181
+ * @returns {Map<string, Set<string>>} Map of reqId -> Set of phase IDs
182
+ */
183
+ function buildRequirementPhaseMap(phases) {
184
+ const map = new Map();
185
+
186
+ if (!phases || !Array.isArray(phases)) {
187
+ return map;
188
+ }
189
+
190
+ for (const phase of phases) {
191
+ const reqs = phase.requirements || [];
192
+ for (const reqId of reqs) {
193
+ if (!map.has(reqId)) {
194
+ map.set(reqId, new Set());
195
+ }
196
+ map.get(reqId).add(phase.id);
197
+ }
198
+
199
+ // Also check phase name and description for implicit references
200
+ const implicitRefs = extractRequirementIds(`${phase.name} ${phase.description || ''}`);
201
+ for (const reqId of implicitRefs) {
202
+ if (!map.has(reqId)) {
203
+ map.set(reqId, new Set());
204
+ }
205
+ map.get(reqId).add(phase.id);
206
+ }
207
+ }
208
+
209
+ return map;
210
+ }
211
+
212
+ /**
213
+ * Gate 1 Executor: Requirement Completeness Check
214
+ *
215
+ * Validates:
216
+ * 1. All requirements have mapped tasks or phases
217
+ * 2. All requirements have acceptance criteria in Given-When-Then format
218
+ *
219
+ * @param {Object} context - Gate context (validated against gateContextSchema)
220
+ * @param {Array} context.requirements - Array of requirement objects
221
+ * @param {Array} [context.tasks] - Optional array of task objects
222
+ * @param {Array} [context.phases] - Optional array of phase objects
223
+ * @returns {Promise<{ passed: boolean, errors: Array<{path: string, message: string}>, warnings: string[] }>}
224
+ */
225
+ async function executeGate1(context) {
226
+ const errors = [];
227
+ const warnings = [];
228
+
229
+ // Build mapping indices
230
+ const taskMap = buildRequirementTaskMap(context.tasks);
231
+ const phaseMap = buildRequirementPhaseMap(context.phases);
232
+
233
+ // Check each requirement
234
+ for (let i = 0; i < context.requirements.length; i++) {
235
+ const req = context.requirements[i];
236
+ const reqPath = `requirements[${i}]`;
237
+
238
+ // Check 1: Requirement mapping
239
+ const mappedToTasks = taskMap.has(req.id);
240
+ const mappedToPhases = phaseMap.has(req.id);
241
+ const hasExplicitMapping = (req.mappedTasks && req.mappedTasks.length > 0) ||
242
+ (req.mappedPhases && req.mappedPhases.length > 0);
243
+
244
+ if (!mappedToTasks && !mappedToPhases && !hasExplicitMapping) {
245
+ errors.push({
246
+ path: `${reqPath}.id`,
247
+ message: `Requirement '${req.id}' is not mapped to any task or phase. ` +
248
+ `Add 'requirements: ["${req.id}"]' to a task/phase frontmatter or ` +
249
+ `add explicit mappedTasks/mappedPhases array.`,
250
+ });
251
+ }
252
+
253
+ // Check 2: Acceptance criteria format
254
+ const formatCheck = checkGivenWhenThenFormat(req.acceptanceCriteria);
255
+ if (!formatCheck.valid) {
256
+ errors.push({
257
+ path: `${reqPath}.acceptanceCriteria`,
258
+ message: `Requirement '${req.id}' has acceptance criteria that don't follow ` +
259
+ `Given-When-Then format. ${formatCheck.suggestion}`,
260
+ });
261
+ }
262
+
263
+ // Check 3: Acceptance criteria specificity (warning)
264
+ for (let j = 0; j < req.acceptanceCriteria.length; j++) {
265
+ const criterion = req.acceptanceCriteria[j];
266
+ if (criterion.length < 20) {
267
+ warnings.push(
268
+ `${reqPath}.acceptanceCriteria[${j}]: Criterion for '${req.id}' is very short ` +
269
+ `(${criterion.length} chars). Consider adding more specific, testable criteria.`
270
+ );
271
+ }
272
+ }
273
+ }
274
+
275
+ return {
276
+ passed: errors.length === 0,
277
+ errors,
278
+ warnings,
279
+ };
280
+ }
281
+
282
+ /**
283
+ * Create and register Gate 1 with a QualityGate instance
284
+ *
285
+ * @param {QualityGate} gateCoordinator - QualityGate coordinator instance
286
+ * @returns {void}
287
+ */
288
+ function registerGate1(gateCoordinator) {
289
+ gateCoordinator.registerGate('gate-01-requirement', gateContextSchema, executeGate1);
290
+ }
291
+
292
+ module.exports = {
293
+ executeGate1,
294
+ registerGate1,
295
+ requirementSchema,
296
+ taskSchema,
297
+ phaseSchema,
298
+ gateContextSchema,
299
+ checkGivenWhenThenFormat,
300
+ extractRequirementIds,
301
+ buildRequirementTaskMap,
302
+ buildRequirementPhaseMap,
303
+ };