@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
@@ -1,214 +1,128 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * EZ Safe Exec — Secure command execution with allowlist and validation
5
- *
6
- * Prevents command injection by:
7
- * - Using execFile instead of execSync with string concatenation
8
- * - Validating commands against allowlist
9
- * - Blocking dangerous shell metacharacters in arguments
10
- * - Logging all commands for audit
11
- * - Cross-platform shell detection (Windows: powershell/cmd, Unix: bash)
12
- *
13
- * Usage:
14
- * const { safeExec, safeExecJSON, getShellConfig } = require('./safe-exec.cjs');
15
- * const result = await safeExec('git', ['status']);
16
- */
17
-
18
- const { execFile, spawn } = require('child_process');
19
- const { promisify } = require('util');
20
- const os = require('os');
21
- const execFileAsync = promisify(execFile);
22
- const Logger = require('./logger.cjs');
23
- const logger = new Logger();
24
-
25
- // Allowlist of safe commands
26
- const ALLOWED_COMMANDS = new Set([
27
- 'git', 'node', 'npm', 'npx', 'find', 'grep', 'head', 'tail', 'wc',
28
- 'mkdir', 'cp', 'mv', 'rm', 'cat', 'echo', 'test', 'ls', 'dir',
29
- 'pwd', 'cd', 'type', 'where', 'which', 'chmod', 'touch'
30
- ]);
31
-
32
- // Dangerous shell metacharacters that could enable injection
33
- const DANGEROUS_PATTERN = /[;&|`$(){}\\<>]/;
34
-
35
- /**
36
- * Get shell configuration for current platform
37
- * Returns shell executable and any platform-specific flags
38
- * @returns {{shell: string, shellFlag: string}} - Shell config object
39
- */
40
- function getShellConfig() {
41
- const platform = process.platform;
42
-
43
- if (platform === 'win32') {
44
- // Windows: prefer PowerShell if available, fallback to cmd.exe
45
- // Check if PowerShell is available
46
- try {
47
- // PowerShell Core (pwsh) or Windows PowerShell (powershell)
48
- const pwshPath = require('path').join(
49
- process.env.ProgramFiles || 'C:\\Program Files',
50
- 'PowerShell', '7', 'pwsh.exe'
51
- );
52
- if (require('fs').existsSync(pwshPath)) {
53
- return { shell: 'pwsh', shellFlag: '-Command' };
54
- }
55
- return { shell: 'powershell', shellFlag: '-Command' };
56
- } catch {
57
- return { shell: 'cmd', shellFlag: '/C' };
58
- }
59
- }
60
-
61
- // Unix-like platforms (macOS, Linux): use bash or sh
62
- return { shell: 'bash', shellFlag: '-c' };
63
- }
64
-
65
- /**
66
- * Execute a shell command with platform-appropriate shell
67
- * @param {string} command - Full command string to execute
68
- * @param {Object} options - Execution options
69
- * @returns {Promise<string>} - Command stdout
70
- */
71
- async function safeShellExec(command, options = {}) {
72
- const { timeout = 30000, log = true } = options;
73
- const { shell, shellFlag } = getShellConfig();
74
-
75
- const startTime = Date.now();
76
-
77
- try {
78
- if (log) {
79
- logger.info('Executing shell command', {
80
- command,
81
- shell,
82
- platform: process.platform,
83
- timestamp: new Date().toISOString()
84
- });
85
- }
86
-
87
- const result = await execFileAsync(shell, [shellFlag, command], {
88
- timeout,
89
- maxBuffer: 10 * 1024 * 1024, // 10MB buffer
90
- windowsHide: true // Prevent console flash on Windows
91
- });
92
-
93
- const duration = Date.now() - startTime;
94
- if (log) {
95
- logger.debug('Shell command completed', {
96
- command,
97
- shell,
98
- duration,
99
- stdout_length: result.stdout?.length || 0
100
- });
101
- }
102
-
103
- return result.stdout.trim();
104
- } catch (err) {
105
- const duration = Date.now() - startTime;
106
- logger.error('Shell command failed', {
107
- command,
108
- shell,
109
- error: err.message,
110
- duration,
111
- code: err.code,
112
- signal: err.signal,
113
- platform: process.platform
114
- });
115
- throw err;
116
- }
117
- }
118
-
119
- /**
120
- * Validate command is in allowlist
121
- * @param {string} cmd - Command to validate
122
- * @throws {Error} If command not allowed
123
- */
124
- function validateCommand(cmd) {
125
- const baseCmd = cmd.split(' ')[0].toLowerCase();
126
- if (!ALLOWED_COMMANDS.has(baseCmd)) {
127
- throw new Error(`Command not allowed: ${cmd}. Allowed: ${Array.from(ALLOWED_COMMANDS).join(', ')}`);
128
- }
129
- }
130
-
131
- /**
132
- * Validate arguments don't contain injection patterns
133
- * @param {string[]} args - Arguments to validate
134
- * @throws {Error} If dangerous pattern found
135
- */
136
- function validateArgs(args) {
137
- for (const arg of args) {
138
- if (DANGEROUS_PATTERN.test(arg)) {
139
- throw new Error(`Dangerous argument rejected: ${arg}`);
140
- }
141
- }
142
- }
143
-
144
- /**
145
- * Execute command safely with validation and logging
146
- * @param {string} cmd - Command to execute
147
- * @param {string[]} args - Command arguments
148
- * @param {Object} options - Execution options
149
- * @returns {Promise<string>} - Command stdout
150
- */
151
- async function safeExec(cmd, args = [], options = {}) {
152
- const { timeout = 30000, log = true } = options;
153
-
154
- // Validate command and arguments
155
- validateCommand(cmd);
156
- validateArgs(args);
157
-
158
- const startTime = Date.now();
159
-
160
- try {
161
- if (log) {
162
- logger.info('Executing command', {
163
- cmd,
164
- args,
165
- timestamp: new Date().toISOString()
166
- });
167
- }
168
-
169
- const result = await execFileAsync(cmd, args, {
170
- timeout,
171
- maxBuffer: 10 * 1024 * 1024 // 10MB buffer
172
- });
173
-
174
- const duration = Date.now() - startTime;
175
- if (log) {
176
- logger.debug('Command completed', {
177
- cmd,
178
- duration,
179
- stdout_length: result.stdout?.length || 0
180
- });
181
- }
182
-
183
- return result.stdout.trim();
184
- } catch (err) {
185
- const duration = Date.now() - startTime;
186
- logger.error('Command failed', {
187
- cmd,
188
- args,
189
- error: err.message,
190
- duration,
191
- code: err.code,
192
- signal: err.signal
193
- });
194
- throw err;
195
- }
196
- }
197
-
198
- /**
199
- * Execute command and return JSON parsed output
200
- * @param {string} cmd - Command to execute
201
- * @param {string[]} args - Command arguments
202
- * @returns {Promise<Object>} - Parsed JSON output
203
- */
204
- async function safeExecJSON(cmd, args = []) {
205
- const output = await safeExec(cmd, args);
206
- try {
207
- return JSON.parse(output);
208
- } catch (err) {
209
- logger.error('Failed to parse JSON output', { cmd, output });
210
- throw new Error(`Invalid JSON from ${cmd}: ${err.message}`);
211
- }
212
- }
213
-
214
- module.exports = { safeExec, safeExecJSON, ALLOWED_COMMANDS };
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * EZ Safe Exec — Secure command execution with allowlist and validation
5
+ *
6
+ * Prevents command injection by:
7
+ * - Using execFile instead of execSync with string concatenation
8
+ * - Validating commands against allowlist
9
+ * - Blocking dangerous shell metacharacters in arguments
10
+ * - Logging all commands for audit
11
+ *
12
+ * Usage:
13
+ * const { safeExec, safeExecJSON } = require('./safe-exec.cjs');
14
+ * const result = await safeExec('git', ['status']);
15
+ */
16
+
17
+ const { execFile } = require('child_process');
18
+ const { promisify } = require('util');
19
+ const execFileAsync = promisify(execFile);
20
+ const Logger = require('./logger.cjs');
21
+ const logger = new Logger();
22
+
23
+ // Allowlist of safe commands
24
+ const ALLOWED_COMMANDS = new Set([
25
+ 'git', 'node', 'npm', 'npx', 'find', 'grep', 'head', 'tail', 'wc',
26
+ 'mkdir', 'cp', 'mv', 'rm', 'cat', 'echo', 'test', 'ls', 'dir',
27
+ 'pwd', 'cd', 'type', 'where', 'which', 'chmod', 'touch'
28
+ ]);
29
+
30
+ // Dangerous shell metacharacters that could enable injection
31
+ const DANGEROUS_PATTERN = /[;&|`$(){}\\<>]/;
32
+
33
+ /**
34
+ * Validate command is in allowlist
35
+ * @param {string} cmd - Command to validate
36
+ * @throws {Error} If command not allowed
37
+ */
38
+ function validateCommand(cmd) {
39
+ const baseCmd = cmd.split(' ')[0].toLowerCase();
40
+ if (!ALLOWED_COMMANDS.has(baseCmd)) {
41
+ throw new Error(`Command not allowed: ${cmd}. Allowed: ${Array.from(ALLOWED_COMMANDS).join(', ')}`);
42
+ }
43
+ }
44
+
45
+ /**
46
+ * Validate arguments don't contain injection patterns
47
+ * @param {string[]} args - Arguments to validate
48
+ * @throws {Error} If dangerous pattern found
49
+ */
50
+ function validateArgs(args) {
51
+ for (const arg of args) {
52
+ if (DANGEROUS_PATTERN.test(arg)) {
53
+ throw new Error(`Dangerous argument rejected: ${arg}`);
54
+ }
55
+ }
56
+ }
57
+
58
+ /**
59
+ * Execute command safely with validation and logging
60
+ * @param {string} cmd - Command to execute
61
+ * @param {string[]} args - Command arguments
62
+ * @param {Object} options - Execution options
63
+ * @returns {Promise<string>} - Command stdout
64
+ */
65
+ async function safeExec(cmd, args = [], options = {}) {
66
+ const { timeout = 30000, log = true } = options;
67
+
68
+ // Validate command and arguments
69
+ validateCommand(cmd);
70
+ validateArgs(args);
71
+
72
+ const startTime = Date.now();
73
+
74
+ try {
75
+ if (log) {
76
+ logger.info('Executing command', {
77
+ cmd,
78
+ args,
79
+ timestamp: new Date().toISOString()
80
+ });
81
+ }
82
+
83
+ const result = await execFileAsync(cmd, args, {
84
+ timeout,
85
+ maxBuffer: 10 * 1024 * 1024 // 10MB buffer
86
+ });
87
+
88
+ const duration = Date.now() - startTime;
89
+ if (log) {
90
+ logger.debug('Command completed', {
91
+ cmd,
92
+ duration,
93
+ stdout_length: result.stdout?.length || 0
94
+ });
95
+ }
96
+
97
+ return result.stdout.trim();
98
+ } catch (err) {
99
+ const duration = Date.now() - startTime;
100
+ logger.error('Command failed', {
101
+ cmd,
102
+ args,
103
+ error: err.message,
104
+ duration,
105
+ code: err.code,
106
+ signal: err.signal
107
+ });
108
+ throw err;
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Execute command and return JSON parsed output
114
+ * @param {string} cmd - Command to execute
115
+ * @param {string[]} args - Command arguments
116
+ * @returns {Promise<Object>} - Parsed JSON output
117
+ */
118
+ async function safeExecJSON(cmd, args = []) {
119
+ const output = await safeExec(cmd, args);
120
+ try {
121
+ return JSON.parse(output);
122
+ } catch (err) {
123
+ logger.error('Failed to parse JSON output', { cmd, output });
124
+ throw new Error(`Invalid JSON from ${cmd}: ${err.message}`);
125
+ }
126
+ }
127
+
128
+ module.exports = { safeExec, safeExecJSON, ALLOWED_COMMANDS };
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Security Operations Error Classes
5
+ *
6
+ * Provides structured error handling for security operations
7
+ */
8
+
9
+ class SecurityOpsError extends Error {
10
+ constructor(message, context = {}) {
11
+ super(message);
12
+ this.name = 'SecurityOpsError';
13
+ this.context = context;
14
+ this.timestamp = new Date().toISOString();
15
+ Error.captureStackTrace(this, SecurityOpsError);
16
+ }
17
+
18
+ toJSON() {
19
+ return {
20
+ name: this.name,
21
+ message: this.message,
22
+ context: this.context,
23
+ timestamp: this.timestamp
24
+ };
25
+ }
26
+ }
27
+
28
+ class SecurityScanError extends SecurityOpsError {
29
+ constructor(message, context = {}) {
30
+ super(message, context);
31
+ this.name = 'SecurityScanError';
32
+ }
33
+ }
34
+
35
+ class SecurityProviderError extends SecurityOpsError {
36
+ constructor(message, context = {}) {
37
+ super(message, context);
38
+ this.name = 'SecurityProviderError';
39
+ }
40
+ }
41
+
42
+ class SecurityComplianceError extends SecurityOpsError {
43
+ constructor(message, context = {}) {
44
+ super(message, context);
45
+ this.name = 'SecurityComplianceError';
46
+ }
47
+ }
48
+
49
+ class SecurityAuditError extends SecurityOpsError {
50
+ constructor(message, context = {}) {
51
+ super(message, context);
52
+ this.name = 'SecurityAuditError';
53
+ }
54
+ }
55
+
56
+ module.exports = {
57
+ SecurityOpsError,
58
+ SecurityScanError,
59
+ SecurityProviderError,
60
+ SecurityComplianceError,
61
+ SecurityAuditError
62
+ };