@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 };
@@ -1,167 +1,166 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * EZ Audit Exec — Command execution with full audit logging
5
- *
6
- * Logs all command executions to audit file for security review:
7
- * - Timestamp, command, arguments, context
8
- * - Duration and result status
9
- * - Error details if failed
10
- *
11
- * Usage:
12
- * const { auditExec } = require('./audit-exec.cjs');
13
- * const result = await auditExec('git', ['status'], { context: 'my-module' });
14
- */
15
-
16
- const { execFile } = require('child_process');
17
- const { promisify } = require('util');
18
- const { appendFileSync, existsSync, mkdirSync } = require('fs');
19
- const { join } = require('path');
20
- const Logger = require('./logger.cjs');
21
- const logger = new Logger();
22
-
23
- const execFileAsync = promisify(execFile);
24
-
25
- // Audit log file path - lazy init
26
- let _AUDIT_DIR;
27
- let _AUDIT_FILE;
28
-
29
- function getAuditDir() {
30
- if (!_AUDIT_DIR) {
31
- _AUDIT_DIR = join('.planning', 'logs');
32
- if (!existsSync(_AUDIT_DIR)) {
33
- mkdirSync(_AUDIT_DIR, { recursive: true });
34
- }
35
- }
36
- return _AUDIT_DIR;
37
- }
38
-
39
- function getAuditFile() {
40
- if (!_AUDIT_FILE) {
41
- _AUDIT_FILE = join(getAuditDir(), `audit-${new Date().toISOString().split('T')[0]}.jsonl`);
42
- }
43
- return _AUDIT_FILE;
44
- }
45
-
46
- /**
47
- * Write audit log entry
48
- * @param {Object} entry - Audit entry
49
- */
50
- function writeAudit(entry) {
51
- try {
52
- const line = JSON.stringify(entry) + '\n';
53
- appendFileSync(getAuditFile(), line, 'utf-8');
54
- } catch (err) {
55
- // Silently ignore audit write failures - logging is best-effort
56
- // This can happen in temp test directories or when .planning doesn't exist
57
- }
58
- }
59
-
60
- /**
61
- * Execute command with full audit logging
62
- * @param {string} cmd - Command to execute
63
- * @param {string[]} args - Command arguments
64
- * @param {Object} options - Execution options
65
- * @param {string} options.context - Calling context (which module/function)
66
- * @param {string} options.user - User identifier
67
- * @returns {Promise<string>} - Command stdout
68
- */
69
- async function auditExec(cmd, args = [], options = {}) {
70
- const { context = 'unknown', user = 'system', timeout = 30000 } = options;
71
-
72
- const entry = {
73
- timestamp: new Date().toISOString(),
74
- cmd,
75
- args,
76
- context,
77
- user,
78
- status: 'started'
79
- };
80
-
81
- // Log start
82
- writeAudit(entry);
83
- logger.info('Audit: command started', { cmd, args: args.join(' '), context });
84
-
85
- const startTime = Date.now();
86
-
87
- try {
88
- const result = await execFileAsync(cmd, args, {
89
- timeout,
90
- maxBuffer: 10 * 1024 * 1024
91
- });
92
-
93
- const duration = Date.now() - startTime;
94
-
95
- // Log success
96
- const successEntry = {
97
- ...entry,
98
- status: 'success',
99
- duration,
100
- stdout_length: result.stdout?.length || 0
101
- };
102
- writeAudit(successEntry);
103
-
104
- logger.debug('Audit: command completed', { cmd, duration, context });
105
-
106
- return result.stdout.trim();
107
- } catch (err) {
108
- const duration = Date.now() - startTime;
109
-
110
- // Log failure
111
- const errorEntry = {
112
- ...entry,
113
- status: 'error',
114
- duration,
115
- error: err.message,
116
- code: err.code,
117
- signal: err.signal
118
- };
119
- writeAudit(errorEntry);
120
-
121
- logger.error('Audit: command failed', { cmd, error: err.message, duration, context });
122
-
123
- throw err;
124
- }
125
- }
126
-
127
- /**
128
- * Get today's audit log path
129
- * @returns {string} - Audit file path
130
- */
131
- function getAuditFilePath() {
132
- return AUDIT_FILE;
133
- }
134
-
135
- /**
136
- * Read audit log entries for a specific date
137
- * @param {string} date - Date string (YYYY-MM-DD)
138
- * @returns {Object[]} - Array of audit entries
139
- */
140
- function readAuditLog(date = new Date().toISOString().split('T')[0]) {
141
- const filePath = join(AUDIT_DIR, `audit-${date}.jsonl`);
142
-
143
- if (!existsSync(filePath)) {
144
- return [];
145
- }
146
-
147
- const content = require('fs').readFileSync(filePath, 'utf-8');
148
- return content.trim().split('\n').map(line => JSON.parse(line));
149
- }
150
-
151
- /**
152
- * Search audit log for specific command
153
- * @param {string} cmdFilter - Command to filter by
154
- * @param {string} date - Date string
155
- * @returns {Object[]} - Matching entries
156
- */
157
- function searchAuditLog(cmdFilter, date) {
158
- const entries = readAuditLog(date);
159
- return entries.filter(e => e.cmd === cmdFilter);
160
- }
161
-
162
- module.exports = {
163
- auditExec,
164
- getAuditFilePath,
165
- readAuditLog,
166
- searchAuditLog
167
- };
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * EZ Audit Exec — Command execution with full audit logging
5
+ *
6
+ * Logs all command executions to audit file for security review:
7
+ * - Timestamp, command, arguments, context
8
+ * - Duration and result status
9
+ * - Error details if failed
10
+ *
11
+ * Usage:
12
+ * const { auditExec } = require('./audit-exec.cjs');
13
+ * const result = await auditExec('git', ['status'], { context: 'my-module' });
14
+ */
15
+
16
+ const { execFile } = require('child_process');
17
+ const { promisify } = require('util');
18
+ const { appendFileSync, existsSync, mkdirSync } = require('fs');
19
+ const { join } = require('path');
20
+ const Logger = require('./logger.cjs');
21
+ const logger = new Logger();
22
+
23
+ const execFileAsync = promisify(execFile);
24
+
25
+ // Audit log file path - lazy init
26
+ let _AUDIT_DIR;
27
+ let _AUDIT_FILE;
28
+
29
+ function getAuditDir() {
30
+ if (!_AUDIT_DIR) {
31
+ _AUDIT_DIR = join('.planning', 'logs');
32
+ if (!existsSync(_AUDIT_DIR)) {
33
+ mkdirSync(_AUDIT_DIR, { recursive: true });
34
+ }
35
+ }
36
+ return _AUDIT_DIR;
37
+ }
38
+
39
+ function getAuditFile() {
40
+ if (!_AUDIT_FILE) {
41
+ _AUDIT_FILE = join(getAuditDir(), `audit-${new Date().toISOString().split('T')[0]}.jsonl`);
42
+ }
43
+ return _AUDIT_FILE;
44
+ }
45
+
46
+ /**
47
+ * Write audit log entry
48
+ * @param {Object} entry - Audit entry
49
+ */
50
+ function writeAudit(entry) {
51
+ try {
52
+ const line = JSON.stringify(entry) + '\n';
53
+ appendFileSync(getAuditFile(), line, 'utf-8');
54
+ } catch (err) {
55
+ // Silently ignore audit write failures - logging is best-effort
56
+ // This can happen in temp test directories or when .planning doesn't exist
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Execute command with full audit logging
62
+ * @param {string} cmd - Command to execute
63
+ * @param {string[]} args - Command arguments
64
+ * @param {Object} options - Execution options
65
+ * @param {string} options.context - Calling context (which module/function)
66
+ * @param {string} options.user - User identifier
67
+ * @returns {Promise<string>} - Command stdout
68
+ */
69
+ async function auditExec(cmd, args = [], options = {}) {
70
+ const { context = 'unknown', user = 'system', timeout = 30000, cwd } = options;
71
+
72
+ const entry = {
73
+ timestamp: new Date().toISOString(),
74
+ cmd,
75
+ args,
76
+ context,
77
+ user,
78
+ status: 'started'
79
+ };
80
+
81
+ // Log start
82
+ writeAudit(entry);
83
+ logger.info('Audit: command started', { cmd, args: args.join(' '), context });
84
+
85
+ const startTime = Date.now();
86
+
87
+ try {
88
+ const execOpts = { timeout, maxBuffer: 10 * 1024 * 1024 };
89
+ if (cwd) execOpts.cwd = cwd;
90
+ const result = await execFileAsync(cmd, args, execOpts);
91
+
92
+ const duration = Date.now() - startTime;
93
+
94
+ // Log success
95
+ const successEntry = {
96
+ ...entry,
97
+ status: 'success',
98
+ duration,
99
+ stdout_length: result.stdout?.length || 0
100
+ };
101
+ writeAudit(successEntry);
102
+
103
+ logger.debug('Audit: command completed', { cmd, duration, context });
104
+
105
+ return result.stdout.trim();
106
+ } catch (err) {
107
+ const duration = Date.now() - startTime;
108
+
109
+ // Log failure
110
+ const errorEntry = {
111
+ ...entry,
112
+ status: 'error',
113
+ duration,
114
+ error: err.message,
115
+ code: err.code,
116
+ signal: err.signal
117
+ };
118
+ writeAudit(errorEntry);
119
+
120
+ logger.error('Audit: command failed', { cmd, error: err.message, duration, context });
121
+
122
+ throw err;
123
+ }
124
+ }
125
+
126
+ /**
127
+ * Get today's audit log path
128
+ * @returns {string} - Audit file path
129
+ */
130
+ function getAuditFilePath() {
131
+ return AUDIT_FILE;
132
+ }
133
+
134
+ /**
135
+ * Read audit log entries for a specific date
136
+ * @param {string} date - Date string (YYYY-MM-DD)
137
+ * @returns {Object[]} - Array of audit entries
138
+ */
139
+ function readAuditLog(date = new Date().toISOString().split('T')[0]) {
140
+ const filePath = join(AUDIT_DIR, `audit-${date}.jsonl`);
141
+
142
+ if (!existsSync(filePath)) {
143
+ return [];
144
+ }
145
+
146
+ const content = require('fs').readFileSync(filePath, 'utf-8');
147
+ return content.trim().split('\n').map(line => JSON.parse(line));
148
+ }
149
+
150
+ /**
151
+ * Search audit log for specific command
152
+ * @param {string} cmdFilter - Command to filter by
153
+ * @param {string} date - Date string
154
+ * @returns {Object[]} - Matching entries
155
+ */
156
+ function searchAuditLog(cmdFilter, date) {
157
+ const entries = readAuditLog(date);
158
+ return entries.filter(e => e.cmd === cmdFilter);
159
+ }
160
+
161
+ module.exports = {
162
+ auditExec,
163
+ getAuditFilePath,
164
+ readAuditLog,
165
+ searchAuditLog
166
+ };