@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
@@ -1,216 +1,216 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Package Manager Service — Unified package manager operations
5
- *
6
- * High-level service that integrates detection, execution, and validation:
7
- * - Automatic package manager detection with priority-based strategy
8
- * - Lockfile validation before operations
9
- * - Unified interface for install, add, remove operations
10
- * - Configuration-driven defaults from .planning/config.json
11
- *
12
- * Usage:
13
- * const PackageManagerService = require('./package-manager-service.cjs');
14
- * const service = new PackageManagerService(cwd);
15
- * await service.initialize();
16
- * await service.install({ frozenLockfile: true });
17
- * await service.add(['lodash'], { dev: true });
18
- */
19
-
20
- const fs = require('fs');
21
- const path = require('path');
22
- const Logger = require('./logger.cjs');
23
- const PackageManagerDetector = require('./package-manager-detector.cjs');
24
- const PackageManagerExecutor = require('./package-manager-executor.cjs');
25
- const LockfileValidator = require('./lockfile-validator.cjs');
26
-
27
- /**
28
- * Package Manager Service class
29
- * Provides unified interface for package manager operations
30
- */
31
- class PackageManagerService {
32
- /**
33
- * Create a PackageManagerService instance
34
- * @param {string} cwd - Working directory (default: process.cwd())
35
- */
36
- constructor(cwd = process.cwd()) {
37
- this.cwd = cwd;
38
- this.logger = new Logger();
39
- this.detector = new PackageManagerDetector(cwd);
40
- this.validator = new LockfileValidator(cwd);
41
- this.executor = null;
42
- this.currentManager = null;
43
- this.detectionSource = null;
44
- this.initialized = false;
45
- this.config = this._loadConfig();
46
- }
47
-
48
- /**
49
- * Initialize the package manager service
50
- * @param {Object} options - Initialization options
51
- * @param {string} [options.forceManager] - Force specific package manager
52
- * @returns {Promise<void>}
53
- */
54
- async initialize(options = {}) {
55
- const { forceManager } = options;
56
-
57
- this.logger.info('Initializing package manager service', {
58
- cwd: this.cwd,
59
- forceManager
60
- });
61
-
62
- // Detect package manager
63
- let detection;
64
- if (forceManager) {
65
- detection = {
66
- manager: forceManager,
67
- source: 'override',
68
- confidence: 'high'
69
- };
70
- this.logger.info('Using forced package manager', { manager: forceManager });
71
- } else {
72
- detection = this.detector.detect();
73
- this.logger.info('Package manager detected', {
74
- manager: detection.manager,
75
- source: detection.source,
76
- confidence: detection.confidence
77
- });
78
- }
79
-
80
- // Validate detection
81
- if (!detection.manager) {
82
- throw new Error('No package manager detected or available');
83
- }
84
-
85
- // Create executor
86
- this.executor = new PackageManagerExecutor(detection.manager, this.cwd);
87
- this.currentManager = detection.manager;
88
- this.detectionSource = detection.source;
89
-
90
- // Validate lockfile if present
91
- const lockfileValidation = this.validator.validate(detection.manager);
92
- if (!lockfileValidation.valid) {
93
- this.logger.warn('Lockfile validation failed', {
94
- manager: detection.manager,
95
- reason: lockfileValidation.reason,
96
- message: lockfileValidation.message
97
- });
98
- } else {
99
- this.logger.debug('Lockfile validated', {
100
- manager: detection.manager,
101
- lockfileVersion: lockfileValidation.lockfileVersion,
102
- packageCount: lockfileValidation.packageCount || lockfileValidation.entryCount
103
- });
104
- }
105
-
106
- this.initialized = true;
107
- }
108
-
109
- /**
110
- * Ensure service is initialized
111
- * @private
112
- * @returns {Promise<void>}
113
- */
114
- async _ensureInitialized() {
115
- if (!this.initialized) {
116
- await this.initialize();
117
- }
118
- }
119
-
120
- /**
121
- * Install dependencies
122
- * @param {Object} options - Install options
123
- * @param {boolean} [options.production] - Production install (exclude devDependencies)
124
- * @param {boolean} [options.frozenLockfile] - Use frozen lockfile (CI/CD safe)
125
- * @param {boolean} [options.preferOffline] - Prefer offline cache
126
- * @returns {Promise<string>} Command output
127
- */
128
- async install(options = {}) {
129
- await this._ensureInitialized();
130
-
131
- this.logger.info('Installing dependencies', {
132
- manager: this.currentManager,
133
- options
134
- });
135
-
136
- return await this.executor.install(options);
137
- }
138
-
139
- /**
140
- * Add package(s) to project
141
- * @param {string|string[]} packages - Package name(s) to add
142
- * @param {Object} options - Add options
143
- * @param {boolean} [options.dev] - Add as devDependency
144
- * @param {boolean} [options.peer] - Add as peerDependency
145
- * @param {boolean} [options.optional] - Add as optionalDependency
146
- * @param {boolean} [options.global] - Install globally
147
- * @returns {Promise<string>} Command output
148
- */
149
- async add(packages, options = {}) {
150
- await this._ensureInitialized();
151
-
152
- const packageArray = Array.isArray(packages) ? packages : [packages];
153
-
154
- this.logger.info('Adding packages', {
155
- manager: this.currentManager,
156
- packages: packageArray,
157
- options
158
- });
159
-
160
- return await this.executor.add(packageArray, options);
161
- }
162
-
163
- /**
164
- * Remove package(s) from project
165
- * @param {string|string[]} packages - Package name(s) to remove
166
- * @param {Object} options - Remove options
167
- * @param {boolean} [options.global] - Remove from global install
168
- * @returns {Promise<string>} Command output
169
- */
170
- async remove(packages, options = {}) {
171
- await this._ensureInitialized();
172
-
173
- const packageArray = Array.isArray(packages) ? packages : [packages];
174
-
175
- this.logger.info('Removing packages', {
176
- manager: this.currentManager,
177
- packages: packageArray,
178
- options
179
- });
180
-
181
- return await this.executor.remove(packageArray, options);
182
- }
183
-
184
- /**
185
- * Get current package manager information
186
- * @returns {Object} Package manager info
187
- */
188
- getInfo() {
189
- return {
190
- manager: this.currentManager,
191
- source: this.detectionSource,
192
- cwd: this.cwd,
193
- lockfile: this.detector.getLockfilePath(this.currentManager)
194
- };
195
- }
196
-
197
- /**
198
- * Load configuration from .planning/config.json
199
- * @private
200
- * @returns {Object} Configuration object
201
- */
202
- _loadConfig() {
203
- const configPath = path.join(this.cwd, '.planning', 'config.json');
204
- try {
205
- if (fs.existsSync(configPath)) {
206
- const content = fs.readFileSync(configPath, 'utf-8');
207
- return JSON.parse(content);
208
- }
209
- } catch (err) {
210
- this.logger.warn('Failed to load config', { path: configPath, error: err.message });
211
- }
212
- return {};
213
- }
214
- }
215
-
216
- module.exports = PackageManagerService;
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Package Manager Service — Unified package manager operations
5
+ *
6
+ * High-level service that integrates detection, execution, and validation:
7
+ * - Automatic package manager detection with priority-based strategy
8
+ * - Lockfile validation before operations
9
+ * - Unified interface for install, add, remove operations
10
+ * - Configuration-driven defaults from .planning/config.json
11
+ *
12
+ * Usage:
13
+ * const PackageManagerService = require('./package-manager-service.cjs');
14
+ * const service = new PackageManagerService(cwd);
15
+ * await service.initialize();
16
+ * await service.install({ frozenLockfile: true });
17
+ * await service.add(['lodash'], { dev: true });
18
+ */
19
+
20
+ const fs = require('fs');
21
+ const path = require('path');
22
+ const Logger = require('./logger.cjs');
23
+ const PackageManagerDetector = require('./package-manager-detector.cjs');
24
+ const PackageManagerExecutor = require('./package-manager-executor.cjs');
25
+ const LockfileValidator = require('./lockfile-validator.cjs');
26
+
27
+ /**
28
+ * Package Manager Service class
29
+ * Provides unified interface for package manager operations
30
+ */
31
+ class PackageManagerService {
32
+ /**
33
+ * Create a PackageManagerService instance
34
+ * @param {string} cwd - Working directory (default: process.cwd())
35
+ */
36
+ constructor(cwd = process.cwd()) {
37
+ this.cwd = cwd;
38
+ this.logger = new Logger();
39
+ this.detector = new PackageManagerDetector(cwd);
40
+ this.validator = new LockfileValidator(cwd);
41
+ this.executor = null;
42
+ this.currentManager = null;
43
+ this.detectionSource = null;
44
+ this.initialized = false;
45
+ this.config = this._loadConfig();
46
+ }
47
+
48
+ /**
49
+ * Initialize the package manager service
50
+ * @param {Object} options - Initialization options
51
+ * @param {string} [options.forceManager] - Force specific package manager
52
+ * @returns {Promise<void>}
53
+ */
54
+ async initialize(options = {}) {
55
+ const { forceManager } = options;
56
+
57
+ this.logger.info('Initializing package manager service', {
58
+ cwd: this.cwd,
59
+ forceManager
60
+ });
61
+
62
+ // Detect package manager
63
+ let detection;
64
+ if (forceManager) {
65
+ detection = {
66
+ manager: forceManager,
67
+ source: 'override',
68
+ confidence: 'high'
69
+ };
70
+ this.logger.info('Using forced package manager', { manager: forceManager });
71
+ } else {
72
+ detection = this.detector.detect();
73
+ this.logger.info('Package manager detected', {
74
+ manager: detection.manager,
75
+ source: detection.source,
76
+ confidence: detection.confidence
77
+ });
78
+ }
79
+
80
+ // Validate detection
81
+ if (!detection.manager) {
82
+ throw new Error('No package manager detected or available');
83
+ }
84
+
85
+ // Create executor
86
+ this.executor = new PackageManagerExecutor(detection.manager, this.cwd);
87
+ this.currentManager = detection.manager;
88
+ this.detectionSource = detection.source;
89
+
90
+ // Validate lockfile if present
91
+ const lockfileValidation = this.validator.validate(detection.manager);
92
+ if (!lockfileValidation.valid) {
93
+ this.logger.warn('Lockfile validation failed', {
94
+ manager: detection.manager,
95
+ reason: lockfileValidation.reason,
96
+ message: lockfileValidation.message
97
+ });
98
+ } else {
99
+ this.logger.debug('Lockfile validated', {
100
+ manager: detection.manager,
101
+ lockfileVersion: lockfileValidation.lockfileVersion,
102
+ packageCount: lockfileValidation.packageCount || lockfileValidation.entryCount
103
+ });
104
+ }
105
+
106
+ this.initialized = true;
107
+ }
108
+
109
+ /**
110
+ * Ensure service is initialized
111
+ * @private
112
+ * @returns {Promise<void>}
113
+ */
114
+ async _ensureInitialized() {
115
+ if (!this.initialized) {
116
+ await this.initialize();
117
+ }
118
+ }
119
+
120
+ /**
121
+ * Install dependencies
122
+ * @param {Object} options - Install options
123
+ * @param {boolean} [options.production] - Production install (exclude devDependencies)
124
+ * @param {boolean} [options.frozenLockfile] - Use frozen lockfile (CI/CD safe)
125
+ * @param {boolean} [options.preferOffline] - Prefer offline cache
126
+ * @returns {Promise<string>} Command output
127
+ */
128
+ async install(options = {}) {
129
+ await this._ensureInitialized();
130
+
131
+ this.logger.info('Installing dependencies', {
132
+ manager: this.currentManager,
133
+ options
134
+ });
135
+
136
+ return await this.executor.install(options);
137
+ }
138
+
139
+ /**
140
+ * Add package(s) to project
141
+ * @param {string|string[]} packages - Package name(s) to add
142
+ * @param {Object} options - Add options
143
+ * @param {boolean} [options.dev] - Add as devDependency
144
+ * @param {boolean} [options.peer] - Add as peerDependency
145
+ * @param {boolean} [options.optional] - Add as optionalDependency
146
+ * @param {boolean} [options.global] - Install globally
147
+ * @returns {Promise<string>} Command output
148
+ */
149
+ async add(packages, options = {}) {
150
+ await this._ensureInitialized();
151
+
152
+ const packageArray = Array.isArray(packages) ? packages : [packages];
153
+
154
+ this.logger.info('Adding packages', {
155
+ manager: this.currentManager,
156
+ packages: packageArray,
157
+ options
158
+ });
159
+
160
+ return await this.executor.add(packageArray, options);
161
+ }
162
+
163
+ /**
164
+ * Remove package(s) from project
165
+ * @param {string|string[]} packages - Package name(s) to remove
166
+ * @param {Object} options - Remove options
167
+ * @param {boolean} [options.global] - Remove from global install
168
+ * @returns {Promise<string>} Command output
169
+ */
170
+ async remove(packages, options = {}) {
171
+ await this._ensureInitialized();
172
+
173
+ const packageArray = Array.isArray(packages) ? packages : [packages];
174
+
175
+ this.logger.info('Removing packages', {
176
+ manager: this.currentManager,
177
+ packages: packageArray,
178
+ options
179
+ });
180
+
181
+ return await this.executor.remove(packageArray, options);
182
+ }
183
+
184
+ /**
185
+ * Get current package manager information
186
+ * @returns {Object} Package manager info
187
+ */
188
+ getInfo() {
189
+ return {
190
+ manager: this.currentManager,
191
+ source: this.detectionSource,
192
+ cwd: this.cwd,
193
+ lockfile: this.detector.getLockfilePath(this.currentManager)
194
+ };
195
+ }
196
+
197
+ /**
198
+ * Load configuration from .planning/config.json
199
+ * @private
200
+ * @returns {Object} Configuration object
201
+ */
202
+ _loadConfig() {
203
+ const configPath = path.join(this.cwd, '.planning', 'config.json');
204
+ try {
205
+ if (fs.existsSync(configPath)) {
206
+ const content = fs.readFileSync(configPath, 'utf-8');
207
+ return JSON.parse(content);
208
+ }
209
+ } catch (err) {
210
+ this.logger.warn('Failed to load config', { path: configPath, error: err.message });
211
+ }
212
+ return {};
213
+ }
214
+ }
215
+
216
+ module.exports = PackageManagerService;
@@ -0,0 +1,88 @@
1
+ /**
2
+ * API Monitor — Endpoint latency tracking with baseline storage
3
+ * Tracks p50, p95, p99 percentiles
4
+ */
5
+
6
+ const fs = require('fs');
7
+ const path = require('path');
8
+
9
+ class ApiMonitor {
10
+ constructor(cwd) {
11
+ this.cwd = cwd || process.cwd();
12
+ this.latenciesPath = path.join(this.cwd, '.planning', 'perf', 'api-latencies.json');
13
+ }
14
+
15
+ /**
16
+ * Track endpoint latency
17
+ * @param {string} baseUrl - Base URL of API
18
+ * @param {Array} endpoints - Array of endpoint paths to track
19
+ * @returns {Array} Latency results
20
+ */
21
+ async trackEndpoint(baseUrl, endpoints) {
22
+ const results = [];
23
+
24
+ for (const endpoint of endpoints) {
25
+ const start = Date.now();
26
+ try {
27
+ // Placeholder - would make actual HTTP request in real implementation
28
+ const latency = Date.now() - start;
29
+ results.push({
30
+ endpoint: endpoint.path || endpoint,
31
+ method: endpoint.method || 'GET',
32
+ latency,
33
+ status: 200,
34
+ timestamp: new Date().toISOString()
35
+ });
36
+ } catch (e) {
37
+ results.push({
38
+ endpoint: endpoint.path || endpoint,
39
+ method: endpoint.method || 'GET',
40
+ latency: -1,
41
+ error: e.message,
42
+ timestamp: new Date().toISOString()
43
+ });
44
+ }
45
+ }
46
+
47
+ return results;
48
+ }
49
+
50
+ /**
51
+ * Calculate percentiles from latency array
52
+ * @param {Array} latencies - Array of latency values
53
+ * @returns {Object} Percentile values
54
+ */
55
+ calculatePercentiles(latencies) {
56
+ const sorted = latencies.filter(l => l > 0).sort((a, b) => a - b);
57
+ if (sorted.length === 0) return { p50: 0, p95: 0, p99: 0 };
58
+
59
+ return {
60
+ p50: sorted[Math.floor(sorted.length * 0.50)],
61
+ p95: sorted[Math.floor(sorted.length * 0.95)],
62
+ p99: sorted[Math.floor(sorted.length * 0.99)]
63
+ };
64
+ }
65
+ }
66
+
67
+ /**
68
+ * Track endpoint latency
69
+ * @param {string} baseUrl - Base URL of API
70
+ * @param {Array} endpoints - Array of endpoint paths to track
71
+ * @returns {Array} Latency results
72
+ */
73
+ async function trackEndpoint(baseUrl, endpoints) {
74
+ const monitor = new ApiMonitor();
75
+ return monitor.trackEndpoint(baseUrl, endpoints);
76
+ }
77
+
78
+ /**
79
+ * Calculate percentiles from latency array
80
+ * @param {Array} latencies - Array of latency values
81
+ * @returns {Object} Percentile values
82
+ */
83
+ function calculatePercentiles(latencies) {
84
+ const monitor = new ApiMonitor();
85
+ return monitor.calculatePercentiles(latencies);
86
+ }
87
+
88
+ module.exports = { ApiMonitor, trackEndpoint, calculatePercentiles };
@@ -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 };