siesa-agents 2.1.40 → 2.1.42
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.
- package/README.md +147 -147
- package/bin/install.js +534 -534
- package/bin/prepare-publish.js +26 -26
- package/bin/restore-folders.js +26 -26
- package/bmad/_config/agent-manifest.csv +20 -20
- package/bmad/_config/agents/bmb-agent-builder.customize.yaml +41 -41
- package/bmad/_config/agents/bmb-module-builder.customize.yaml +41 -41
- package/bmad/_config/agents/bmb-workflow-builder.customize.yaml +41 -41
- package/bmad/_config/files-manifest.csv +469 -469
- package/bmad/_config/ides/claude-code.yaml +6 -6
- package/bmad/_config/manifest.yaml +14 -14
- package/bmad/_config/task-manifest.csv +6 -6
- package/bmad/_config/tool-manifest.csv +1 -1
- package/bmad/_config/workflow-manifest.csv +45 -45
- package/bmad/_memory/config.yaml +11 -11
- package/bmad/bmb/README.md +25 -25
- package/bmad/bmb/agents/agent-builder.md +57 -57
- package/bmad/bmb/agents/module-builder.md +60 -60
- package/bmad/bmb/agents/workflow-builder.md +56 -56
- package/bmad/bmb/config.yaml +12 -12
- package/bmad/bmb/docs/workflows/architecture.md +220 -220
- package/bmad/bmb/docs/workflows/common-workflow-tools.csv +18 -18
- package/bmad/bmb/docs/workflows/csv-data-file-standards.md +206 -206
- package/bmad/bmb/docs/workflows/intent-vs-prescriptive-spectrum.md +220 -220
- package/bmad/bmb/docs/workflows/step-file-rules.md +469 -469
- package/bmad/bmb/docs/workflows/templates/step-01-init-continuable-template.md +241 -241
- package/bmad/bmb/docs/workflows/templates/step-1b-template.md +223 -223
- package/bmad/bmb/docs/workflows/templates/step-file.md +139 -139
- package/bmad/bmb/docs/workflows/templates/step-template.md +290 -290
- package/bmad/bmb/docs/workflows/templates/workflow-template.md +104 -104
- package/bmad/bmb/docs/workflows/templates/workflow.md +58 -58
- package/bmad/bmb/docs/workflows/terms.md +97 -97
- package/bmad/bmb/reference/agents/simple-examples/README.md +223 -223
- package/bmad/bmb/reference/readme.md +3 -3
- package/bmad/bmb/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv +17 -17
- package/bmad/bmb/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv +15 -15
- package/bmad/bmb/reference/workflows/meal-prep-nutrition/data/recipe-database.csv +27 -27
- package/bmad/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +177 -177
- package/bmad/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +121 -121
- package/bmad/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +165 -165
- package/bmad/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +154 -154
- package/bmad/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +183 -183
- package/bmad/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +168 -168
- package/bmad/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +195 -195
- package/bmad/bmb/reference/workflows/meal-prep-nutrition/templates/assessment-section.md +25 -25
- package/bmad/bmb/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md +68 -68
- package/bmad/bmb/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md +29 -29
- package/bmad/bmb/reference/workflows/meal-prep-nutrition/templates/profile-section.md +47 -47
- package/bmad/bmb/reference/workflows/meal-prep-nutrition/templates/shopping-section.md +37 -37
- package/bmad/bmb/reference/workflows/meal-prep-nutrition/templates/strategy-section.md +18 -18
- package/bmad/bmb/reference/workflows/meal-prep-nutrition/workflow.md +59 -59
- package/bmad/bmb/workflows/agent/data/agent-compilation.md +273 -273
- package/bmad/bmb/workflows/agent/data/agent-menu-patterns.md +233 -233
- package/bmad/bmb/workflows/agent/data/agent-metadata.md +208 -208
- package/bmad/bmb/workflows/agent/data/brainstorm-context.md +146 -146
- package/bmad/bmb/workflows/agent/data/communication-presets.csv +61 -61
- package/bmad/bmb/workflows/agent/data/critical-actions.md +120 -120
- package/bmad/bmb/workflows/agent/data/expert-agent-architecture.md +236 -236
- package/bmad/bmb/workflows/agent/data/expert-agent-validation.md +173 -173
- package/bmad/bmb/workflows/agent/data/module-agent-validation.md +124 -124
- package/bmad/bmb/workflows/agent/data/persona-properties.md +266 -266
- package/bmad/bmb/workflows/agent/data/principles-crafting.md +292 -292
- package/bmad/bmb/workflows/agent/data/reference/expert-examples/journal-keeper/journal-keeper-sidecar/entries/yy-mm-dd-entry-template.md +16 -16
- package/bmad/bmb/workflows/agent/data/reference/module-examples/architect.md +68 -68
- package/bmad/bmb/workflows/agent/data/simple-agent-architecture.md +204 -204
- package/bmad/bmb/workflows/agent/data/simple-agent-validation.md +132 -132
- package/bmad/bmb/workflows/agent/data/understanding-agent-types.md +222 -222
- package/bmad/bmb/workflows/agent/steps-c/step-01-brainstorm.md +126 -126
- package/bmad/bmb/workflows/agent/steps-c/step-02-discovery.md +168 -168
- package/bmad/bmb/workflows/agent/steps-c/step-03-type-metadata.md +294 -294
- package/bmad/bmb/workflows/agent/steps-c/step-04-persona.md +210 -210
- package/bmad/bmb/workflows/agent/steps-c/step-05-commands-menu.md +176 -176
- package/bmad/bmb/workflows/agent/steps-c/step-06-activation.md +275 -275
- package/bmad/bmb/workflows/agent/steps-c/step-07a-build-simple.md +185 -185
- package/bmad/bmb/workflows/agent/steps-c/step-07b-build-expert.md +201 -201
- package/bmad/bmb/workflows/agent/steps-c/step-07c-build-module.md +258 -258
- package/bmad/bmb/workflows/agent/steps-c/step-08a-plan-traceability.md +203 -203
- package/bmad/bmb/workflows/agent/steps-c/step-08b-metadata-validation.md +135 -135
- package/bmad/bmb/workflows/agent/steps-c/step-08c-persona-validation.md +161 -161
- package/bmad/bmb/workflows/agent/steps-c/step-08d-menu-validation.md +158 -158
- package/bmad/bmb/workflows/agent/steps-c/step-08e-structure-validation.md +306 -306
- package/bmad/bmb/workflows/agent/steps-c/step-08f-sidecar-validation.md +462 -462
- package/bmad/bmb/workflows/agent/steps-c/step-09-celebrate.md +244 -244
- package/bmad/bmb/workflows/agent/steps-e/e-01-load-existing.md +214 -214
- package/bmad/bmb/workflows/agent/steps-e/e-02-discover-edits.md +191 -191
- package/bmad/bmb/workflows/agent/steps-e/e-03a-validate-metadata.md +78 -78
- package/bmad/bmb/workflows/agent/steps-e/e-03b-validate-persona.md +76 -76
- package/bmad/bmb/workflows/agent/steps-e/e-03c-validate-menu.md +75 -75
- package/bmad/bmb/workflows/agent/steps-e/e-03d-validate-structure.md +75 -75
- package/bmad/bmb/workflows/agent/steps-e/e-03e-validate-sidecar.md +78 -78
- package/bmad/bmb/workflows/agent/steps-e/e-03f-validation-summary.md +119 -119
- package/bmad/bmb/workflows/agent/steps-e/e-04-type-metadata.md +122 -122
- package/bmad/bmb/workflows/agent/steps-e/e-05-persona.md +132 -132
- package/bmad/bmb/workflows/agent/steps-e/e-06-commands-menu.md +120 -120
- package/bmad/bmb/workflows/agent/steps-e/e-07-activation.md +122 -122
- package/bmad/bmb/workflows/agent/steps-e/e-08a-edit-simple.md +134 -134
- package/bmad/bmb/workflows/agent/steps-e/e-08b-edit-expert.md +117 -117
- package/bmad/bmb/workflows/agent/steps-e/e-08c-edit-module.md +120 -120
- package/bmad/bmb/workflows/agent/steps-e/e-09a-validate-metadata.md +70 -70
- package/bmad/bmb/workflows/agent/steps-e/e-09b-validate-persona.md +70 -70
- package/bmad/bmb/workflows/agent/steps-e/e-09c-validate-menu.md +69 -69
- package/bmad/bmb/workflows/agent/steps-e/e-09d-validate-structure.md +69 -69
- package/bmad/bmb/workflows/agent/steps-e/e-09e-validate-sidecar.md +70 -70
- package/bmad/bmb/workflows/agent/steps-e/e-09f-validation-summary.md +111 -111
- package/bmad/bmb/workflows/agent/steps-e/e-10-celebrate.md +150 -150
- package/bmad/bmb/workflows/agent/steps-v/v-01-load-review.md +128 -128
- package/bmad/bmb/workflows/agent/steps-v/v-02a-validate-metadata.md +73 -73
- package/bmad/bmb/workflows/agent/steps-v/v-02b-validate-persona.md +72 -72
- package/bmad/bmb/workflows/agent/steps-v/v-02c-validate-menu.md +71 -71
- package/bmad/bmb/workflows/agent/steps-v/v-02d-validate-structure.md +71 -71
- package/bmad/bmb/workflows/agent/steps-v/v-02e-validate-sidecar.md +76 -76
- package/bmad/bmb/workflows/agent/steps-v/v-03-summary.md +100 -100
- package/bmad/bmb/workflows/agent/templates/agent-plan.template.md +5 -5
- package/bmad/bmb/workflows/agent/templates/expert-agent-template/expert-agent.template.md +76 -76
- package/bmad/bmb/workflows/agent/templates/simple-agent.template.md +71 -71
- package/bmad/bmb/workflows/agent/workflow.md +123 -123
- package/bmad/bmb/workflows/create-module/steps/step-01-init.md +156 -156
- package/bmad/bmb/workflows/create-module/steps/step-01b-continue.md +170 -170
- package/bmad/bmb/workflows/create-module/steps/step-02-concept.md +218 -218
- package/bmad/bmb/workflows/create-module/steps/step-03-components.md +268 -268
- package/bmad/bmb/workflows/create-module/steps/step-04-structure.md +229 -229
- package/bmad/bmb/workflows/create-module/steps/step-05-config.md +234 -234
- package/bmad/bmb/workflows/create-module/steps/step-06-agents.md +297 -297
- package/bmad/bmb/workflows/create-module/steps/step-07-workflows.md +229 -229
- package/bmad/bmb/workflows/create-module/steps/step-08-installer.md +187 -187
- package/bmad/bmb/workflows/create-module/steps/step-09-documentation.md +310 -310
- package/bmad/bmb/workflows/create-module/steps/step-10-roadmap.md +338 -338
- package/bmad/bmb/workflows/create-module/steps/step-11-validate.md +336 -336
- package/bmad/bmb/workflows/create-module/templates/agent.template.md +313 -313
- package/bmad/bmb/workflows/create-module/templates/installer.template.js +47 -47
- package/bmad/bmb/workflows/create-module/templates/module-plan.template.md +5 -5
- package/bmad/bmb/workflows/create-module/templates/module.template.yaml +53 -53
- package/bmad/bmb/workflows/create-module/templates/workflow-plan-template.md +23 -23
- package/bmad/bmb/workflows/create-module/validation.md +126 -126
- package/bmad/bmb/workflows/create-module/workflow.md +56 -56
- package/bmad/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/data/dietary-restrictions.csv +17 -17
- package/bmad/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/data/macro-calculator.csv +15 -15
- package/bmad/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/data/recipe-database.csv +27 -27
- package/bmad/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/steps/step-01-init.md +177 -177
- package/bmad/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/steps/step-01b-continue.md +150 -150
- package/bmad/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/steps/step-02-profile.md +164 -164
- package/bmad/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/steps/step-03-assessment.md +152 -152
- package/bmad/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/steps/step-04-strategy.md +182 -182
- package/bmad/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/steps/step-05-shopping.md +167 -167
- package/bmad/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/steps/step-06-prep-schedule.md +194 -194
- package/bmad/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/templates/assessment-section.md +25 -25
- package/bmad/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/templates/nutrition-plan.md +68 -68
- package/bmad/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/templates/prep-schedule-section.md +29 -29
- package/bmad/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/templates/profile-section.md +47 -47
- package/bmad/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/templates/shopping-section.md +37 -37
- package/bmad/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/templates/strategy-section.md +18 -18
- package/bmad/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/workflow.md +58 -58
- package/bmad/bmb/workflows/create-workflow/steps/step-01-init.md +158 -158
- package/bmad/bmb/workflows/create-workflow/steps/step-02-gather.md +212 -212
- package/bmad/bmb/workflows/create-workflow/steps/step-03-tools-configuration.md +251 -251
- package/bmad/bmb/workflows/create-workflow/steps/step-04-plan-review.md +217 -217
- package/bmad/bmb/workflows/create-workflow/steps/step-05-output-format-design.md +290 -290
- package/bmad/bmb/workflows/create-workflow/steps/step-06-design.md +272 -272
- package/bmad/bmb/workflows/create-workflow/steps/step-07-build.md +323 -323
- package/bmad/bmb/workflows/create-workflow/steps/step-08-review.md +285 -285
- package/bmad/bmb/workflows/create-workflow/steps/step-09-complete.md +188 -188
- package/bmad/bmb/workflows/create-workflow/workflow.md +59 -59
- package/bmad/bmb/workflows/edit-workflow/steps/step-01-analyze.md +217 -217
- package/bmad/bmb/workflows/edit-workflow/steps/step-02-discover.md +254 -254
- package/bmad/bmb/workflows/edit-workflow/steps/step-03-improve.md +218 -218
- package/bmad/bmb/workflows/edit-workflow/steps/step-04-validate.md +194 -194
- package/bmad/bmb/workflows/edit-workflow/steps/step-05-compliance-check.md +246 -246
- package/bmad/bmb/workflows/edit-workflow/templates/completion-summary.md +75 -75
- package/bmad/bmb/workflows/edit-workflow/templates/improvement-goals.md +68 -68
- package/bmad/bmb/workflows/edit-workflow/templates/improvement-log.md +40 -40
- package/bmad/bmb/workflows/edit-workflow/templates/validation-results.md +51 -51
- package/bmad/bmb/workflows/edit-workflow/templates/workflow-analysis.md +56 -56
- package/bmad/bmb/workflows/edit-workflow/workflow.md +59 -59
- package/bmad/bmb/workflows/workflow-compliance-check/steps/step-01-validate-goal.md +153 -153
- package/bmad/bmb/workflows/workflow-compliance-check/steps/step-02-workflow-validation.md +244 -244
- package/bmad/bmb/workflows/workflow-compliance-check/steps/step-03-step-validation.md +275 -275
- package/bmad/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +296 -296
- package/bmad/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +265 -265
- package/bmad/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +361 -361
- package/bmad/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +259 -259
- package/bmad/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +302 -302
- package/bmad/bmb/workflows/workflow-compliance-check/templates/compliance-report.md +140 -140
- package/bmad/bmb/workflows/workflow-compliance-check/workflow.md +59 -59
- package/bmad/bmb/workflows-legacy/edit-module/README.md +171 -171
- package/bmad/bmb/workflows-legacy/edit-module/checklist.md +163 -163
- package/bmad/bmb/workflows-legacy/edit-module/instructions.md +340 -340
- package/bmad/bmb/workflows-legacy/edit-module/workflow.yaml +32 -32
- package/bmad/bmb/workflows-legacy/module-brief/README.md +264 -264
- package/bmad/bmb/workflows-legacy/module-brief/checklist.md +116 -116
- package/bmad/bmb/workflows-legacy/module-brief/instructions.md +268 -268
- package/bmad/bmb/workflows-legacy/module-brief/template.md +275 -275
- package/bmad/bmb/workflows-legacy/module-brief/workflow.yaml +34 -34
- package/bmad/bmm/agents/analyst.md +76 -76
- package/bmad/bmm/agents/architect.md +68 -68
- package/bmad/bmm/agents/dev.md +70 -70
- package/bmad/bmm/agents/pm.md +70 -70
- package/bmad/bmm/agents/quick-flow-solo-dev.md +68 -68
- package/bmad/bmm/agents/sm.md +71 -71
- package/bmad/bmm/agents/tea.md +71 -71
- package/bmad/bmm/agents/tech-writer.md +72 -72
- package/bmad/bmm/agents/ux-designer.md +68 -68
- package/bmad/bmm/config.yaml +18 -18
- package/bmad/bmm/data/README.md +29 -29
- package/bmad/bmm/data/documentation-standards.md +262 -262
- package/bmad/bmm/data/project-context-template.md +40 -40
- package/bmad/bmm/teams/default-party.csv +21 -21
- package/bmad/bmm/teams/team-fullstack.yaml +12 -12
- package/bmad/bmm/testarch/knowledge/api-request.md +303 -303
- package/bmad/bmm/testarch/knowledge/auth-session.md +356 -356
- package/bmad/bmm/testarch/knowledge/burn-in.md +273 -273
- package/bmad/bmm/testarch/knowledge/ci-burn-in.md +675 -675
- package/bmad/bmm/testarch/knowledge/component-tdd.md +486 -486
- package/bmad/bmm/testarch/knowledge/contract-testing.md +957 -957
- package/bmad/bmm/testarch/knowledge/data-factories.md +500 -500
- package/bmad/bmm/testarch/knowledge/email-auth.md +721 -721
- package/bmad/bmm/testarch/knowledge/error-handling.md +725 -725
- package/bmad/bmm/testarch/knowledge/feature-flags.md +750 -750
- package/bmad/bmm/testarch/knowledge/file-utils.md +260 -260
- package/bmad/bmm/testarch/knowledge/fixture-architecture.md +401 -401
- package/bmad/bmm/testarch/knowledge/fixtures-composition.md +382 -382
- package/bmad/bmm/testarch/knowledge/intercept-network-call.md +280 -280
- package/bmad/bmm/testarch/knowledge/log.md +294 -294
- package/bmad/bmm/testarch/knowledge/network-error-monitor.md +272 -272
- package/bmad/bmm/testarch/knowledge/network-first.md +486 -486
- package/bmad/bmm/testarch/knowledge/network-recorder.md +265 -265
- package/bmad/bmm/testarch/knowledge/nfr-criteria.md +670 -670
- package/bmad/bmm/testarch/knowledge/overview.md +283 -283
- package/bmad/bmm/testarch/knowledge/playwright-config.md +730 -730
- package/bmad/bmm/testarch/knowledge/probability-impact.md +601 -601
- package/bmad/bmm/testarch/knowledge/recurse.md +296 -296
- package/bmad/bmm/testarch/knowledge/risk-governance.md +615 -615
- package/bmad/bmm/testarch/knowledge/selective-testing.md +732 -732
- package/bmad/bmm/testarch/knowledge/selector-resilience.md +527 -527
- package/bmad/bmm/testarch/knowledge/test-healing-patterns.md +644 -644
- package/bmad/bmm/testarch/knowledge/test-levels-framework.md +473 -473
- package/bmad/bmm/testarch/knowledge/test-priorities-matrix.md +373 -373
- package/bmad/bmm/testarch/knowledge/test-quality.md +664 -664
- package/bmad/bmm/testarch/knowledge/timing-debugging.md +372 -372
- package/bmad/bmm/testarch/knowledge/visual-debugging.md +524 -524
- package/bmad/bmm/testarch/tea-index.csv +33 -33
- package/bmad/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -10
- package/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +182 -182
- package/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +166 -166
- package/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +204 -204
- package/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +207 -207
- package/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +210 -210
- package/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +224 -224
- package/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +199 -199
- package/bmad/bmm/workflows/1-analysis/create-product-brief/workflow.md +58 -58
- package/bmad/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -137
- package/bmad/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -229
- package/bmad/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -238
- package/bmad/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -206
- package/bmad/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -234
- package/bmad/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +443 -443
- package/bmad/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -182
- package/bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -237
- package/bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +200 -200
- package/bmad/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -249
- package/bmad/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -259
- package/bmad/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -177
- package/bmad/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +475 -475
- package/bmad/bmm/workflows/1-analysis/research/research.template.md +29 -29
- package/bmad/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -137
- package/bmad/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -239
- package/bmad/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -248
- package/bmad/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -202
- package/bmad/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +239 -239
- package/bmad/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +486 -486
- package/bmad/bmm/workflows/1-analysis/research/workflow.md +173 -173
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -135
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -127
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -190
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -216
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -219
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -234
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -252
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -254
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -224
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -224
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -241
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +332 -248
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -237
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -264
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +228 -228
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -13
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +59 -43
- package/bmad/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +12 -12
- package/bmad/bmm/workflows/2-plan-workflows/prd/prd-template.md +11 -11
- package/bmad/bmm/workflows/2-plan-workflows/prd/project-types.csv +10 -10
- package/bmad/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +197 -197
- package/bmad/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +166 -166
- package/bmad/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +421 -421
- package/bmad/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +290 -290
- package/bmad/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +291 -291
- package/bmad/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +271 -271
- package/bmad/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +262 -262
- package/bmad/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +258 -258
- package/bmad/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +299 -299
- package/bmad/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +270 -270
- package/bmad/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +294 -294
- package/bmad/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +186 -186
- package/bmad/bmm/workflows/2-plan-workflows/prd/workflow.md +63 -63
- package/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +190 -190
- package/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +178 -178
- package/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +179 -179
- package/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +139 -139
- package/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +252 -252
- package/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +133 -133
- package/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -4
- package/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +55 -55
- package/bmad/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -12
- package/bmad/bmm/workflows/3-solutioning/create-architecture/data/company-standards/architecture-patterns.md +415 -415
- package/bmad/bmm/workflows/3-solutioning/create-architecture/data/company-standards/backend-standards.md +811 -811
- package/bmad/bmm/workflows/3-solutioning/create-architecture/data/company-standards/frontend-standards.md +375 -375
- package/bmad/bmm/workflows/3-solutioning/create-architecture/data/company-standards/technical-preferences-ux.md +422 -422
- package/bmad/bmm/workflows/3-solutioning/create-architecture/data/company-standards/technology-stack.md +235 -235
- package/bmad/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +10 -10
- package/bmad/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +6 -6
- package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +166 -166
- package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +164 -164
- package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -224
- package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +342 -342
- package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +328 -328
- package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +368 -368
- package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -379
- package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +366 -366
- package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +352 -352
- package/bmad/bmm/workflows/3-solutioning/create-architecture/workflow.md +51 -51
- package/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -259
- package/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -233
- package/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -272
- package/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +145 -145
- package/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -57
- package/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +59 -59
- package/bmad/bmm/workflows/4-implementation/code-review/checklist.md +23 -23
- package/bmad/bmm/workflows/4-implementation/code-review/instructions.xml +224 -224
- package/bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +49 -49
- package/bmad/bmm/workflows/4-implementation/correct-course/checklist.md +279 -279
- package/bmad/bmm/workflows/4-implementation/correct-course/instructions.md +206 -206
- package/bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +58 -58
- package/bmad/bmm/workflows/4-implementation/create-story/checklist.md +358 -358
- package/bmad/bmm/workflows/4-implementation/create-story/steps/step-01-determine-story.md +85 -85
- package/bmad/bmm/workflows/4-implementation/create-story/steps/step-02-analyze.md +67 -67
- package/bmad/bmm/workflows/4-implementation/create-story/steps/step-03-architecture.md +71 -71
- package/bmad/bmm/workflows/4-implementation/create-story/steps/step-04-web-research.md +58 -58
- package/bmad/bmm/workflows/4-implementation/create-story/steps/step-05-create-file.md +76 -76
- package/bmad/bmm/workflows/4-implementation/create-story/steps/step-06-finalize.md +66 -66
- package/bmad/bmm/workflows/4-implementation/create-story/template.md +49 -49
- package/bmad/bmm/workflows/4-implementation/create-story/workflow.md +58 -58
- package/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml.bak +63 -63
- package/bmad/bmm/workflows/4-implementation/dev-story/checklist.md +85 -85
- package/bmad/bmm/workflows/4-implementation/dev-story/instructions.xml +470 -470
- package/bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +25 -25
- package/bmad/bmm/workflows/4-implementation/retrospective/instructions.md +1443 -1443
- package/bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +56 -56
- package/bmad/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -33
- package/bmad/bmm/workflows/4-implementation/sprint-planning/instructions.md +225 -225
- package/bmad/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -55
- package/bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +52 -52
- package/bmad/bmm/workflows/4-implementation/sprint-status/instructions.md +229 -229
- package/bmad/bmm/workflows/4-implementation/sprint-status/workflow.yaml +34 -34
- package/bmad/bmm/workflows/bmad-quick-flow/create-tech-spec/steps/step-01-understand.md +189 -189
- package/bmad/bmm/workflows/bmad-quick-flow/create-tech-spec/steps/step-02-investigate.md +144 -144
- package/bmad/bmm/workflows/bmad-quick-flow/create-tech-spec/steps/step-03-generate.md +128 -128
- package/bmad/bmm/workflows/bmad-quick-flow/create-tech-spec/steps/step-04-review.md +173 -173
- package/bmad/bmm/workflows/bmad-quick-flow/create-tech-spec/tech-spec-template.md +74 -74
- package/bmad/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.md +79 -79
- package/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +156 -156
- package/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +120 -120
- package/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +113 -113
- package/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +113 -113
- package/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +106 -106
- package/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +140 -140
- package/bmad/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +52 -52
- package/bmad/bmm/workflows/document-project/checklist.md +245 -245
- package/bmad/bmm/workflows/document-project/documentation-requirements.csv +12 -12
- package/bmad/bmm/workflows/document-project/instructions.md +221 -221
- package/bmad/bmm/workflows/document-project/templates/deep-dive-template.md +345 -345
- package/bmad/bmm/workflows/document-project/templates/index-template.md +169 -169
- package/bmad/bmm/workflows/document-project/templates/project-overview-template.md +103 -103
- package/bmad/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -160
- package/bmad/bmm/workflows/document-project/templates/source-tree-template.md +135 -135
- package/bmad/bmm/workflows/document-project/workflow.yaml +28 -28
- package/bmad/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -298
- package/bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -31
- package/bmad/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -1106
- package/bmad/bmm/workflows/document-project/workflows/full-scan.yaml +31 -31
- package/bmad/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-library.json +90 -90
- package/bmad/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-templates.yaml +127 -127
- package/bmad/bmm/workflows/excalidraw-diagrams/create-dataflow/checklist.md +39 -39
- package/bmad/bmm/workflows/excalidraw-diagrams/create-dataflow/instructions.md +130 -130
- package/bmad/bmm/workflows/excalidraw-diagrams/create-dataflow/workflow.yaml +25 -25
- package/bmad/bmm/workflows/excalidraw-diagrams/create-diagram/checklist.md +43 -43
- package/bmad/bmm/workflows/excalidraw-diagrams/create-diagram/instructions.md +141 -141
- package/bmad/bmm/workflows/excalidraw-diagrams/create-diagram/workflow.yaml +25 -25
- package/bmad/bmm/workflows/excalidraw-diagrams/create-flowchart/checklist.md +49 -49
- package/bmad/bmm/workflows/excalidraw-diagrams/create-flowchart/instructions.md +241 -241
- package/bmad/bmm/workflows/excalidraw-diagrams/create-flowchart/workflow.yaml +25 -25
- package/bmad/bmm/workflows/excalidraw-diagrams/create-wireframe/checklist.md +38 -38
- package/bmad/bmm/workflows/excalidraw-diagrams/create-wireframe/instructions.md +133 -133
- package/bmad/bmm/workflows/excalidraw-diagrams/create-wireframe/workflow.yaml +25 -25
- package/bmad/bmm/workflows/generate-project-context/project-context-template.md +21 -21
- package/bmad/bmm/workflows/generate-project-context/steps/step-01-discover.md +218 -218
- package/bmad/bmm/workflows/generate-project-context/steps/step-02-generate.md +318 -318
- package/bmad/bmm/workflows/generate-project-context/steps/step-03-complete.md +278 -278
- package/bmad/bmm/workflows/generate-project-context/workflow.md +50 -50
- package/bmad/bmm/workflows/testarch/atdd/atdd-checklist-template.md +364 -364
- package/bmad/bmm/workflows/testarch/atdd/checklist.md +374 -374
- package/bmad/bmm/workflows/testarch/atdd/instructions.md +806 -806
- package/bmad/bmm/workflows/testarch/atdd/workflow.yaml +45 -45
- package/bmad/bmm/workflows/testarch/automate/checklist.md +582 -582
- package/bmad/bmm/workflows/testarch/automate/instructions.md +1324 -1324
- package/bmad/bmm/workflows/testarch/automate/workflow.yaml +52 -52
- package/bmad/bmm/workflows/testarch/ci/checklist.md +248 -248
- package/bmad/bmm/workflows/testarch/ci/github-actions-template.yaml +198 -198
- package/bmad/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +149 -149
- package/bmad/bmm/workflows/testarch/ci/instructions.md +536 -536
- package/bmad/bmm/workflows/testarch/ci/workflow.yaml +45 -45
- package/bmad/bmm/workflows/testarch/framework/checklist.md +321 -321
- package/bmad/bmm/workflows/testarch/framework/instructions.md +481 -481
- package/bmad/bmm/workflows/testarch/framework/workflow.yaml +47 -47
- package/bmad/bmm/workflows/testarch/nfr-assess/checklist.md +407 -407
- package/bmad/bmm/workflows/testarch/nfr-assess/instructions.md +722 -722
- package/bmad/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +445 -445
- package/bmad/bmm/workflows/testarch/nfr-assess/workflow.yaml +47 -47
- package/bmad/bmm/workflows/testarch/test-design/checklist.md +235 -235
- package/bmad/bmm/workflows/testarch/test-design/instructions.md +788 -788
- package/bmad/bmm/workflows/testarch/test-design/test-design-template.md +294 -294
- package/bmad/bmm/workflows/testarch/test-design/workflow.yaml +54 -54
- package/bmad/bmm/workflows/testarch/test-review/checklist.md +472 -472
- package/bmad/bmm/workflows/testarch/test-review/instructions.md +628 -628
- package/bmad/bmm/workflows/testarch/test-review/test-review-template.md +390 -390
- package/bmad/bmm/workflows/testarch/test-review/workflow.yaml +46 -46
- package/bmad/bmm/workflows/testarch/trace/checklist.md +655 -655
- package/bmad/bmm/workflows/testarch/trace/instructions.md +1047 -1047
- package/bmad/bmm/workflows/testarch/trace/trace-template.md +675 -675
- package/bmad/bmm/workflows/testarch/trace/workflow.yaml +55 -55
- package/bmad/bmm/workflows/workflow-status/init/instructions.md +346 -346
- package/bmad/bmm/workflows/workflow-status/init/workflow.yaml +28 -28
- package/bmad/bmm/workflows/workflow-status/instructions.md +395 -395
- package/bmad/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +103 -103
- package/bmad/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +100 -100
- package/bmad/bmm/workflows/workflow-status/paths/method-brownfield.yaml +103 -103
- package/bmad/bmm/workflows/workflow-status/paths/method-greenfield.yaml +100 -100
- package/bmad/bmm/workflows/workflow-status/project-levels.yaml +59 -59
- package/bmad/bmm/workflows/workflow-status/workflow-status-template.yaml +24 -24
- package/bmad/bmm/workflows/workflow-status/workflow.yaml +30 -30
- package/bmad/cis/agents/brainstorming-coach.md +60 -60
- package/bmad/cis/agents/creative-problem-solver.md +60 -60
- package/bmad/cis/agents/design-thinking-coach.md +60 -60
- package/bmad/cis/agents/innovation-strategist.md +60 -60
- package/bmad/cis/agents/presentation-master.md +66 -66
- package/bmad/cis/agents/storyteller/storyteller.md +57 -57
- package/bmad/cis/config.yaml +11 -11
- package/bmad/cis/teams/creative-squad.yaml +7 -7
- package/bmad/cis/teams/default-party.csv +12 -12
- package/bmad/cis/workflows/README.md +139 -139
- package/bmad/cis/workflows/design-thinking/README.md +56 -56
- package/bmad/cis/workflows/design-thinking/design-methods.csv +30 -30
- package/bmad/cis/workflows/design-thinking/instructions.md +202 -202
- package/bmad/cis/workflows/design-thinking/template.md +111 -111
- package/bmad/cis/workflows/design-thinking/workflow.yaml +27 -27
- package/bmad/cis/workflows/innovation-strategy/README.md +56 -56
- package/bmad/cis/workflows/innovation-strategy/innovation-frameworks.csv +30 -30
- package/bmad/cis/workflows/innovation-strategy/instructions.md +276 -276
- package/bmad/cis/workflows/innovation-strategy/template.md +189 -189
- package/bmad/cis/workflows/innovation-strategy/workflow.yaml +27 -27
- package/bmad/cis/workflows/problem-solving/README.md +56 -56
- package/bmad/cis/workflows/problem-solving/instructions.md +252 -252
- package/bmad/cis/workflows/problem-solving/solving-methods.csv +30 -30
- package/bmad/cis/workflows/problem-solving/template.md +165 -165
- package/bmad/cis/workflows/problem-solving/workflow.yaml +27 -27
- package/bmad/cis/workflows/storytelling/README.md +58 -58
- package/bmad/cis/workflows/storytelling/instructions.md +293 -293
- package/bmad/cis/workflows/storytelling/story-types.csv +25 -25
- package/bmad/cis/workflows/storytelling/template.md +113 -113
- package/bmad/cis/workflows/storytelling/workflow.yaml +27 -27
- package/bmad/core/agents/bmad-master.md +57 -57
- package/bmad/core/config.yaml +9 -9
- package/bmad/core/resources/excalidraw/README.md +160 -160
- package/bmad/core/resources/excalidraw/excalidraw-helpers.md +127 -127
- package/bmad/core/resources/excalidraw/library-loader.md +50 -50
- package/bmad/core/resources/excalidraw/validate-json-instructions.md +79 -79
- package/bmad/core/tasks/index-docs.xml +64 -64
- package/bmad/core/tasks/review-adversarial-general.xml +41 -41
- package/bmad/core/tasks/shard-doc.xml +108 -108
- package/bmad/core/tasks/validate-workflow.xml +88 -88
- package/bmad/core/tasks/workflow.xml +234 -234
- package/bmad/core/workflows/advanced-elicitation/methods.csv +51 -51
- package/bmad/core/workflows/advanced-elicitation/workflow.xml +116 -116
- package/bmad/core/workflows/brainstorming/brain-methods.csv +61 -61
- package/bmad/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -197
- package/bmad/core/workflows/brainstorming/steps/step-01b-continue.md +122 -122
- package/bmad/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -225
- package/bmad/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -237
- package/bmad/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -209
- package/bmad/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -264
- package/bmad/core/workflows/brainstorming/steps/step-03-technique-execution.md +340 -340
- package/bmad/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -303
- package/bmad/core/workflows/brainstorming/template.md +15 -15
- package/bmad/core/workflows/brainstorming/workflow.md +51 -51
- package/bmad/core/workflows/party-mode/steps/step-01-agent-loading.md +139 -139
- package/bmad/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +204 -204
- package/bmad/core/workflows/party-mode/steps/step-03-graceful-exit.md +159 -159
- package/bmad/core/workflows/party-mode/workflow.md +206 -206
- package/claude/hooks/file-restriction-hook.py +51 -51
- package/claude/hooks/track-agent.py +67 -67
- package/claude/settings.local.json +76 -76
- package/gemini/commands/BMad/agents/analyst.toml +6 -0
- package/gemini/commands/BMad/agents/architect.toml +6 -0
- package/gemini/commands/BMad/agents/bmad-master.toml +6 -0
- package/gemini/commands/BMad/agents/bmad-orchestrator.toml +6 -0
- package/gemini/commands/BMad/agents/dev.toml +6 -0
- package/gemini/commands/BMad/agents/pm.toml +6 -0
- package/gemini/commands/BMad/agents/po.toml +6 -0
- package/gemini/commands/BMad/agents/qa.toml +6 -0
- package/gemini/commands/BMad/agents/sm.toml +6 -0
- package/gemini/commands/BMad/agents/ux-expert.toml +6 -0
- package/gemini/commands/BMad/tasks/advanced-elicitation.toml +6 -0
- package/gemini/commands/BMad/tasks/apply-qa-fixes.toml +6 -0
- package/gemini/commands/BMad/tasks/brownfield-create-epic.toml +6 -0
- package/gemini/commands/BMad/tasks/brownfield-create-story.toml +6 -0
- package/gemini/commands/BMad/tasks/correct-course.toml +6 -0
- package/gemini/commands/BMad/tasks/create-brownfield-story.toml +6 -0
- package/gemini/commands/BMad/tasks/create-deep-research-prompt.toml +6 -0
- package/gemini/commands/BMad/tasks/create-doc.toml +6 -0
- package/gemini/commands/BMad/tasks/create-next-story.toml +6 -0
- package/gemini/commands/BMad/tasks/document-project.toml +6 -0
- package/gemini/commands/BMad/tasks/execute-checklist.toml +6 -0
- package/gemini/commands/BMad/tasks/facilitate-brainstorming-session.toml +6 -0
- package/gemini/commands/BMad/tasks/generate-ai-frontend-prompt.toml +6 -0
- package/gemini/commands/BMad/tasks/index-docs.toml +6 -0
- package/gemini/commands/BMad/tasks/kb-mode-interaction.toml +6 -0
- package/gemini/commands/BMad/tasks/nfr-assess.toml +6 -0
- package/gemini/commands/BMad/tasks/qa-gate.toml +6 -0
- package/gemini/commands/BMad/tasks/review-story.toml +6 -0
- package/gemini/commands/BMad/tasks/risk-profile.toml +6 -0
- package/gemini/commands/BMad/tasks/shard-doc.toml +6 -0
- package/gemini/commands/BMad/tasks/test-design.toml +6 -0
- package/gemini/commands/BMad/tasks/trace-requirements.toml +6 -0
- package/gemini/commands/BMad/tasks/validate-next-story.toml +6 -0
- package/github/workflows/publish.yml +150 -150
- package/index.js +9 -9
- package/mcp.json +14 -14
- package/package.json +41 -40
- package/resources/images/Siesa_Logosimbolo_Azul.svg +24 -24
- package/resources/images/Siesa_Logosimbolo_Blanco.svg +24 -24
- package/resources/images/Siesa_Simbolo_Azul.svg +14 -14
- package/resources/images/Siesa_Simbolo_Blanco.svg +14 -14
- package/vscode/mcp.json +15 -15
- package/vscode/settings.json +12 -12
|
@@ -1,356 +1,356 @@
|
|
|
1
|
-
# Auth Session Utility
|
|
2
|
-
|
|
3
|
-
## Principle
|
|
4
|
-
|
|
5
|
-
Persist authentication tokens to disk and reuse across test runs. Support multiple user identifiers, ephemeral authentication, and worker-specific accounts for parallel execution. Fetch tokens once, use everywhere.
|
|
6
|
-
|
|
7
|
-
## Rationale
|
|
8
|
-
|
|
9
|
-
Playwright's built-in authentication works but has limitations:
|
|
10
|
-
|
|
11
|
-
- Re-authenticates for every test run (slow)
|
|
12
|
-
- Single user per project setup
|
|
13
|
-
- No token expiration handling
|
|
14
|
-
- Manual session management
|
|
15
|
-
- Complex setup for multi-user scenarios
|
|
16
|
-
|
|
17
|
-
The `auth-session` utility provides:
|
|
18
|
-
|
|
19
|
-
- **Token persistence**: Authenticate once, reuse across runs
|
|
20
|
-
- **Multi-user support**: Different user identifiers in same test suite
|
|
21
|
-
- **Ephemeral auth**: On-the-fly user authentication without disk persistence
|
|
22
|
-
- **Worker-specific accounts**: Parallel execution with isolated user accounts
|
|
23
|
-
- **Automatic token management**: Checks validity, renews if expired
|
|
24
|
-
- **Flexible provider pattern**: Adapt to any auth system (OAuth2, JWT, custom)
|
|
25
|
-
|
|
26
|
-
## Pattern Examples
|
|
27
|
-
|
|
28
|
-
### Example 1: Basic Auth Session Setup
|
|
29
|
-
|
|
30
|
-
**Context**: Configure global authentication that persists across test runs.
|
|
31
|
-
|
|
32
|
-
**Implementation**:
|
|
33
|
-
|
|
34
|
-
```typescript
|
|
35
|
-
// Step 1: Configure in global-setup.ts
|
|
36
|
-
import { authStorageInit, setAuthProvider, configureAuthSession, authGlobalInit } from '@seontechnologies/playwright-utils/auth-session';
|
|
37
|
-
import myCustomProvider from './auth/custom-auth-provider';
|
|
38
|
-
|
|
39
|
-
async function globalSetup() {
|
|
40
|
-
// Ensure storage directories exist
|
|
41
|
-
authStorageInit();
|
|
42
|
-
|
|
43
|
-
// Configure storage path
|
|
44
|
-
configureAuthSession({
|
|
45
|
-
authStoragePath: process.cwd() + '/playwright/auth-sessions',
|
|
46
|
-
debug: true,
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
// Set custom provider (HOW to authenticate)
|
|
50
|
-
setAuthProvider(myCustomProvider);
|
|
51
|
-
|
|
52
|
-
// Optional: pre-fetch token for default user
|
|
53
|
-
await authGlobalInit();
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export default globalSetup;
|
|
57
|
-
|
|
58
|
-
// Step 2: Create auth fixture
|
|
59
|
-
import { test as base } from '@playwright/test';
|
|
60
|
-
import { createAuthFixtures, setAuthProvider } from '@seontechnologies/playwright-utils/auth-session';
|
|
61
|
-
import myCustomProvider from './custom-auth-provider';
|
|
62
|
-
|
|
63
|
-
// Register provider early
|
|
64
|
-
setAuthProvider(myCustomProvider);
|
|
65
|
-
|
|
66
|
-
export const test = base.extend(createAuthFixtures());
|
|
67
|
-
|
|
68
|
-
// Step 3: Use in tests
|
|
69
|
-
test('authenticated request', async ({ authToken, request }) => {
|
|
70
|
-
const response = await request.get('/api/protected', {
|
|
71
|
-
headers: { Authorization: `Bearer ${authToken}` },
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
expect(response.ok()).toBeTruthy();
|
|
75
|
-
});
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
**Key Points**:
|
|
79
|
-
|
|
80
|
-
- Global setup runs once before all tests
|
|
81
|
-
- Token fetched once, reused across all tests
|
|
82
|
-
- Custom provider defines your auth mechanism
|
|
83
|
-
- Order matters: configure, then setProvider, then init
|
|
84
|
-
|
|
85
|
-
### Example 2: Multi-User Authentication
|
|
86
|
-
|
|
87
|
-
**Context**: Testing with different user roles (admin, regular user, guest) in same test suite.
|
|
88
|
-
|
|
89
|
-
**Implementation**:
|
|
90
|
-
|
|
91
|
-
```typescript
|
|
92
|
-
import { test } from '../support/auth/auth-fixture';
|
|
93
|
-
|
|
94
|
-
// Option 1: Per-test user override
|
|
95
|
-
test('admin actions', async ({ authToken, authOptions }) => {
|
|
96
|
-
// Override default user
|
|
97
|
-
authOptions.userIdentifier = 'admin';
|
|
98
|
-
|
|
99
|
-
const { authToken: adminToken } = await test.step('Get admin token', async () => {
|
|
100
|
-
return { authToken }; // Re-fetches with new identifier
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
// Use admin token
|
|
104
|
-
const response = await request.get('/api/admin/users', {
|
|
105
|
-
headers: { Authorization: `Bearer ${adminToken}` },
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
// Option 2: Parallel execution with different users
|
|
110
|
-
test.describe.parallel('multi-user tests', () => {
|
|
111
|
-
test('user 1 actions', async ({ authToken }) => {
|
|
112
|
-
// Uses default user (e.g., 'user1')
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
test('user 2 actions', async ({ authToken, authOptions }) => {
|
|
116
|
-
authOptions.userIdentifier = 'user2';
|
|
117
|
-
// Uses different token for user2
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
**Key Points**:
|
|
123
|
-
|
|
124
|
-
- Override `authOptions.userIdentifier` per test
|
|
125
|
-
- Tokens cached separately per user identifier
|
|
126
|
-
- Parallel tests isolated with different users
|
|
127
|
-
- Worker-specific accounts possible
|
|
128
|
-
|
|
129
|
-
### Example 3: Ephemeral User Authentication
|
|
130
|
-
|
|
131
|
-
**Context**: Create temporary test users that don't persist to disk (e.g., testing user creation flow).
|
|
132
|
-
|
|
133
|
-
**Implementation**:
|
|
134
|
-
|
|
135
|
-
```typescript
|
|
136
|
-
import { applyUserCookiesToBrowserContext } from '@seontechnologies/playwright-utils/auth-session';
|
|
137
|
-
import { createTestUser } from '../utils/user-factory';
|
|
138
|
-
|
|
139
|
-
test('ephemeral user test', async ({ context, page }) => {
|
|
140
|
-
// Create temporary user (not persisted)
|
|
141
|
-
const ephemeralUser = await createTestUser({
|
|
142
|
-
role: 'admin',
|
|
143
|
-
permissions: ['delete-users'],
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
// Apply auth directly to browser context
|
|
147
|
-
await applyUserCookiesToBrowserContext(context, ephemeralUser);
|
|
148
|
-
|
|
149
|
-
// Page now authenticated as ephemeral user
|
|
150
|
-
await page.goto('/admin/users');
|
|
151
|
-
|
|
152
|
-
await expect(page.getByTestId('delete-user-btn')).toBeVisible();
|
|
153
|
-
|
|
154
|
-
// User and token cleaned up after test
|
|
155
|
-
});
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
**Key Points**:
|
|
159
|
-
|
|
160
|
-
- No disk persistence (ephemeral)
|
|
161
|
-
- Apply cookies directly to context
|
|
162
|
-
- Useful for testing user lifecycle
|
|
163
|
-
- Clean up automatic when test ends
|
|
164
|
-
|
|
165
|
-
### Example 4: Testing Multiple Users in Single Test
|
|
166
|
-
|
|
167
|
-
**Context**: Testing interactions between users (messaging, sharing, collaboration features).
|
|
168
|
-
|
|
169
|
-
**Implementation**:
|
|
170
|
-
|
|
171
|
-
```typescript
|
|
172
|
-
test('user interaction', async ({ browser }) => {
|
|
173
|
-
// User 1 context
|
|
174
|
-
const user1Context = await browser.newContext({
|
|
175
|
-
storageState: './auth-sessions/local/user1/storage-state.json',
|
|
176
|
-
});
|
|
177
|
-
const user1Page = await user1Context.newPage();
|
|
178
|
-
|
|
179
|
-
// User 2 context
|
|
180
|
-
const user2Context = await browser.newContext({
|
|
181
|
-
storageState: './auth-sessions/local/user2/storage-state.json',
|
|
182
|
-
});
|
|
183
|
-
const user2Page = await user2Context.newPage();
|
|
184
|
-
|
|
185
|
-
// User 1 sends message
|
|
186
|
-
await user1Page.goto('/messages');
|
|
187
|
-
await user1Page.fill('#message', 'Hello from user 1');
|
|
188
|
-
await user1Page.click('#send');
|
|
189
|
-
|
|
190
|
-
// User 2 receives message
|
|
191
|
-
await user2Page.goto('/messages');
|
|
192
|
-
await expect(user2Page.getByText('Hello from user 1')).toBeVisible();
|
|
193
|
-
|
|
194
|
-
// Cleanup
|
|
195
|
-
await user1Context.close();
|
|
196
|
-
await user2Context.close();
|
|
197
|
-
});
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
**Key Points**:
|
|
201
|
-
|
|
202
|
-
- Each user has separate browser context
|
|
203
|
-
- Reference storage state files directly
|
|
204
|
-
- Test real-time interactions
|
|
205
|
-
- Clean up contexts after test
|
|
206
|
-
|
|
207
|
-
### Example 5: Worker-Specific Accounts (Parallel Testing)
|
|
208
|
-
|
|
209
|
-
**Context**: Running tests in parallel with isolated user accounts per worker to avoid conflicts.
|
|
210
|
-
|
|
211
|
-
**Implementation**:
|
|
212
|
-
|
|
213
|
-
```typescript
|
|
214
|
-
// playwright.config.ts
|
|
215
|
-
export default defineConfig({
|
|
216
|
-
workers: 4, // 4 parallel workers
|
|
217
|
-
use: {
|
|
218
|
-
// Each worker uses different user
|
|
219
|
-
storageState: async ({}, use, testInfo) => {
|
|
220
|
-
const workerIndex = testInfo.workerIndex;
|
|
221
|
-
const userIdentifier = `worker-${workerIndex}`;
|
|
222
|
-
|
|
223
|
-
await use(`./auth-sessions/local/${userIdentifier}/storage-state.json`);
|
|
224
|
-
},
|
|
225
|
-
},
|
|
226
|
-
});
|
|
227
|
-
|
|
228
|
-
// Tests run in parallel, each worker with its own user
|
|
229
|
-
test('parallel test 1', async ({ page }) => {
|
|
230
|
-
// Worker 0 uses worker-0 account
|
|
231
|
-
await page.goto('/dashboard');
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
test('parallel test 2', async ({ page }) => {
|
|
235
|
-
// Worker 1 uses worker-1 account
|
|
236
|
-
await page.goto('/dashboard');
|
|
237
|
-
});
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
**Key Points**:
|
|
241
|
-
|
|
242
|
-
- Each worker has isolated user account
|
|
243
|
-
- No conflicts in parallel execution
|
|
244
|
-
- Token management automatic per worker
|
|
245
|
-
- Scales to any number of workers
|
|
246
|
-
|
|
247
|
-
## Custom Auth Provider Pattern
|
|
248
|
-
|
|
249
|
-
**Context**: Adapt auth-session to your authentication system (OAuth2, JWT, SAML, custom).
|
|
250
|
-
|
|
251
|
-
**Minimal provider structure**:
|
|
252
|
-
|
|
253
|
-
```typescript
|
|
254
|
-
import { type AuthProvider } from '@seontechnologies/playwright-utils/auth-session';
|
|
255
|
-
|
|
256
|
-
const myCustomProvider: AuthProvider = {
|
|
257
|
-
getEnvironment: (options) => options.environment || 'local',
|
|
258
|
-
|
|
259
|
-
getUserIdentifier: (options) => options.userIdentifier || 'default-user',
|
|
260
|
-
|
|
261
|
-
extractToken: (storageState) => {
|
|
262
|
-
// Extract token from your storage format
|
|
263
|
-
return storageState.cookies.find((c) => c.name === 'auth_token')?.value;
|
|
264
|
-
},
|
|
265
|
-
|
|
266
|
-
extractCookies: (tokenData) => {
|
|
267
|
-
// Convert token to cookies for browser context
|
|
268
|
-
return [
|
|
269
|
-
{
|
|
270
|
-
name: 'auth_token',
|
|
271
|
-
value: tokenData,
|
|
272
|
-
domain: 'example.com',
|
|
273
|
-
path: '/',
|
|
274
|
-
httpOnly: true,
|
|
275
|
-
secure: true,
|
|
276
|
-
},
|
|
277
|
-
];
|
|
278
|
-
},
|
|
279
|
-
|
|
280
|
-
isTokenExpired: (storageState) => {
|
|
281
|
-
// Check if token is expired
|
|
282
|
-
const expiresAt = storageState.cookies.find((c) => c.name === 'expires_at');
|
|
283
|
-
return Date.now() > parseInt(expiresAt?.value || '0');
|
|
284
|
-
},
|
|
285
|
-
|
|
286
|
-
manageAuthToken: async (request, options) => {
|
|
287
|
-
// Main token acquisition logic
|
|
288
|
-
// Return storage state with cookies/localStorage
|
|
289
|
-
},
|
|
290
|
-
};
|
|
291
|
-
|
|
292
|
-
export default myCustomProvider;
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
## Integration with API Request
|
|
296
|
-
|
|
297
|
-
```typescript
|
|
298
|
-
import { test } from '@seontechnologies/playwright-utils/fixtures';
|
|
299
|
-
|
|
300
|
-
test('authenticated API call', async ({ apiRequest, authToken }) => {
|
|
301
|
-
const { status, body } = await apiRequest({
|
|
302
|
-
method: 'GET',
|
|
303
|
-
path: '/api/protected',
|
|
304
|
-
headers: { Authorization: `Bearer ${authToken}` },
|
|
305
|
-
});
|
|
306
|
-
|
|
307
|
-
expect(status).toBe(200);
|
|
308
|
-
});
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
## Related Fragments
|
|
312
|
-
|
|
313
|
-
- `overview.md` - Installation and fixture composition
|
|
314
|
-
- `api-request.md` - Authenticated API requests
|
|
315
|
-
- `fixtures-composition.md` - Merging auth with other utilities
|
|
316
|
-
|
|
317
|
-
## Anti-Patterns
|
|
318
|
-
|
|
319
|
-
**❌ Calling setAuthProvider after globalSetup:**
|
|
320
|
-
|
|
321
|
-
```typescript
|
|
322
|
-
async function globalSetup() {
|
|
323
|
-
configureAuthSession(...)
|
|
324
|
-
await authGlobalInit() // Provider not set yet!
|
|
325
|
-
setAuthProvider(provider) // Too late
|
|
326
|
-
}
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
**✅ Register provider before init:**
|
|
330
|
-
|
|
331
|
-
```typescript
|
|
332
|
-
async function globalSetup() {
|
|
333
|
-
authStorageInit()
|
|
334
|
-
configureAuthSession(...)
|
|
335
|
-
setAuthProvider(provider) // First
|
|
336
|
-
await authGlobalInit() // Then init
|
|
337
|
-
}
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
**❌ Hardcoding storage paths:**
|
|
341
|
-
|
|
342
|
-
```typescript
|
|
343
|
-
const storageState = './auth-sessions/local/user1/storage-state.json'; // Brittle
|
|
344
|
-
```
|
|
345
|
-
|
|
346
|
-
**✅ Use helper functions:**
|
|
347
|
-
|
|
348
|
-
```typescript
|
|
349
|
-
import { getTokenFilePath } from '@seontechnologies/playwright-utils/auth-session';
|
|
350
|
-
|
|
351
|
-
const tokenPath = getTokenFilePath({
|
|
352
|
-
environment: 'local',
|
|
353
|
-
userIdentifier: 'user1',
|
|
354
|
-
tokenFileName: 'storage-state.json',
|
|
355
|
-
});
|
|
356
|
-
```
|
|
1
|
+
# Auth Session Utility
|
|
2
|
+
|
|
3
|
+
## Principle
|
|
4
|
+
|
|
5
|
+
Persist authentication tokens to disk and reuse across test runs. Support multiple user identifiers, ephemeral authentication, and worker-specific accounts for parallel execution. Fetch tokens once, use everywhere.
|
|
6
|
+
|
|
7
|
+
## Rationale
|
|
8
|
+
|
|
9
|
+
Playwright's built-in authentication works but has limitations:
|
|
10
|
+
|
|
11
|
+
- Re-authenticates for every test run (slow)
|
|
12
|
+
- Single user per project setup
|
|
13
|
+
- No token expiration handling
|
|
14
|
+
- Manual session management
|
|
15
|
+
- Complex setup for multi-user scenarios
|
|
16
|
+
|
|
17
|
+
The `auth-session` utility provides:
|
|
18
|
+
|
|
19
|
+
- **Token persistence**: Authenticate once, reuse across runs
|
|
20
|
+
- **Multi-user support**: Different user identifiers in same test suite
|
|
21
|
+
- **Ephemeral auth**: On-the-fly user authentication without disk persistence
|
|
22
|
+
- **Worker-specific accounts**: Parallel execution with isolated user accounts
|
|
23
|
+
- **Automatic token management**: Checks validity, renews if expired
|
|
24
|
+
- **Flexible provider pattern**: Adapt to any auth system (OAuth2, JWT, custom)
|
|
25
|
+
|
|
26
|
+
## Pattern Examples
|
|
27
|
+
|
|
28
|
+
### Example 1: Basic Auth Session Setup
|
|
29
|
+
|
|
30
|
+
**Context**: Configure global authentication that persists across test runs.
|
|
31
|
+
|
|
32
|
+
**Implementation**:
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
// Step 1: Configure in global-setup.ts
|
|
36
|
+
import { authStorageInit, setAuthProvider, configureAuthSession, authGlobalInit } from '@seontechnologies/playwright-utils/auth-session';
|
|
37
|
+
import myCustomProvider from './auth/custom-auth-provider';
|
|
38
|
+
|
|
39
|
+
async function globalSetup() {
|
|
40
|
+
// Ensure storage directories exist
|
|
41
|
+
authStorageInit();
|
|
42
|
+
|
|
43
|
+
// Configure storage path
|
|
44
|
+
configureAuthSession({
|
|
45
|
+
authStoragePath: process.cwd() + '/playwright/auth-sessions',
|
|
46
|
+
debug: true,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
// Set custom provider (HOW to authenticate)
|
|
50
|
+
setAuthProvider(myCustomProvider);
|
|
51
|
+
|
|
52
|
+
// Optional: pre-fetch token for default user
|
|
53
|
+
await authGlobalInit();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export default globalSetup;
|
|
57
|
+
|
|
58
|
+
// Step 2: Create auth fixture
|
|
59
|
+
import { test as base } from '@playwright/test';
|
|
60
|
+
import { createAuthFixtures, setAuthProvider } from '@seontechnologies/playwright-utils/auth-session';
|
|
61
|
+
import myCustomProvider from './custom-auth-provider';
|
|
62
|
+
|
|
63
|
+
// Register provider early
|
|
64
|
+
setAuthProvider(myCustomProvider);
|
|
65
|
+
|
|
66
|
+
export const test = base.extend(createAuthFixtures());
|
|
67
|
+
|
|
68
|
+
// Step 3: Use in tests
|
|
69
|
+
test('authenticated request', async ({ authToken, request }) => {
|
|
70
|
+
const response = await request.get('/api/protected', {
|
|
71
|
+
headers: { Authorization: `Bearer ${authToken}` },
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
expect(response.ok()).toBeTruthy();
|
|
75
|
+
});
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Key Points**:
|
|
79
|
+
|
|
80
|
+
- Global setup runs once before all tests
|
|
81
|
+
- Token fetched once, reused across all tests
|
|
82
|
+
- Custom provider defines your auth mechanism
|
|
83
|
+
- Order matters: configure, then setProvider, then init
|
|
84
|
+
|
|
85
|
+
### Example 2: Multi-User Authentication
|
|
86
|
+
|
|
87
|
+
**Context**: Testing with different user roles (admin, regular user, guest) in same test suite.
|
|
88
|
+
|
|
89
|
+
**Implementation**:
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
import { test } from '../support/auth/auth-fixture';
|
|
93
|
+
|
|
94
|
+
// Option 1: Per-test user override
|
|
95
|
+
test('admin actions', async ({ authToken, authOptions }) => {
|
|
96
|
+
// Override default user
|
|
97
|
+
authOptions.userIdentifier = 'admin';
|
|
98
|
+
|
|
99
|
+
const { authToken: adminToken } = await test.step('Get admin token', async () => {
|
|
100
|
+
return { authToken }; // Re-fetches with new identifier
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
// Use admin token
|
|
104
|
+
const response = await request.get('/api/admin/users', {
|
|
105
|
+
headers: { Authorization: `Bearer ${adminToken}` },
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
// Option 2: Parallel execution with different users
|
|
110
|
+
test.describe.parallel('multi-user tests', () => {
|
|
111
|
+
test('user 1 actions', async ({ authToken }) => {
|
|
112
|
+
// Uses default user (e.g., 'user1')
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
test('user 2 actions', async ({ authToken, authOptions }) => {
|
|
116
|
+
authOptions.userIdentifier = 'user2';
|
|
117
|
+
// Uses different token for user2
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Key Points**:
|
|
123
|
+
|
|
124
|
+
- Override `authOptions.userIdentifier` per test
|
|
125
|
+
- Tokens cached separately per user identifier
|
|
126
|
+
- Parallel tests isolated with different users
|
|
127
|
+
- Worker-specific accounts possible
|
|
128
|
+
|
|
129
|
+
### Example 3: Ephemeral User Authentication
|
|
130
|
+
|
|
131
|
+
**Context**: Create temporary test users that don't persist to disk (e.g., testing user creation flow).
|
|
132
|
+
|
|
133
|
+
**Implementation**:
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
import { applyUserCookiesToBrowserContext } from '@seontechnologies/playwright-utils/auth-session';
|
|
137
|
+
import { createTestUser } from '../utils/user-factory';
|
|
138
|
+
|
|
139
|
+
test('ephemeral user test', async ({ context, page }) => {
|
|
140
|
+
// Create temporary user (not persisted)
|
|
141
|
+
const ephemeralUser = await createTestUser({
|
|
142
|
+
role: 'admin',
|
|
143
|
+
permissions: ['delete-users'],
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
// Apply auth directly to browser context
|
|
147
|
+
await applyUserCookiesToBrowserContext(context, ephemeralUser);
|
|
148
|
+
|
|
149
|
+
// Page now authenticated as ephemeral user
|
|
150
|
+
await page.goto('/admin/users');
|
|
151
|
+
|
|
152
|
+
await expect(page.getByTestId('delete-user-btn')).toBeVisible();
|
|
153
|
+
|
|
154
|
+
// User and token cleaned up after test
|
|
155
|
+
});
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**Key Points**:
|
|
159
|
+
|
|
160
|
+
- No disk persistence (ephemeral)
|
|
161
|
+
- Apply cookies directly to context
|
|
162
|
+
- Useful for testing user lifecycle
|
|
163
|
+
- Clean up automatic when test ends
|
|
164
|
+
|
|
165
|
+
### Example 4: Testing Multiple Users in Single Test
|
|
166
|
+
|
|
167
|
+
**Context**: Testing interactions between users (messaging, sharing, collaboration features).
|
|
168
|
+
|
|
169
|
+
**Implementation**:
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
test('user interaction', async ({ browser }) => {
|
|
173
|
+
// User 1 context
|
|
174
|
+
const user1Context = await browser.newContext({
|
|
175
|
+
storageState: './auth-sessions/local/user1/storage-state.json',
|
|
176
|
+
});
|
|
177
|
+
const user1Page = await user1Context.newPage();
|
|
178
|
+
|
|
179
|
+
// User 2 context
|
|
180
|
+
const user2Context = await browser.newContext({
|
|
181
|
+
storageState: './auth-sessions/local/user2/storage-state.json',
|
|
182
|
+
});
|
|
183
|
+
const user2Page = await user2Context.newPage();
|
|
184
|
+
|
|
185
|
+
// User 1 sends message
|
|
186
|
+
await user1Page.goto('/messages');
|
|
187
|
+
await user1Page.fill('#message', 'Hello from user 1');
|
|
188
|
+
await user1Page.click('#send');
|
|
189
|
+
|
|
190
|
+
// User 2 receives message
|
|
191
|
+
await user2Page.goto('/messages');
|
|
192
|
+
await expect(user2Page.getByText('Hello from user 1')).toBeVisible();
|
|
193
|
+
|
|
194
|
+
// Cleanup
|
|
195
|
+
await user1Context.close();
|
|
196
|
+
await user2Context.close();
|
|
197
|
+
});
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Key Points**:
|
|
201
|
+
|
|
202
|
+
- Each user has separate browser context
|
|
203
|
+
- Reference storage state files directly
|
|
204
|
+
- Test real-time interactions
|
|
205
|
+
- Clean up contexts after test
|
|
206
|
+
|
|
207
|
+
### Example 5: Worker-Specific Accounts (Parallel Testing)
|
|
208
|
+
|
|
209
|
+
**Context**: Running tests in parallel with isolated user accounts per worker to avoid conflicts.
|
|
210
|
+
|
|
211
|
+
**Implementation**:
|
|
212
|
+
|
|
213
|
+
```typescript
|
|
214
|
+
// playwright.config.ts
|
|
215
|
+
export default defineConfig({
|
|
216
|
+
workers: 4, // 4 parallel workers
|
|
217
|
+
use: {
|
|
218
|
+
// Each worker uses different user
|
|
219
|
+
storageState: async ({}, use, testInfo) => {
|
|
220
|
+
const workerIndex = testInfo.workerIndex;
|
|
221
|
+
const userIdentifier = `worker-${workerIndex}`;
|
|
222
|
+
|
|
223
|
+
await use(`./auth-sessions/local/${userIdentifier}/storage-state.json`);
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
// Tests run in parallel, each worker with its own user
|
|
229
|
+
test('parallel test 1', async ({ page }) => {
|
|
230
|
+
// Worker 0 uses worker-0 account
|
|
231
|
+
await page.goto('/dashboard');
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
test('parallel test 2', async ({ page }) => {
|
|
235
|
+
// Worker 1 uses worker-1 account
|
|
236
|
+
await page.goto('/dashboard');
|
|
237
|
+
});
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
**Key Points**:
|
|
241
|
+
|
|
242
|
+
- Each worker has isolated user account
|
|
243
|
+
- No conflicts in parallel execution
|
|
244
|
+
- Token management automatic per worker
|
|
245
|
+
- Scales to any number of workers
|
|
246
|
+
|
|
247
|
+
## Custom Auth Provider Pattern
|
|
248
|
+
|
|
249
|
+
**Context**: Adapt auth-session to your authentication system (OAuth2, JWT, SAML, custom).
|
|
250
|
+
|
|
251
|
+
**Minimal provider structure**:
|
|
252
|
+
|
|
253
|
+
```typescript
|
|
254
|
+
import { type AuthProvider } from '@seontechnologies/playwright-utils/auth-session';
|
|
255
|
+
|
|
256
|
+
const myCustomProvider: AuthProvider = {
|
|
257
|
+
getEnvironment: (options) => options.environment || 'local',
|
|
258
|
+
|
|
259
|
+
getUserIdentifier: (options) => options.userIdentifier || 'default-user',
|
|
260
|
+
|
|
261
|
+
extractToken: (storageState) => {
|
|
262
|
+
// Extract token from your storage format
|
|
263
|
+
return storageState.cookies.find((c) => c.name === 'auth_token')?.value;
|
|
264
|
+
},
|
|
265
|
+
|
|
266
|
+
extractCookies: (tokenData) => {
|
|
267
|
+
// Convert token to cookies for browser context
|
|
268
|
+
return [
|
|
269
|
+
{
|
|
270
|
+
name: 'auth_token',
|
|
271
|
+
value: tokenData,
|
|
272
|
+
domain: 'example.com',
|
|
273
|
+
path: '/',
|
|
274
|
+
httpOnly: true,
|
|
275
|
+
secure: true,
|
|
276
|
+
},
|
|
277
|
+
];
|
|
278
|
+
},
|
|
279
|
+
|
|
280
|
+
isTokenExpired: (storageState) => {
|
|
281
|
+
// Check if token is expired
|
|
282
|
+
const expiresAt = storageState.cookies.find((c) => c.name === 'expires_at');
|
|
283
|
+
return Date.now() > parseInt(expiresAt?.value || '0');
|
|
284
|
+
},
|
|
285
|
+
|
|
286
|
+
manageAuthToken: async (request, options) => {
|
|
287
|
+
// Main token acquisition logic
|
|
288
|
+
// Return storage state with cookies/localStorage
|
|
289
|
+
},
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
export default myCustomProvider;
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
## Integration with API Request
|
|
296
|
+
|
|
297
|
+
```typescript
|
|
298
|
+
import { test } from '@seontechnologies/playwright-utils/fixtures';
|
|
299
|
+
|
|
300
|
+
test('authenticated API call', async ({ apiRequest, authToken }) => {
|
|
301
|
+
const { status, body } = await apiRequest({
|
|
302
|
+
method: 'GET',
|
|
303
|
+
path: '/api/protected',
|
|
304
|
+
headers: { Authorization: `Bearer ${authToken}` },
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
expect(status).toBe(200);
|
|
308
|
+
});
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
## Related Fragments
|
|
312
|
+
|
|
313
|
+
- `overview.md` - Installation and fixture composition
|
|
314
|
+
- `api-request.md` - Authenticated API requests
|
|
315
|
+
- `fixtures-composition.md` - Merging auth with other utilities
|
|
316
|
+
|
|
317
|
+
## Anti-Patterns
|
|
318
|
+
|
|
319
|
+
**❌ Calling setAuthProvider after globalSetup:**
|
|
320
|
+
|
|
321
|
+
```typescript
|
|
322
|
+
async function globalSetup() {
|
|
323
|
+
configureAuthSession(...)
|
|
324
|
+
await authGlobalInit() // Provider not set yet!
|
|
325
|
+
setAuthProvider(provider) // Too late
|
|
326
|
+
}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
**✅ Register provider before init:**
|
|
330
|
+
|
|
331
|
+
```typescript
|
|
332
|
+
async function globalSetup() {
|
|
333
|
+
authStorageInit()
|
|
334
|
+
configureAuthSession(...)
|
|
335
|
+
setAuthProvider(provider) // First
|
|
336
|
+
await authGlobalInit() // Then init
|
|
337
|
+
}
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
**❌ Hardcoding storage paths:**
|
|
341
|
+
|
|
342
|
+
```typescript
|
|
343
|
+
const storageState = './auth-sessions/local/user1/storage-state.json'; // Brittle
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
**✅ Use helper functions:**
|
|
347
|
+
|
|
348
|
+
```typescript
|
|
349
|
+
import { getTokenFilePath } from '@seontechnologies/playwright-utils/auth-session';
|
|
350
|
+
|
|
351
|
+
const tokenPath = getTokenFilePath({
|
|
352
|
+
environment: 'local',
|
|
353
|
+
userIdentifier: 'user1',
|
|
354
|
+
tokenFileName: 'storage-state.json',
|
|
355
|
+
});
|
|
356
|
+
```
|