@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,360 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Skill Registry — Core module for loading, indexing, and searching skills
5
+ *
6
+ * Provides file-based skill registry with:
7
+ * - Load skills from global and local directories
8
+ * - Get skill by name
9
+ * - Filter by tag, category, or stack
10
+ * - Search across name, description, and tags
11
+ * - Lazy loading with cache (LazySkillRegistry subclass)
12
+ *
13
+ * Usage:
14
+ * const { SkillRegistry, LazySkillRegistry } = require('./skill-registry.cjs');
15
+ * const registry = new SkillRegistry();
16
+ * await registry.load();
17
+ * const skill = registry.get('laravel_11_structure_skill_v2');
18
+ */
19
+
20
+ const fs = require('fs');
21
+ const path = require('path');
22
+ const { parseFrontmatter } = require('./frontmatter.cjs');
23
+ const { safeReadFile } = require('./safe-path.cjs');
24
+ const Logger = require('./logger.cjs');
25
+ const logger = new Logger();
26
+
27
+ /**
28
+ * Skill Registry class for managing skills
29
+ */
30
+ class SkillRegistry {
31
+ /**
32
+ * Create a SkillRegistry instance
33
+ * @param {Object} options - Registry options
34
+ * @param {string} options.globalPath - Global skills directory (default: skills/)
35
+ * @param {string} options.localPath - Local project skills directory (default: .planning/skills)
36
+ */
37
+ constructor(options = {}) {
38
+ this.globalSkillsPath = options.globalPath || path.join(__dirname, '../../skills');
39
+ this.localSkillsPath = options.localPath || '.planning/skills';
40
+ this.skills = new Map();
41
+ this.loaded = false;
42
+ this.logger = logger;
43
+ }
44
+
45
+ /**
46
+ * Load skills from global and local directories
47
+ * @returns {Promise<SkillRegistry>} this for chaining
48
+ */
49
+ async load() {
50
+ // Load global skills
51
+ await this._loadFromPath(this.globalSkillsPath, 'global');
52
+
53
+ // Load local project skills (override global)
54
+ if (fs.existsSync(this.localSkillsPath)) {
55
+ await this._loadFromPath(this.localSkillsPath, 'local');
56
+ }
57
+
58
+ this.loaded = true;
59
+ this.logger.info('Skill registry loaded', {
60
+ skillCount: this.skills.size,
61
+ globalPath: this.globalSkillsPath,
62
+ localPath: this.localSkillsPath
63
+ });
64
+
65
+ return this;
66
+ }
67
+
68
+ /**
69
+ * Load skills from a specific path
70
+ * @param {string} basePath - Base directory to scan
71
+ * @param {string} scope - Scope identifier ('global' or 'local')
72
+ * @private
73
+ */
74
+ _loadFromPath(basePath, scope) {
75
+ if (!fs.existsSync(basePath)) {
76
+ this.logger.debug('Skills path does not exist', { basePath });
77
+ return;
78
+ }
79
+
80
+ // Read category directories (including new categories: testing, observability)
81
+ const categories = ['stack', 'architecture', 'domain', 'operational', 'governance', 'testing', 'observability'];
82
+
83
+ for (const category of categories) {
84
+ const categoryPath = path.join(basePath, category);
85
+ if (!fs.existsSync(categoryPath)) continue;
86
+
87
+ // Use recursive function to find all SKILL.md files (supports unlimited nesting)
88
+ const skillFiles = this._findSkillFiles(categoryPath, 0, 5);
89
+
90
+ for (const skillFile of skillFiles) {
91
+ try {
92
+ const content = fs.readFileSync(skillFile, 'utf8');
93
+ const skill = this._parseSkill(skillFile, content, scope);
94
+ this.skills.set(skill.name, skill);
95
+ } catch (err) {
96
+ this.logger.error('Failed to load skill', {
97
+ skillFile,
98
+ error: err.message
99
+ });
100
+ }
101
+ }
102
+ }
103
+ }
104
+
105
+ /**
106
+ * Recursively find all SKILL.md files in a directory
107
+ * @param {string} dirPath - Directory to search
108
+ * @param {number} depth - Current recursion depth
109
+ * @param {number} maxDepth - Maximum recursion depth
110
+ * @returns {string[]} Array of SKILL.md file paths
111
+ * @private
112
+ */
113
+ _findSkillFiles(dirPath, depth = 0, maxDepth = 5) {
114
+ const results = [];
115
+
116
+ if (depth > maxDepth) return results;
117
+
118
+ let items;
119
+ try {
120
+ items = fs.readdirSync(dirPath, { withFileTypes: true });
121
+ } catch (err) {
122
+ this.logger.debug('Cannot read directory', { dirPath, error: err.message });
123
+ return results;
124
+ }
125
+
126
+ for (const item of items) {
127
+ const fullPath = path.join(dirPath, item.name);
128
+
129
+ if (item.isFile() && item.name === 'SKILL.md') {
130
+ results.push(fullPath);
131
+ } else if (item.isDirectory()) {
132
+ const nested = this._findSkillFiles(fullPath, depth + 1, maxDepth);
133
+ results.push(...nested);
134
+ }
135
+ }
136
+
137
+ return results;
138
+ }
139
+
140
+ /**
141
+ * Parse skill metadata from SKILL.md content
142
+ * @param {string} filePath - Path to SKILL.md file
143
+ * @param {string} content - File content
144
+ * @param {string} scope - Scope identifier
145
+ * @returns {Object} Parsed skill object
146
+ * @private
147
+ */
148
+ _parseSkill(filePath, content, scope) {
149
+ const { frontmatter, body } = parseFrontmatter(content);
150
+
151
+ return {
152
+ name: frontmatter.name,
153
+ description: frontmatter.description,
154
+ version: frontmatter.version || '1.0.0',
155
+ tags: frontmatter.tags || [],
156
+ stack: frontmatter.stack,
157
+ category: frontmatter.category,
158
+ triggers: frontmatter.triggers,
159
+ prerequisites: frontmatter.prerequisites || [],
160
+ recommended_structure: frontmatter.recommended_structure,
161
+ workflow: frontmatter.workflow,
162
+ best_practices: frontmatter.best_practices || [],
163
+ anti_patterns: frontmatter.anti_patterns || [],
164
+ scaling_notes: frontmatter.scaling_notes,
165
+ when_not_to_use: frontmatter.when_not_to_use,
166
+ output_template: frontmatter.output_template,
167
+ dependencies: frontmatter.dependencies,
168
+ scope,
169
+ path: filePath,
170
+ body
171
+ };
172
+ }
173
+
174
+ /**
175
+ * Get a skill by name
176
+ * @param {string} name - Skill name
177
+ * @returns {Object|undefined} Skill object or undefined
178
+ */
179
+ get(name) {
180
+ return this.skills.get(name);
181
+ }
182
+
183
+ /**
184
+ * Get all skills
185
+ * @returns {Object[]} Array of all skill objects
186
+ */
187
+ getAll() {
188
+ return Array.from(this.skills.values());
189
+ }
190
+
191
+ /**
192
+ * Find skills by tag
193
+ * @param {string} tag - Tag to filter by
194
+ * @returns {Object[]} Array of matching skills
195
+ */
196
+ findByTag(tag) {
197
+ return this.getAll().filter(s => s.tags?.includes(tag));
198
+ }
199
+
200
+ /**
201
+ * Find skills by category
202
+ * @param {string} category - Category to filter by
203
+ * @returns {Object[]} Array of matching skills
204
+ */
205
+ findByCategory(category) {
206
+ return this.getAll().filter(s => s.category === category);
207
+ }
208
+
209
+ /**
210
+ * Find skills by stack identifier
211
+ * @param {string|Object} stack - Stack identifier (string or object with language/framework)
212
+ * @returns {Object[]} Array of matching skills
213
+ */
214
+ findByStack(stack) {
215
+ return this.getAll().filter(s => {
216
+ if (!s.stack) return false;
217
+
218
+ if (typeof stack === 'string') {
219
+ return s.stack === stack;
220
+ }
221
+
222
+ if (typeof stack === 'object') {
223
+ // Support object format: { language: 'php', framework: 'laravel' }
224
+ const stackStr = `${stack.language}/${stack.framework}`;
225
+ return s.stack.includes(stackStr);
226
+ }
227
+
228
+ return false;
229
+ });
230
+ }
231
+
232
+ /**
233
+ * Search skills by keyword
234
+ * @param {string} query - Search query
235
+ * @returns {Object[]} Array of matching skills
236
+ */
237
+ search(query) {
238
+ const q = query.toLowerCase();
239
+ return this.getAll().filter(s =>
240
+ s.name.toLowerCase().includes(q) ||
241
+ s.description.toLowerCase().includes(q) ||
242
+ s.tags?.some(t => t.toLowerCase().includes(q))
243
+ );
244
+ }
245
+
246
+ /**
247
+ * Clear all loaded skills
248
+ */
249
+ clear() {
250
+ this.skills.clear();
251
+ this.loaded = false;
252
+ }
253
+ }
254
+
255
+ /**
256
+ * Lazy Skill Registry with caching
257
+ * Extends SkillRegistry with TTL-based caching for better performance
258
+ */
259
+ class LazySkillRegistry extends SkillRegistry {
260
+ /**
261
+ * Create a LazySkillRegistry instance
262
+ * @param {Object} options - Registry options
263
+ * @param {number} options.cacheTTL - Cache TTL in milliseconds (default: 5 minutes)
264
+ */
265
+ constructor(options = {}) {
266
+ super(options);
267
+ this.cache = new Map();
268
+ this.cacheTTL = options.cacheTTL || 5 * 60 * 1000; // 5 minutes
269
+ this.cacheTimestamps = new Map();
270
+ }
271
+
272
+ /**
273
+ * Get a skill by name with caching
274
+ * @param {string} name - Skill name
275
+ * @returns {Object|undefined} Skill object or undefined
276
+ */
277
+ get(name) {
278
+ // Check cache first
279
+ const cached = this._getFromCache(name);
280
+ if (cached) {
281
+ return cached;
282
+ }
283
+
284
+ // Load from parent if not in cache
285
+ const skill = super.get(name);
286
+ if (skill) {
287
+ this._setInCache(name, skill);
288
+ }
289
+
290
+ return skill;
291
+ }
292
+
293
+ /**
294
+ * Get all skills with caching
295
+ * @returns {Object[]} Array of all skill objects
296
+ */
297
+ getAll() {
298
+ const cached = this._getFromCache('__all__');
299
+ if (cached) {
300
+ return cached;
301
+ }
302
+
303
+ const skills = super.getAll();
304
+ this._setInCache('__all__', skills);
305
+ return skills;
306
+ }
307
+
308
+ /**
309
+ * Get item from cache with TTL check
310
+ * @param {string} key - Cache key
311
+ * @returns {any|null} Cached value or null if expired/missing
312
+ * @private
313
+ */
314
+ _getFromCache(key) {
315
+ const timestamp = this.cacheTimestamps.get(key);
316
+ if (!timestamp) return null;
317
+
318
+ const age = Date.now() - timestamp;
319
+ if (age > this.cacheTTL) {
320
+ // Cache expired
321
+ this.cache.delete(key);
322
+ this.cacheTimestamps.delete(key);
323
+ return null;
324
+ }
325
+
326
+ return this.cache.get(key);
327
+ }
328
+
329
+ /**
330
+ * Set item in cache with timestamp
331
+ * @param {string} key - Cache key
332
+ * @param {any} value - Value to cache
333
+ * @private
334
+ */
335
+ _setInCache(key, value) {
336
+ this.cache.set(key, value);
337
+ this.cacheTimestamps.set(key, Date.now());
338
+ }
339
+
340
+ /**
341
+ * Clear cache
342
+ */
343
+ clearCache() {
344
+ this.cache.clear();
345
+ this.cacheTimestamps.clear();
346
+ }
347
+
348
+ /**
349
+ * Clear all skills and cache
350
+ */
351
+ clear() {
352
+ super.clear();
353
+ this.clearCache();
354
+ }
355
+ }
356
+
357
+ module.exports = {
358
+ SkillRegistry,
359
+ LazySkillRegistry
360
+ };