@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,78 @@
1
+ /**
2
+ * DB Optimizer — Query analysis and index recommendations
3
+ * Analyzes slow queries, suggests indexes, detects N+1 patterns
4
+ */
5
+
6
+ const { execSync } = require('child_process');
7
+
8
+ class DbOptimizer {
9
+ constructor(dbUrl) {
10
+ this.dbUrl = dbUrl;
11
+ }
12
+
13
+ /**
14
+ * Analyze queries and provide optimization recommendations
15
+ * @param {string} dbUrl - Database connection URL
16
+ * @param {Array} queries - Array of queries to analyze
17
+ * @returns {Array} Analysis results with suggestions
18
+ */
19
+ async analyzeQueries(dbUrl, queries) {
20
+ const results = [];
21
+
22
+ for (const query of queries) {
23
+ const explain = await this.explainQuery(dbUrl, query);
24
+ const suggestions = [];
25
+
26
+ // Detect sequential scans
27
+ if (explain.scanType === 'Seq Scan' || explain.scanType === 'Sequential Scan') {
28
+ suggestions.push({
29
+ type: 'index',
30
+ reason: 'Sequential scan detected',
31
+ recommendation: `CREATE INDEX ON ${explain.table} (${explain.filterColumn || 'column'})`
32
+ });
33
+ }
34
+
35
+ // Detect N+1 patterns
36
+ if (explain.nestedLoops > 5) {
37
+ suggestions.push({
38
+ type: 'n-plus-one',
39
+ reason: 'N+1 query pattern detected',
40
+ recommendation: 'Use JOIN or batch loading'
41
+ });
42
+ }
43
+
44
+ results.push({ query, explain, suggestions });
45
+ }
46
+
47
+ return results;
48
+ }
49
+
50
+ /**
51
+ * Get EXPLAIN plan for a query
52
+ * @param {string} dbUrl - Database connection URL
53
+ * @param {string} query - Query to explain
54
+ * @returns {Object} Explain plan
55
+ */
56
+ async explainQuery(dbUrl, query) {
57
+ // Placeholder - would execute EXPLAIN QUERY in real implementation
58
+ return {
59
+ scanType: 'Unknown',
60
+ table: 'unknown',
61
+ filterColumn: null,
62
+ nestedLoops: 0
63
+ };
64
+ }
65
+ }
66
+
67
+ /**
68
+ * Analyze queries and provide optimization recommendations
69
+ * @param {string} dbUrl - Database connection URL
70
+ * @param {Array} queries - Array of queries to analyze
71
+ * @returns {Array} Analysis results with suggestions
72
+ */
73
+ async function analyzeQueries(dbUrl, queries) {
74
+ const optimizer = new DbOptimizer(dbUrl);
75
+ return optimizer.analyzeQueries(dbUrl, queries);
76
+ }
77
+
78
+ module.exports = { DbOptimizer, analyzeQueries };
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Frontend Performance — Lighthouse integration for bundle/render analysis
3
+ * Measures Core Web Vitals: FCP, LCP, CLS, TTI
4
+ */
5
+
6
+ class FrontendPerformance {
7
+ constructor() {
8
+ this.lighthouse = null;
9
+ this.chromeLauncher = null;
10
+ }
11
+
12
+ /**
13
+ * Run Lighthouse analysis on a URL
14
+ * @param {string} url - URL to analyze
15
+ * @returns {Object} Lighthouse results
16
+ */
17
+ async runLighthouse(url) {
18
+ // Placeholder - would run actual Lighthouse in real implementation
19
+ // Requires: npm install lighthouse chrome-launcher
20
+ return {
21
+ performance: 0,
22
+ metrics: {
23
+ fcp: 0,
24
+ lcp: 0,
25
+ cls: 0,
26
+ tti: 0
27
+ },
28
+ opportunities: []
29
+ };
30
+ }
31
+
32
+ /**
33
+ * Analyze bundle size
34
+ * @param {string} buildPath - Path to build directory
35
+ * @returns {Object} Bundle analysis
36
+ */
37
+ async analyzeBundle(buildPath) {
38
+ // Placeholder - would use webpack-bundle-analyzer in real implementation
39
+ return {
40
+ totalSize: 0,
41
+ chunks: []
42
+ };
43
+ }
44
+ }
45
+
46
+ /**
47
+ * Run Lighthouse analysis on a URL
48
+ * @param {string} url - URL to analyze
49
+ * @returns {Object} Lighthouse results
50
+ */
51
+ async function runLighthouse(url) {
52
+ const perf = new FrontendPerformance();
53
+ return perf.runLighthouse(url);
54
+ }
55
+
56
+ module.exports = { FrontendPerformance, runLighthouse };
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Perf Analyzer — Core performance analysis coordinator
3
+ * Orchestrates all analyzers and aggregates results
4
+ */
5
+
6
+ const fs = require('fs');
7
+ const path = require('path');
8
+
9
+ class PerfAnalyzer {
10
+ constructor(cwd) {
11
+ this.cwd = cwd || process.cwd();
12
+ }
13
+
14
+ /**
15
+ * Run all performance analyzers and aggregate results
16
+ * @param {Object} options - Analysis options
17
+ * @returns {Object} Aggregated performance results
18
+ */
19
+ async analyze(options = {}) {
20
+ const results = {
21
+ timestamp: new Date().toISOString(),
22
+ db: null,
23
+ frontend: null,
24
+ api: null,
25
+ errors: []
26
+ };
27
+
28
+ try {
29
+ // Run DB analysis if DB URL provided
30
+ if (options.dbUrl) {
31
+ const { analyzeQueries } = require('./db-optimizer.cjs');
32
+ results.db = await analyzeQueries(options.dbUrl, options.queries || []);
33
+ }
34
+ } catch (e) {
35
+ results.errors.push(`DB analysis failed: ${e.message}`);
36
+ }
37
+
38
+ try {
39
+ // Run frontend analysis if URL provided
40
+ if (options.url) {
41
+ const { runLighthouse } = require('./frontend-performance.cjs');
42
+ results.frontend = await runLighthouse(options.url);
43
+ }
44
+ } catch (e) {
45
+ results.errors.push(`Frontend analysis failed: ${e.message}`);
46
+ }
47
+
48
+ try {
49
+ // Run API analysis if API URL provided
50
+ if (options.apiUrl) {
51
+ const { trackEndpoint } = require('./api-monitor.cjs');
52
+ results.api = await trackEndpoint(options.apiUrl, options.endpoints || []);
53
+ }
54
+ } catch (e) {
55
+ results.errors.push(`API analysis failed: ${e.message}`);
56
+ }
57
+
58
+ return results;
59
+ }
60
+
61
+ /**
62
+ * Aggregate results from multiple analyzers
63
+ * @param {Array} results - Array of analysis results
64
+ * @returns {Object} Aggregated results
65
+ */
66
+ aggregate(results) {
67
+ return results.reduce((acc, r) => {
68
+ if (r.db) acc.db.push(r.db);
69
+ if (r.frontend) acc.frontend.push(r.frontend);
70
+ if (r.api) acc.api.push(r.api);
71
+ acc.errors.push(...(r.errors || []));
72
+ return acc;
73
+ }, { db: [], frontend: [], api: [], errors: [] });
74
+ }
75
+ }
76
+
77
+ module.exports = { PerfAnalyzer, analyze: PerfAnalyzer.prototype.analyze };
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Perf Baseline — Save and load performance baselines
3
+ * Stores baselines in .planning/perf-baselines/
4
+ */
5
+
6
+ const fs = require('fs');
7
+ const path = require('path');
8
+
9
+ class PerfBaseline {
10
+ constructor(cwd) {
11
+ this.cwd = cwd || process.cwd();
12
+ this.baselinesDir = path.join(this.cwd, '.planning', 'perf-baselines');
13
+ }
14
+
15
+ /**
16
+ * Save baseline metrics
17
+ * @param {Object} metrics - Metrics to save
18
+ * @param {string} name - Baseline name
19
+ * @returns {string} Path to saved baseline
20
+ */
21
+ saveBaseline(metrics, name = 'default') {
22
+ // Ensure directory exists
23
+ if (!fs.existsSync(this.baselinesDir)) {
24
+ fs.mkdirSync(this.baselinesDir, { recursive: true });
25
+ }
26
+
27
+ const baselinePath = path.join(this.baselinesDir, `${name}.json`);
28
+ const baseline = {
29
+ ...metrics,
30
+ metadata: {
31
+ name,
32
+ createdAt: new Date().toISOString(),
33
+ updatedAt: new Date().toISOString()
34
+ }
35
+ };
36
+
37
+ fs.writeFileSync(baselinePath, JSON.stringify(baseline, null, 2), 'utf8');
38
+ return baselinePath;
39
+ }
40
+
41
+ /**
42
+ * Load baseline metrics
43
+ * @param {string} name - Baseline name
44
+ * @returns {Object|null} Baseline metrics or null
45
+ */
46
+ loadBaseline(name = 'default') {
47
+ const baselinePath = path.join(this.baselinesDir, `${name}.json`);
48
+
49
+ if (!fs.existsSync(baselinePath)) return null;
50
+
51
+ return JSON.parse(fs.readFileSync(baselinePath, 'utf8'));
52
+ }
53
+
54
+ /**
55
+ * List all available baselines
56
+ * @returns {Array} Array of baseline names
57
+ */
58
+ listBaselines() {
59
+ if (!fs.existsSync(this.baselinesDir)) return [];
60
+
61
+ return fs.readdirSync(this.baselinesDir)
62
+ .filter(f => f.endsWith('.json'))
63
+ .map(f => f.replace('.json', ''));
64
+ }
65
+
66
+ /**
67
+ * Delete a baseline
68
+ * @param {string} name - Baseline name
69
+ * @returns {boolean} Success
70
+ */
71
+ deleteBaseline(name) {
72
+ const baselinePath = path.join(this.baselinesDir, `${name}.json`);
73
+
74
+ if (!fs.existsSync(baselinePath)) return false;
75
+
76
+ fs.unlinkSync(baselinePath);
77
+ return true;
78
+ }
79
+ }
80
+
81
+ /**
82
+ * Save baseline metrics
83
+ * @param {Object} metrics - Metrics to save
84
+ * @param {string} name - Baseline name
85
+ * @returns {string} Path to saved baseline
86
+ */
87
+ function saveBaseline(metrics, name = 'default') {
88
+ const baseline = new PerfBaseline();
89
+ return baseline.saveBaseline(metrics, name);
90
+ }
91
+
92
+ /**
93
+ * Load baseline metrics
94
+ * @param {string} name - Baseline name
95
+ * @returns {Object|null} Baseline metrics or null
96
+ */
97
+ function loadBaseline(name = 'default') {
98
+ const baseline = new PerfBaseline();
99
+ return baseline.loadBaseline(name);
100
+ }
101
+
102
+ module.exports = { PerfBaseline, saveBaseline, loadBaseline };
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Perf Reporter — Performance report generation
3
+ * Generates structured reports (temp directory)
4
+ */
5
+
6
+ const fs = require('fs');
7
+ const path = require('path');
8
+
9
+ class PerfReporter {
10
+ constructor(cwd) {
11
+ this.cwd = cwd || process.cwd();
12
+ }
13
+
14
+ /**
15
+ * Generate structured performance report
16
+ * @param {Object} results - Analysis results from PerfAnalyzer
17
+ * @returns {Object} Structured report
18
+ */
19
+ generateReport(results) {
20
+ return {
21
+ timestamp: results.timestamp || new Date().toISOString(),
22
+ summary: {
23
+ dbIssues: results.db?.suggestions?.length || 0,
24
+ frontendScore: results.frontend?.performance || 0,
25
+ apiLatency: results.api ? this.calculateAvgLatency(results.api) : 0
26
+ },
27
+ details: {
28
+ db: results.db || null,
29
+ frontend: results.frontend || null,
30
+ api: results.api || null
31
+ },
32
+ errors: results.errors || [],
33
+ recommendations: this.generateRecommendations(results)
34
+ };
35
+ }
36
+
37
+ /**
38
+ * Save report to temp directory
39
+ * @param {Object} report - Report to save
40
+ * @param {string} filename - Optional filename
41
+ * @returns {string} Path to saved report
42
+ */
43
+ saveReport(report, filename) {
44
+ const logsDir = path.join(process.env.TEMP || process.env.TMPDIR || '/tmp', 'ez-agents-perf');
45
+ if (!fs.existsSync(logsDir)) {
46
+ fs.mkdirSync(logsDir, { recursive: true });
47
+ }
48
+
49
+ const reportFilename = filename || `perf-${Date.now()}.json`;
50
+ const reportPath = path.join(logsDir, reportFilename);
51
+
52
+ fs.writeFileSync(reportPath, JSON.stringify(report, null, 2), 'utf8');
53
+ return reportPath;
54
+ }
55
+
56
+ /**
57
+ * Calculate average latency from API results
58
+ * @param {Array} apiResults - API latency results
59
+ * @returns {number} Average latency
60
+ */
61
+ calculateAvgLatency(apiResults) {
62
+ if (!apiResults || apiResults.length === 0) return 0;
63
+ const valid = apiResults.filter(r => r.latency > 0);
64
+ if (valid.length === 0) return 0;
65
+ return Math.round(valid.reduce((sum, r) => sum + r.latency, 0) / valid.length);
66
+ }
67
+
68
+ /**
69
+ * Generate recommendations from analysis results
70
+ * @param {Object} results - Analysis results
71
+ * @returns {Array} Recommendations
72
+ */
73
+ generateRecommendations(results) {
74
+ const recommendations = [];
75
+
76
+ if (results.db?.suggestions?.length > 0) {
77
+ recommendations.push({
78
+ category: 'database',
79
+ priority: 'high',
80
+ suggestion: `Address ${results.db.suggestions.length} query optimization opportunities`
81
+ });
82
+ }
83
+
84
+ if (results.frontend?.performance < 50) {
85
+ recommendations.push({
86
+ category: 'frontend',
87
+ priority: 'critical',
88
+ suggestion: 'Frontend performance score is low - optimize bundle size and Core Web Vitals'
89
+ });
90
+ }
91
+
92
+ return recommendations;
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Generate structured performance report
98
+ * @param {Object} results - Analysis results from PerfAnalyzer
99
+ * @returns {Object} Structured report
100
+ */
101
+ function generateReport(results) {
102
+ const reporter = new PerfReporter();
103
+ return reporter.generateReport(results);
104
+ }
105
+
106
+ /**
107
+ * Save report to temp directory
108
+ * @param {Object} report - Report to save
109
+ * @param {string} filename - Optional filename
110
+ * @returns {string} Path to saved report
111
+ */
112
+ function saveReport(report, filename) {
113
+ const reporter = new PerfReporter();
114
+ return reporter.saveReport(report, filename);
115
+ }
116
+
117
+ module.exports = { PerfReporter, generateReport, saveReport };
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Regression Detector — Baseline comparison and regression flagging
3
+ * Flags >10% degradation with severity levels
4
+ */
5
+
6
+ class RegressionDetector {
7
+ /**
8
+ * Detect regressions by comparing current metrics against baseline
9
+ * @param {Object} current - Current metrics
10
+ * @param {Object} baseline - Baseline metrics
11
+ * @param {number} threshold - Regression threshold percentage (default: 10)
12
+ * @returns {Array} Array of regression findings
13
+ */
14
+ detectRegressions(current, baseline, threshold = 10) {
15
+ const regressions = [];
16
+
17
+ for (const [metric, currentValue] of Object.entries(current)) {
18
+ const baselineValue = baseline[metric];
19
+ if (baselineValue === undefined || baselineValue === 0) continue;
20
+
21
+ const change = ((currentValue - baselineValue) / baselineValue) * 100;
22
+
23
+ if (change > threshold) {
24
+ regressions.push({
25
+ metric,
26
+ current: currentValue,
27
+ baseline: baselineValue,
28
+ changePercent: Math.round(change * 100) / 100,
29
+ severity: change > 50 ? 'critical' : change > 20 ? 'high' : 'medium'
30
+ });
31
+ }
32
+ }
33
+
34
+ return regressions;
35
+ }
36
+
37
+ /**
38
+ * Save baseline metrics
39
+ * @param {Object} metrics - Metrics to save
40
+ * @param {string} name - Baseline name
41
+ * @param {string} cwd - Working directory
42
+ */
43
+ saveBaseline(metrics, name = 'default', cwd) {
44
+ const fs = require('fs');
45
+ const path = require('path');
46
+ const baselinePath = path.join(cwd || process.cwd(), '.planning', 'perf-baselines', `${name}.json`);
47
+
48
+ // Ensure directory exists
49
+ const dir = path.dirname(baselinePath);
50
+ if (!fs.existsSync(dir)) {
51
+ fs.mkdirSync(dir, { recursive: true });
52
+ }
53
+
54
+ fs.writeFileSync(baselinePath, JSON.stringify({
55
+ ...metrics,
56
+ metadata: {
57
+ name,
58
+ createdAt: new Date().toISOString()
59
+ }
60
+ }, null, 2));
61
+ }
62
+
63
+ /**
64
+ * Load baseline metrics
65
+ * @param {string} name - Baseline name
66
+ * @param {string} cwd - Working directory
67
+ * @returns {Object|null} Baseline metrics or null
68
+ */
69
+ loadBaseline(name = 'default', cwd) {
70
+ const fs = require('fs');
71
+ const path = require('path');
72
+ const baselinePath = path.join(cwd || process.cwd(), '.planning', 'perf-baselines', `${name}.json`);
73
+
74
+ if (!fs.existsSync(baselinePath)) return null;
75
+
76
+ return JSON.parse(fs.readFileSync(baselinePath, 'utf8'));
77
+ }
78
+ }
79
+
80
+ /**
81
+ * Detect regressions by comparing current metrics against baseline
82
+ * @param {Object} current - Current metrics
83
+ * @param {Object} baseline - Baseline metrics
84
+ * @param {number} threshold - Regression threshold percentage (default: 10)
85
+ * @returns {Array} Array of regression findings
86
+ */
87
+ function detectRegressions(current, baseline, threshold = 10) {
88
+ const detector = new RegressionDetector();
89
+ return detector.detectRegressions(current, baseline, threshold);
90
+ }
91
+
92
+ module.exports = { RegressionDetector, detectRegressions };