@howlil/ez-agents 3.5.0 → 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 (382) hide show
  1. package/README.md +735 -537
  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 -333
  18. package/agents/ez-requirements-agent.md +377 -377
  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/lib/analytics/analytics-collector.cjs +86 -0
  30. package/bin/lib/analytics/analytics-reporter.cjs +130 -0
  31. package/bin/lib/analytics/cohort-analyzer.cjs +138 -0
  32. package/bin/lib/analytics/funnel-analyzer.cjs +147 -0
  33. package/bin/lib/analytics/nps-tracker.cjs +147 -0
  34. package/bin/lib/archetype-detector.cjs +289 -0
  35. package/bin/lib/assistant-adapter.cjs +361 -0
  36. package/bin/lib/audit-exec.cjs +175 -0
  37. package/bin/lib/auth.cjs +176 -0
  38. package/bin/lib/backup-service.cjs +422 -0
  39. package/bin/lib/bdd-validator.cjs +622 -0
  40. package/bin/lib/business-flow-mapper.cjs +429 -0
  41. package/bin/lib/circuit-breaker.cjs +276 -0
  42. package/bin/lib/code-complexity-analyzer.cjs +360 -0
  43. package/bin/lib/codebase-analyzer.cjs +241 -0
  44. package/bin/lib/commands.cjs +691 -0
  45. package/bin/lib/config.cjs +236 -0
  46. package/bin/lib/constraint-extractor.cjs +526 -0
  47. package/bin/lib/content-scanner.cjs +238 -0
  48. package/bin/lib/context-cache.cjs +154 -0
  49. package/bin/lib/context-compressor.cjs +102 -0
  50. package/bin/lib/context-deduplicator.cjs +105 -0
  51. package/bin/lib/context-errors.cjs +78 -0
  52. package/bin/lib/context-manager.cjs +338 -0
  53. package/bin/lib/context-metadata-tracker.cjs +140 -0
  54. package/bin/lib/context-relevance-scorer.cjs +99 -0
  55. package/bin/lib/core.cjs +507 -0
  56. package/bin/lib/cost-alerts.cjs +174 -0
  57. package/bin/lib/cost-tracker.cjs +275 -0
  58. package/bin/lib/crash-recovery.cjs +220 -0
  59. package/bin/lib/dependency-graph.cjs +319 -0
  60. package/bin/lib/deploy/deploy-audit-log.cjs +76 -0
  61. package/bin/lib/deploy/deploy-detector.cjs +69 -0
  62. package/bin/lib/deploy/deploy-env-manager.cjs +109 -0
  63. package/bin/lib/deploy/deploy-health-check.cjs +88 -0
  64. package/bin/lib/deploy/deploy-pre-flight.cjs +57 -0
  65. package/bin/lib/deploy/deploy-rollback.cjs +72 -0
  66. package/bin/lib/deploy/deploy-runner.cjs +97 -0
  67. package/bin/lib/deploy/deploy-status.cjs +74 -0
  68. package/bin/lib/discussion-synthesizer.cjs +439 -0
  69. package/bin/lib/error-cache.cjs +114 -0
  70. package/bin/lib/error-registry.cjs +177 -0
  71. package/bin/lib/file-access.cjs +207 -0
  72. package/bin/lib/file-lock.cjs +236 -0
  73. package/bin/lib/finops/budget-enforcer.cjs +126 -0
  74. package/bin/lib/finops/cost-reporter.cjs +132 -0
  75. package/bin/lib/finops/finops-analyzer.cjs +112 -0
  76. package/bin/lib/finops/spot-manager.cjs +118 -0
  77. package/bin/lib/framework-detector.cjs +396 -0
  78. package/bin/lib/frontmatter.cjs +313 -0
  79. package/bin/lib/fs-utils.cjs +153 -0
  80. package/bin/lib/gate-executor.cjs +272 -0
  81. package/bin/lib/gates/README.md +374 -0
  82. package/bin/lib/gates/gate-01-requirement.cjs +303 -0
  83. package/bin/lib/gates/gate-02-architecture.cjs +555 -0
  84. package/bin/lib/gates/gate-03-code.cjs +635 -0
  85. package/bin/lib/gates/gate-04-security.cjs +829 -0
  86. package/bin/lib/git-errors.cjs +83 -0
  87. package/bin/lib/git-utils.cjs +321 -0
  88. package/bin/lib/git-workflow-engine.cjs +1157 -0
  89. package/bin/lib/health-check.cjs +227 -0
  90. package/bin/lib/index.cjs +279 -0
  91. package/bin/lib/init.cjs +725 -0
  92. package/bin/lib/lock-logger.cjs +194 -0
  93. package/bin/lib/lock-state.cjs +263 -0
  94. package/bin/lib/lockfile-validator.cjs +227 -0
  95. package/bin/lib/log-rotation.cjs +71 -0
  96. package/bin/lib/logger.cjs +125 -0
  97. package/bin/lib/memory-compression.cjs +256 -0
  98. package/bin/lib/milestone.cjs +247 -0
  99. package/bin/lib/model-provider.cjs +241 -0
  100. package/bin/lib/package-manager-detector.cjs +203 -0
  101. package/bin/lib/package-manager-executor.cjs +385 -0
  102. package/bin/lib/package-manager-service.cjs +216 -0
  103. package/bin/lib/perf/api-monitor.cjs +88 -0
  104. package/bin/lib/perf/db-optimizer.cjs +78 -0
  105. package/bin/lib/perf/frontend-performance.cjs +56 -0
  106. package/bin/lib/perf/perf-analyzer.cjs +77 -0
  107. package/bin/lib/perf/perf-baseline.cjs +102 -0
  108. package/bin/lib/perf/perf-reporter.cjs +117 -0
  109. package/bin/lib/perf/regression-detector.cjs +92 -0
  110. package/bin/lib/phase.cjs +963 -0
  111. package/bin/lib/planning-write.cjs +123 -0
  112. package/bin/lib/project-reporter.cjs +565 -0
  113. package/bin/lib/quality-gate.cjs +332 -0
  114. package/bin/lib/quality-metrics.cjs +324 -0
  115. package/bin/lib/recovery-manager.cjs +98 -0
  116. package/bin/lib/release-validator.cjs +617 -0
  117. package/bin/lib/retry.cjs +119 -0
  118. package/bin/lib/roadmap.cjs +309 -0
  119. package/bin/lib/safe-exec.cjs +173 -0
  120. package/bin/lib/safe-path.cjs +130 -0
  121. package/bin/lib/security-errors.cjs +62 -0
  122. package/bin/lib/session-chain.cjs +304 -0
  123. package/bin/lib/session-errors.cjs +81 -0
  124. package/bin/lib/session-export.cjs +251 -0
  125. package/bin/lib/session-import.cjs +262 -0
  126. package/bin/lib/session-manager.cjs +280 -0
  127. package/bin/lib/skill-context.cjs +148 -0
  128. package/bin/lib/skill-matcher.cjs +236 -0
  129. package/bin/lib/skill-registry.cjs +360 -0
  130. package/bin/lib/skill-resolver.cjs +449 -0
  131. package/bin/lib/skill-triggers.cjs +90 -0
  132. package/bin/lib/skill-validator.cjs +270 -0
  133. package/bin/lib/skill-versioning.cjs +355 -0
  134. package/bin/lib/stack-detector.cjs +399 -0
  135. package/bin/lib/state.cjs +736 -0
  136. package/bin/lib/tech-debt-analyzer.cjs +309 -0
  137. package/bin/lib/temp-file.cjs +239 -0
  138. package/bin/lib/template.cjs +223 -0
  139. package/bin/lib/test-file-lock.cjs +112 -0
  140. package/bin/lib/test-graceful.cjs +93 -0
  141. package/bin/lib/test-logger.cjs +60 -0
  142. package/bin/lib/test-safe-exec.cjs +38 -0
  143. package/bin/lib/test-safe-path.cjs +33 -0
  144. package/bin/lib/test-temp-file.cjs +125 -0
  145. package/bin/lib/tier-manager.cjs +428 -0
  146. package/bin/lib/timeout-exec.cjs +63 -0
  147. package/bin/lib/tradeoff-analyzer.cjs +284 -0
  148. package/bin/lib/url-fetch.cjs +170 -0
  149. package/bin/lib/verify.cjs +863 -0
  150. package/bin/update.js +217 -214
  151. package/commands/deploy.cjs +53 -0
  152. package/commands/ez/add-tests.md +41 -41
  153. package/commands/ez/audit-milestone.md +36 -36
  154. package/commands/ez/complete-milestone.md +136 -136
  155. package/commands/ez/discuss-phase.md +90 -90
  156. package/commands/ez/execute-phase.md +52 -52
  157. package/commands/ez/help.md +22 -22
  158. package/commands/ez/map-codebase.md +71 -71
  159. package/commands/ez/new-milestone.md +44 -44
  160. package/commands/ez/new-project.md +51 -42
  161. package/commands/ez/plan-phase.md +53 -53
  162. package/commands/ez/progress.md +36 -36
  163. package/commands/ez/quick.md +45 -45
  164. package/commands/ez/resume-work.md +40 -40
  165. package/commands/ez/run-phase.md +580 -0
  166. package/commands/ez/settings.md +36 -36
  167. package/commands/ez/update.md +37 -37
  168. package/commands/ez/verify-work.md +402 -38
  169. package/commands/health-check.cjs +44 -0
  170. package/commands/rollback.cjs +47 -0
  171. package/ez-agents/bin/ez-tools.cjs +599 -2
  172. package/ez-agents/bin/guards/autonomy-guard.cjs +346 -0
  173. package/ez-agents/bin/guards/context-budget-guard.cjs +247 -0
  174. package/ez-agents/bin/guards/hallucination-guard.cjs +271 -0
  175. package/ez-agents/bin/guards/hidden-state-guard.cjs +182 -0
  176. package/ez-agents/bin/guards/team-overhead-guard.cjs +266 -0
  177. package/ez-agents/bin/guards/tool-sprawl-guard.cjs +271 -0
  178. package/ez-agents/bin/lib/analytics/analytics-collector.cjs +86 -0
  179. package/ez-agents/bin/lib/analytics/analytics-reporter.cjs +130 -0
  180. package/ez-agents/bin/lib/analytics/cohort-analyzer.cjs +138 -0
  181. package/ez-agents/bin/lib/analytics/funnel-analyzer.cjs +147 -0
  182. package/ez-agents/bin/lib/analytics/nps-tracker.cjs +147 -0
  183. package/ez-agents/bin/lib/archetype-detector.cjs +289 -0
  184. package/ez-agents/bin/lib/audit-exec.cjs +166 -167
  185. package/ez-agents/bin/lib/auth.cjs +176 -176
  186. package/ez-agents/bin/lib/backup-service.cjs +422 -0
  187. package/ez-agents/bin/lib/bdd-validator.cjs +622 -622
  188. package/ez-agents/bin/lib/business-flow-mapper.cjs +429 -0
  189. package/ez-agents/bin/lib/code-complexity-analyzer.cjs +360 -0
  190. package/ez-agents/bin/lib/codebase-analyzer.cjs +241 -0
  191. package/ez-agents/bin/lib/commands.cjs +685 -685
  192. package/ez-agents/bin/lib/config.cjs +41 -1
  193. package/ez-agents/bin/lib/constraint-extractor.cjs +526 -0
  194. package/ez-agents/bin/lib/content-scanner.cjs +238 -238
  195. package/ez-agents/bin/lib/context-cache.cjs +154 -154
  196. package/ez-agents/bin/lib/context-errors.cjs +71 -71
  197. package/ez-agents/bin/lib/context-manager.cjs +220 -220
  198. package/ez-agents/bin/lib/core.cjs +507 -512
  199. package/ez-agents/bin/lib/cost-tracker.cjs +243 -0
  200. package/ez-agents/bin/lib/crash-recovery.cjs +172 -0
  201. package/ez-agents/bin/lib/dependency-graph.cjs +319 -0
  202. package/ez-agents/bin/lib/deploy/deploy-audit-log.cjs +76 -0
  203. package/ez-agents/bin/lib/deploy/deploy-detector.cjs +69 -0
  204. package/ez-agents/bin/lib/deploy/deploy-env-manager.cjs +109 -0
  205. package/ez-agents/bin/lib/deploy/deploy-health-check.cjs +88 -0
  206. package/ez-agents/bin/lib/deploy/deploy-pre-flight.cjs +57 -0
  207. package/ez-agents/bin/lib/deploy/deploy-rollback.cjs +72 -0
  208. package/ez-agents/bin/lib/deploy/deploy-runner.cjs +97 -0
  209. package/ez-agents/bin/lib/deploy/deploy-status.cjs +74 -0
  210. package/ez-agents/bin/lib/file-access.cjs +207 -207
  211. package/ez-agents/bin/lib/finops/budget-enforcer.cjs +126 -0
  212. package/ez-agents/bin/lib/finops/cost-reporter.cjs +132 -0
  213. package/ez-agents/bin/lib/finops/finops-analyzer.cjs +112 -0
  214. package/ez-agents/bin/lib/finops/spot-manager.cjs +118 -0
  215. package/ez-agents/bin/lib/framework-detector.cjs +396 -0
  216. package/ez-agents/bin/lib/frontmatter.cjs +3 -1
  217. package/ez-agents/bin/lib/gates/README.md +374 -0
  218. package/ez-agents/bin/lib/gates/gate-01-requirement.cjs +303 -0
  219. package/ez-agents/bin/lib/gates/gate-02-architecture.cjs +555 -0
  220. package/ez-agents/bin/lib/gates/gate-03-code.cjs +635 -0
  221. package/ez-agents/bin/lib/gates/gate-04-security.cjs +829 -0
  222. package/ez-agents/bin/lib/git-errors.cjs +83 -83
  223. package/ez-agents/bin/lib/git-utils.cjs +321 -321
  224. package/ez-agents/bin/lib/git-workflow-engine.cjs +1157 -1157
  225. package/ez-agents/bin/lib/health-check.cjs +162 -162
  226. package/ez-agents/bin/lib/index.cjs +2 -8
  227. package/ez-agents/bin/lib/init.cjs +0 -2
  228. package/ez-agents/bin/lib/lockfile-validator.cjs +227 -227
  229. package/ez-agents/bin/lib/log-rotation.cjs +71 -0
  230. package/ez-agents/bin/lib/logger.cjs +22 -47
  231. package/ez-agents/bin/lib/memory-compression.cjs +256 -256
  232. package/ez-agents/bin/lib/package-manager-detector.cjs +203 -203
  233. package/ez-agents/bin/lib/package-manager-executor.cjs +385 -385
  234. package/ez-agents/bin/lib/package-manager-service.cjs +216 -216
  235. package/ez-agents/bin/lib/perf/api-monitor.cjs +88 -0
  236. package/ez-agents/bin/lib/perf/db-optimizer.cjs +78 -0
  237. package/ez-agents/bin/lib/perf/frontend-performance.cjs +56 -0
  238. package/ez-agents/bin/lib/perf/perf-analyzer.cjs +77 -0
  239. package/ez-agents/bin/lib/perf/perf-baseline.cjs +102 -0
  240. package/ez-agents/bin/lib/perf/perf-reporter.cjs +117 -0
  241. package/ez-agents/bin/lib/perf/regression-detector.cjs +92 -0
  242. package/ez-agents/bin/lib/project-reporter.cjs +502 -0
  243. package/ez-agents/bin/lib/quality-gate.cjs +332 -0
  244. package/ez-agents/bin/lib/recovery-manager.cjs +98 -0
  245. package/ez-agents/bin/lib/release-validator.cjs +617 -614
  246. package/ez-agents/bin/lib/security-errors.cjs +62 -0
  247. package/ez-agents/bin/lib/session-chain.cjs +304 -304
  248. package/ez-agents/bin/lib/session-errors.cjs +81 -81
  249. package/ez-agents/bin/lib/session-export.cjs +251 -251
  250. package/ez-agents/bin/lib/session-import.cjs +262 -262
  251. package/ez-agents/bin/lib/session-manager.cjs +280 -280
  252. package/ez-agents/bin/lib/skill-context.cjs +148 -0
  253. package/ez-agents/bin/lib/skill-matcher.cjs +236 -0
  254. package/ez-agents/bin/lib/skill-registry.cjs +341 -0
  255. package/ez-agents/bin/lib/skill-resolver.cjs +449 -0
  256. package/ez-agents/bin/lib/skill-triggers.cjs +90 -0
  257. package/ez-agents/bin/lib/skill-validator.cjs +270 -0
  258. package/ez-agents/bin/lib/skill-versioning.cjs +355 -0
  259. package/ez-agents/bin/lib/stack-detector.cjs +399 -0
  260. package/ez-agents/bin/lib/tech-debt-analyzer.cjs +309 -0
  261. package/ez-agents/bin/lib/tier-manager.cjs +428 -428
  262. package/ez-agents/bin/lib/tradeoff-analyzer.cjs +284 -0
  263. package/ez-agents/bin/lib/url-fetch.cjs +170 -170
  264. package/ez-agents/bin/lib/verify.cjs +863 -863
  265. package/ez-agents/references/decimal-phase-calculation.md +65 -65
  266. package/ez-agents/references/git-integration.md +248 -248
  267. package/ez-agents/references/git-planning-commit.md +38 -38
  268. package/ez-agents/references/metrics-schema.md +118 -118
  269. package/ez-agents/references/model-profile-resolution.md +34 -34
  270. package/ez-agents/references/model-profiles.md +93 -93
  271. package/ez-agents/references/phase-argument-parsing.md +61 -61
  272. package/ez-agents/references/planning-config.md +340 -340
  273. package/ez-agents/references/tier-strategy.md +103 -103
  274. package/ez-agents/references/ui-brand.md +160 -160
  275. package/ez-agents/references/verification-patterns.md +612 -612
  276. package/ez-agents/templates/DEBUG.md +164 -164
  277. package/ez-agents/templates/UAT.md +247 -247
  278. package/ez-agents/templates/agent-output-format.md +404 -0
  279. package/ez-agents/templates/bdd-feature.md +173 -173
  280. package/ez-agents/templates/codebase/architecture.md +255 -255
  281. package/ez-agents/templates/codebase/structure.md +285 -285
  282. package/ez-agents/templates/copilot-instructions.md +7 -7
  283. package/ez-agents/templates/debug-subagent-prompt.md +91 -91
  284. package/ez-agents/templates/discovery.md +146 -146
  285. package/ez-agents/templates/discussion.md +68 -68
  286. package/ez-agents/templates/handoff-protocol.md +294 -0
  287. package/ez-agents/templates/incident-runbook.md +205 -205
  288. package/ez-agents/templates/mode-workflow-templates.md +301 -0
  289. package/ez-agents/templates/phase-prompt.md +610 -610
  290. package/ez-agents/templates/planner-subagent-prompt.md +117 -117
  291. package/ez-agents/templates/project.md +184 -184
  292. package/ez-agents/templates/release-checklist.md +136 -133
  293. package/ez-agents/templates/research.md +552 -552
  294. package/ez-agents/templates/rollback-plan.md +201 -201
  295. package/ez-agents/templates/security-user-setup.md +244 -0
  296. package/ez-agents/templates/skill-validation-rules.md +476 -0
  297. package/ez-agents/templates/state.md +180 -176
  298. package/ez-agents/templates/summary-complex.md +59 -59
  299. package/ez-agents/tests/gates/gate-01-02.test.cjs +812 -0
  300. package/ez-agents/tests/gates/gate-03-04.test.cjs +762 -0
  301. package/ez-agents/tests/gates/gate-05-validator.test.cjs +145 -0
  302. package/ez-agents/tests/gates/gate-06-docs-validator.test.cjs +244 -0
  303. package/ez-agents/tests/gates/gate-07-release-validator.test.cjs +219 -0
  304. package/ez-agents/tests/guards/context-budget-guard.test.cjs +145 -0
  305. package/ez-agents/tests/guards/edge-case-guards.test.cjs +238 -0
  306. package/ez-agents/tests/guards/hallucination-guard.test.cjs +124 -0
  307. package/ez-agents/workflows/audit-milestone.md +1 -1
  308. package/ez-agents/workflows/autonomous.md +844 -844
  309. package/ez-agents/workflows/complete-milestone.md +1 -1
  310. package/ez-agents/workflows/discuss-phase.md +1 -1
  311. package/ez-agents/workflows/execute-phase.md +124 -3
  312. package/ez-agents/workflows/help.md +42 -181
  313. package/ez-agents/workflows/hotfix.md +291 -291
  314. package/ez-agents/workflows/new-milestone.md +713 -713
  315. package/ez-agents/workflows/new-project.md +1089 -1107
  316. package/ez-agents/workflows/plan-phase.md +0 -40
  317. package/ez-agents/workflows/release.md +253 -253
  318. package/ez-agents/workflows/resume-session.md +215 -215
  319. package/ez-agents/workflows/run-phase.md +531 -0
  320. package/ez-agents/workflows/settings.md +2 -35
  321. package/hooks/dist/ez-check-update.js +81 -81
  322. package/hooks/dist/ez-context-monitor.js +148 -141
  323. package/hooks/dist/ez-statusline.js +115 -115
  324. package/package.json +78 -71
  325. package/scripts/fix-qwen-installation.js +144 -144
  326. package/agents/ez-integration-checker.md +0 -443
  327. package/agents/ez-nyquist-auditor.md +0 -176
  328. package/agents/ez-observer-agent.md +0 -260
  329. package/agents/ez-plan-checker.md +0 -706
  330. package/agents/ez-research-synthesizer.md +0 -247
  331. package/agents/ez-scrum-master-agent.md +0 -242
  332. package/agents/ez-tech-lead-agent.md +0 -267
  333. package/agents/ez-ui-auditor.md +0 -439
  334. package/agents/ez-ui-checker.md +0 -300
  335. package/agents/ez-ui-researcher.md +0 -353
  336. package/commands/ez/add-phase.md +0 -43
  337. package/commands/ez/add-todo.md +0 -47
  338. package/commands/ez/arch-review.md +0 -102
  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/export-session.md +0 -79
  345. package/commands/ez/gather-requirements.md +0 -117
  346. package/commands/ez/git-workflow.md +0 -72
  347. package/commands/ez/health.md +0 -22
  348. package/commands/ez/hotfix.md +0 -120
  349. package/commands/ez/import-session.md +0 -82
  350. package/commands/ez/insert-phase.md +0 -32
  351. package/commands/ez/join-discord.md +0 -18
  352. package/commands/ez/list-phase-assumptions.md +0 -46
  353. package/commands/ez/list-sessions.md +0 -96
  354. package/commands/ez/package-manager.md +0 -316
  355. package/commands/ez/pause-work.md +0 -38
  356. package/commands/ez/plan-milestone-gaps.md +0 -34
  357. package/commands/ez/preflight.md +0 -79
  358. package/commands/ez/reapply-patches.md +0 -124
  359. package/commands/ez/release.md +0 -153
  360. package/commands/ez/remove-phase.md +0 -31
  361. package/commands/ez/research-phase.md +0 -190
  362. package/commands/ez/resume.md +0 -107
  363. package/commands/ez/set-profile.md +0 -34
  364. package/commands/ez/standup.md +0 -85
  365. package/commands/ez/stats.md +0 -18
  366. package/commands/ez/ui-phase.md +0 -34
  367. package/commands/ez/ui-review.md +0 -32
  368. package/commands/ez/validate-phase.md +0 -35
  369. package/ez-agents/bin/lib/metrics-tracker.cjs +0 -406
  370. package/ez-agents/templates/UI-SPEC.md +0 -100
  371. package/ez-agents/templates/VALIDATION.md +0 -76
  372. package/ez-agents/templates/context.md +0 -352
  373. package/ez-agents/templates/verification-report.md +0 -322
  374. package/ez-agents/workflows/arch-review.md +0 -54
  375. package/ez-agents/workflows/export-session.md +0 -255
  376. package/ez-agents/workflows/gather-requirements.md +0 -206
  377. package/ez-agents/workflows/import-session.md +0 -303
  378. package/ez-agents/workflows/research-phase.md +0 -74
  379. package/ez-agents/workflows/standup.md +0 -64
  380. package/ez-agents/workflows/ui-phase.md +0 -290
  381. package/ez-agents/workflows/ui-review.md +0 -157
  382. 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 };