@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,289 @@
1
+ /**
2
+ * Archetype Detector — Project type classification from codebase patterns
3
+ *
4
+ * Provides:
5
+ * - detect(structure, stack, flows): Pattern-based archetype detection
6
+ * - calculateConfidence(archetype, evidence): Confidence scoring
7
+ */
8
+
9
+ const fs = require('fs');
10
+ const path = require('path');
11
+
12
+ class ArchetypeDetector {
13
+ constructor(rootPath) {
14
+ this.rootPath = rootPath;
15
+
16
+ // Archetype patterns for detection
17
+ this.archetypePatterns = {
18
+ dashboard: {
19
+ patterns: ['Chart', 'Metric', 'Dashboard', 'Admin', 'Analytics', 'stats', 'metrics', 'analytics', 'graph', 'widget', 'kpi', 'report'],
20
+ routes: ['/dashboard', '/admin', '/analytics', '/reports', '/metrics'],
21
+ dependencies: ['recharts', 'chart.js', 'd3', 'plotly', 'highcharts', 'apexcharts']
22
+ },
23
+ POS: {
24
+ patterns: ['Product', 'Order', 'Payment', 'Cart', 'Checkout', 'Inventory', 'Store', 'Register', 'Terminal', 'Receipt', 'Cashier'],
25
+ routes: ['/pos', '/checkout', '/register', '/inventory', '/products'],
26
+ dependencies: ['stripe-terminal', 'square', '@stripe/stripe-js']
27
+ },
28
+ SaaS: {
29
+ patterns: ['Subscription', 'Tenant', 'Plan', 'Billing', 'User', 'Account', 'Recurring', 'Invoice', 'Pricing'],
30
+ routes: ['/subscription', '/billing', '/pricing', '/plans', '/account', '/settings'],
31
+ dependencies: ['stripe', '@stripe/stripe-js', 'paddle', 'lemonsqueezy']
32
+ },
33
+ ecommerce: {
34
+ patterns: ['Cart', 'Checkout', 'Product', 'Order', 'Shipping', 'Payment', 'Catalog', 'Wishlist', 'Review'],
35
+ routes: ['/products', '/cart', '/checkout', '/orders', '/wishlist', '/reviews'],
36
+ dependencies: ['@stripe/stripe-js', 'stripe', 'paypal', 'snipcart']
37
+ },
38
+ LMS: {
39
+ patterns: ['Course', 'Lesson', 'Student', 'Teacher', 'Quiz', 'Enrollment', 'Curriculum', 'Assignment', 'Grade'],
40
+ routes: ['/courses', '/lessons', '/students', '/teachers', '/quiz', '/assignments'],
41
+ dependencies: ['video.js', 'hls.js', 'plyr']
42
+ },
43
+ booking: {
44
+ patterns: ['Appointment', 'Booking', 'Availability', 'Calendar', 'Reservation', 'Schedule', 'Timeslot'],
45
+ routes: ['/booking', '/appointments', '/calendar', '/schedule', '/availability'],
46
+ dependencies: ['react-big-calendar', 'fullcalendar', 'react-calendar']
47
+ },
48
+ fintech: {
49
+ patterns: ['Transaction', 'Account', 'Payment', 'Balance', 'Compliance', 'KYC', 'AML', 'Ledger', 'Wallet', 'Transfer'],
50
+ routes: ['/accounts', '/transactions', '/transfer', '/wallet', '/ledger', '/compliance'],
51
+ dependencies: ['stripe', 'plaid', 'dwolla', 'unit']
52
+ },
53
+ internalTools: {
54
+ patterns: ['Admin', 'CRUD', 'Form', 'Table', 'Dashboard', 'Report', 'Config', 'Settings', 'Management'],
55
+ routes: ['/admin', '/management', '/config', '/settings', '/users', '/roles'],
56
+ dependencies: ['@tanstack/react-table', 'ag-grid', 'handsontable']
57
+ },
58
+ cms: {
59
+ patterns: ['Article', 'Page', 'Post', 'Media', 'Content', 'Block', 'Editor', 'Publish'],
60
+ routes: ['/articles', '/pages', '/posts', '/media', '/content'],
61
+ dependencies: ['@tiptap', 'slate', 'draft-js', 'quill', 'ckeditor']
62
+ },
63
+ social: {
64
+ patterns: ['Post', 'Comment', 'Feed', 'Follow', 'Like', 'Share', 'Profile', 'Notification', 'Message'],
65
+ routes: ['/feed', '/posts', '/profile', '/notifications', '/messages', '/followers'],
66
+ dependencies: ['socket.io', 'pusher', 'stream-chat']
67
+ }
68
+ };
69
+ }
70
+
71
+ /**
72
+ * Detect project archetype from structure, stack, and flows
73
+ * @param {object} structure - Structure from CodebaseAnalyzer
74
+ * @param {object} stack - Stack from StackDetector
75
+ * @param {object} flows - Flows from BusinessFlowMapper
76
+ * @returns {object} Archetype detection result with name, confidence, evidence
77
+ */
78
+ detect(structure = {}, stack = {}, flows = {}) {
79
+ const scores = {};
80
+ const evidence = {};
81
+
82
+ // Initialize scores for each archetype
83
+ for (const archetype of Object.keys(this.archetypePatterns)) {
84
+ scores[archetype] = 0;
85
+ evidence[archetype] = [];
86
+ }
87
+
88
+ // Score based on file names
89
+ const files = structure.files || [];
90
+ for (const file of files) {
91
+ const fileName = path.basename(file);
92
+ this._scoreByFileName(fileName, scores, evidence);
93
+ }
94
+
95
+ // Score based on directory names
96
+ const directories = structure.directories || [];
97
+ for (const dir of directories) {
98
+ const dirName = path.basename(dir.path);
99
+ this._scoreByDirectoryName(dirName, scores, evidence);
100
+ }
101
+
102
+ // Score based on routes
103
+ const routes = flows.routes || [];
104
+ for (const route of routes) {
105
+ this._scoreByRoute(route.path, scores, evidence);
106
+ }
107
+
108
+ // Score based on dependencies
109
+ const frameworks = stack.frameworks || [];
110
+ const infrastructure = stack.infrastructure || [];
111
+ const allDeps = [...frameworks, ...infrastructure];
112
+ this._scoreByDependencies(allDeps, scores, evidence);
113
+
114
+ // Find the highest scoring archetype
115
+ let bestArchetype = 'internalTools'; // Default
116
+ let bestScore = 0;
117
+
118
+ for (const [archetype, score] of Object.entries(scores)) {
119
+ if (score > bestScore) {
120
+ bestScore = score;
121
+ bestArchetype = archetype;
122
+ }
123
+ }
124
+
125
+ const confidence = this.calculateConfidence(bestArchetype, evidence[bestArchetype]);
126
+
127
+ return {
128
+ archetype: bestArchetype,
129
+ confidence: confidence.score,
130
+ confidenceLevel: confidence.level,
131
+ scores,
132
+ evidence: evidence[bestArchetype],
133
+ allEvidence: evidence
134
+ };
135
+ }
136
+
137
+ /**
138
+ * Calculate confidence score for an archetype
139
+ * @param {string} archetype - Archetype name
140
+ * @param {Array} evidence - Array of evidence items
141
+ * @returns {object} Confidence with score (0-100) and level (High/Medium/Low)
142
+ */
143
+ calculateConfidence(archetype, evidence = []) {
144
+ // Base score: evidence.length * 10
145
+ let score = evidence.length * 10;
146
+
147
+ // Bonus for file matches: +20 per file
148
+ const fileMatches = evidence.filter(e => e.type === 'file').length;
149
+ score += fileMatches * 20;
150
+
151
+ // Bonus for dependency matches: +15 per dependency
152
+ const depMatches = evidence.filter(e => e.type === 'dependency').length;
153
+ score += depMatches * 15;
154
+
155
+ // Bonus for route matches: +10 per route
156
+ const routeMatches = evidence.filter(e => e.type === 'route').length;
157
+ score += routeMatches * 10;
158
+
159
+ // Cap at 100
160
+ score = Math.min(score, 100);
161
+
162
+ // Determine level
163
+ let level;
164
+ if (score >= 80) {
165
+ level = 'High';
166
+ } else if (score >= 60) {
167
+ level = 'Medium';
168
+ } else {
169
+ level = 'Low';
170
+ }
171
+
172
+ return { score, level };
173
+ }
174
+
175
+ /**
176
+ * Score archetype by file name
177
+ * @private
178
+ */
179
+ _scoreByFileName(fileName, scores, evidence) {
180
+ const nameWithoutExt = fileName.replace(/\.[^.]+$/, '');
181
+
182
+ for (const [archetype, config] of Object.entries(this.archetypePatterns)) {
183
+ for (const pattern of config.patterns) {
184
+ if (nameWithoutExt.toLowerCase().includes(pattern.toLowerCase())) {
185
+ scores[archetype] += 1;
186
+ evidence[archetype].push({
187
+ type: 'file',
188
+ value: fileName,
189
+ pattern
190
+ });
191
+ break; // Don't double-count same file
192
+ }
193
+ }
194
+ }
195
+ }
196
+
197
+ /**
198
+ * Score archetype by directory name
199
+ * @private
200
+ */
201
+ _scoreByDirectoryName(dirName, scores, evidence) {
202
+ for (const [archetype, config] of Object.entries(this.archetypePatterns)) {
203
+ for (const pattern of config.patterns) {
204
+ if (dirName.toLowerCase().includes(pattern.toLowerCase())) {
205
+ scores[archetype] += 2; // Directories are stronger signals
206
+ evidence[archetype].push({
207
+ type: 'directory',
208
+ value: dirName,
209
+ pattern
210
+ });
211
+ break;
212
+ }
213
+ }
214
+ }
215
+ }
216
+
217
+ /**
218
+ * Score archetype by route
219
+ * @private
220
+ */
221
+ _scoreByRoute(routePath, scores, evidence) {
222
+ for (const [archetype, config] of Object.entries(this.archetypePatterns)) {
223
+ for (const routePattern of config.routes) {
224
+ if (routePath.toLowerCase().includes(routePattern.toLowerCase())) {
225
+ scores[archetype] += 2;
226
+ evidence[archetype].push({
227
+ type: 'route',
228
+ value: routePath,
229
+ pattern: routePattern
230
+ });
231
+ break;
232
+ }
233
+ }
234
+ }
235
+ }
236
+
237
+ /**
238
+ * Score archetype by dependencies
239
+ * @private
240
+ */
241
+ _scoreByDependencies(dependencies, scores, evidence) {
242
+ for (const [archetype, config] of Object.entries(this.archetypePatterns)) {
243
+ for (const depPattern of config.dependencies) {
244
+ for (const dep of dependencies) {
245
+ if (dep.toLowerCase().includes(depPattern.toLowerCase())) {
246
+ scores[archetype] += 3; // Dependencies are strong signals
247
+ evidence[archetype].push({
248
+ type: 'dependency',
249
+ value: dep,
250
+ pattern: depPattern
251
+ });
252
+ break;
253
+ }
254
+ }
255
+ }
256
+ }
257
+ }
258
+
259
+ /**
260
+ * Get all supported archetypes
261
+ * @returns {Array} Array of archetype names
262
+ */
263
+ getSupportedArchetypes() {
264
+ return Object.keys(this.archetypePatterns);
265
+ }
266
+
267
+ /**
268
+ * Get archetype description
269
+ * @param {string} archetype - Archetype name
270
+ * @returns {string} Description
271
+ */
272
+ getArchetypeDescription(archetype) {
273
+ const descriptions = {
274
+ dashboard: 'Analytics dashboard with charts, metrics, and data visualization',
275
+ POS: 'Point of Sale system for retail transactions and inventory management',
276
+ SaaS: 'Software as a Service with subscription billing and multi-tenant architecture',
277
+ ecommerce: 'E-commerce platform with product catalog, cart, and checkout',
278
+ LMS: 'Learning Management System for courses, lessons, and student tracking',
279
+ booking: 'Booking and appointment scheduling system',
280
+ fintech: 'Financial technology application for transactions and account management',
281
+ internalTools: 'Internal business tools and admin panels',
282
+ cms: 'Content Management System for articles, pages, and media',
283
+ social: 'Social platform with feeds, posts, and user interactions'
284
+ };
285
+ return descriptions[archetype] || 'Unknown project type';
286
+ }
287
+ }
288
+
289
+ module.exports = { ArchetypeDetector };
@@ -0,0 +1,361 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * EZ Assistant Adapters — Unified interface for AI coding assistants
5
+ *
6
+ * Adapters for: Claude Code, OpenCode, Gemini CLI, Codex
7
+ *
8
+ * Usage:
9
+ * const { createAdapter } = require('./assistant-adapter.cjs');
10
+ * const adapter = createAdapter('claude-code');
11
+ * await adapter.spawnAgent('planner', { prompt: '...' });
12
+ */
13
+
14
+ const Logger = require('./logger.cjs');
15
+ const logger = new Logger();
16
+ const CircuitBreaker = require('./circuit-breaker.cjs');
17
+ const ModelTierManager = require('./model-tier-manager.cjs');
18
+ const CostTracker = require('./cost-tracker.cjs');
19
+
20
+ /**
21
+ * Base adapter interface
22
+ */
23
+ class AssistantAdapter {
24
+ constructor(name) {
25
+ if (new.target === AssistantAdapter) {
26
+ throw new Error('AssistantAdapter is abstract - use a concrete subclass');
27
+ }
28
+ this.name = name;
29
+ }
30
+
31
+ /**
32
+ * Spawn a subagent
33
+ * @param {string} type - Agent type
34
+ * @param {Object} options - Agent options
35
+ * @returns {Promise<Object>} - Agent result
36
+ */
37
+ async spawnAgent(type, options) {
38
+ throw new Error('spawnAgent must be implemented');
39
+ }
40
+
41
+ /**
42
+ * Call a tool/function
43
+ * @param {string} tool - Tool name
44
+ * @param {Object} params - Tool parameters
45
+ * @returns {Promise<any>} - Tool result
46
+ */
47
+ async callTool(tool, params) {
48
+ throw new Error('callTool must be implemented');
49
+ }
50
+
51
+ /**
52
+ * Select model for task
53
+ * @param {string} taskType - Task type (planning, execution, verification)
54
+ * @returns {string} - Model name
55
+ */
56
+ selectModel(taskType) {
57
+ throw new Error('selectModel must be implemented');
58
+ }
59
+
60
+ /**
61
+ * Get adapter info
62
+ * @returns {Object} - Adapter information
63
+ */
64
+ getInfo() {
65
+ return {
66
+ name: this.name,
67
+ type: this.constructor.name
68
+ };
69
+ }
70
+ }
71
+
72
+ /**
73
+ * Claude Code adapter
74
+ */
75
+ class ClaudeCodeAdapter extends AssistantAdapter {
76
+ constructor() {
77
+ super('claude-code');
78
+ }
79
+
80
+ async spawnAgent(type, options) {
81
+ logger.info('Claude Code: spawning agent', { type });
82
+ // Would use Claude Code's Task tool in production
83
+ return { type, status: 'completed', result: '[Claude Code agent result]' };
84
+ }
85
+
86
+ async callTool(tool, params) {
87
+ logger.info('Claude Code: calling tool', { tool });
88
+ // Would use Claude Code's tool system
89
+ return { tool, status: 'success' };
90
+ }
91
+
92
+ selectModel(taskType) {
93
+ const models = {
94
+ planning: 'claude-3-opus',
95
+ execution: 'claude-3-sonnet',
96
+ verification: 'claude-3-sonnet'
97
+ };
98
+ return models[taskType] || models.execution;
99
+ }
100
+ }
101
+
102
+ /**
103
+ * OpenCode adapter
104
+ */
105
+ class OpenCodeAdapter extends AssistantAdapter {
106
+ constructor() {
107
+ super('opencode');
108
+ }
109
+
110
+ async spawnAgent(type, options) {
111
+ logger.info('OpenCode: spawning agent', { type });
112
+ return { type, status: 'completed', result: '[OpenCode agent result]' };
113
+ }
114
+
115
+ async callTool(tool, params) {
116
+ logger.info('OpenCode: calling tool', { tool });
117
+ return { tool, status: 'success' };
118
+ }
119
+
120
+ selectModel(taskType) {
121
+ return 'gpt-4-turbo';
122
+ }
123
+ }
124
+
125
+ /**
126
+ * Gemini CLI adapter
127
+ */
128
+ class GeminiAdapter extends AssistantAdapter {
129
+ constructor() {
130
+ super('gemini');
131
+ }
132
+
133
+ async spawnAgent(type, options) {
134
+ logger.info('Gemini: spawning agent', { type });
135
+ return { type, status: 'completed', result: '[Gemini agent result]' };
136
+ }
137
+
138
+ async callTool(tool, params) {
139
+ logger.info('Gemini: calling tool', { tool });
140
+ return { tool, status: 'success' };
141
+ }
142
+
143
+ selectModel(taskType) {
144
+ return 'gemini-pro';
145
+ }
146
+ }
147
+
148
+ /**
149
+ * Codex adapter
150
+ */
151
+ class CodexAdapter extends AssistantAdapter {
152
+ constructor() {
153
+ super('codex');
154
+ }
155
+
156
+ async spawnAgent(type, options) {
157
+ logger.info('Codex: spawning agent', { type });
158
+ return { type, status: 'completed', result: '[Codex agent result]' };
159
+ }
160
+
161
+ async callTool(tool, params) {
162
+ logger.info('Codex: calling tool', { tool });
163
+ return { tool, status: 'success' };
164
+ }
165
+
166
+ selectModel(taskType) {
167
+ return 'codex-latest';
168
+ }
169
+ }
170
+
171
+ /**
172
+ * Qwen Code adapter
173
+ */
174
+ class QwenAdapter extends AssistantAdapter {
175
+ constructor() {
176
+ super('qwen');
177
+ }
178
+
179
+ async spawnAgent(type, options) {
180
+ logger.info('Qwen Code: spawning agent', { type });
181
+ // Qwen Code uses its own agent system
182
+ return { type, status: 'completed', result: '[Qwen Code agent result]' };
183
+ }
184
+
185
+ async callTool(tool, params) {
186
+ logger.info('Qwen Code: calling tool', { tool });
187
+ return { tool, status: 'success' };
188
+ }
189
+
190
+ selectModel(taskType) {
191
+ const models = {
192
+ planning: 'qwen-max',
193
+ execution: 'qwen-plus',
194
+ verification: 'qwen-plus'
195
+ };
196
+ return models[taskType] || models.execution;
197
+ }
198
+ }
199
+
200
+ /**
201
+ * Kimi Code adapter
202
+ */
203
+ class KimiAdapter extends AssistantAdapter {
204
+ constructor() {
205
+ super('kimi');
206
+ }
207
+
208
+ async spawnAgent(type, options) {
209
+ logger.info('Kimi Code: spawning agent', { type });
210
+ return { type, status: 'completed', result: '[Kimi Code agent result]' };
211
+ }
212
+
213
+ async callTool(tool, params) {
214
+ logger.info('Kimi Code: calling tool', { tool });
215
+ return { tool, status: 'success' };
216
+ }
217
+
218
+ selectModel(taskType) {
219
+ const models = {
220
+ planning: 'moonshot-v1-32k',
221
+ execution: 'moonshot-v1-8k',
222
+ verification: 'moonshot-v1-8k'
223
+ };
224
+ return models[taskType] || models.execution;
225
+ }
226
+ }
227
+
228
+ /**
229
+ * Circuit Breaker Adapter Wrapper — Wraps any adapter with circuit breaker protection
230
+ */
231
+ class CircuitBreakerAdapter extends AssistantAdapter {
232
+ /**
233
+ * Create circuit breaker wrapped adapter
234
+ * @param {AssistantAdapter} delegate - The actual adapter to wrap
235
+ * @param {CircuitBreaker} breaker - Circuit breaker instance
236
+ */
237
+ constructor(delegate, breaker) {
238
+ super(delegate.name);
239
+ this.delegate = delegate;
240
+ this.breaker = breaker;
241
+ }
242
+
243
+ /**
244
+ * Spawn agent with circuit breaker protection
245
+ * @param {string} type - Agent type
246
+ * @param {Object} options - Agent options
247
+ * @returns {Promise<Object>} - Agent result
248
+ */
249
+ async spawnAgent(type, options) {
250
+ return this.breaker.execute(() => this.delegate.spawnAgent(type, options));
251
+ }
252
+
253
+ /**
254
+ * Call tool with circuit breaker protection
255
+ * @param {string} tool - Tool name
256
+ * @param {Object} params - Tool parameters
257
+ * @returns {Promise<any>} - Tool result
258
+ */
259
+ async callTool(tool, params) {
260
+ return this.breaker.execute(() => this.delegate.callTool(tool, params));
261
+ }
262
+
263
+ /**
264
+ * Select model with budget-aware downgrade
265
+ * @param {string} taskType - Task type
266
+ * @returns {string} - Selected model
267
+ */
268
+ selectModel(taskType) {
269
+ const costTracker = new CostTracker();
270
+ const budgetStatus = costTracker.checkBudget();
271
+ const percentUsed = budgetStatus.percentUsed || 0;
272
+
273
+ const modelManager = new ModelTierManager('claude');
274
+ const model = modelManager.selectModel(taskType, percentUsed);
275
+
276
+ // Log downgrade if not using premium model
277
+ if (percentUsed >= 75) {
278
+ const originalModel = this.delegate.selectModel(taskType);
279
+ if (originalModel !== model) {
280
+ modelManager.logDowngrade(originalModel, model, `budget pressure: ${percentUsed.toFixed(1)}%`);
281
+ }
282
+ }
283
+
284
+ return model;
285
+ }
286
+
287
+ /**
288
+ * Get adapter info
289
+ * @returns {Object} - Adapter information
290
+ */
291
+ getInfo() {
292
+ return {
293
+ ...this.delegate.getInfo(),
294
+ circuitBreaker: {
295
+ enabled: true,
296
+ state: this.breaker.getState()
297
+ }
298
+ };
299
+ }
300
+ }
301
+
302
+ /**
303
+ * Factory function to create adapter
304
+ * @param {string} type - Adapter type
305
+ * @param {Object} [options] - Adapter options
306
+ * @param {boolean} [options.circuitBreaker=true] - Enable circuit breaker
307
+ * @param {string} [options.cwd] - Working directory
308
+ * @returns {AssistantAdapter} - Adapter instance
309
+ */
310
+ function createAdapter(type, options = {}) {
311
+ const adapters = {
312
+ 'claude-code': ClaudeCodeAdapter,
313
+ 'opencode': OpenCodeAdapter,
314
+ 'gemini': GeminiAdapter,
315
+ 'codex': CodexAdapter,
316
+ 'qwen': QwenAdapter,
317
+ 'kimi': KimiAdapter
318
+ };
319
+
320
+ const AdapterClass = adapters[type];
321
+ if (!AdapterClass) {
322
+ throw new Error(`Unknown adapter type: ${type}. Available: ${Object.keys(adapters).join(', ')}`);
323
+ }
324
+
325
+ const delegate = new AdapterClass();
326
+
327
+ // Wrap with circuit breaker if enabled
328
+ if (options.circuitBreaker !== false) {
329
+ const breaker = new CircuitBreaker({
330
+ failureThreshold: 5,
331
+ resetTimeout: 60000,
332
+ persistState: true,
333
+ cwd: options.cwd,
334
+ agentType: type
335
+ });
336
+ return new CircuitBreakerAdapter(delegate, breaker);
337
+ }
338
+
339
+ return delegate;
340
+ }
341
+
342
+ /**
343
+ * Get available adapters
344
+ * @returns {string[]} - List of adapter names
345
+ */
346
+ function getAvailableAdapters() {
347
+ return ['claude-code', 'opencode', 'gemini', 'codex', 'qwen', 'kimi'];
348
+ }
349
+
350
+ module.exports = {
351
+ AssistantAdapter,
352
+ ClaudeCodeAdapter,
353
+ OpenCodeAdapter,
354
+ GeminiAdapter,
355
+ CodexAdapter,
356
+ QwenAdapter,
357
+ KimiAdapter,
358
+ CircuitBreakerAdapter,
359
+ createAdapter,
360
+ getAvailableAdapters
361
+ };