@howlil/ez-agents 3.4.2 → 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 (365) hide show
  1. package/README.md +735 -462
  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 -0
  18. package/agents/ez-requirements-agent.md +377 -0
  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/install.js +3221 -3272
  30. package/bin/lib/analytics/analytics-collector.cjs +86 -0
  31. package/bin/lib/analytics/analytics-reporter.cjs +130 -0
  32. package/bin/lib/analytics/cohort-analyzer.cjs +138 -0
  33. package/bin/lib/analytics/funnel-analyzer.cjs +147 -0
  34. package/bin/lib/analytics/nps-tracker.cjs +147 -0
  35. package/bin/lib/archetype-detector.cjs +289 -0
  36. package/bin/lib/assistant-adapter.cjs +361 -0
  37. package/bin/lib/audit-exec.cjs +175 -0
  38. package/bin/lib/auth.cjs +176 -0
  39. package/bin/lib/backup-service.cjs +422 -0
  40. package/bin/lib/bdd-validator.cjs +622 -0
  41. package/bin/lib/business-flow-mapper.cjs +429 -0
  42. package/bin/lib/circuit-breaker.cjs +276 -0
  43. package/bin/lib/code-complexity-analyzer.cjs +360 -0
  44. package/bin/lib/codebase-analyzer.cjs +241 -0
  45. package/bin/lib/commands.cjs +691 -0
  46. package/bin/lib/config.cjs +236 -0
  47. package/bin/lib/constraint-extractor.cjs +526 -0
  48. package/bin/lib/content-scanner.cjs +238 -0
  49. package/bin/lib/context-cache.cjs +154 -0
  50. package/bin/lib/context-compressor.cjs +102 -0
  51. package/bin/lib/context-deduplicator.cjs +105 -0
  52. package/bin/lib/context-errors.cjs +78 -0
  53. package/bin/lib/context-manager.cjs +338 -0
  54. package/bin/lib/context-metadata-tracker.cjs +140 -0
  55. package/bin/lib/context-relevance-scorer.cjs +99 -0
  56. package/bin/lib/core.cjs +507 -0
  57. package/bin/lib/cost-alerts.cjs +174 -0
  58. package/bin/lib/cost-tracker.cjs +275 -0
  59. package/bin/lib/crash-recovery.cjs +220 -0
  60. package/bin/lib/dependency-graph.cjs +319 -0
  61. package/bin/lib/deploy/deploy-audit-log.cjs +76 -0
  62. package/bin/lib/deploy/deploy-detector.cjs +69 -0
  63. package/bin/lib/deploy/deploy-env-manager.cjs +109 -0
  64. package/bin/lib/deploy/deploy-health-check.cjs +88 -0
  65. package/bin/lib/deploy/deploy-pre-flight.cjs +57 -0
  66. package/bin/lib/deploy/deploy-rollback.cjs +72 -0
  67. package/bin/lib/deploy/deploy-runner.cjs +97 -0
  68. package/bin/lib/deploy/deploy-status.cjs +74 -0
  69. package/bin/lib/discussion-synthesizer.cjs +439 -0
  70. package/bin/lib/error-cache.cjs +114 -0
  71. package/bin/lib/error-registry.cjs +177 -0
  72. package/bin/lib/file-access.cjs +207 -0
  73. package/bin/lib/file-lock.cjs +236 -0
  74. package/bin/lib/finops/budget-enforcer.cjs +126 -0
  75. package/bin/lib/finops/cost-reporter.cjs +132 -0
  76. package/bin/lib/finops/finops-analyzer.cjs +112 -0
  77. package/bin/lib/finops/spot-manager.cjs +118 -0
  78. package/bin/lib/framework-detector.cjs +396 -0
  79. package/bin/lib/frontmatter.cjs +313 -0
  80. package/bin/lib/fs-utils.cjs +153 -0
  81. package/bin/lib/gate-executor.cjs +272 -0
  82. package/bin/lib/gates/README.md +374 -0
  83. package/bin/lib/gates/gate-01-requirement.cjs +303 -0
  84. package/bin/lib/gates/gate-02-architecture.cjs +555 -0
  85. package/bin/lib/gates/gate-03-code.cjs +635 -0
  86. package/bin/lib/gates/gate-04-security.cjs +829 -0
  87. package/bin/lib/git-errors.cjs +83 -0
  88. package/bin/lib/git-utils.cjs +321 -0
  89. package/bin/lib/git-workflow-engine.cjs +1157 -0
  90. package/bin/lib/health-check.cjs +227 -0
  91. package/bin/lib/index.cjs +279 -0
  92. package/bin/lib/init.cjs +725 -0
  93. package/bin/lib/lock-logger.cjs +194 -0
  94. package/bin/lib/lock-state.cjs +263 -0
  95. package/bin/lib/lockfile-validator.cjs +227 -0
  96. package/bin/lib/log-rotation.cjs +71 -0
  97. package/bin/lib/logger.cjs +125 -0
  98. package/bin/lib/memory-compression.cjs +256 -0
  99. package/bin/lib/milestone.cjs +247 -0
  100. package/bin/lib/model-provider.cjs +241 -0
  101. package/bin/lib/package-manager-detector.cjs +203 -0
  102. package/bin/lib/package-manager-executor.cjs +385 -0
  103. package/bin/lib/package-manager-service.cjs +216 -0
  104. package/bin/lib/perf/api-monitor.cjs +88 -0
  105. package/bin/lib/perf/db-optimizer.cjs +78 -0
  106. package/bin/lib/perf/frontend-performance.cjs +56 -0
  107. package/bin/lib/perf/perf-analyzer.cjs +77 -0
  108. package/bin/lib/perf/perf-baseline.cjs +102 -0
  109. package/bin/lib/perf/perf-reporter.cjs +117 -0
  110. package/bin/lib/perf/regression-detector.cjs +92 -0
  111. package/bin/lib/phase.cjs +963 -0
  112. package/bin/lib/planning-write.cjs +123 -0
  113. package/bin/lib/project-reporter.cjs +565 -0
  114. package/bin/lib/quality-gate.cjs +332 -0
  115. package/bin/lib/quality-metrics.cjs +324 -0
  116. package/bin/lib/recovery-manager.cjs +98 -0
  117. package/bin/lib/release-validator.cjs +617 -0
  118. package/bin/lib/retry.cjs +119 -0
  119. package/bin/lib/roadmap.cjs +309 -0
  120. package/bin/lib/safe-exec.cjs +173 -0
  121. package/bin/lib/safe-path.cjs +130 -0
  122. package/bin/lib/security-errors.cjs +62 -0
  123. package/bin/lib/session-chain.cjs +304 -0
  124. package/bin/lib/session-errors.cjs +81 -0
  125. package/bin/lib/session-export.cjs +251 -0
  126. package/bin/lib/session-import.cjs +262 -0
  127. package/bin/lib/session-manager.cjs +280 -0
  128. package/bin/lib/skill-context.cjs +148 -0
  129. package/bin/lib/skill-matcher.cjs +236 -0
  130. package/bin/lib/skill-registry.cjs +360 -0
  131. package/bin/lib/skill-resolver.cjs +449 -0
  132. package/bin/lib/skill-triggers.cjs +90 -0
  133. package/bin/lib/skill-validator.cjs +270 -0
  134. package/bin/lib/skill-versioning.cjs +355 -0
  135. package/bin/lib/stack-detector.cjs +399 -0
  136. package/bin/lib/state.cjs +736 -0
  137. package/bin/lib/tech-debt-analyzer.cjs +309 -0
  138. package/bin/lib/temp-file.cjs +239 -0
  139. package/bin/lib/template.cjs +223 -0
  140. package/bin/lib/test-file-lock.cjs +112 -0
  141. package/bin/lib/test-graceful.cjs +93 -0
  142. package/bin/lib/test-logger.cjs +60 -0
  143. package/bin/lib/test-safe-exec.cjs +38 -0
  144. package/bin/lib/test-safe-path.cjs +33 -0
  145. package/bin/lib/test-temp-file.cjs +125 -0
  146. package/bin/lib/tier-manager.cjs +428 -0
  147. package/bin/lib/timeout-exec.cjs +63 -0
  148. package/bin/lib/tradeoff-analyzer.cjs +284 -0
  149. package/bin/lib/url-fetch.cjs +170 -0
  150. package/bin/lib/verify.cjs +863 -0
  151. package/bin/update.js +217 -214
  152. package/commands/deploy.cjs +53 -0
  153. package/commands/ez/add-tests.md +41 -41
  154. package/commands/ez/audit-milestone.md +36 -36
  155. package/commands/ez/complete-milestone.md +136 -136
  156. package/commands/ez/discuss-phase.md +90 -90
  157. package/commands/ez/execute-phase.md +52 -41
  158. package/commands/ez/help.md +22 -22
  159. package/commands/ez/map-codebase.md +71 -71
  160. package/commands/ez/new-milestone.md +44 -44
  161. package/commands/ez/new-project.md +51 -42
  162. package/commands/ez/plan-phase.md +53 -45
  163. package/commands/ez/progress.md +36 -24
  164. package/commands/ez/quick.md +45 -45
  165. package/commands/ez/resume-work.md +40 -40
  166. package/commands/ez/run-phase.md +580 -0
  167. package/commands/ez/settings.md +36 -36
  168. package/commands/ez/update.md +37 -37
  169. package/commands/ez/verify-work.md +402 -38
  170. package/commands/health-check.cjs +44 -0
  171. package/commands/rollback.cjs +47 -0
  172. package/ez-agents/bin/ez-tools.cjs +1692 -716
  173. package/ez-agents/bin/guards/autonomy-guard.cjs +346 -0
  174. package/ez-agents/bin/guards/context-budget-guard.cjs +247 -0
  175. package/ez-agents/bin/guards/hallucination-guard.cjs +271 -0
  176. package/ez-agents/bin/guards/hidden-state-guard.cjs +182 -0
  177. package/ez-agents/bin/guards/team-overhead-guard.cjs +266 -0
  178. package/ez-agents/bin/guards/tool-sprawl-guard.cjs +271 -0
  179. package/ez-agents/bin/lib/analytics/analytics-collector.cjs +86 -0
  180. package/ez-agents/bin/lib/analytics/analytics-reporter.cjs +130 -0
  181. package/ez-agents/bin/lib/analytics/cohort-analyzer.cjs +138 -0
  182. package/ez-agents/bin/lib/analytics/funnel-analyzer.cjs +147 -0
  183. package/ez-agents/bin/lib/analytics/nps-tracker.cjs +147 -0
  184. package/ez-agents/bin/lib/archetype-detector.cjs +289 -0
  185. package/ez-agents/bin/lib/audit-exec.cjs +166 -167
  186. package/ez-agents/bin/lib/auth.cjs +176 -176
  187. package/ez-agents/bin/lib/backup-service.cjs +422 -0
  188. package/ez-agents/bin/lib/bdd-validator.cjs +622 -0
  189. package/ez-agents/bin/lib/business-flow-mapper.cjs +429 -0
  190. package/ez-agents/bin/lib/code-complexity-analyzer.cjs +360 -0
  191. package/ez-agents/bin/lib/codebase-analyzer.cjs +241 -0
  192. package/ez-agents/bin/lib/commands.cjs +685 -685
  193. package/ez-agents/bin/lib/config.cjs +41 -1
  194. package/ez-agents/bin/lib/constraint-extractor.cjs +526 -0
  195. package/ez-agents/bin/lib/content-scanner.cjs +238 -0
  196. package/ez-agents/bin/lib/context-cache.cjs +154 -0
  197. package/ez-agents/bin/lib/context-errors.cjs +71 -0
  198. package/ez-agents/bin/lib/context-manager.cjs +220 -0
  199. package/ez-agents/bin/lib/core.cjs +507 -512
  200. package/ez-agents/bin/lib/cost-tracker.cjs +243 -0
  201. package/ez-agents/bin/lib/crash-recovery.cjs +172 -0
  202. package/ez-agents/bin/lib/dependency-graph.cjs +319 -0
  203. package/ez-agents/bin/lib/deploy/deploy-audit-log.cjs +76 -0
  204. package/ez-agents/bin/lib/deploy/deploy-detector.cjs +69 -0
  205. package/ez-agents/bin/lib/deploy/deploy-env-manager.cjs +109 -0
  206. package/ez-agents/bin/lib/deploy/deploy-health-check.cjs +88 -0
  207. package/ez-agents/bin/lib/deploy/deploy-pre-flight.cjs +57 -0
  208. package/ez-agents/bin/lib/deploy/deploy-rollback.cjs +72 -0
  209. package/ez-agents/bin/lib/deploy/deploy-runner.cjs +97 -0
  210. package/ez-agents/bin/lib/deploy/deploy-status.cjs +74 -0
  211. package/ez-agents/bin/lib/discussion-synthesizer.cjs +458 -0
  212. package/ez-agents/bin/lib/file-access.cjs +207 -0
  213. package/ez-agents/bin/lib/finops/budget-enforcer.cjs +126 -0
  214. package/ez-agents/bin/lib/finops/cost-reporter.cjs +132 -0
  215. package/ez-agents/bin/lib/finops/finops-analyzer.cjs +112 -0
  216. package/ez-agents/bin/lib/finops/spot-manager.cjs +118 -0
  217. package/ez-agents/bin/lib/framework-detector.cjs +396 -0
  218. package/ez-agents/bin/lib/frontmatter.cjs +3 -1
  219. package/ez-agents/bin/lib/gates/README.md +374 -0
  220. package/ez-agents/bin/lib/gates/gate-01-requirement.cjs +303 -0
  221. package/ez-agents/bin/lib/gates/gate-02-architecture.cjs +555 -0
  222. package/ez-agents/bin/lib/gates/gate-03-code.cjs +635 -0
  223. package/ez-agents/bin/lib/gates/gate-04-security.cjs +829 -0
  224. package/ez-agents/bin/lib/git-errors.cjs +83 -0
  225. package/ez-agents/bin/lib/git-utils.cjs +118 -0
  226. package/ez-agents/bin/lib/git-workflow-engine.cjs +1157 -0
  227. package/ez-agents/bin/lib/health-check.cjs +162 -162
  228. package/ez-agents/bin/lib/index.cjs +40 -2
  229. package/ez-agents/bin/lib/init.cjs +0 -2
  230. package/ez-agents/bin/lib/lockfile-validator.cjs +227 -0
  231. package/ez-agents/bin/lib/log-rotation.cjs +71 -0
  232. package/ez-agents/bin/lib/logger.cjs +99 -154
  233. package/ez-agents/bin/lib/memory-compression.cjs +256 -0
  234. package/ez-agents/bin/lib/package-manager-detector.cjs +203 -0
  235. package/ez-agents/bin/lib/package-manager-executor.cjs +385 -0
  236. package/ez-agents/bin/lib/package-manager-service.cjs +216 -0
  237. package/ez-agents/bin/lib/perf/api-monitor.cjs +88 -0
  238. package/ez-agents/bin/lib/perf/db-optimizer.cjs +78 -0
  239. package/ez-agents/bin/lib/perf/frontend-performance.cjs +56 -0
  240. package/ez-agents/bin/lib/perf/perf-analyzer.cjs +77 -0
  241. package/ez-agents/bin/lib/perf/perf-baseline.cjs +102 -0
  242. package/ez-agents/bin/lib/perf/perf-reporter.cjs +117 -0
  243. package/ez-agents/bin/lib/perf/regression-detector.cjs +92 -0
  244. package/ez-agents/bin/lib/project-reporter.cjs +502 -0
  245. package/ez-agents/bin/lib/quality-gate.cjs +332 -0
  246. package/ez-agents/bin/lib/recovery-manager.cjs +98 -0
  247. package/ez-agents/bin/lib/release-validator.cjs +617 -0
  248. package/ez-agents/bin/lib/safe-exec.cjs +128 -214
  249. package/ez-agents/bin/lib/security-errors.cjs +62 -0
  250. package/ez-agents/bin/lib/session-chain.cjs +304 -0
  251. package/ez-agents/bin/lib/session-errors.cjs +81 -0
  252. package/ez-agents/bin/lib/session-export.cjs +251 -0
  253. package/ez-agents/bin/lib/session-import.cjs +262 -0
  254. package/ez-agents/bin/lib/session-manager.cjs +280 -0
  255. package/ez-agents/bin/lib/skill-context.cjs +148 -0
  256. package/ez-agents/bin/lib/skill-matcher.cjs +236 -0
  257. package/ez-agents/bin/lib/skill-registry.cjs +341 -0
  258. package/ez-agents/bin/lib/skill-resolver.cjs +449 -0
  259. package/ez-agents/bin/lib/skill-triggers.cjs +90 -0
  260. package/ez-agents/bin/lib/skill-validator.cjs +270 -0
  261. package/ez-agents/bin/lib/skill-versioning.cjs +355 -0
  262. package/ez-agents/bin/lib/stack-detector.cjs +399 -0
  263. package/ez-agents/bin/lib/tech-debt-analyzer.cjs +309 -0
  264. package/ez-agents/bin/lib/tier-manager.cjs +428 -0
  265. package/ez-agents/bin/lib/tradeoff-analyzer.cjs +284 -0
  266. package/ez-agents/bin/lib/url-fetch.cjs +170 -0
  267. package/ez-agents/bin/lib/verify.cjs +863 -863
  268. package/ez-agents/references/decimal-phase-calculation.md +65 -65
  269. package/ez-agents/references/git-integration.md +248 -248
  270. package/ez-agents/references/git-planning-commit.md +38 -38
  271. package/ez-agents/references/metrics-schema.md +118 -0
  272. package/ez-agents/references/model-profile-resolution.md +34 -34
  273. package/ez-agents/references/model-profiles.md +93 -93
  274. package/ez-agents/references/phase-argument-parsing.md +61 -61
  275. package/ez-agents/references/planning-config.md +340 -200
  276. package/ez-agents/references/tier-strategy.md +103 -0
  277. package/ez-agents/references/ui-brand.md +160 -160
  278. package/ez-agents/references/verification-patterns.md +612 -612
  279. package/ez-agents/templates/DEBUG.md +164 -164
  280. package/ez-agents/templates/UAT.md +247 -247
  281. package/ez-agents/templates/agent-output-format.md +404 -0
  282. package/ez-agents/templates/bdd-feature.md +173 -0
  283. package/ez-agents/templates/codebase/architecture.md +255 -255
  284. package/ez-agents/templates/codebase/structure.md +285 -285
  285. package/ez-agents/templates/copilot-instructions.md +7 -7
  286. package/ez-agents/templates/debug-subagent-prompt.md +91 -91
  287. package/ez-agents/templates/discovery.md +146 -146
  288. package/ez-agents/templates/discussion.md +68 -0
  289. package/ez-agents/templates/handoff-protocol.md +294 -0
  290. package/ez-agents/templates/incident-runbook.md +205 -0
  291. package/ez-agents/templates/mode-workflow-templates.md +301 -0
  292. package/ez-agents/templates/phase-prompt.md +610 -610
  293. package/ez-agents/templates/planner-subagent-prompt.md +117 -117
  294. package/ez-agents/templates/project.md +184 -184
  295. package/ez-agents/templates/release-checklist.md +136 -0
  296. package/ez-agents/templates/research.md +552 -552
  297. package/ez-agents/templates/rollback-plan.md +201 -0
  298. package/ez-agents/templates/security-user-setup.md +244 -0
  299. package/ez-agents/templates/skill-validation-rules.md +476 -0
  300. package/ez-agents/templates/state.md +180 -176
  301. package/ez-agents/templates/summary-complex.md +59 -59
  302. package/ez-agents/tests/gates/gate-01-02.test.cjs +812 -0
  303. package/ez-agents/tests/gates/gate-03-04.test.cjs +762 -0
  304. package/ez-agents/tests/gates/gate-05-validator.test.cjs +145 -0
  305. package/ez-agents/tests/gates/gate-06-docs-validator.test.cjs +244 -0
  306. package/ez-agents/tests/gates/gate-07-release-validator.test.cjs +219 -0
  307. package/ez-agents/tests/guards/context-budget-guard.test.cjs +145 -0
  308. package/ez-agents/tests/guards/edge-case-guards.test.cjs +238 -0
  309. package/ez-agents/tests/guards/hallucination-guard.test.cjs +124 -0
  310. package/ez-agents/workflows/audit-milestone.md +1 -1
  311. package/ez-agents/workflows/autonomous.md +131 -30
  312. package/ez-agents/workflows/complete-milestone.md +1 -1
  313. package/ez-agents/workflows/discuss-phase.md +1 -1
  314. package/ez-agents/workflows/execute-phase.md +169 -3
  315. package/ez-agents/workflows/help.md +86 -133
  316. package/ez-agents/workflows/hotfix.md +291 -0
  317. package/ez-agents/workflows/new-milestone.md +340 -11
  318. package/ez-agents/workflows/new-project.md +294 -318
  319. package/ez-agents/workflows/plan-phase.md +22 -40
  320. package/ez-agents/workflows/progress.md +15 -25
  321. package/ez-agents/workflows/release.md +253 -0
  322. package/ez-agents/workflows/resume-session.md +215 -0
  323. package/ez-agents/workflows/run-phase.md +531 -0
  324. package/ez-agents/workflows/settings.md +2 -35
  325. package/hooks/dist/ez-check-update.js +81 -81
  326. package/hooks/dist/ez-context-monitor.js +148 -141
  327. package/hooks/dist/ez-statusline.js +115 -115
  328. package/package.json +78 -64
  329. package/scripts/fix-qwen-installation.js +144 -144
  330. package/agents/ez-integration-checker.md +0 -443
  331. package/agents/ez-nyquist-auditor.md +0 -176
  332. package/agents/ez-plan-checker.md +0 -706
  333. package/agents/ez-research-synthesizer.md +0 -247
  334. package/agents/ez-ui-auditor.md +0 -439
  335. package/agents/ez-ui-checker.md +0 -300
  336. package/agents/ez-ui-researcher.md +0 -353
  337. package/commands/ez/add-phase.md +0 -43
  338. package/commands/ez/add-todo.md +0 -47
  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/health.md +0 -22
  345. package/commands/ez/insert-phase.md +0 -32
  346. package/commands/ez/join-discord.md +0 -18
  347. package/commands/ez/list-phase-assumptions.md +0 -46
  348. package/commands/ez/pause-work.md +0 -38
  349. package/commands/ez/plan-milestone-gaps.md +0 -34
  350. package/commands/ez/reapply-patches.md +0 -124
  351. package/commands/ez/remove-phase.md +0 -31
  352. package/commands/ez/research-phase.md +0 -190
  353. package/commands/ez/set-profile.md +0 -34
  354. package/commands/ez/stats.md +0 -18
  355. package/commands/ez/ui-phase.md +0 -34
  356. package/commands/ez/ui-review.md +0 -32
  357. package/commands/ez/validate-phase.md +0 -35
  358. package/ez-agents/templates/UI-SPEC.md +0 -100
  359. package/ez-agents/templates/VALIDATION.md +0 -76
  360. package/ez-agents/templates/context.md +0 -352
  361. package/ez-agents/templates/verification-report.md +0 -322
  362. package/ez-agents/workflows/research-phase.md +0 -74
  363. package/ez-agents/workflows/ui-phase.md +0 -290
  364. package/ez-agents/workflows/ui-review.md +0 -157
  365. package/ez-agents/workflows/validate-phase.md +0 -167
@@ -0,0 +1,429 @@
1
+ /**
2
+ * Business Flow Mapper — Analyzes user journeys, data flow, and integration points
3
+ *
4
+ * Provides:
5
+ * - map(rootPath, stack): Identifies user journeys from route/file structure
6
+ * - analyzeDataFlow(rootPath): Traces data flow through imports and function calls
7
+ * - findIntegrationPoints(stack): Identifies external API integrations from dependencies
8
+ */
9
+
10
+ const fs = require('fs');
11
+ const path = require('path');
12
+
13
+ class BusinessFlowMapper {
14
+ constructor(rootPath) {
15
+ this.rootPath = rootPath;
16
+ }
17
+
18
+ /**
19
+ * Map business flows from codebase structure
20
+ * @param {string} rootPath - Root directory to analyze
21
+ * @param {object} stack - Stack object from StackDetector
22
+ * @returns {object} Object with journeys and entryPoints
23
+ */
24
+ map(rootPath = this.rootPath, stack = {}) {
25
+ const routes = this._findRoutes(rootPath);
26
+ const journeys = this._extractJourneys(routes, stack);
27
+ const entryPoints = this._findEntryPoints(rootPath);
28
+
29
+ return {
30
+ journeys,
31
+ entryPoints,
32
+ routes
33
+ };
34
+ }
35
+
36
+ /**
37
+ * Analyze data flow through the codebase
38
+ * @param {string} rootPath - Root directory to analyze
39
+ * @returns {object} Object with flows and dataStores
40
+ */
41
+ analyzeDataFlow(rootPath = this.rootPath) {
42
+ const sourceFiles = this._getSourceFiles(rootPath);
43
+ const flows = this._traceDataFlow(sourceFiles, rootPath);
44
+ const dataStores = this._findDataStores(sourceFiles, rootPath);
45
+
46
+ return {
47
+ flows,
48
+ dataStores
49
+ };
50
+ }
51
+
52
+ /**
53
+ * Find integration points from stack dependencies
54
+ * @param {object} stack - Stack object from StackDetector
55
+ * @returns {object} Object with integrations array
56
+ */
57
+ findIntegrationPoints(stack = {}) {
58
+ const integrations = [];
59
+ const frameworks = stack.frameworks || [];
60
+ const infrastructure = stack.infrastructure || [];
61
+ const databases = stack.databases || [];
62
+
63
+ // Payment integrations
64
+ if (frameworks.includes('Stripe') || infrastructure.some(i => i.includes('Stripe'))) {
65
+ integrations.push({
66
+ name: 'Stripe',
67
+ type: 'payment',
68
+ purpose: 'Payment processing and subscriptions'
69
+ });
70
+ }
71
+
72
+ // Cloud integrations
73
+ if (infrastructure.some(i => i.includes('AWS'))) {
74
+ integrations.push({
75
+ name: 'AWS',
76
+ type: 'cloud',
77
+ purpose: 'Cloud infrastructure and services'
78
+ });
79
+ }
80
+ if (infrastructure.some(i => i.includes('Azure'))) {
81
+ integrations.push({
82
+ name: 'Azure',
83
+ type: 'cloud',
84
+ purpose: 'Cloud infrastructure and services'
85
+ });
86
+ }
87
+ if (infrastructure.some(i => i.includes('Google Cloud'))) {
88
+ integrations.push({
89
+ name: 'Google Cloud',
90
+ type: 'cloud',
91
+ purpose: 'Cloud infrastructure and services'
92
+ });
93
+ }
94
+
95
+ // Monitoring integrations
96
+ if (infrastructure.some(i => i.includes('Sentry'))) {
97
+ integrations.push({
98
+ name: 'Sentry',
99
+ type: 'monitoring',
100
+ purpose: 'Error tracking and monitoring'
101
+ });
102
+ }
103
+ if (infrastructure.some(i => i.includes('Datadog'))) {
104
+ integrations.push({
105
+ name: 'Datadog',
106
+ type: 'monitoring',
107
+ purpose: 'Infrastructure and application monitoring'
108
+ });
109
+ }
110
+
111
+ // Email integrations
112
+ if (infrastructure.some(i => i.includes('SendGrid') || i.includes('Mailgun'))) {
113
+ integrations.push({
114
+ name: 'Email Service',
115
+ type: 'communication',
116
+ purpose: 'Transactional email delivery'
117
+ });
118
+ }
119
+
120
+ // Database integrations
121
+ for (const db of databases) {
122
+ integrations.push({
123
+ name: db,
124
+ type: 'database',
125
+ purpose: 'Data persistence'
126
+ });
127
+ }
128
+
129
+ // Auth integrations
130
+ if (frameworks.includes('NextAuth.js') || frameworks.includes('Auth.js')) {
131
+ integrations.push({
132
+ name: 'NextAuth.js',
133
+ type: 'authentication',
134
+ purpose: 'User authentication and authorization'
135
+ });
136
+ }
137
+
138
+ return {
139
+ integrations
140
+ };
141
+ }
142
+
143
+ /**
144
+ * Find route files in the codebase
145
+ * @private
146
+ */
147
+ _findRoutes(rootPath) {
148
+ const routes = [];
149
+ const routePatterns = [
150
+ 'src/pages',
151
+ 'src/app',
152
+ 'src/routes',
153
+ 'pages',
154
+ 'app',
155
+ 'routes',
156
+ 'src/controllers',
157
+ 'controllers'
158
+ ];
159
+
160
+ for (const pattern of routePatterns) {
161
+ const routeDir = path.join(rootPath, pattern);
162
+ if (fs.existsSync(routeDir)) {
163
+ this._collectRoutes(routeDir, routes, pattern);
164
+ }
165
+ }
166
+
167
+ return routes;
168
+ }
169
+
170
+ /**
171
+ * Collect routes from directory
172
+ * @private
173
+ */
174
+ _collectRoutes(dir, routes, basePath, depth = 0) {
175
+ if (depth > 5) return;
176
+
177
+ try {
178
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
179
+ for (const entry of entries) {
180
+ const fullPath = path.join(dir, entry.name);
181
+ if (entry.isDirectory()) {
182
+ this._collectRoutes(fullPath, routes, basePath, depth + 1);
183
+ } else if (entry.isFile() && /\.(ts|tsx|js|jsx)$/.test(entry.name)) {
184
+ const relativePath = path.relative(path.join(this.rootPath, basePath), fullPath);
185
+ const routePath = this._fileToRoute(relativePath);
186
+ routes.push({
187
+ path: routePath,
188
+ file: fullPath,
189
+ name: path.basename(entry.name, path.extname(entry.name))
190
+ });
191
+ }
192
+ }
193
+ } catch (err) {
194
+ // Ignore errors
195
+ }
196
+ }
197
+
198
+ /**
199
+ * Convert file path to route path
200
+ * @private
201
+ */
202
+ _fileToRoute(filePath) {
203
+ let route = filePath
204
+ .replace(/^(page|route|layout)\./, '')
205
+ .replace(/\.tsx?$/, '')
206
+ .replace(/\.jsx?$/, '')
207
+ .replace(/\\/g, '/')
208
+ .replace(/\/index$/, '')
209
+ .replace(/\[(\w+)\]/g, ':$1');
210
+
211
+ return '/' + route;
212
+ }
213
+
214
+ /**
215
+ * Extract user journeys from routes
216
+ * @private
217
+ */
218
+ _extractJourneys(routes, stack) {
219
+ const journeys = [];
220
+
221
+ // Group routes by prefix to identify journeys
222
+ const routeGroups = {};
223
+ for (const route of routes) {
224
+ const parts = route.path.split('/').filter(p => p && !p.startsWith(':'));
225
+ if (parts.length > 0) {
226
+ const prefix = parts[0];
227
+ if (!routeGroups[prefix]) {
228
+ routeGroups[prefix] = [];
229
+ }
230
+ routeGroups[prefix].push(route);
231
+ }
232
+ }
233
+
234
+ // Create journeys from route groups
235
+ for (const [prefix, groupRoutes] of Object.entries(routeGroups)) {
236
+ const journey = {
237
+ name: this._capitalize(prefix),
238
+ path: `/${prefix}`,
239
+ components: groupRoutes.map(r => r.name),
240
+ routes: groupRoutes.map(r => r.path)
241
+ };
242
+
243
+ // Enhance with stack-specific info
244
+ if (stack.frameworks?.includes('Next.js')) {
245
+ journey.framework = 'Next.js Pages/App Router';
246
+ } else if (stack.frameworks?.includes('React')) {
247
+ journey.framework = 'React Router';
248
+ }
249
+
250
+ journeys.push(journey);
251
+ }
252
+
253
+ return journeys;
254
+ }
255
+
256
+ /**
257
+ * Find entry points in the codebase
258
+ * @private
259
+ */
260
+ _findEntryPoints(rootPath) {
261
+ const entryPoints = [];
262
+ const entryPatterns = [
263
+ 'src/index.ts',
264
+ 'src/index.tsx',
265
+ 'src/index.js',
266
+ 'src/main.ts',
267
+ 'src/main.tsx',
268
+ 'src/app.tsx',
269
+ 'src/app.ts',
270
+ 'index.ts',
271
+ 'index.tsx',
272
+ 'index.js',
273
+ 'main.ts',
274
+ 'app.tsx'
275
+ ];
276
+
277
+ for (const pattern of entryPatterns) {
278
+ const entryPath = path.join(rootPath, pattern);
279
+ if (fs.existsSync(entryPath)) {
280
+ entryPoints.push(entryPath);
281
+ }
282
+ }
283
+
284
+ return entryPoints;
285
+ }
286
+
287
+ /**
288
+ * Trace data flow through source files
289
+ * @private
290
+ */
291
+ _traceDataFlow(sourceFiles, rootPath) {
292
+ const flows = [];
293
+
294
+ for (const file of sourceFiles.slice(0, 50)) { // Limit to 50 files
295
+ try {
296
+ const content = fs.readFileSync(file, 'utf8');
297
+
298
+ // Look for data flow patterns
299
+ const importMatches = content.match(/import\s+.*?\s+from\s+['"](.+?)['"]/g) || [];
300
+ const exportMatches = content.match(/export\s+(default\s+)?(function|class|const|let|var)/g) || [];
301
+
302
+ if (importMatches.length > 0 || exportMatches.length > 0) {
303
+ flows.push({
304
+ file,
305
+ imports: importMatches.length,
306
+ exports: exportMatches.length,
307
+ transformations: this._detectTransformations(content)
308
+ });
309
+ }
310
+ } catch (err) {
311
+ // Ignore read errors
312
+ }
313
+ }
314
+
315
+ return flows;
316
+ }
317
+
318
+ /**
319
+ * Detect data transformations in code
320
+ * @private
321
+ */
322
+ _detectTransformations(content) {
323
+ const transformations = [];
324
+
325
+ // Look for common transformation patterns
326
+ const patterns = {
327
+ map: /\.map\(/,
328
+ filter: /\.filter\(/,
329
+ reduce: /\.reduce\(/,
330
+ transform: /\.transform\(/,
331
+ parse: /\.parse\(|JSON\.parse/,
332
+ stringify: /\.stringify\(|JSON\.stringify/
333
+ };
334
+
335
+ for (const [name, regex] of Object.entries(patterns)) {
336
+ if (regex.test(content)) {
337
+ transformations.push(name);
338
+ }
339
+ }
340
+
341
+ return transformations;
342
+ }
343
+
344
+ /**
345
+ * Find data stores in the codebase
346
+ * @private
347
+ */
348
+ _findDataStores(sourceFiles, rootPath) {
349
+ const dataStores = [];
350
+
351
+ // Look for store patterns
352
+ const storePatterns = [
353
+ 'src/stores',
354
+ 'src/store',
355
+ 'stores',
356
+ 'store',
357
+ 'src/models',
358
+ 'models',
359
+ 'src/db',
360
+ 'db',
361
+ 'src/database',
362
+ 'database'
363
+ ];
364
+
365
+ for (const pattern of storePatterns) {
366
+ const storePath = path.join(rootPath, pattern);
367
+ if (fs.existsSync(storePath)) {
368
+ dataStores.push({
369
+ type: 'store',
370
+ path: storePath,
371
+ name: pattern.split('/').pop()
372
+ });
373
+ }
374
+ }
375
+
376
+ return dataStores;
377
+ }
378
+
379
+ /**
380
+ * Get source files from directory
381
+ * @private
382
+ */
383
+ _getSourceFiles(rootPath) {
384
+ const files = [];
385
+ const srcDir = path.join(rootPath, 'src');
386
+
387
+ if (fs.existsSync(srcDir)) {
388
+ this._collectSourceFiles(srcDir, files);
389
+ } else {
390
+ this._collectSourceFiles(rootPath, files);
391
+ }
392
+
393
+ return files;
394
+ }
395
+
396
+ /**
397
+ * Collect source files from directory
398
+ * @private
399
+ */
400
+ _collectSourceFiles(dir, files, depth = 0) {
401
+ if (depth > 5 || dir.includes('node_modules') || dir.includes('dist') || dir.includes('build')) {
402
+ return;
403
+ }
404
+
405
+ try {
406
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
407
+ for (const entry of entries) {
408
+ const fullPath = path.join(dir, entry.name);
409
+ if (entry.isDirectory()) {
410
+ this._collectSourceFiles(fullPath, files, depth + 1);
411
+ } else if (entry.isFile() && /\.(ts|tsx|js|jsx)$/.test(entry.name)) {
412
+ files.push(fullPath);
413
+ }
414
+ }
415
+ } catch (err) {
416
+ // Ignore errors
417
+ }
418
+ }
419
+
420
+ /**
421
+ * Capitalize first letter
422
+ * @private
423
+ */
424
+ _capitalize(str) {
425
+ return str.charAt(0).toUpperCase() + str.slice(1);
426
+ }
427
+ }
428
+
429
+ module.exports = { BusinessFlowMapper };