@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
@@ -1,162 +1,162 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * EZ Health Check — Health monitoring for EZ workflow
5
- *
6
- * Validates EZ environment and configuration
7
- * Used by workflows to detect failures and use fallback functions
8
- *
9
- * Usage:
10
- * const HealthCheck = require('./health-check.cjs');
11
- * const health = new HealthCheck();
12
- * const result = health.runAll();
13
- */
14
-
15
- const fs = require('fs');
16
- const path = require('path');
17
-
18
- class HealthCheck {
19
- /**
20
- * Create a HealthCheck instance
21
- */
22
- constructor() {
23
- this.issues = [];
24
- this.warnings = [];
25
- }
26
-
27
- /**
28
- * Check Node.js version (must be >= 16)
29
- * @returns {boolean} - True if version is acceptable
30
- */
31
- checkNodeVersion() {
32
- try {
33
- const version = process.version;
34
- const major = parseInt(version.slice(1).split('.')[0]);
35
- if (major < 16) {
36
- this.issues.push(`Node.js version ${version} is below required 16.x`);
37
- return false;
38
- }
39
- return true;
40
- } catch (err) {
41
- this.issues.push('Cannot determine Node.js version');
42
- return false;
43
- }
44
- }
45
-
46
- /**
47
- * Check if .planning directory exists
48
- * @returns {boolean} - True if exists
49
- */
50
- checkPlanningDirectory() {
51
- const planningDir = '.planning';
52
- if (!fs.existsSync(planningDir)) {
53
- this.warnings.push('.planning directory does not exist');
54
- return false;
55
- }
56
- return true;
57
- }
58
-
59
- /**
60
- * Check if config.json exists and is valid JSON
61
- * @returns {boolean} - True if exists and valid
62
- */
63
- checkConfigFile() {
64
- const configPath = '.planning/config.json';
65
- if (!fs.existsSync(configPath)) {
66
- this.warnings.push('config.json not found');
67
- return false;
68
- }
69
- try {
70
- JSON.parse(fs.readFileSync(configPath, 'utf-8'));
71
- return true;
72
- } catch (err) {
73
- this.issues.push('config.json is invalid JSON');
74
- return false;
75
- }
76
- }
77
-
78
- /**
79
- * Check if STATE.md exists
80
- * @returns {boolean} - True if exists
81
- */
82
- checkStateFile() {
83
- const statePath = '.planning/STATE.md';
84
- if (!fs.existsSync(statePath)) {
85
- this.warnings.push('STATE.md not found');
86
- return false;
87
- }
88
- return true;
89
- }
90
-
91
- /**
92
- * Check if ROADMAP.md exists
93
- * @returns {boolean} - True if exists
94
- */
95
- checkRoadmapFile() {
96
- const roadmapPath = '.planning/ROADMAP.md';
97
- if (!fs.existsSync(roadmapPath)) {
98
- this.warnings.push('ROADMAP.md not found');
99
- return false;
100
- }
101
- return true;
102
- }
103
-
104
- /**
105
- * Check if PROJECT.md exists
106
- * @returns {boolean} - True if exists
107
- */
108
- checkProjectFile() {
109
- const projectPath = '.planning/PROJECT.md';
110
- if (!fs.existsSync(projectPath)) {
111
- this.warnings.push('PROJECT.md not found');
112
- return false;
113
- }
114
- return true;
115
- }
116
-
117
- /**
118
- * Check if REQUIREMENTS.md exists
119
- * @returns {boolean} - True if exists
120
- */
121
- checkRequirementsFile() {
122
- const reqPath = '.planning/REQUIREMENTS.md';
123
- if (!fs.existsSync(reqPath)) {
124
- this.warnings.push('REQUIREMENTS.md not found');
125
- return false;
126
- }
127
- return true;
128
- }
129
-
130
- /**
131
- * Run all health checks
132
- * @returns {Object} - Health status object
133
- */
134
- runAll() {
135
- const results = {
136
- status: 'healthy',
137
- timestamp: new Date().toISOString(),
138
- node_version: process.version,
139
- checks: {
140
- node_version: this.checkNodeVersion(),
141
- planning_dir: this.checkPlanningDirectory(),
142
- config_file: this.checkConfigFile(),
143
- state_file: this.checkStateFile(),
144
- roadmap_file: this.checkRoadmapFile(),
145
- project_file: this.checkProjectFile(),
146
- requirements_file: this.checkRequirementsFile()
147
- },
148
- issues: this.issues,
149
- warnings: this.warnings
150
- };
151
-
152
- if (this.issues.length > 0) {
153
- results.status = 'unhealthy';
154
- } else if (this.warnings.length > 0) {
155
- results.status = 'degraded';
156
- }
157
-
158
- return results;
159
- }
160
- }
161
-
162
- module.exports = HealthCheck;
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * EZ Health Check — Health monitoring for EZ workflow
5
+ *
6
+ * Validates EZ environment and configuration
7
+ * Used by workflows to detect failures and use fallback functions
8
+ *
9
+ * Usage:
10
+ * const HealthCheck = require('./health-check.cjs');
11
+ * const health = new HealthCheck();
12
+ * const result = health.runAll();
13
+ */
14
+
15
+ const fs = require('fs');
16
+ const path = require('path');
17
+
18
+ class HealthCheck {
19
+ /**
20
+ * Create a HealthCheck instance
21
+ */
22
+ constructor() {
23
+ this.issues = [];
24
+ this.warnings = [];
25
+ }
26
+
27
+ /**
28
+ * Check Node.js version (must be >= 16)
29
+ * @returns {boolean} - True if version is acceptable
30
+ */
31
+ checkNodeVersion() {
32
+ try {
33
+ const version = process.version;
34
+ const major = parseInt(version.slice(1).split('.')[0]);
35
+ if (major < 16) {
36
+ this.issues.push(`Node.js version ${version} is below required 16.x`);
37
+ return false;
38
+ }
39
+ return true;
40
+ } catch (err) {
41
+ this.issues.push('Cannot determine Node.js version');
42
+ return false;
43
+ }
44
+ }
45
+
46
+ /**
47
+ * Check if .planning directory exists
48
+ * @returns {boolean} - True if exists
49
+ */
50
+ checkPlanningDirectory() {
51
+ const planningDir = '.planning';
52
+ if (!fs.existsSync(planningDir)) {
53
+ this.warnings.push('.planning directory does not exist');
54
+ return false;
55
+ }
56
+ return true;
57
+ }
58
+
59
+ /**
60
+ * Check if config.json exists and is valid JSON
61
+ * @returns {boolean} - True if exists and valid
62
+ */
63
+ checkConfigFile() {
64
+ const configPath = '.planning/config.json';
65
+ if (!fs.existsSync(configPath)) {
66
+ this.warnings.push('config.json not found');
67
+ return false;
68
+ }
69
+ try {
70
+ JSON.parse(fs.readFileSync(configPath, 'utf-8'));
71
+ return true;
72
+ } catch (err) {
73
+ this.issues.push('config.json is invalid JSON');
74
+ return false;
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Check if STATE.md exists
80
+ * @returns {boolean} - True if exists
81
+ */
82
+ checkStateFile() {
83
+ const statePath = '.planning/STATE.md';
84
+ if (!fs.existsSync(statePath)) {
85
+ this.warnings.push('STATE.md not found');
86
+ return false;
87
+ }
88
+ return true;
89
+ }
90
+
91
+ /**
92
+ * Check if ROADMAP.md exists
93
+ * @returns {boolean} - True if exists
94
+ */
95
+ checkRoadmapFile() {
96
+ const roadmapPath = '.planning/ROADMAP.md';
97
+ if (!fs.existsSync(roadmapPath)) {
98
+ this.warnings.push('ROADMAP.md not found');
99
+ return false;
100
+ }
101
+ return true;
102
+ }
103
+
104
+ /**
105
+ * Check if PROJECT.md exists
106
+ * @returns {boolean} - True if exists
107
+ */
108
+ checkProjectFile() {
109
+ const projectPath = '.planning/PROJECT.md';
110
+ if (!fs.existsSync(projectPath)) {
111
+ this.warnings.push('PROJECT.md not found');
112
+ return false;
113
+ }
114
+ return true;
115
+ }
116
+
117
+ /**
118
+ * Check if REQUIREMENTS.md exists
119
+ * @returns {boolean} - True if exists
120
+ */
121
+ checkRequirementsFile() {
122
+ const reqPath = '.planning/REQUIREMENTS.md';
123
+ if (!fs.existsSync(reqPath)) {
124
+ this.warnings.push('REQUIREMENTS.md not found');
125
+ return false;
126
+ }
127
+ return true;
128
+ }
129
+
130
+ /**
131
+ * Run all health checks
132
+ * @returns {Object} - Health status object
133
+ */
134
+ runAll() {
135
+ const results = {
136
+ status: 'healthy',
137
+ timestamp: new Date().toISOString(),
138
+ node_version: process.version,
139
+ checks: {
140
+ node_version: this.checkNodeVersion(),
141
+ planning_dir: this.checkPlanningDirectory(),
142
+ config_file: this.checkConfigFile(),
143
+ state_file: this.checkStateFile(),
144
+ roadmap_file: this.checkRoadmapFile(),
145
+ project_file: this.checkProjectFile(),
146
+ requirements_file: this.checkRequirementsFile()
147
+ },
148
+ issues: this.issues,
149
+ warnings: this.warnings
150
+ };
151
+
152
+ if (this.issues.length > 0) {
153
+ results.status = 'unhealthy';
154
+ } else if (this.warnings.length > 0) {
155
+ results.status = 'degraded';
156
+ }
157
+
158
+ return results;
159
+ }
160
+ }
161
+
162
+ module.exports = HealthCheck;
@@ -29,6 +29,8 @@ const auditExec = require('./audit-exec.cjs');
29
29
 
30
30
  // Git
31
31
  const GitUtils = require('./git-utils.cjs');
32
+ const GitWorkflowEngine = require('./git-workflow-engine.cjs');
33
+ const GitErrors = require('./git-errors.cjs');
32
34
 
33
35
  // Reliability
34
36
  const retry = require('./retry.cjs');
@@ -48,6 +50,22 @@ const modelProvider = require('./model-provider.cjs');
48
50
  // Adapters
49
51
  const assistantAdapter = require('./assistant-adapter.cjs');
50
52
 
53
+ // Package Manager
54
+ const PackageManagerService = require('./package-manager-service.cjs');
55
+ const PackageManagerDetector = require('./package-manager-detector.cjs');
56
+ const PackageManagerExecutor = require('./package-manager-executor.cjs');
57
+ const LockfileValidator = require('./lockfile-validator.cjs');
58
+
59
+ // BDD & Requirements (Phase 30)
60
+ const bddValidator = require('./bdd-validator.cjs');
61
+
62
+ // Discussion Synthesis (Phase 31)
63
+ const discussionSynthesizer = require('./discussion-synthesizer.cjs');
64
+
65
+ // Tier Management & Release Validation (Phase 32-33)
66
+ const TierManager = require('./tier-manager.cjs');
67
+ const ReleaseValidator = require('./release-validator.cjs');
68
+
51
69
  module.exports = {
52
70
  // Core
53
71
  Logger,
@@ -64,6 +82,8 @@ module.exports = {
64
82
 
65
83
  // Git
66
84
  GitUtils,
85
+ GitWorkflowEngine,
86
+ GitErrors,
67
87
 
68
88
  // Reliability
69
89
  ...retry,
@@ -82,9 +102,25 @@ module.exports = {
82
102
 
83
103
  // Adapters
84
104
  ...assistantAdapter,
85
-
105
+
106
+ // Package Manager
107
+ PackageManagerService,
108
+ PackageManagerDetector,
109
+ PackageManagerExecutor,
110
+ LockfileValidator,
111
+
112
+ // BDD & Requirements (Phase 30)
113
+ ...bddValidator,
114
+
115
+ // Discussion Synthesis (Phase 31)
116
+ ...discussionSynthesizer,
117
+
118
+ // Tier Management & Release (Phase 32-33)
119
+ TierManager,
120
+ ReleaseValidator,
121
+
86
122
  // Version info
87
- version: '2.0.0',
123
+ version: '3.0.0',
88
124
 
89
125
  /**
90
126
  * Get health status of all modules
@@ -101,6 +137,8 @@ module.exports = {
101
137
  safePath: 'ok',
102
138
  auth: auth.isKeychainAvailable() ? 'keychain' : 'fallback',
103
139
  gitUtils: 'ok',
140
+ gitWorkflowEngine: 'ok',
141
+ gitErrors: 'ok',
104
142
  retry: 'ok',
105
143
  circuitBreaker: 'ok',
106
144
  fileLock: 'ok',
@@ -215,7 +215,6 @@ async function cmdInitNewProject(cwd, raw) {
215
215
  const result = {
216
216
  // Models
217
217
  researcher_model: resolveModelInternal(cwd, 'ez-project-researcher'),
218
- synthesizer_model: resolveModelInternal(cwd, 'ez-research-synthesizer'),
219
218
  roadmapper_model: resolveModelInternal(cwd, 'ez-roadmapper'),
220
219
 
221
220
  // Config
@@ -252,7 +251,6 @@ function cmdInitNewMilestone(cwd, raw) {
252
251
  const result = {
253
252
  // Models
254
253
  researcher_model: resolveModelInternal(cwd, 'ez-project-researcher'),
255
- synthesizer_model: resolveModelInternal(cwd, 'ez-research-synthesizer'),
256
254
  roadmapper_model: resolveModelInternal(cwd, 'ez-roadmapper'),
257
255
 
258
256
  // Config
@@ -0,0 +1,227 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Lockfile Validator — Validate package manager lockfiles
5
+ *
6
+ * Validates lockfile integrity for npm, yarn, and pnpm:
7
+ * - npm: package-lock.json (JSON format with lockfileVersion)
8
+ * - yarn: yarn.lock (YAML-like format with metadata header)
9
+ * - pnpm: pnpm-lock.yaml (YAML format with lockfileVersion)
10
+ *
11
+ * Usage:
12
+ * const LockfileValidator = require('./lockfile-validator.cjs');
13
+ * const validator = new LockfileValidator(cwd);
14
+ * const result = validator.validate('npm');
15
+ * // Returns: { valid, reason, lockfileVersion?, packageCount? }
16
+ */
17
+
18
+ const fs = require('fs');
19
+ const path = require('path');
20
+ const Logger = require('./logger.cjs');
21
+
22
+ /**
23
+ * Lockfile Validator class
24
+ * Validates lockfile integrity for different package managers
25
+ */
26
+ class LockfileValidator {
27
+ /**
28
+ * Create a LockfileValidator instance
29
+ * @param {string} cwd - Working directory (default: process.cwd())
30
+ */
31
+ constructor(cwd = process.cwd()) {
32
+ this.cwd = cwd;
33
+ this.logger = new Logger();
34
+ }
35
+
36
+ /**
37
+ * Validate lockfile for a specific package manager
38
+ * @param {string} manager - Package manager name ('npm', 'yarn', or 'pnpm')
39
+ * @returns {Object} Validation result
40
+ * - {boolean} valid - Whether lockfile is valid
41
+ * - {string} reason - Reason code if invalid
42
+ * - {string} message - Human-readable message if invalid
43
+ * - {number} lockfileVersion - Lockfile version (if valid)
44
+ * - {number} packageCount - Number of packages (if valid)
45
+ */
46
+ validate(manager) {
47
+ const lockfilePath = this.getLockfilePath(manager);
48
+
49
+ this.logger.debug('Validating lockfile', {
50
+ manager,
51
+ lockfilePath,
52
+ cwd: this.cwd
53
+ });
54
+
55
+ // Check file existence
56
+ if (!fs.existsSync(lockfilePath)) {
57
+ this.logger.debug('Lockfile not found', { lockfilePath });
58
+ return {
59
+ valid: false,
60
+ reason: 'lockfile_missing',
61
+ message: `No ${path.basename(lockfilePath)} found`
62
+ };
63
+ }
64
+
65
+ try {
66
+ const content = fs.readFileSync(lockfilePath, 'utf-8');
67
+
68
+ switch (manager) {
69
+ case 'npm':
70
+ return this.validateNpmLockfile(content);
71
+ case 'yarn':
72
+ return this.validateYarnLockfile(content);
73
+ case 'pnpm':
74
+ return this.validatePnpmLockfile(content);
75
+ default:
76
+ return {
77
+ valid: false,
78
+ reason: 'unknown_manager',
79
+ message: `Unknown package manager: ${manager}`
80
+ };
81
+ }
82
+ } catch (err) {
83
+ this.logger.error('Lockfile read error', {
84
+ manager,
85
+ lockfilePath,
86
+ error: err.message
87
+ });
88
+ return {
89
+ valid: false,
90
+ reason: 'read_error',
91
+ message: err.message
92
+ };
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Validate npm lockfile (package-lock.json)
98
+ * @param {string} content - Lockfile content
99
+ * @returns {Object} Validation result
100
+ */
101
+ validateNpmLockfile(content) {
102
+ try {
103
+ const lockfile = JSON.parse(content);
104
+
105
+ // Check required fields
106
+ if (!lockfile.lockfileVersion) {
107
+ return {
108
+ valid: false,
109
+ reason: 'invalid_format',
110
+ message: 'Missing lockfileVersion field'
111
+ };
112
+ }
113
+
114
+ if (!lockfile.packages && !lockfile.dependencies) {
115
+ return {
116
+ valid: false,
117
+ reason: 'empty_lockfile',
118
+ message: 'Lockfile has no dependencies'
119
+ };
120
+ }
121
+
122
+ const packageCount = Object.keys(lockfile.packages || lockfile.dependencies || {}).length;
123
+
124
+ this.logger.debug('npm lockfile valid', {
125
+ lockfileVersion: lockfile.lockfileVersion,
126
+ packageCount
127
+ });
128
+
129
+ return {
130
+ valid: true,
131
+ lockfileVersion: lockfile.lockfileVersion,
132
+ packageCount
133
+ };
134
+ } catch (err) {
135
+ this.logger.debug('npm lockfile invalid JSON', { error: err.message });
136
+ return {
137
+ valid: false,
138
+ reason: 'invalid_json',
139
+ message: `Invalid JSON: ${err.message}`
140
+ };
141
+ }
142
+ }
143
+
144
+ /**
145
+ * Validate yarn lockfile (yarn.lock)
146
+ * @param {string} content - Lockfile content
147
+ * @returns {Object} Validation result
148
+ */
149
+ validateYarnLockfile(content) {
150
+ // Yarn lockfile is YAML-like format
151
+ // Check for basic structure: __metadata__ (Yarn 2+) or "# yarn lockfile v" (Yarn 1)
152
+ const hasYarn2Metadata = content.includes('__metadata:');
153
+ const hasYarn1Header = content.match(/^# yarn lockfile v/i);
154
+
155
+ if (!hasYarn2Metadata && !hasYarn1Header) {
156
+ this.logger.debug('yarn lockfile invalid format');
157
+ return {
158
+ valid: false,
159
+ reason: 'invalid_format',
160
+ message: 'Invalid yarn.lock format'
161
+ };
162
+ }
163
+
164
+ // Count dependency entries (lines starting with package name pattern)
165
+ const entryCount = (content.match(/^"?[^@\s]+@/gm) || []).length;
166
+
167
+ this.logger.debug('yarn lockfile valid', {
168
+ version: hasYarn2Metadata ? '2+' : '1',
169
+ entryCount
170
+ });
171
+
172
+ return {
173
+ valid: true,
174
+ entryCount
175
+ };
176
+ }
177
+
178
+ /**
179
+ * Validate pnpm lockfile (pnpm-lock.yaml)
180
+ * @param {string} content - Lockfile content
181
+ * @returns {Object} Validation result
182
+ */
183
+ validatePnpmLockfile(content) {
184
+ // Check for lockfileVersion
185
+ const versionMatch = content.match(/^lockfileVersion:\s*(\d+)/m);
186
+ if (!versionMatch) {
187
+ this.logger.debug('pnpm lockfile missing lockfileVersion');
188
+ return {
189
+ valid: false,
190
+ reason: 'invalid_format',
191
+ message: 'Missing lockfileVersion in pnpm-lock.yaml'
192
+ };
193
+ }
194
+
195
+ const lockfileVersion = parseInt(versionMatch[1], 10);
196
+
197
+ // Count dependency entries (lines starting with " /" which are package specs)
198
+ const entryCount = (content.match(/^ \/[^:]+:/gm) || []).length;
199
+
200
+ this.logger.debug('pnpm lockfile valid', {
201
+ lockfileVersion,
202
+ entryCount
203
+ });
204
+
205
+ return {
206
+ valid: true,
207
+ lockfileVersion,
208
+ entryCount
209
+ };
210
+ }
211
+
212
+ /**
213
+ * Get the lockfile path for a specific package manager
214
+ * @param {string} manager - Package manager name
215
+ * @returns {string} Full path to lockfile
216
+ */
217
+ getLockfilePath(manager) {
218
+ const lockfiles = {
219
+ 'npm': 'package-lock.json',
220
+ 'yarn': 'yarn.lock',
221
+ 'pnpm': 'pnpm-lock.yaml'
222
+ };
223
+ return path.join(this.cwd, lockfiles[manager] || 'package-lock.json');
224
+ }
225
+ }
226
+
227
+ module.exports = LockfileValidator;