@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,241 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * EZ Model Provider — Unified API for multiple AI providers
5
+ *
6
+ * Supports: Anthropic, Moonshot (Kimi), Alibaba (Qwen), OpenAI
7
+ */
8
+
9
+ const https = require('https');
10
+ const { URL } = require('url');
11
+ const Logger = require('./logger.cjs');
12
+ const logger = new Logger();
13
+
14
+ class ModelProvider {
15
+ /**
16
+ * Create model provider
17
+ * @param {Object} config - Configuration
18
+ */
19
+ constructor(config) {
20
+ this.provider = config.provider || 'anthropic';
21
+ this.model = config.model || 'sonnet';
22
+ this.apiKey = config.apiKey || process.env[`${this.provider.toUpperCase()}_API_KEY`];
23
+
24
+ if (!this.apiKey && this.provider !== 'anthropic') {
25
+ logger.warn('API key not configured', { provider: this.provider });
26
+ }
27
+ }
28
+
29
+ /**
30
+ * Helper for HTTP requests
31
+ */
32
+ _httpRequest(options, data) {
33
+ return new Promise((resolve, reject) => {
34
+ const req = https.request(options, (res) => {
35
+ let body = '';
36
+ res.on('data', (chunk) => body += chunk);
37
+ res.on('end', () => {
38
+ if (res.statusCode >= 200 && res.statusCode < 300) {
39
+ try {
40
+ resolve(JSON.parse(body));
41
+ } catch (e) {
42
+ resolve(body);
43
+ }
44
+ } else {
45
+ reject(new Error(`HTTP ${res.statusCode}: ${body}`));
46
+ }
47
+ });
48
+ });
49
+ req.on('error', reject);
50
+ if (data) req.write(JSON.stringify(data));
51
+ req.end();
52
+ });
53
+ }
54
+
55
+ /**
56
+ * Send chat message
57
+ * @param {Object[]} messages - Chat messages
58
+ * @param {Object} options - Chat options
59
+ * @returns {Promise<Object>} - Response
60
+ */
61
+ async chat(messages, options = {}) {
62
+ logger.info('Chat request', {
63
+ provider: this.provider,
64
+ model: this.model,
65
+ messageCount: messages.length
66
+ });
67
+
68
+ switch (this.provider) {
69
+ case 'anthropic':
70
+ return this._chatAnthropic(messages, options);
71
+ case 'moonshot':
72
+ return this._chatMoonshot(messages, options);
73
+ case 'alibaba':
74
+ case 'qwen':
75
+ return this._chatQwen(messages, options);
76
+ case 'openai':
77
+ return this._chatOpenAI(messages, options);
78
+ default:
79
+ throw new Error(`Unsupported provider: ${this.provider}`);
80
+ }
81
+ }
82
+
83
+ /**
84
+ * Anthropic Claude API
85
+ */
86
+ async _chatAnthropic(messages, options) {
87
+ // Anthropic usually requires their SDK or complex headers
88
+ logger.debug('Anthropic chat', { model: this.model });
89
+ return {
90
+ content: '[Anthropic response placeholder - requires SDK]',
91
+ provider: 'anthropic',
92
+ model: this.model
93
+ };
94
+ }
95
+
96
+ /**
97
+ * Moonshot (Kimi) API
98
+ */
99
+ async _chatMoonshot(messages, options) {
100
+ const modelName = this.model === 'sonnet' ? 'moonshot-v1-8k' : this.model;
101
+ const data = {
102
+ model: modelName,
103
+ messages: messages,
104
+ temperature: options.temperature || 0.3
105
+ };
106
+
107
+ const reqOptions = {
108
+ hostname: 'api.moonshot.cn',
109
+ path: '/v1/chat/completions',
110
+ method: 'POST',
111
+ headers: {
112
+ 'Content-Type': 'application/json',
113
+ 'Authorization': `Bearer ${this.apiKey}`
114
+ }
115
+ };
116
+
117
+ try {
118
+ const response = await this._httpRequest(reqOptions, data);
119
+ return {
120
+ content: response.choices[0].message.content,
121
+ provider: 'moonshot',
122
+ model: modelName
123
+ };
124
+ } catch (error) {
125
+ logger.error('Moonshot API error', { error: error.message });
126
+ throw error;
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Alibaba Qwen API (DashScope)
132
+ */
133
+ async _chatQwen(messages, options) {
134
+ // Map generic model names to Qwen specific ones
135
+ let modelName = this.model;
136
+ if (modelName === 'sonnet' || modelName === 'gpt-4') modelName = 'qwen-max';
137
+ if (modelName === 'haiku' || modelName === 'gpt-3.5-turbo') modelName = 'qwen-plus';
138
+
139
+ const data = {
140
+ model: modelName,
141
+ input: {
142
+ messages: messages
143
+ },
144
+ parameters: {
145
+ result_format: 'message',
146
+ temperature: options.temperature || 0.3
147
+ }
148
+ };
149
+
150
+ const reqOptions = {
151
+ hostname: 'dashscope.aliyuncs.com',
152
+ path: '/api/v1/services/aigc/text-generation/generation',
153
+ method: 'POST',
154
+ headers: {
155
+ 'Content-Type': 'application/json',
156
+ 'Authorization': `Bearer ${this.apiKey}`
157
+ }
158
+ };
159
+
160
+ try {
161
+ const response = await this._httpRequest(reqOptions, data);
162
+ return {
163
+ content: response.output.choices[0].message.content,
164
+ provider: 'alibaba',
165
+ model: modelName
166
+ };
167
+ } catch (error) {
168
+ logger.error('Qwen API error', { error: error.message });
169
+ throw error;
170
+ }
171
+ }
172
+
173
+ /**
174
+ * OpenAI API
175
+ */
176
+ async _chatOpenAI(messages, options) {
177
+ const modelName = this.model === 'sonnet' ? 'gpt-4-turbo' : this.model;
178
+ const data = {
179
+ model: modelName,
180
+ messages: messages,
181
+ temperature: options.temperature || 0.3
182
+ };
183
+
184
+ const reqOptions = {
185
+ hostname: 'api.openai.com',
186
+ path: '/v1/chat/completions',
187
+ method: 'POST',
188
+ headers: {
189
+ 'Content-Type': 'application/json',
190
+ 'Authorization': `Bearer ${this.apiKey}`
191
+ }
192
+ };
193
+
194
+ try {
195
+ const response = await this._httpRequest(reqOptions, data);
196
+ return {
197
+ content: response.choices[0].message.content,
198
+ provider: 'openai',
199
+ model: modelName
200
+ };
201
+ } catch (error) {
202
+ logger.error('OpenAI API error', { error: error.message });
203
+ throw error;
204
+ }
205
+ }
206
+
207
+ /**
208
+ * Count tokens (approximate)
209
+ * @param {string} text - Text to count
210
+ * @returns {number} - Approximate token count
211
+ */
212
+ countTokens(text) {
213
+ return Math.ceil(text.length / 4);
214
+ }
215
+
216
+ /**
217
+ * Get provider info
218
+ * @returns {Object} - Provider information
219
+ */
220
+ getInfo() {
221
+ return {
222
+ provider: this.provider,
223
+ model: this.model,
224
+ hasApiKey: !!this.apiKey
225
+ };
226
+ }
227
+ }
228
+
229
+ /**
230
+ * Create provider from config
231
+ * @param {Object} config - Provider config
232
+ * @returns {ModelProvider} - Model provider instance
233
+ */
234
+ function createProvider(config) {
235
+ return new ModelProvider(config);
236
+ }
237
+
238
+ module.exports = {
239
+ ModelProvider,
240
+ createProvider
241
+ };
@@ -0,0 +1,203 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Package Manager Detector — Auto-detect available package managers
5
+ *
6
+ * Detects package managers (npm, yarn, pnpm) using a multi-layer strategy:
7
+ * 1. Configuration override (.planning/config.json)
8
+ * 2. Lockfile presence (pnpm-lock.yaml, yarn.lock, package-lock.json)
9
+ * 3. System availability (which pnpm/yarn/npm)
10
+ * 4. Fallback to npm (always available with Node)
11
+ *
12
+ * Usage:
13
+ * const PackageManagerDetector = require('./package-manager-detector.cjs');
14
+ * const detector = new PackageManagerDetector(cwd);
15
+ * const result = detector.detect();
16
+ * // Returns: { manager, source, confidence, lockfilePath? }
17
+ */
18
+
19
+ const { execFileSync } = require('child_process');
20
+ const fs = require('fs');
21
+ const path = require('path');
22
+ const Logger = require('./logger.cjs');
23
+
24
+ /**
25
+ * Package Manager Detector class
26
+ * Detects available package managers with priority-based strategy
27
+ */
28
+ class PackageManagerDetector {
29
+ /**
30
+ * Create a PackageManagerDetector instance
31
+ * @param {string} cwd - Working directory (default: process.cwd())
32
+ */
33
+ constructor(cwd = process.cwd()) {
34
+ this.cwd = cwd;
35
+ this.logger = new Logger();
36
+ this.config = this.loadConfig();
37
+ }
38
+
39
+ /**
40
+ * Detect package manager with priority-based strategy
41
+ * @returns {Object} Detection result { manager, source, confidence, lockfilePath? }
42
+ */
43
+ detect() {
44
+ this.logger.info('Starting package manager detection', { cwd: this.cwd });
45
+
46
+ // Layer 1: Configuration override
47
+ const configManager = this._detectFromConfig();
48
+ if (configManager) {
49
+ this.logger.info('Package manager detected from config', { manager: configManager });
50
+ return {
51
+ manager: configManager,
52
+ source: 'config',
53
+ confidence: 'high',
54
+ configPath: '.planning/config.json'
55
+ };
56
+ }
57
+
58
+ // Layer 2: Lockfile detection
59
+ const lockfileManager = this.detectFromLockfile();
60
+ if (lockfileManager) {
61
+ const lockfilePath = this.getLockfilePath(lockfileManager);
62
+ this.logger.info('Package manager detected from lockfile', {
63
+ manager: lockfileManager,
64
+ lockfilePath
65
+ });
66
+ return {
67
+ manager: lockfileManager,
68
+ source: 'lockfile',
69
+ confidence: 'high',
70
+ lockfilePath
71
+ };
72
+ }
73
+
74
+ // Layer 3: System availability
75
+ const availableManagers = this.getAvailableManagers();
76
+ if (availableManagers.length > 0) {
77
+ // Prefer pnpm > yarn > npm (performance order)
78
+ const preferred = availableManagers.find(m => m === 'pnpm') ||
79
+ availableManagers.find(m => m === 'yarn') ||
80
+ availableManagers[0];
81
+ this.logger.info('Package manager detected from system', {
82
+ manager: preferred,
83
+ available: availableManagers
84
+ });
85
+ return {
86
+ manager: preferred,
87
+ source: 'system',
88
+ confidence: 'medium',
89
+ available: availableManagers
90
+ };
91
+ }
92
+
93
+ // Layer 4: Fallback to npm
94
+ this.logger.warn('No package manager detected, falling back to npm');
95
+ return {
96
+ manager: 'npm',
97
+ source: 'fallback',
98
+ confidence: 'low',
99
+ reason: 'No other package manager detected'
100
+ };
101
+ }
102
+
103
+ /**
104
+ * Detect package manager from configuration
105
+ * @private
106
+ * @returns {string|null} Package manager name or null
107
+ */
108
+ _detectFromConfig() {
109
+ const configManager = this.config?.packageManager?.default;
110
+ if (configManager && this.isPackageManagerInstalled(configManager)) {
111
+ return configManager;
112
+ }
113
+ return null;
114
+ }
115
+
116
+ /**
117
+ * Detect package manager from lockfile presence
118
+ * @returns {string|null} Package manager name or null
119
+ */
120
+ detectFromLockfile() {
121
+ const lockfiles = {
122
+ 'pnpm-lock.yaml': 'pnpm',
123
+ 'yarn.lock': 'yarn',
124
+ 'package-lock.json': 'npm'
125
+ };
126
+
127
+ for (const [lockfile, manager] of Object.entries(lockfiles)) {
128
+ const lockfilePath = path.join(this.cwd, lockfile);
129
+ if (fs.existsSync(lockfilePath)) {
130
+ return manager;
131
+ }
132
+ }
133
+ return null;
134
+ }
135
+
136
+ /**
137
+ * Get all available package managers installed on the system
138
+ * @returns {string[]} Array of available manager names
139
+ */
140
+ getAvailableManagers() {
141
+ const managers = ['pnpm', 'yarn', 'npm'];
142
+ const available = [];
143
+
144
+ for (const manager of managers) {
145
+ if (this.isPackageManagerInstalled(manager)) {
146
+ available.push(manager);
147
+ }
148
+ }
149
+
150
+ return available;
151
+ }
152
+
153
+ /**
154
+ * Check if a specific package manager is installed
155
+ * @param {string} manager - Package manager name
156
+ * @returns {boolean} True if installed
157
+ */
158
+ isPackageManagerInstalled(manager) {
159
+ try {
160
+ execFileSync(manager, ['--version'], {
161
+ stdio: 'pipe',
162
+ shell: false
163
+ });
164
+ return true;
165
+ } catch (err) {
166
+ this.logger.debug('Package manager not installed', { manager, error: err.message });
167
+ return false;
168
+ }
169
+ }
170
+
171
+ /**
172
+ * Get the lockfile path for a specific package manager
173
+ * @param {string} manager - Package manager name
174
+ * @returns {string} Full path to lockfile
175
+ */
176
+ getLockfilePath(manager) {
177
+ const lockfiles = {
178
+ 'pnpm': 'pnpm-lock.yaml',
179
+ 'yarn': 'yarn.lock',
180
+ 'npm': 'package-lock.json'
181
+ };
182
+ return path.join(this.cwd, lockfiles[manager] || 'package-lock.json');
183
+ }
184
+
185
+ /**
186
+ * Load configuration from .planning/config.json
187
+ * @returns {Object} Configuration object
188
+ */
189
+ loadConfig() {
190
+ const configPath = path.join(this.cwd, '.planning', 'config.json');
191
+ try {
192
+ if (fs.existsSync(configPath)) {
193
+ const content = fs.readFileSync(configPath, 'utf-8');
194
+ return JSON.parse(content);
195
+ }
196
+ } catch (err) {
197
+ this.logger.warn('Failed to load config', { path: configPath, error: err.message });
198
+ }
199
+ return {};
200
+ }
201
+ }
202
+
203
+ module.exports = PackageManagerDetector;