@jhl8041/dooray-mcp 0.1.4 → 0.1.6

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 (396) hide show
  1. package/.claude/commands/bmad_agent_bmad-master.md +14 -0
  2. package/.claude/commands/bmad_bmm_agent_analyst.md +14 -0
  3. package/.claude/commands/bmad_bmm_agent_architect.md +14 -0
  4. package/.claude/commands/bmad_bmm_agent_dev.md +14 -0
  5. package/.claude/commands/bmad_bmm_agent_pm.md +14 -0
  6. package/.claude/commands/bmad_bmm_agent_quick-flow-solo-dev.md +14 -0
  7. package/.claude/commands/bmad_bmm_agent_sm.md +14 -0
  8. package/.claude/commands/bmad_bmm_agent_tea.md +14 -0
  9. package/.claude/commands/bmad_bmm_agent_tech-writer_tech-writer.md +14 -0
  10. package/.claude/commands/bmad_bmm_agent_ux-designer.md +14 -0
  11. package/.claude/commands/bmad_bmm_check-implementation-readiness.md +5 -0
  12. package/.claude/commands/bmad_bmm_code-review.md +13 -0
  13. package/.claude/commands/bmad_bmm_correct-course.md +13 -0
  14. package/.claude/commands/bmad_bmm_create-architecture.md +5 -0
  15. package/.claude/commands/bmad_bmm_create-epics-and-stories.md +5 -0
  16. package/.claude/commands/bmad_bmm_create-excalidraw-dataflow.md +13 -0
  17. package/.claude/commands/bmad_bmm_create-excalidraw-diagram.md +13 -0
  18. package/.claude/commands/bmad_bmm_create-excalidraw-flowchart.md +13 -0
  19. package/.claude/commands/bmad_bmm_create-excalidraw-wireframe.md +13 -0
  20. package/.claude/commands/bmad_bmm_create-prd.md +5 -0
  21. package/.claude/commands/bmad_bmm_create-product-brief.md +5 -0
  22. package/.claude/commands/bmad_bmm_create-story.md +13 -0
  23. package/.claude/commands/bmad_bmm_create-ux-design.md +5 -0
  24. package/.claude/commands/bmad_bmm_dev-story.md +13 -0
  25. package/.claude/commands/bmad_bmm_document-project.md +13 -0
  26. package/.claude/commands/bmad_bmm_quick-dev.md +5 -0
  27. package/.claude/commands/bmad_bmm_quick-spec.md +5 -0
  28. package/.claude/commands/bmad_bmm_research.md +5 -0
  29. package/.claude/commands/bmad_bmm_retrospective.md +13 -0
  30. package/.claude/commands/bmad_bmm_sprint-planning.md +13 -0
  31. package/.claude/commands/bmad_bmm_sprint-status.md +13 -0
  32. package/.claude/commands/bmad_bmm_testarch-atdd.md +13 -0
  33. package/.claude/commands/bmad_bmm_testarch-automate.md +13 -0
  34. package/.claude/commands/bmad_bmm_testarch-ci.md +13 -0
  35. package/.claude/commands/bmad_bmm_testarch-framework.md +13 -0
  36. package/.claude/commands/bmad_bmm_testarch-nfr.md +13 -0
  37. package/.claude/commands/bmad_bmm_testarch-test-design.md +13 -0
  38. package/.claude/commands/bmad_bmm_testarch-test-review.md +13 -0
  39. package/.claude/commands/bmad_bmm_testarch-trace.md +13 -0
  40. package/.claude/commands/bmad_brainstorming.md +5 -0
  41. package/.claude/commands/bmad_editorial-review-prose.md +9 -0
  42. package/.claude/commands/bmad_editorial-review-structure.md +10 -0
  43. package/.claude/commands/bmad_help.md +9 -0
  44. package/.claude/commands/bmad_index-docs.md +9 -0
  45. package/.claude/commands/bmad_party-mode.md +5 -0
  46. package/.claude/commands/bmad_review-adversarial-general.md +9 -0
  47. package/.claude/commands/bmad_shard-doc.md +9 -0
  48. package/_bmad/_config/agent-manifest.csv +11 -0
  49. package/_bmad/_config/agents/bmm-analyst.customize.yaml +41 -0
  50. package/_bmad/_config/agents/bmm-architect.customize.yaml +41 -0
  51. package/_bmad/_config/agents/bmm-dev.customize.yaml +41 -0
  52. package/_bmad/_config/agents/bmm-pm.customize.yaml +41 -0
  53. package/_bmad/_config/agents/bmm-quick-flow-solo-dev.customize.yaml +41 -0
  54. package/_bmad/_config/agents/bmm-sm.customize.yaml +41 -0
  55. package/_bmad/_config/agents/bmm-tea.customize.yaml +41 -0
  56. package/_bmad/_config/agents/bmm-tech-writer.customize.yaml +41 -0
  57. package/_bmad/_config/agents/bmm-ux-designer.customize.yaml +41 -0
  58. package/_bmad/_config/agents/core-bmad-master.customize.yaml +41 -0
  59. package/_bmad/_config/bmad-help.csv +40 -0
  60. package/_bmad/_config/files-manifest.csv +281 -0
  61. package/_bmad/_config/manifest.yaml +21 -0
  62. package/_bmad/_config/task-manifest.csv +9 -0
  63. package/_bmad/_config/tool-manifest.csv +1 -0
  64. package/_bmad/_config/workflow-manifest.csv +32 -0
  65. package/_bmad/bmm/agents/analyst.md +76 -0
  66. package/_bmad/bmm/agents/architect.md +58 -0
  67. package/_bmad/bmm/agents/dev.md +69 -0
  68. package/_bmad/bmm/agents/pm.md +72 -0
  69. package/_bmad/bmm/agents/quick-flow-solo-dev.md +69 -0
  70. package/_bmad/bmm/agents/sm.md +70 -0
  71. package/_bmad/bmm/agents/tea.md +70 -0
  72. package/_bmad/bmm/agents/tech-writer/tech-writer.md +70 -0
  73. package/_bmad/bmm/agents/ux-designer.md +57 -0
  74. package/_bmad/bmm/config.yaml +16 -0
  75. package/_bmad/bmm/data/project-context-template.md +26 -0
  76. package/_bmad/bmm/module-help.csv +32 -0
  77. package/_bmad/bmm/teams/default-party.csv +21 -0
  78. package/_bmad/bmm/teams/team-fullstack.yaml +12 -0
  79. package/_bmad/bmm/testarch/knowledge/adr-quality-readiness-checklist.md +350 -0
  80. package/_bmad/bmm/testarch/knowledge/api-request.md +442 -0
  81. package/_bmad/bmm/testarch/knowledge/api-testing-patterns.md +843 -0
  82. package/_bmad/bmm/testarch/knowledge/auth-session.md +552 -0
  83. package/_bmad/bmm/testarch/knowledge/burn-in.md +273 -0
  84. package/_bmad/bmm/testarch/knowledge/ci-burn-in.md +675 -0
  85. package/_bmad/bmm/testarch/knowledge/component-tdd.md +486 -0
  86. package/_bmad/bmm/testarch/knowledge/contract-testing.md +957 -0
  87. package/_bmad/bmm/testarch/knowledge/data-factories.md +500 -0
  88. package/_bmad/bmm/testarch/knowledge/email-auth.md +721 -0
  89. package/_bmad/bmm/testarch/knowledge/error-handling.md +725 -0
  90. package/_bmad/bmm/testarch/knowledge/feature-flags.md +750 -0
  91. package/_bmad/bmm/testarch/knowledge/file-utils.md +463 -0
  92. package/_bmad/bmm/testarch/knowledge/fixture-architecture.md +401 -0
  93. package/_bmad/bmm/testarch/knowledge/fixtures-composition.md +382 -0
  94. package/_bmad/bmm/testarch/knowledge/intercept-network-call.md +430 -0
  95. package/_bmad/bmm/testarch/knowledge/log.md +429 -0
  96. package/_bmad/bmm/testarch/knowledge/network-error-monitor.md +405 -0
  97. package/_bmad/bmm/testarch/knowledge/network-first.md +486 -0
  98. package/_bmad/bmm/testarch/knowledge/network-recorder.md +527 -0
  99. package/_bmad/bmm/testarch/knowledge/nfr-criteria.md +670 -0
  100. package/_bmad/bmm/testarch/knowledge/overview.md +286 -0
  101. package/_bmad/bmm/testarch/knowledge/playwright-config.md +730 -0
  102. package/_bmad/bmm/testarch/knowledge/probability-impact.md +601 -0
  103. package/_bmad/bmm/testarch/knowledge/recurse.md +421 -0
  104. package/_bmad/bmm/testarch/knowledge/risk-governance.md +615 -0
  105. package/_bmad/bmm/testarch/knowledge/selective-testing.md +732 -0
  106. package/_bmad/bmm/testarch/knowledge/selector-resilience.md +527 -0
  107. package/_bmad/bmm/testarch/knowledge/test-healing-patterns.md +644 -0
  108. package/_bmad/bmm/testarch/knowledge/test-levels-framework.md +473 -0
  109. package/_bmad/bmm/testarch/knowledge/test-priorities-matrix.md +373 -0
  110. package/_bmad/bmm/testarch/knowledge/test-quality.md +664 -0
  111. package/_bmad/bmm/testarch/knowledge/timing-debugging.md +372 -0
  112. package/_bmad/bmm/testarch/knowledge/visual-debugging.md +524 -0
  113. package/_bmad/bmm/testarch/tea-index.csv +35 -0
  114. package/_bmad/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
  115. package/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -0
  116. package/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -0
  117. package/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -0
  118. package/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -0
  119. package/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -0
  120. package/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -0
  121. package/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +162 -0
  122. package/_bmad/bmm/workflows/1-analysis/create-product-brief/workflow.md +58 -0
  123. package/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -0
  124. package/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -0
  125. package/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -0
  126. package/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -0
  127. package/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -0
  128. package/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +443 -0
  129. package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
  130. package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
  131. package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +200 -0
  132. package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
  133. package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
  134. package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
  135. package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +475 -0
  136. package/_bmad/bmm/workflows/1-analysis/research/research.template.md +29 -0
  137. package/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -0
  138. package/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -0
  139. package/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -0
  140. package/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -0
  141. package/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +239 -0
  142. package/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +486 -0
  143. package/_bmad/bmm/workflows/1-analysis/research/workflow.md +173 -0
  144. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +13 -0
  145. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +197 -0
  146. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/data/project-types.csv +11 -0
  147. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01-init.md +191 -0
  148. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +153 -0
  149. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +224 -0
  150. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +226 -0
  151. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +213 -0
  152. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +207 -0
  153. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +226 -0
  154. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +237 -0
  155. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +228 -0
  156. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +231 -0
  157. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +242 -0
  158. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +217 -0
  159. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +124 -0
  160. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +247 -0
  161. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
  162. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +249 -0
  163. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +253 -0
  164. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +168 -0
  165. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +218 -0
  166. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +191 -0
  167. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +209 -0
  168. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +174 -0
  169. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
  170. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +228 -0
  171. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +217 -0
  172. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
  173. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
  174. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +263 -0
  175. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +209 -0
  176. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
  177. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +242 -0
  178. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +231 -0
  179. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/templates/prd-template.md +10 -0
  180. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/validation-report-prd-workflow.md +433 -0
  181. package/_bmad/bmm/workflows/2-plan-workflows/create-prd/workflow.md +150 -0
  182. package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -0
  183. package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -0
  184. package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -0
  185. package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -0
  186. package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -0
  187. package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -0
  188. package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -0
  189. package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -0
  190. package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -0
  191. package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -0
  192. package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -0
  193. package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -0
  194. package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -0
  195. package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
  196. package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +171 -0
  197. package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
  198. package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +43 -0
  199. package/_bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +190 -0
  200. package/_bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +178 -0
  201. package/_bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +179 -0
  202. package/_bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +139 -0
  203. package/_bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +252 -0
  204. package/_bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +135 -0
  205. package/_bmad/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
  206. package/_bmad/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +55 -0
  207. package/_bmad/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
  208. package/_bmad/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +11 -0
  209. package/_bmad/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
  210. package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
  211. package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +164 -0
  212. package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -0
  213. package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +331 -0
  214. package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -0
  215. package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -0
  216. package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -0
  217. package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -0
  218. package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +76 -0
  219. package/_bmad/bmm/workflows/3-solutioning/create-architecture/workflow.md +50 -0
  220. package/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -0
  221. package/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -0
  222. package/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -0
  223. package/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +149 -0
  224. package/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
  225. package/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +59 -0
  226. package/_bmad/bmm/workflows/4-implementation/code-review/checklist.md +23 -0
  227. package/_bmad/bmm/workflows/4-implementation/code-review/instructions.xml +227 -0
  228. package/_bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +50 -0
  229. package/_bmad/bmm/workflows/4-implementation/correct-course/checklist.md +288 -0
  230. package/_bmad/bmm/workflows/4-implementation/correct-course/instructions.md +206 -0
  231. package/_bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +58 -0
  232. package/_bmad/bmm/workflows/4-implementation/create-story/checklist.md +358 -0
  233. package/_bmad/bmm/workflows/4-implementation/create-story/instructions.xml +345 -0
  234. package/_bmad/bmm/workflows/4-implementation/create-story/template.md +49 -0
  235. package/_bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +59 -0
  236. package/_bmad/bmm/workflows/4-implementation/dev-story/checklist.md +80 -0
  237. package/_bmad/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -0
  238. package/_bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +25 -0
  239. package/_bmad/bmm/workflows/4-implementation/retrospective/instructions.md +1443 -0
  240. package/_bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +57 -0
  241. package/_bmad/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
  242. package/_bmad/bmm/workflows/4-implementation/sprint-planning/instructions.md +225 -0
  243. package/_bmad/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
  244. package/_bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +52 -0
  245. package/_bmad/bmm/workflows/4-implementation/sprint-status/instructions.md +229 -0
  246. package/_bmad/bmm/workflows/4-implementation/sprint-status/workflow.yaml +35 -0
  247. package/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +176 -0
  248. package/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +120 -0
  249. package/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +113 -0
  250. package/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +113 -0
  251. package/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +106 -0
  252. package/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +149 -0
  253. package/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +50 -0
  254. package/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +192 -0
  255. package/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +145 -0
  256. package/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +128 -0
  257. package/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +201 -0
  258. package/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -0
  259. package/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -0
  260. package/_bmad/bmm/workflows/document-project/checklist.md +245 -0
  261. package/_bmad/bmm/workflows/document-project/documentation-requirements.csv +12 -0
  262. package/_bmad/bmm/workflows/document-project/instructions.md +221 -0
  263. package/_bmad/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
  264. package/_bmad/bmm/workflows/document-project/templates/index-template.md +169 -0
  265. package/_bmad/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
  266. package/_bmad/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
  267. package/_bmad/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
  268. package/_bmad/bmm/workflows/document-project/workflow.yaml +28 -0
  269. package/_bmad/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
  270. package/_bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
  271. package/_bmad/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
  272. package/_bmad/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
  273. package/_bmad/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-library.json +90 -0
  274. package/_bmad/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-templates.yaml +127 -0
  275. package/_bmad/bmm/workflows/excalidraw-diagrams/create-dataflow/checklist.md +39 -0
  276. package/_bmad/bmm/workflows/excalidraw-diagrams/create-dataflow/instructions.md +130 -0
  277. package/_bmad/bmm/workflows/excalidraw-diagrams/create-dataflow/workflow.yaml +26 -0
  278. package/_bmad/bmm/workflows/excalidraw-diagrams/create-diagram/checklist.md +43 -0
  279. package/_bmad/bmm/workflows/excalidraw-diagrams/create-diagram/instructions.md +141 -0
  280. package/_bmad/bmm/workflows/excalidraw-diagrams/create-diagram/workflow.yaml +26 -0
  281. package/_bmad/bmm/workflows/excalidraw-diagrams/create-flowchart/checklist.md +49 -0
  282. package/_bmad/bmm/workflows/excalidraw-diagrams/create-flowchart/instructions.md +241 -0
  283. package/_bmad/bmm/workflows/excalidraw-diagrams/create-flowchart/workflow.yaml +26 -0
  284. package/_bmad/bmm/workflows/excalidraw-diagrams/create-wireframe/checklist.md +38 -0
  285. package/_bmad/bmm/workflows/excalidraw-diagrams/create-wireframe/instructions.md +133 -0
  286. package/_bmad/bmm/workflows/excalidraw-diagrams/create-wireframe/workflow.yaml +26 -0
  287. package/_bmad/bmm/workflows/testarch/atdd/atdd-checklist-template.md +363 -0
  288. package/_bmad/bmm/workflows/testarch/atdd/checklist.md +374 -0
  289. package/_bmad/bmm/workflows/testarch/atdd/instructions.md +806 -0
  290. package/_bmad/bmm/workflows/testarch/atdd/workflow.yaml +45 -0
  291. package/_bmad/bmm/workflows/testarch/automate/checklist.md +582 -0
  292. package/_bmad/bmm/workflows/testarch/automate/instructions.md +1324 -0
  293. package/_bmad/bmm/workflows/testarch/automate/workflow.yaml +52 -0
  294. package/_bmad/bmm/workflows/testarch/ci/checklist.md +247 -0
  295. package/_bmad/bmm/workflows/testarch/ci/github-actions-template.yaml +198 -0
  296. package/_bmad/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +149 -0
  297. package/_bmad/bmm/workflows/testarch/ci/instructions.md +536 -0
  298. package/_bmad/bmm/workflows/testarch/ci/workflow.yaml +45 -0
  299. package/_bmad/bmm/workflows/testarch/framework/checklist.md +320 -0
  300. package/_bmad/bmm/workflows/testarch/framework/instructions.md +481 -0
  301. package/_bmad/bmm/workflows/testarch/framework/workflow.yaml +47 -0
  302. package/_bmad/bmm/workflows/testarch/nfr-assess/checklist.md +407 -0
  303. package/_bmad/bmm/workflows/testarch/nfr-assess/instructions.md +726 -0
  304. package/_bmad/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +461 -0
  305. package/_bmad/bmm/workflows/testarch/nfr-assess/workflow.yaml +47 -0
  306. package/_bmad/bmm/workflows/testarch/test-design/checklist.md +407 -0
  307. package/_bmad/bmm/workflows/testarch/test-design/instructions.md +1158 -0
  308. package/_bmad/bmm/workflows/testarch/test-design/test-design-architecture-template.md +213 -0
  309. package/_bmad/bmm/workflows/testarch/test-design/test-design-qa-template.md +286 -0
  310. package/_bmad/bmm/workflows/testarch/test-design/test-design-template.md +294 -0
  311. package/_bmad/bmm/workflows/testarch/test-design/workflow.yaml +69 -0
  312. package/_bmad/bmm/workflows/testarch/test-review/checklist.md +472 -0
  313. package/_bmad/bmm/workflows/testarch/test-review/instructions.md +628 -0
  314. package/_bmad/bmm/workflows/testarch/test-review/test-review-template.md +390 -0
  315. package/_bmad/bmm/workflows/testarch/test-review/workflow.yaml +46 -0
  316. package/_bmad/bmm/workflows/testarch/trace/checklist.md +642 -0
  317. package/_bmad/bmm/workflows/testarch/trace/instructions.md +1030 -0
  318. package/_bmad/bmm/workflows/testarch/trace/trace-template.md +675 -0
  319. package/_bmad/bmm/workflows/testarch/trace/workflow.yaml +55 -0
  320. package/_bmad/core/agents/bmad-master.md +56 -0
  321. package/_bmad/core/config.yaml +9 -0
  322. package/_bmad/core/module-help.csv +9 -0
  323. package/_bmad/core/resources/excalidraw/README.md +160 -0
  324. package/_bmad/core/resources/excalidraw/excalidraw-helpers.md +127 -0
  325. package/_bmad/core/resources/excalidraw/library-loader.md +50 -0
  326. package/_bmad/core/resources/excalidraw/validate-json-instructions.md +79 -0
  327. package/_bmad/core/tasks/editorial-review-prose.xml +100 -0
  328. package/_bmad/core/tasks/editorial-review-structure.xml +209 -0
  329. package/_bmad/core/tasks/help.md +62 -0
  330. package/_bmad/core/tasks/index-docs.xml +65 -0
  331. package/_bmad/core/tasks/review-adversarial-general.xml +48 -0
  332. package/_bmad/core/tasks/shard-doc.xml +109 -0
  333. package/_bmad/core/tasks/workflow.xml +235 -0
  334. package/_bmad/core/workflows/advanced-elicitation/methods.csv +51 -0
  335. package/_bmad/core/workflows/advanced-elicitation/workflow.xml +117 -0
  336. package/_bmad/core/workflows/brainstorming/brain-methods.csv +62 -0
  337. package/_bmad/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -0
  338. package/_bmad/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
  339. package/_bmad/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
  340. package/_bmad/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
  341. package/_bmad/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
  342. package/_bmad/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
  343. package/_bmad/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -0
  344. package/_bmad/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
  345. package/_bmad/core/workflows/brainstorming/template.md +15 -0
  346. package/_bmad/core/workflows/brainstorming/workflow.md +58 -0
  347. package/_bmad/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
  348. package/_bmad/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
  349. package/_bmad/core/workflows/party-mode/steps/step-03-graceful-exit.md +157 -0
  350. package/_bmad/core/workflows/party-mode/workflow.md +194 -0
  351. package/dist/api/client.d.ts +16 -1
  352. package/dist/api/client.d.ts.map +1 -1
  353. package/dist/api/client.js +91 -5
  354. package/dist/api/client.js.map +1 -1
  355. package/dist/api/projects.d.ts +23 -2
  356. package/dist/api/projects.d.ts.map +1 -1
  357. package/dist/api/projects.js +32 -0
  358. package/dist/api/projects.js.map +1 -1
  359. package/dist/index.js +15 -0
  360. package/dist/index.js.map +1 -1
  361. package/dist/tools/projects/delete-attachment-from-task.d.ts.map +1 -0
  362. package/dist/tools/projects/delete-attachment-from-task.js.map +1 -0
  363. package/dist/tools/projects/delete-attachment.d.ts +55 -0
  364. package/dist/tools/projects/delete-attachment.d.ts.map +1 -0
  365. package/dist/tools/projects/delete-attachment.js +115 -0
  366. package/dist/tools/projects/delete-attachment.js.map +1 -0
  367. package/dist/tools/projects/download-attachment.d.ts +55 -0
  368. package/dist/tools/projects/download-attachment.d.ts.map +1 -0
  369. package/dist/tools/projects/download-attachment.js +153 -0
  370. package/dist/tools/projects/download-attachment.js.map +1 -0
  371. package/dist/tools/projects/get-attachment-list.d.ts +48 -0
  372. package/dist/tools/projects/get-attachment-list.d.ts.map +1 -0
  373. package/dist/tools/projects/get-attachment-list.js +118 -0
  374. package/dist/tools/projects/get-attachment-list.js.map +1 -0
  375. package/dist/tools/projects/get-attachment-metadata.d.ts +55 -0
  376. package/dist/tools/projects/get-attachment-metadata.d.ts.map +1 -0
  377. package/dist/tools/projects/get-attachment-metadata.js +120 -0
  378. package/dist/tools/projects/get-attachment-metadata.js.map +1 -0
  379. package/dist/tools/projects/register-attachment-to-task.d.ts.map +1 -0
  380. package/dist/tools/projects/register-attachment-to-task.js.map +1 -0
  381. package/dist/tools/projects/update-task.d.ts +4 -4
  382. package/dist/tools/projects/update-task.js +12 -12
  383. package/dist/tools/projects/update-task.js.map +1 -1
  384. package/dist/tools/projects/upload-attachment.d.ts +69 -0
  385. package/dist/tools/projects/upload-attachment.d.ts.map +1 -0
  386. package/dist/tools/projects/upload-attachment.js +109 -0
  387. package/dist/tools/projects/upload-attachment.js.map +1 -0
  388. package/dist/types/dooray-api.d.ts +15 -0
  389. package/dist/types/dooray-api.d.ts.map +1 -1
  390. package/docs/architecture.md +227 -0
  391. package/docs/development-guide.md +336 -0
  392. package/docs/index.md +115 -0
  393. package/docs/project-overview.md +105 -0
  394. package/docs/project-scan-report.json +120 -0
  395. package/docs/source-tree-analysis.md +240 -0
  396. package/package.json +1 -1
@@ -0,0 +1,463 @@
1
+ # File Utilities
2
+
3
+ ## Principle
4
+
5
+ Read and validate files (CSV, XLSX, PDF, ZIP) with automatic parsing, type-safe results, and download handling. Simplify file operations in Playwright tests with built-in format support and validation helpers.
6
+
7
+ ## Rationale
8
+
9
+ Testing file operations in Playwright requires boilerplate:
10
+
11
+ - Manual download handling
12
+ - External parsing libraries for each format
13
+ - No validation helpers
14
+ - Type-unsafe results
15
+ - Repetitive path handling
16
+
17
+ The `file-utils` module provides:
18
+
19
+ - **Auto-parsing**: CSV, XLSX, PDF, ZIP automatically parsed
20
+ - **Download handling**: Single function for UI or API-triggered downloads
21
+ - **Type-safe**: TypeScript interfaces for parsed results
22
+ - **Validation helpers**: Row count, header checks, content validation
23
+ - **Format support**: Multiple sheet support (XLSX), text extraction (PDF), archive extraction (ZIP)
24
+
25
+ ## Why Use This Instead of Vanilla Playwright?
26
+
27
+ | Vanilla Playwright | File Utils |
28
+ | ------------------------------------------- | ------------------------------------------------ |
29
+ | ~80 lines per CSV flow (download + parse) | ~10 lines end-to-end |
30
+ | Manual event orchestration for downloads | Encapsulated in `handleDownload()` |
31
+ | Manual path handling and `saveAs` | Returns a ready-to-use file path |
32
+ | Manual existence checks and error handling | Centralized in one place via utility patterns |
33
+ | Manual CSV parsing config (headers, typing) | `readCSV()` returns `{ data, headers }` directly |
34
+
35
+ ## Pattern Examples
36
+
37
+ ### Example 1: UI-Triggered CSV Download
38
+
39
+ **Context**: User clicks button, CSV downloads, validate contents.
40
+
41
+ **Implementation**:
42
+
43
+ ```typescript
44
+ import { handleDownload, readCSV } from '@seontechnologies/playwright-utils/file-utils';
45
+ import path from 'node:path';
46
+
47
+ const DOWNLOAD_DIR = path.join(__dirname, '../downloads');
48
+
49
+ test('should download and validate CSV', async ({ page }) => {
50
+ const downloadPath = await handleDownload({
51
+ page,
52
+ downloadDir: DOWNLOAD_DIR,
53
+ trigger: () => page.getByTestId('download-button-text/csv').click(),
54
+ });
55
+
56
+ const csvResult = await readCSV({ filePath: downloadPath });
57
+
58
+ // Access parsed data and headers
59
+ const { data, headers } = csvResult.content;
60
+ expect(headers).toEqual(['ID', 'Name', 'Email']);
61
+ expect(data[0]).toMatchObject({
62
+ ID: expect.any(String),
63
+ Name: expect.any(String),
64
+ Email: expect.any(String),
65
+ });
66
+ });
67
+ ```
68
+
69
+ **Key Points**:
70
+
71
+ - `handleDownload` waits for download, returns file path
72
+ - `readCSV` auto-parses to `{ headers, data }`
73
+ - Type-safe access to parsed content
74
+ - Clean up downloads in `afterEach`
75
+
76
+ ### Example 2: XLSX with Multiple Sheets
77
+
78
+ **Context**: Excel file with multiple sheets (e.g., Summary, Details, Errors).
79
+
80
+ **Implementation**:
81
+
82
+ ```typescript
83
+ import { readXLSX } from '@seontechnologies/playwright-utils/file-utils';
84
+
85
+ test('should read multi-sheet XLSX', async () => {
86
+ const downloadPath = await handleDownload({
87
+ page,
88
+ downloadDir: DOWNLOAD_DIR,
89
+ trigger: () => page.click('[data-testid="export-xlsx"]'),
90
+ });
91
+
92
+ const xlsxResult = await readXLSX({ filePath: downloadPath });
93
+
94
+ // Verify worksheet structure
95
+ expect(xlsxResult.content.worksheets.length).toBeGreaterThan(0);
96
+ const worksheet = xlsxResult.content.worksheets[0];
97
+ expect(worksheet).toBeDefined();
98
+ expect(worksheet).toHaveProperty('name');
99
+
100
+ // Access sheet data
101
+ const sheetData = worksheet?.data;
102
+ expect(Array.isArray(sheetData)).toBe(true);
103
+
104
+ // Use type assertion for type safety
105
+ const firstRow = sheetData![0] as Record<string, unknown>;
106
+ expect(firstRow).toHaveProperty('id');
107
+ });
108
+ ```
109
+
110
+ **Key Points**:
111
+
112
+ - `worksheets` array with `name` and `data` properties
113
+ - Access sheets by name
114
+ - Each sheet has its own headers and data
115
+ - Type-safe sheet iteration
116
+
117
+ ### Example 3: PDF Text Extraction
118
+
119
+ **Context**: Validate PDF report contains expected content.
120
+
121
+ **Implementation**:
122
+
123
+ ```typescript
124
+ import { readPDF } from '@seontechnologies/playwright-utils/file-utils';
125
+
126
+ test('should validate PDF report', async () => {
127
+ const downloadPath = await handleDownload({
128
+ page,
129
+ downloadDir: DOWNLOAD_DIR,
130
+ trigger: () => page.getByTestId('download-button-Text-based PDF Document').click(),
131
+ });
132
+
133
+ const pdfResult = await readPDF({ filePath: downloadPath });
134
+
135
+ // content is extracted text from all pages
136
+ expect(pdfResult.pagesCount).toBe(1);
137
+ expect(pdfResult.fileName).toContain('.pdf');
138
+ expect(pdfResult.content).toContain('All you need is the free Adobe Acrobat Reader');
139
+ });
140
+ ```
141
+
142
+ **PDF Reader Options:**
143
+
144
+ ```typescript
145
+ const result = await readPDF({
146
+ filePath: '/path/to/document.pdf',
147
+ mergePages: false, // Keep pages separate (default: true)
148
+ debug: true, // Enable debug logging
149
+ maxPages: 10, // Limit processing to first 10 pages
150
+ });
151
+ ```
152
+
153
+ **Important Limitation - Vector-based PDFs:**
154
+
155
+ Text extraction may fail for PDFs that store text as vector graphics (e.g., those generated by jsPDF):
156
+
157
+ ```typescript
158
+ // Vector-based PDF example (extraction fails gracefully)
159
+ const pdfResult = await readPDF({ filePath: downloadPath });
160
+
161
+ expect(pdfResult.pagesCount).toBe(1);
162
+ expect(pdfResult.info.extractionNotes).toContain(
163
+ 'Text extraction from vector-based PDFs is not supported.'
164
+ );
165
+ ```
166
+
167
+ Such PDFs will have:
168
+
169
+ - `textExtractionSuccess: false`
170
+ - `isVectorBased: true`
171
+ - Explanatory message in `extractionNotes`
172
+
173
+ ### Example 4: ZIP Archive Validation
174
+
175
+ **Context**: Validate ZIP contains expected files and extract specific file.
176
+
177
+ **Implementation**:
178
+
179
+ ```typescript
180
+ import { readZIP } from '@seontechnologies/playwright-utils/file-utils';
181
+
182
+ test('should validate ZIP archive', async () => {
183
+ const downloadPath = await handleDownload({
184
+ page,
185
+ downloadDir: DOWNLOAD_DIR,
186
+ trigger: () => page.click('[data-testid="download-backup"]'),
187
+ });
188
+
189
+ const zipResult = await readZIP({ filePath: downloadPath });
190
+
191
+ // Check file list
192
+ expect(Array.isArray(zipResult.content.entries)).toBe(true);
193
+ expect(zipResult.content.entries).toContain(
194
+ 'Case_53125_10-19-22_AM/Case_53125_10-19-22_AM_case_data.csv'
195
+ );
196
+
197
+ // Extract specific file
198
+ const targetFile = 'Case_53125_10-19-22_AM/Case_53125_10-19-22_AM_case_data.csv';
199
+ const zipWithExtraction = await readZIP({
200
+ filePath: downloadPath,
201
+ fileToExtract: targetFile,
202
+ });
203
+
204
+ // Access extracted file buffer
205
+ const extractedFiles = zipWithExtraction.content.extractedFiles || {};
206
+ const fileBuffer = extractedFiles[targetFile];
207
+ expect(fileBuffer).toBeInstanceOf(Buffer);
208
+ expect(fileBuffer?.length).toBeGreaterThan(0);
209
+ });
210
+ ```
211
+
212
+ **Key Points**:
213
+
214
+ - `content.entries` lists all files in archive
215
+ - `fileToExtract` extracts specific files to Buffer
216
+ - Validate archive structure
217
+ - Read and parse individual files from ZIP
218
+
219
+ ### Example 5: API-Triggered Download
220
+
221
+ **Context**: API endpoint returns file download (not UI click).
222
+
223
+ **Implementation**:
224
+
225
+ ```typescript
226
+ test('should download via API', async ({ page, request }) => {
227
+ const downloadPath = await handleDownload({
228
+ page, // Still need page for download events
229
+ downloadDir: DOWNLOAD_DIR,
230
+ trigger: async () => {
231
+ const response = await request.get('/api/export/csv', {
232
+ headers: { Authorization: 'Bearer token' },
233
+ });
234
+
235
+ if (!response.ok()) {
236
+ throw new Error(`Export failed: ${response.status()}`);
237
+ }
238
+ },
239
+ });
240
+
241
+ const { content } = await readCSV({ filePath: downloadPath });
242
+
243
+ expect(content.data).toHaveLength(100);
244
+ });
245
+ ```
246
+
247
+ **Key Points**:
248
+
249
+ - `trigger` can be async API call
250
+ - API must return `Content-Disposition` header
251
+ - Still need `page` for download events
252
+ - Works with authenticated endpoints
253
+
254
+ ### Example 6: Reading CSV from Buffer (ZIP extraction)
255
+
256
+ **Context**: Read CSV content directly from a Buffer (e.g., extracted from ZIP).
257
+
258
+ **Implementation**:
259
+
260
+ ```typescript
261
+ // Read from a Buffer (e.g., extracted from a ZIP)
262
+ const zipResult = await readZIP({
263
+ filePath: 'archive.zip',
264
+ fileToExtract: 'data.csv',
265
+ });
266
+ const fileBuffer = zipResult.content.extractedFiles?.['data.csv'];
267
+ const csvFromBuffer = await readCSV({ content: fileBuffer });
268
+
269
+ // Read from a string
270
+ const csvString = 'name,age\nJohn,30\nJane,25';
271
+ const csvFromString = await readCSV({ content: csvString });
272
+
273
+ const { data, headers } = csvFromString.content;
274
+ expect(headers).toContain('name');
275
+ expect(headers).toContain('age');
276
+ ```
277
+
278
+ ## API Reference
279
+
280
+ ### CSV Reader Options
281
+
282
+ | Option | Type | Default | Description |
283
+ | -------------- | ------------------ | -------- | -------------------------------------- |
284
+ | `filePath` | `string` | - | Path to CSV file (mutually exclusive) |
285
+ | `content` | `string \| Buffer` | - | Direct content (mutually exclusive) |
286
+ | `delimiter` | `string \| 'auto'` | `','` | Value separator, auto-detect if 'auto' |
287
+ | `encoding` | `string` | `'utf8'` | File encoding |
288
+ | `parseHeaders` | `boolean` | `true` | Use first row as headers |
289
+ | `trim` | `boolean` | `true` | Trim whitespace from values |
290
+
291
+ ### XLSX Reader Options
292
+
293
+ | Option | Type | Description |
294
+ | ----------- | -------- | ------------------------------ |
295
+ | `filePath` | `string` | Path to XLSX file |
296
+ | `sheetName` | `string` | Name of sheet to set as active |
297
+
298
+ ### PDF Reader Options
299
+
300
+ | Option | Type | Default | Description |
301
+ | ------------ | --------- | ------- | --------------------------- |
302
+ | `filePath` | `string` | - | Path to PDF file (required) |
303
+ | `mergePages` | `boolean` | `true` | Merge text from all pages |
304
+ | `maxPages` | `number` | - | Maximum pages to extract |
305
+ | `debug` | `boolean` | `false` | Enable debug logging |
306
+
307
+ ### ZIP Reader Options
308
+
309
+ | Option | Type | Description |
310
+ | --------------- | -------- | ---------------------------------- |
311
+ | `filePath` | `string` | Path to ZIP file |
312
+ | `fileToExtract` | `string` | Specific file to extract to Buffer |
313
+
314
+ ### Return Values
315
+
316
+ #### CSV Reader Return Value
317
+
318
+ ```typescript
319
+ {
320
+ content: {
321
+ data: Array<Array<string | number>>, // Parsed rows (excludes header row if parseHeaders: true)
322
+ headers: string[] | null // Column headers (null if parseHeaders: false)
323
+ }
324
+ }
325
+ ```
326
+
327
+ #### XLSX Reader Return Value
328
+
329
+ ```typescript
330
+ {
331
+ content: {
332
+ worksheets: Array<{
333
+ name: string, // Sheet name
334
+ rows: Array<Array<any>>, // All rows including headers
335
+ headers?: string[] // First row as headers (if present)
336
+ }>
337
+ }
338
+ }
339
+ ```
340
+
341
+ #### PDF Reader Return Value
342
+
343
+ ```typescript
344
+ {
345
+ content: string, // Extracted text (merged or per-page based on mergePages)
346
+ pagesCount: number, // Total pages in PDF
347
+ fileName?: string, // Original filename if available
348
+ info?: Record<string, any> // PDF metadata (author, title, etc.)
349
+ }
350
+ ```
351
+
352
+ > **Note**: When `mergePages: false`, `content` is an array of strings (one per page). When `maxPages` is set, only that many pages are extracted.
353
+
354
+ #### ZIP Reader Return Value
355
+
356
+ ```typescript
357
+ {
358
+ content: {
359
+ entries: Array<{
360
+ name: string, // File/directory path within ZIP
361
+ size: number, // Uncompressed size in bytes
362
+ isDirectory: boolean // True for directories
363
+ }>,
364
+ extractedFiles: Record<string, Buffer | string> // Extracted file contents by path
365
+ }
366
+ }
367
+ ```
368
+
369
+ > **Note**: When `fileToExtract` is specified, only that file appears in `extractedFiles`.
370
+
371
+ ## Download Cleanup Pattern
372
+
373
+ ```typescript
374
+ test.afterEach(async () => {
375
+ // Clean up downloaded files
376
+ await fs.remove(DOWNLOAD_DIR);
377
+ });
378
+ ```
379
+
380
+ ## Comparison with Vanilla Playwright
381
+
382
+ Vanilla Playwright (real test) snippet:
383
+
384
+ ```typescript
385
+ // ~80 lines of boilerplate!
386
+ const [download] = await Promise.all([
387
+ page.waitForEvent('download'),
388
+ page.getByTestId('download-button-CSV Export').click(),
389
+ ]);
390
+
391
+ const failure = await download.failure();
392
+ expect(failure).toBeNull();
393
+
394
+ const filePath = testInfo.outputPath(download.suggestedFilename());
395
+ await download.saveAs(filePath);
396
+
397
+ await expect
398
+ .poll(
399
+ async () => {
400
+ try {
401
+ await fs.access(filePath);
402
+ return true;
403
+ } catch {
404
+ return false;
405
+ }
406
+ },
407
+ { timeout: 5000, intervals: [100, 200, 500] }
408
+ )
409
+ .toBe(true);
410
+
411
+ const csvContent = await fs.readFile(filePath, 'utf-8');
412
+
413
+ const parseResult = parse(csvContent, {
414
+ header: true,
415
+ skipEmptyLines: true,
416
+ dynamicTyping: true,
417
+ transformHeader: (header: string) => header.trim(),
418
+ });
419
+
420
+ if (parseResult.errors.length > 0) {
421
+ throw new Error(`CSV parsing errors: ${JSON.stringify(parseResult.errors)}`);
422
+ }
423
+
424
+ const data = parseResult.data as Array<Record<string, unknown>>;
425
+ const headers = parseResult.meta.fields || [];
426
+ ```
427
+
428
+ With File Utils, the same flow becomes:
429
+
430
+ ```typescript
431
+ const downloadPath = await handleDownload({
432
+ page,
433
+ downloadDir: DOWNLOAD_DIR,
434
+ trigger: () => page.getByTestId('download-button-text/csv').click(),
435
+ });
436
+
437
+ const { data, headers } = (await readCSV({ filePath: downloadPath })).content;
438
+ ```
439
+
440
+ ## Related Fragments
441
+
442
+ - `overview.md` - Installation and imports
443
+ - `api-request.md` - API-triggered downloads
444
+ - `recurse.md` - Poll for file generation completion
445
+
446
+ ## Anti-Patterns
447
+
448
+ **DON'T leave downloads in place:**
449
+
450
+ ```typescript
451
+ test('creates file', async () => {
452
+ await handleDownload({ ... })
453
+ // File left in downloads folder
454
+ })
455
+ ```
456
+
457
+ **DO clean up after tests:**
458
+
459
+ ```typescript
460
+ test.afterEach(async () => {
461
+ await fs.remove(DOWNLOAD_DIR);
462
+ });
463
+ ```