@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,321 +1,321 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * EZ Git Utils — Safe git operations with atomic commits
5
- *
6
- * Provides:
7
- * - Atomic commits with validation
8
- * - Branch creation and management
9
- * - Safe git operations using execFile
10
- * - Error handling with recovery suggestions
11
- *
12
- * Usage:
13
- * const GitUtils = require('./git-utils.cjs');
14
- * const git = new GitUtils(process.cwd());
15
- * await git.commitAtomic('feat: add feature', ['file1.js']);
16
- */
17
-
18
- const { execFile } = require('child_process');
19
- const { promisify } = require('util');
20
- const execFileAsync = promisify(execFile);
21
- const Logger = require('./logger.cjs');
22
- const logger = new Logger();
23
- const { BranchExistsError, BranchNotFoundError } = require('./git-errors.cjs');
24
- const { MergeConflictError } = require('./git-errors.cjs');
25
-
26
- class GitUtils {
27
- constructor(cwd) {
28
- this.cwd = cwd || process.cwd();
29
- }
30
-
31
- /**
32
- * Execute git command safely
33
- */
34
- async exec(args, options = {}) {
35
- const { timeout = 30000 } = options;
36
-
37
- try {
38
- const { stdout, stderr } = await execFileAsync('git', args, {
39
- cwd: this.cwd,
40
- encoding: 'utf-8',
41
- timeout,
42
- maxBuffer: 10 * 1024 * 1024
43
- });
44
-
45
- logger.debug('Git command executed', { args, stdout_length: stdout?.length });
46
-
47
- return { stdout: stdout?.trim(), stderr: stderr?.trim() };
48
- } catch (err) {
49
- logger.error('Git command failed', { args, error: err.message });
50
- throw err;
51
- }
52
- }
53
-
54
- /**
55
- * Check if directory is a git repo
56
- */
57
- async isGitRepo() {
58
- try {
59
- await this.exec(['rev-parse', '--git-dir']);
60
- return true;
61
- } catch {
62
- return false;
63
- }
64
- }
65
-
66
- /**
67
- * Get current branch name
68
- */
69
- async getCurrentBranch() {
70
- const { stdout } = await this.exec(['rev-parse', '--abbrev-ref', 'HEAD']);
71
- return stdout;
72
- }
73
-
74
- /**
75
- * Get git status (porcelain format)
76
- */
77
- async getStatus() {
78
- const { stdout } = await this.exec(['status', '--porcelain']);
79
- return stdout.split('\n').filter(line => line.trim());
80
- }
81
-
82
- /**
83
- * Check if there are uncommitted changes
84
- */
85
- async hasChanges() {
86
- const status = await this.getStatus();
87
- return status.length > 0;
88
- }
89
-
90
- /**
91
- * Stage files for commit
92
- */
93
- async add(files) {
94
- if (!Array.isArray(files)) files = [files];
95
- await this.exec(['add', ...files]);
96
- logger.info('Files staged', { files });
97
- }
98
-
99
- /**
100
- * Add all changes
101
- */
102
- async addAll() {
103
- await this.exec(['add', '-A']);
104
- logger.info('All files staged');
105
- }
106
-
107
- /**
108
- * Create atomic commit with validation
109
- */
110
- async commitAtomic(message, files = []) {
111
- // Stage files if provided
112
- if (files.length > 0) {
113
- await this.add(files);
114
- }
115
-
116
- // Validate commit message format (conventional commits)
117
- const conventionalPattern = /^(feat|fix|docs|chore|test|refactor|style|perf)(\([^)]+\))?:\s.+/;
118
- if (!conventionalPattern.test(message)) {
119
- logger.warn('Commit message may not follow conventional commits', { message });
120
- }
121
-
122
- // Create commit
123
- await this.exec(['commit', '-m', message]);
124
-
125
- // Get commit hash
126
- const { stdout } = await this.exec(['rev-parse', '--short', 'HEAD']);
127
-
128
- logger.info('Commit created', { hash: stdout, message });
129
-
130
- return stdout;
131
- }
132
-
133
- /**
134
- * Create new branch
135
- */
136
- async createBranch(name, from = 'HEAD') {
137
- await this.exec(['checkout', '-b', name, from]);
138
- logger.info('Branch created', { name, from });
139
- return name;
140
- }
141
-
142
- /**
143
- * Check if branch exists
144
- */
145
- async branchExists(branchName) {
146
- try {
147
- await this.exec(['rev-parse', '--verify', branchName]);
148
- return true;
149
- } catch (err) {
150
- return false;
151
- }
152
- }
153
-
154
- /**
155
- * List branches matching pattern
156
- */
157
- async listBranches(pattern = '*') {
158
- const { stdout } = await this.exec(['branch', '--list', pattern]);
159
- return stdout.split('\n')
160
- .map(b => b.trim().replace(/^\*\s*/, '').replace(/^\+\s*/, ''))
161
- .filter(b => b);
162
- }
163
-
164
- /**
165
- * Delete branch
166
- */
167
- async deleteBranch(branchName, force = false) {
168
- const exists = await this.branchExists(branchName);
169
- if (!exists) {
170
- throw new BranchNotFoundError(branchName);
171
- }
172
- const args = force ? ['branch', '-D', branchName] : ['branch', '-d', branchName];
173
- await this.exec(args);
174
- logger.info('Branch deleted', { branch: branchName, force });
175
- }
176
-
177
- /**
178
- * Get branch point (merge base with HEAD)
179
- */
180
- async getBranchPoint(branchName) {
181
- const { stdout } = await this.exec(['merge-base', 'HEAD', branchName]);
182
- return stdout;
183
- }
184
-
185
- /**
186
- * Check if merge would have conflicts
187
- */
188
- async hasConflicts(sourceBranch, targetBranch) {
189
- try {
190
- await this.exec(['merge-tree', targetBranch, sourceBranch]);
191
- return false;
192
- } catch (err) {
193
- if (err.stdout?.includes('conflict')) {
194
- return true;
195
- }
196
- return false;
197
- }
198
- }
199
-
200
- /**
201
- * Merge with strategy (merge, squash, rebase)
202
- */
203
- async mergeWithStrategy(source, target, strategy = 'merge') {
204
- const currentBranch = await this.getCurrentBranch();
205
-
206
- try {
207
- await this.checkout(target);
208
-
209
- if (strategy === 'squash') {
210
- await this.exec(['merge', '--squash', source]);
211
- await this.exec(['commit', '-m', `Merge '${source}' into '${target}'`]);
212
- } else if (strategy === 'rebase') {
213
- await this.exec(['rebase', source]);
214
- } else {
215
- await this.exec(['merge', source, '--no-edit']);
216
- }
217
-
218
- logger.info('Merge completed', { source, target, strategy });
219
- return { success: true, strategy };
220
- } catch (err) {
221
- if (err.message?.includes('conflict')) {
222
- throw new MergeConflictError(source, target);
223
- }
224
- throw err;
225
- } finally {
226
- if (currentBranch !== target) {
227
- await this.checkout(currentBranch);
228
- }
229
- }
230
- }
231
-
232
- /**
233
- * Squash merge with custom commit message
234
- */
235
- async squashMerge(source, target, commitMessage) {
236
- await this.checkout(target);
237
- await this.exec(['merge', '--squash', source]);
238
- await this.exec(['commit', '-m', commitMessage]);
239
- logger.info('Squash merge completed', { source, target, message: commitMessage });
240
- }
241
-
242
- /**
243
- * Abort merge
244
- */
245
- async abortMerge() {
246
- await this.exec(['merge', '--abort']);
247
- logger.info('Merge aborted');
248
- }
249
-
250
- /**
251
- * Revert commit
252
- */
253
- async revertCommit(commitHash) {
254
- await this.exec(['revert', commitHash, '--no-edit']);
255
- logger.info('Commit reverted', { hash: commitHash });
256
- }
257
-
258
- /**
259
- * Switch to branch
260
- */
261
- async checkout(branch) {
262
- await this.exec(['checkout', branch]);
263
- logger.info('Checked out branch', { branch });
264
- }
265
-
266
- /**
267
- * Merge branch
268
- */
269
- async mergeBranch(branch, squash = false) {
270
- const args = squash ? ['merge', '--squash', branch] : ['merge', branch];
271
- await this.exec(args);
272
- logger.info('Branch merged', { branch, squash });
273
- }
274
-
275
- /**
276
- * Create tag
277
- */
278
- async tagRelease(version, message = '') {
279
- const args = ['-a', version, '-m', message || `Release ${version}`];
280
- await this.exec(['tag', ...args]);
281
- logger.info('Tag created', { version });
282
- }
283
-
284
- /**
285
- * Push to remote
286
- */
287
- async push(remote = 'origin', branch = null) {
288
- const args = ['push', remote];
289
- if (branch) args.push(branch);
290
- await this.exec(args);
291
- logger.info('Pushed to remote', { remote, branch });
292
- }
293
-
294
- /**
295
- * Pull from remote
296
- */
297
- async pull(remote = 'origin', branch = null) {
298
- const args = ['pull', remote];
299
- if (branch) args.push(branch);
300
- await this.exec(args);
301
- logger.info('Pulled from remote', { remote, branch });
302
- }
303
-
304
- /**
305
- * Get recent commits
306
- */
307
- async getCommits(count = 5) {
308
- const { stdout } = await this.exec(['log', `-n${count}`, '--oneline']);
309
- return stdout.split('\n');
310
- }
311
-
312
- /**
313
- * Get diff between commits/branches
314
- */
315
- async getDiff(from, to = 'HEAD') {
316
- const { stdout } = await this.exec(['diff', `${from}..${to}`, '--stat']);
317
- return stdout;
318
- }
319
- }
320
-
321
- module.exports = GitUtils;
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * EZ Git Utils — Safe git operations with atomic commits
5
+ *
6
+ * Provides:
7
+ * - Atomic commits with validation
8
+ * - Branch creation and management
9
+ * - Safe git operations using execFile
10
+ * - Error handling with recovery suggestions
11
+ *
12
+ * Usage:
13
+ * const GitUtils = require('./git-utils.cjs');
14
+ * const git = new GitUtils(process.cwd());
15
+ * await git.commitAtomic('feat: add feature', ['file1.js']);
16
+ */
17
+
18
+ const { execFile } = require('child_process');
19
+ const { promisify } = require('util');
20
+ const execFileAsync = promisify(execFile);
21
+ const Logger = require('./logger.cjs');
22
+ const logger = new Logger();
23
+ const { BranchExistsError, BranchNotFoundError } = require('./git-errors.cjs');
24
+ const { MergeConflictError } = require('./git-errors.cjs');
25
+
26
+ class GitUtils {
27
+ constructor(cwd) {
28
+ this.cwd = cwd || process.cwd();
29
+ }
30
+
31
+ /**
32
+ * Execute git command safely
33
+ */
34
+ async exec(args, options = {}) {
35
+ const { timeout = 30000 } = options;
36
+
37
+ try {
38
+ const { stdout, stderr } = await execFileAsync('git', args, {
39
+ cwd: this.cwd,
40
+ encoding: 'utf-8',
41
+ timeout,
42
+ maxBuffer: 10 * 1024 * 1024
43
+ });
44
+
45
+ logger.debug('Git command executed', { args, stdout_length: stdout?.length });
46
+
47
+ return { stdout: stdout?.trim(), stderr: stderr?.trim() };
48
+ } catch (err) {
49
+ logger.error('Git command failed', { args, error: err.message });
50
+ throw err;
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Check if directory is a git repo
56
+ */
57
+ async isGitRepo() {
58
+ try {
59
+ await this.exec(['rev-parse', '--git-dir']);
60
+ return true;
61
+ } catch {
62
+ return false;
63
+ }
64
+ }
65
+
66
+ /**
67
+ * Get current branch name
68
+ */
69
+ async getCurrentBranch() {
70
+ const { stdout } = await this.exec(['rev-parse', '--abbrev-ref', 'HEAD']);
71
+ return stdout;
72
+ }
73
+
74
+ /**
75
+ * Get git status (porcelain format)
76
+ */
77
+ async getStatus() {
78
+ const { stdout } = await this.exec(['status', '--porcelain']);
79
+ return stdout.split('\n').filter(line => line.trim());
80
+ }
81
+
82
+ /**
83
+ * Check if there are uncommitted changes
84
+ */
85
+ async hasChanges() {
86
+ const status = await this.getStatus();
87
+ return status.length > 0;
88
+ }
89
+
90
+ /**
91
+ * Stage files for commit
92
+ */
93
+ async add(files) {
94
+ if (!Array.isArray(files)) files = [files];
95
+ await this.exec(['add', ...files]);
96
+ logger.info('Files staged', { files });
97
+ }
98
+
99
+ /**
100
+ * Add all changes
101
+ */
102
+ async addAll() {
103
+ await this.exec(['add', '-A']);
104
+ logger.info('All files staged');
105
+ }
106
+
107
+ /**
108
+ * Create atomic commit with validation
109
+ */
110
+ async commitAtomic(message, files = []) {
111
+ // Stage files if provided
112
+ if (files.length > 0) {
113
+ await this.add(files);
114
+ }
115
+
116
+ // Validate commit message format (conventional commits)
117
+ const conventionalPattern = /^(feat|fix|docs|chore|test|refactor|style|perf)(\([^)]+\))?:\s.+/;
118
+ if (!conventionalPattern.test(message)) {
119
+ logger.warn('Commit message may not follow conventional commits', { message });
120
+ }
121
+
122
+ // Create commit
123
+ await this.exec(['commit', '-m', message]);
124
+
125
+ // Get commit hash
126
+ const { stdout } = await this.exec(['rev-parse', '--short', 'HEAD']);
127
+
128
+ logger.info('Commit created', { hash: stdout, message });
129
+
130
+ return stdout;
131
+ }
132
+
133
+ /**
134
+ * Create new branch
135
+ */
136
+ async createBranch(name, from = 'HEAD') {
137
+ await this.exec(['checkout', '-b', name, from]);
138
+ logger.info('Branch created', { name, from });
139
+ return name;
140
+ }
141
+
142
+ /**
143
+ * Check if branch exists
144
+ */
145
+ async branchExists(branchName) {
146
+ try {
147
+ await this.exec(['rev-parse', '--verify', branchName]);
148
+ return true;
149
+ } catch (err) {
150
+ return false;
151
+ }
152
+ }
153
+
154
+ /**
155
+ * List branches matching pattern
156
+ */
157
+ async listBranches(pattern = '*') {
158
+ const { stdout } = await this.exec(['branch', '--list', pattern]);
159
+ return stdout.split('\n')
160
+ .map(b => b.trim().replace(/^\*\s*/, '').replace(/^\+\s*/, ''))
161
+ .filter(b => b);
162
+ }
163
+
164
+ /**
165
+ * Delete branch
166
+ */
167
+ async deleteBranch(branchName, force = false) {
168
+ const exists = await this.branchExists(branchName);
169
+ if (!exists) {
170
+ throw new BranchNotFoundError(branchName);
171
+ }
172
+ const args = force ? ['branch', '-D', branchName] : ['branch', '-d', branchName];
173
+ await this.exec(args);
174
+ logger.info('Branch deleted', { branch: branchName, force });
175
+ }
176
+
177
+ /**
178
+ * Get branch point (merge base with HEAD)
179
+ */
180
+ async getBranchPoint(branchName) {
181
+ const { stdout } = await this.exec(['merge-base', 'HEAD', branchName]);
182
+ return stdout;
183
+ }
184
+
185
+ /**
186
+ * Check if merge would have conflicts
187
+ */
188
+ async hasConflicts(sourceBranch, targetBranch) {
189
+ try {
190
+ await this.exec(['merge-tree', targetBranch, sourceBranch]);
191
+ return false;
192
+ } catch (err) {
193
+ if (err.stdout?.includes('conflict')) {
194
+ return true;
195
+ }
196
+ return false;
197
+ }
198
+ }
199
+
200
+ /**
201
+ * Merge with strategy (merge, squash, rebase)
202
+ */
203
+ async mergeWithStrategy(source, target, strategy = 'merge') {
204
+ const currentBranch = await this.getCurrentBranch();
205
+
206
+ try {
207
+ await this.checkout(target);
208
+
209
+ if (strategy === 'squash') {
210
+ await this.exec(['merge', '--squash', source]);
211
+ await this.exec(['commit', '-m', `Merge '${source}' into '${target}'`]);
212
+ } else if (strategy === 'rebase') {
213
+ await this.exec(['rebase', source]);
214
+ } else {
215
+ await this.exec(['merge', source, '--no-edit']);
216
+ }
217
+
218
+ logger.info('Merge completed', { source, target, strategy });
219
+ return { success: true, strategy };
220
+ } catch (err) {
221
+ if (err.message?.includes('conflict')) {
222
+ throw new MergeConflictError(source, target);
223
+ }
224
+ throw err;
225
+ } finally {
226
+ if (currentBranch !== target) {
227
+ await this.checkout(currentBranch);
228
+ }
229
+ }
230
+ }
231
+
232
+ /**
233
+ * Squash merge with custom commit message
234
+ */
235
+ async squashMerge(source, target, commitMessage) {
236
+ await this.checkout(target);
237
+ await this.exec(['merge', '--squash', source]);
238
+ await this.exec(['commit', '-m', commitMessage]);
239
+ logger.info('Squash merge completed', { source, target, message: commitMessage });
240
+ }
241
+
242
+ /**
243
+ * Abort merge
244
+ */
245
+ async abortMerge() {
246
+ await this.exec(['merge', '--abort']);
247
+ logger.info('Merge aborted');
248
+ }
249
+
250
+ /**
251
+ * Revert commit
252
+ */
253
+ async revertCommit(commitHash) {
254
+ await this.exec(['revert', commitHash, '--no-edit']);
255
+ logger.info('Commit reverted', { hash: commitHash });
256
+ }
257
+
258
+ /**
259
+ * Switch to branch
260
+ */
261
+ async checkout(branch) {
262
+ await this.exec(['checkout', branch]);
263
+ logger.info('Checked out branch', { branch });
264
+ }
265
+
266
+ /**
267
+ * Merge branch
268
+ */
269
+ async mergeBranch(branch, squash = false) {
270
+ const args = squash ? ['merge', '--squash', branch] : ['merge', branch];
271
+ await this.exec(args);
272
+ logger.info('Branch merged', { branch, squash });
273
+ }
274
+
275
+ /**
276
+ * Create tag
277
+ */
278
+ async tagRelease(version, message = '') {
279
+ const args = ['-a', version, '-m', message || `Release ${version}`];
280
+ await this.exec(['tag', ...args]);
281
+ logger.info('Tag created', { version });
282
+ }
283
+
284
+ /**
285
+ * Push to remote
286
+ */
287
+ async push(remote = 'origin', branch = null) {
288
+ const args = ['push', remote];
289
+ if (branch) args.push(branch);
290
+ await this.exec(args);
291
+ logger.info('Pushed to remote', { remote, branch });
292
+ }
293
+
294
+ /**
295
+ * Pull from remote
296
+ */
297
+ async pull(remote = 'origin', branch = null) {
298
+ const args = ['pull', remote];
299
+ if (branch) args.push(branch);
300
+ await this.exec(args);
301
+ logger.info('Pulled from remote', { remote, branch });
302
+ }
303
+
304
+ /**
305
+ * Get recent commits
306
+ */
307
+ async getCommits(count = 5) {
308
+ const { stdout } = await this.exec(['log', `-n${count}`, '--oneline']);
309
+ return stdout.split('\n');
310
+ }
311
+
312
+ /**
313
+ * Get diff between commits/branches
314
+ */
315
+ async getDiff(from, to = 'HEAD') {
316
+ const { stdout } = await this.exec(['diff', `${from}..${to}`, '--stat']);
317
+ return stdout;
318
+ }
319
+ }
320
+
321
+ module.exports = GitUtils;