bmad-method 6.0.0-alpha.2 → 6.0.0-alpha.4
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/.claude/commands/bmad/bmm/agents/analyst.md +67 -0
- package/.claude/commands/bmad/bmm/agents/architect.md +73 -0
- package/.claude/commands/bmad/bmm/agents/dev.md +69 -0
- package/.claude/commands/bmad/bmm/agents/paige.md +82 -0
- package/.claude/commands/bmad/bmm/agents/pm.md +76 -0
- package/.claude/commands/bmad/bmm/agents/sm.md +85 -0
- package/.claude/commands/bmad/bmm/agents/tea.md +72 -0
- package/.claude/commands/bmad/bmm/agents/ux-designer.md +71 -0
- package/.claude/commands/bmad/bmm/workflows/README.md +132 -0
- package/.claude/commands/bmad/bmm/workflows/architecture.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/brainstorm-project.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/code-review.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/correct-course.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/create-epics-and-stories.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/create-story.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/create-ux-design.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/dev-story.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/document-project.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/narrative.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/prd.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/product-brief.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/research.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/retrospective.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/solutioning-gate-check.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/sprint-planning.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/story-context.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/story-done.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/story-ready.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/tech-spec-sm.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/tech-spec.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/workflow-init.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/workflow-status.md +15 -0
- package/.claude/commands/bmad/cis/agents/README.md +104 -0
- package/.claude/commands/bmad/cis/agents/brainstorming-coach.md +62 -0
- package/.claude/commands/bmad/cis/agents/creative-problem-solver.md +62 -0
- package/.claude/commands/bmad/cis/agents/design-thinking-coach.md +62 -0
- package/.claude/commands/bmad/cis/agents/innovation-strategist.md +62 -0
- package/.claude/commands/bmad/cis/agents/storyteller.md +59 -0
- package/.claude/commands/bmad/cis/workflows/README.md +37 -0
- package/.claude/commands/bmad/cis/workflows/design-thinking.md +15 -0
- package/.claude/commands/bmad/cis/workflows/innovation-strategy.md +15 -0
- package/.claude/commands/bmad/cis/workflows/problem-solving.md +15 -0
- package/.claude/commands/bmad/cis/workflows/storytelling.md +15 -0
- package/.claude/settings.local.json +10 -31
- package/CHANGELOG.md +239 -0
- package/README.md +210 -146
- package/bmad/_cfg/agent-manifest.csv +13 -4
- package/bmad/_cfg/agents/bmm-dev.customize.yaml +42 -0
- package/bmad/_cfg/agents/bmm-paige.customize.yaml +42 -0
- package/bmad/_cfg/agents/bmm-pm.customize.yaml +42 -0
- package/bmad/_cfg/agents/bmm-sm.customize.yaml +42 -0
- package/bmad/_cfg/agents/bmm-tea.customize.yaml +42 -0
- package/bmad/_cfg/agents/bmm-ux-designer.customize.yaml +42 -0
- package/bmad/_cfg/agents/cis-brainstorming-coach.customize.yaml +42 -0
- package/bmad/_cfg/agents/cis-creative-problem-solver.customize.yaml +42 -0
- package/bmad/_cfg/agents/cis-design-thinking-coach.customize.yaml +42 -0
- package/bmad/_cfg/agents/cis-innovation-strategist.customize.yaml +42 -0
- package/bmad/_cfg/agents/cis-storyteller.customize.yaml +42 -0
- package/bmad/_cfg/files-manifest.csv +289 -22
- package/bmad/_cfg/ides/claude-code.yaml +6 -0
- package/bmad/_cfg/manifest.yaml +5 -6
- package/bmad/_cfg/task-manifest.csv +2 -0
- package/bmad/_cfg/workflow-manifest.csv +35 -2
- package/bmad/bmb/README.md +135 -73
- package/bmad/bmb/agents/bmad-builder.md.bak +70 -0
- package/bmad/bmb/config.yaml +2 -2
- package/bmad/bmb/workflows/audit-workflow/workflow.yaml.bak +3 -1
- package/bmad/bmb/workflows/create-agent/README.md +126 -243
- package/bmad/bmb/workflows/create-agent/instructions.md +25 -12
- package/bmad/bmb/workflows/create-module/README.md +163 -154
- package/bmad/bmb/workflows/create-module/workflow.yaml.bak +2 -0
- package/bmad/bmb/workflows/create-workflow/instructions.md +16 -8
- package/bmad/bmb/workflows/create-workflow/workflow-creation-guide.md +158 -0
- package/bmad/bmb/workflows/create-workflow/workflow.yaml.bak +2 -0
- package/bmad/bmb/workflows/edit-agent/workflow.yaml.bak +33 -0
- package/bmad/bmb/workflows/edit-module/workflow.yaml.bak +34 -0
- package/bmad/bmb/workflows/edit-workflow/workflow.yaml.bak +2 -0
- package/bmad/bmb/workflows/module-brief/workflow.yaml.bak +2 -0
- package/bmad/bmb/workflows/redoc/workflow.yaml.bak +1 -0
- package/bmad/bmm/README.md +169 -0
- package/bmad/bmm/agents/analyst.md +67 -0
- package/bmad/bmm/agents/architect.md +73 -0
- package/bmad/bmm/agents/dev.md +69 -0
- package/bmad/bmm/agents/paige.md +82 -0
- package/bmad/bmm/agents/pm.md +76 -0
- package/bmad/bmm/agents/sm.md +85 -0
- package/bmad/bmm/agents/tea.md +72 -0
- package/bmad/bmm/agents/ux-designer.md +71 -0
- package/bmad/bmm/config.yaml +17 -0
- package/bmad/bmm/docs/quick-spec-flow.md +645 -0
- package/bmad/bmm/docs/quick-start.md +341 -0
- package/bmad/bmm/docs/scale-adaptive-system.md +1045 -0
- package/bmad/bmm/tasks/daily-standup.xml +85 -0
- package/bmad/bmm/teams/team-fullstack.yaml +11 -0
- package/bmad/bmm/teams/team-gamedev.yaml +14 -0
- package/bmad/bmm/testarch/knowledge/ci-burn-in.md +675 -0
- package/bmad/bmm/testarch/knowledge/component-tdd.md +486 -0
- package/bmad/bmm/testarch/knowledge/contract-testing.md +957 -0
- package/bmad/bmm/testarch/knowledge/data-factories.md +500 -0
- package/bmad/bmm/testarch/knowledge/email-auth.md +721 -0
- package/bmad/bmm/testarch/knowledge/error-handling.md +725 -0
- package/bmad/bmm/testarch/knowledge/feature-flags.md +750 -0
- package/bmad/bmm/testarch/knowledge/fixture-architecture.md +401 -0
- package/bmad/bmm/testarch/knowledge/network-first.md +486 -0
- package/bmad/bmm/testarch/knowledge/nfr-criteria.md +670 -0
- package/bmad/bmm/testarch/knowledge/playwright-config.md +730 -0
- package/bmad/bmm/testarch/knowledge/probability-impact.md +601 -0
- package/bmad/bmm/testarch/knowledge/risk-governance.md +615 -0
- package/bmad/bmm/testarch/knowledge/selective-testing.md +732 -0
- package/bmad/bmm/testarch/knowledge/selector-resilience.md +527 -0
- package/bmad/bmm/testarch/knowledge/test-healing-patterns.md +644 -0
- package/bmad/bmm/testarch/knowledge/test-levels-framework.md +473 -0
- package/bmad/bmm/testarch/knowledge/test-priorities-matrix.md +373 -0
- package/bmad/bmm/testarch/knowledge/test-quality.md +664 -0
- package/bmad/bmm/testarch/knowledge/timing-debugging.md +372 -0
- package/bmad/bmm/testarch/knowledge/visual-debugging.md +524 -0
- package/bmad/bmm/testarch/tea-index.csv +22 -0
- package/bmad/bmm/workflows/1-analysis/brainstorm-project/README.md +113 -0
- package/bmad/bmm/workflows/1-analysis/brainstorm-project/instructions.md +110 -0
- package/bmad/bmm/workflows/1-analysis/brainstorm-project/project-context.md +25 -0
- package/bmad/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +26 -0
- package/bmad/bmm/workflows/1-analysis/domain-research/instructions.md +423 -0
- package/bmad/bmm/workflows/1-analysis/domain-research/template.md +180 -0
- package/bmad/bmm/workflows/1-analysis/domain-research/workflow.yaml +36 -0
- package/bmad/bmm/workflows/1-analysis/product-brief/checklist.md +115 -0
- package/bmad/bmm/workflows/1-analysis/product-brief/instructions.md +524 -0
- package/bmad/bmm/workflows/1-analysis/product-brief/template.md +181 -0
- package/bmad/bmm/workflows/1-analysis/product-brief/workflow.yaml +45 -0
- package/bmad/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +144 -0
- package/bmad/bmm/workflows/1-analysis/research/checklist-technical.md +249 -0
- package/bmad/bmm/workflows/1-analysis/research/checklist.md +299 -0
- package/bmad/bmm/workflows/1-analysis/research/claude-code/injections.yaml +114 -0
- package/bmad/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +439 -0
- package/bmad/bmm/workflows/1-analysis/research/instructions-market.md +679 -0
- package/bmad/bmm/workflows/1-analysis/research/instructions-router.md +133 -0
- package/bmad/bmm/workflows/1-analysis/research/instructions-technical.md +538 -0
- package/bmad/bmm/workflows/1-analysis/research/template-deep-prompt.md +94 -0
- package/bmad/bmm/workflows/1-analysis/research/template-market.md +347 -0
- package/bmad/bmm/workflows/1-analysis/research/template-technical.md +245 -0
- package/bmad/bmm/workflows/1-analysis/research/workflow.yaml +44 -0
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +310 -0
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +1319 -0
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +145 -0
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +64 -0
- package/bmad/bmm/workflows/2-plan-workflows/narrative/checklist.md +139 -0
- package/bmad/bmm/workflows/2-plan-workflows/narrative/instructions-narrative.md +608 -0
- package/bmad/bmm/workflows/2-plan-workflows/narrative/narrative-template.md +195 -0
- package/bmad/bmm/workflows/2-plan-workflows/narrative/workflow.yaml +29 -0
- package/bmad/bmm/workflows/2-plan-workflows/prd/checklist.md +349 -0
- package/bmad/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/instructions.md +395 -0
- package/bmad/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/workflow.yaml +33 -0
- package/bmad/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +13 -0
- package/bmad/bmm/workflows/2-plan-workflows/prd/instructions.md +423 -0
- package/bmad/bmm/workflows/2-plan-workflows/prd/prd-template.md +237 -0
- package/bmad/bmm/workflows/2-plan-workflows/prd/project-types.csv +11 -0
- package/bmad/bmm/workflows/2-plan-workflows/prd/workflow.yaml +46 -0
- package/bmad/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +214 -0
- package/bmad/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +58 -0
- package/bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions-level0-story.md +200 -0
- package/bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions-level1-stories.md +451 -0
- package/bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +1133 -0
- package/bmad/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +181 -0
- package/bmad/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +87 -0
- package/bmad/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +60 -0
- package/bmad/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +347 -0
- package/bmad/bmm/workflows/3-solutioning/architecture/architecture-template.md +103 -0
- package/bmad/bmm/workflows/3-solutioning/architecture/checklist.md +244 -0
- package/bmad/bmm/workflows/3-solutioning/architecture/decision-catalog.yaml +222 -0
- package/bmad/bmm/workflows/3-solutioning/architecture/instructions.md +715 -0
- package/bmad/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +13 -0
- package/bmad/bmm/workflows/3-solutioning/architecture/workflow.yaml +67 -0
- package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/checklist.md +175 -0
- package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +322 -0
- package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/template.md +146 -0
- package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/validation-criteria.yaml +189 -0
- package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +64 -0
- package/bmad/bmm/workflows/4-implementation/code-review/backlog_template.md +12 -0
- package/bmad/bmm/workflows/4-implementation/code-review/checklist.md +22 -0
- package/bmad/bmm/workflows/4-implementation/code-review/instructions.md +420 -0
- package/bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +74 -0
- package/bmad/bmm/workflows/4-implementation/correct-course/checklist.md +279 -0
- package/bmad/bmm/workflows/4-implementation/correct-course/instructions.md +201 -0
- package/bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +43 -0
- package/bmad/bmm/workflows/4-implementation/create-story/README.md +146 -0
- package/bmad/bmm/workflows/4-implementation/create-story/checklist.md +240 -0
- package/bmad/bmm/workflows/4-implementation/create-story/instructions.md +283 -0
- package/bmad/bmm/workflows/4-implementation/create-story/template.md +51 -0
- package/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +74 -0
- package/bmad/bmm/workflows/4-implementation/dev-story/AUDIT-REPORT.md +367 -0
- package/bmad/bmm/workflows/4-implementation/dev-story/checklist.md +38 -0
- package/bmad/bmm/workflows/4-implementation/dev-story/instructions.md +262 -0
- package/bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +26 -0
- package/bmad/bmm/workflows/4-implementation/epic-tech-context/checklist.md +17 -0
- package/bmad/bmm/workflows/4-implementation/epic-tech-context/instructions.md +189 -0
- package/bmad/bmm/workflows/4-implementation/epic-tech-context/template.md +76 -0
- package/bmad/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +58 -0
- package/bmad/bmm/workflows/4-implementation/retrospective/instructions.md +1460 -0
- package/bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +71 -0
- package/bmad/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
- package/bmad/bmm/workflows/4-implementation/sprint-planning/instructions.md +238 -0
- package/bmad/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
- package/bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +47 -0
- package/bmad/bmm/workflows/4-implementation/story-context/checklist.md +16 -0
- package/bmad/bmm/workflows/4-implementation/story-context/context-template.xml +34 -0
- package/bmad/bmm/workflows/4-implementation/story-context/instructions.md +234 -0
- package/bmad/bmm/workflows/4-implementation/story-context/workflow.yaml +57 -0
- package/bmad/bmm/workflows/4-implementation/story-done/instructions.md +111 -0
- package/bmad/bmm/workflows/4-implementation/story-done/workflow.yaml +25 -0
- package/bmad/bmm/workflows/4-implementation/story-ready/instructions.md +117 -0
- package/bmad/bmm/workflows/4-implementation/story-ready/workflow.yaml +25 -0
- package/bmad/bmm/workflows/README.md +256 -0
- package/bmad/bmm/workflows/document-project/checklist.md +245 -0
- package/bmad/bmm/workflows/document-project/documentation-requirements.csv +12 -0
- package/bmad/bmm/workflows/document-project/instructions.md +222 -0
- package/bmad/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
- package/bmad/bmm/workflows/document-project/templates/index-template.md +169 -0
- package/bmad/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
- package/bmad/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
- package/bmad/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
- package/bmad/bmm/workflows/document-project/workflow.yaml +34 -0
- package/bmad/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
- package/bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
- package/bmad/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
- package/bmad/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
- package/bmad/bmm/workflows/techdoc/documentation-standards.md +238 -0
- package/bmad/bmm/workflows/testarch/atdd/atdd-checklist-template.md +363 -0
- package/bmad/bmm/workflows/testarch/atdd/checklist.md +373 -0
- package/bmad/bmm/workflows/testarch/atdd/instructions.md +785 -0
- package/bmad/bmm/workflows/testarch/atdd/workflow.yaml +52 -0
- package/bmad/bmm/workflows/testarch/automate/checklist.md +580 -0
- package/bmad/bmm/workflows/testarch/automate/instructions.md +1303 -0
- package/bmad/bmm/workflows/testarch/automate/workflow.yaml +61 -0
- package/bmad/bmm/workflows/testarch/ci/checklist.md +246 -0
- package/bmad/bmm/workflows/testarch/ci/github-actions-template.yaml +165 -0
- package/bmad/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +128 -0
- package/bmad/bmm/workflows/testarch/ci/instructions.md +517 -0
- package/bmad/bmm/workflows/testarch/ci/workflow.yaml +53 -0
- package/bmad/bmm/workflows/testarch/framework/checklist.md +321 -0
- package/bmad/bmm/workflows/testarch/framework/instructions.md +455 -0
- package/bmad/bmm/workflows/testarch/framework/workflow.yaml +53 -0
- package/bmad/bmm/workflows/testarch/nfr-assess/checklist.md +405 -0
- package/bmad/bmm/workflows/testarch/nfr-assess/instructions.md +722 -0
- package/bmad/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +443 -0
- package/bmad/bmm/workflows/testarch/nfr-assess/workflow.yaml +56 -0
- package/bmad/bmm/workflows/testarch/test-design/checklist.md +234 -0
- package/bmad/bmm/workflows/testarch/test-design/instructions.md +621 -0
- package/bmad/bmm/workflows/testarch/test-design/test-design-template.md +285 -0
- package/bmad/bmm/workflows/testarch/test-design/workflow.yaml +52 -0
- package/bmad/bmm/workflows/testarch/test-review/checklist.md +470 -0
- package/bmad/bmm/workflows/testarch/test-review/instructions.md +608 -0
- package/bmad/bmm/workflows/testarch/test-review/test-review-template.md +388 -0
- package/bmad/bmm/workflows/testarch/test-review/workflow.yaml +53 -0
- package/bmad/bmm/workflows/testarch/trace/checklist.md +654 -0
- package/bmad/bmm/workflows/testarch/trace/instructions.md +1045 -0
- package/bmad/bmm/workflows/testarch/trace/trace-template.md +673 -0
- package/bmad/bmm/workflows/testarch/trace/workflow.yaml +66 -0
- package/{src/modules → bmad}/bmm/workflows/workflow-status/README.md +38 -19
- package/bmad/bmm/workflows/workflow-status/init/instructions.md +390 -0
- package/bmad/bmm/workflows/workflow-status/init/workflow.yaml +27 -0
- package/bmad/bmm/workflows/workflow-status/instructions.md +386 -0
- package/bmad/bmm/workflows/workflow-status/paths/brownfield-level-0.yaml +54 -0
- package/bmad/bmm/workflows/workflow-status/paths/brownfield-level-1.yaml +58 -0
- package/bmad/bmm/workflows/workflow-status/paths/brownfield-level-2.yaml +76 -0
- package/bmad/bmm/workflows/workflow-status/paths/brownfield-level-3.yaml +95 -0
- package/bmad/bmm/workflows/workflow-status/paths/brownfield-level-4.yaml +88 -0
- package/bmad/bmm/workflows/workflow-status/paths/game-design.yaml +75 -0
- package/bmad/bmm/workflows/workflow-status/paths/greenfield-level-0.yaml +45 -0
- package/bmad/bmm/workflows/workflow-status/paths/greenfield-level-1.yaml +49 -0
- package/bmad/bmm/workflows/workflow-status/paths/greenfield-level-2.yaml +78 -0
- package/bmad/bmm/workflows/workflow-status/paths/greenfield-level-3.yaml +73 -0
- package/bmad/bmm/workflows/workflow-status/paths/greenfield-level-4.yaml +75 -0
- package/bmad/bmm/workflows/workflow-status/project-levels.yaml +59 -0
- package/bmad/bmm/workflows/workflow-status/sample-level-3-workflow.yaml +49 -0
- package/bmad/bmm/workflows/workflow-status/workflow-status-template.yaml +31 -0
- package/bmad/bmm/workflows/workflow-status/workflow.yaml +28 -0
- package/bmad/cis/README.md +153 -0
- package/bmad/cis/agents/README.md +104 -0
- package/bmad/cis/agents/brainstorming-coach.md +62 -0
- package/bmad/cis/agents/creative-problem-solver.md +62 -0
- package/bmad/cis/agents/design-thinking-coach.md +62 -0
- package/bmad/cis/agents/innovation-strategist.md +62 -0
- package/bmad/cis/agents/storyteller.md +59 -0
- package/bmad/{bmd → cis}/config.yaml +3 -3
- package/bmad/cis/teams/creative-squad.yaml +6 -0
- package/bmad/cis/workflows/README.md +139 -0
- package/bmad/cis/workflows/design-thinking/README.md +56 -0
- package/bmad/cis/workflows/design-thinking/design-methods.csv +31 -0
- package/bmad/cis/workflows/design-thinking/instructions.md +200 -0
- package/bmad/cis/workflows/design-thinking/template.md +111 -0
- package/bmad/cis/workflows/design-thinking/workflow.yaml +32 -0
- package/bmad/cis/workflows/innovation-strategy/README.md +56 -0
- package/bmad/cis/workflows/innovation-strategy/innovation-frameworks.csv +31 -0
- package/bmad/cis/workflows/innovation-strategy/instructions.md +274 -0
- package/bmad/cis/workflows/innovation-strategy/template.md +189 -0
- package/bmad/cis/workflows/innovation-strategy/workflow.yaml +32 -0
- package/bmad/cis/workflows/problem-solving/README.md +56 -0
- package/bmad/cis/workflows/problem-solving/instructions.md +250 -0
- package/bmad/cis/workflows/problem-solving/solving-methods.csv +31 -0
- package/bmad/cis/workflows/problem-solving/template.md +165 -0
- package/bmad/cis/workflows/problem-solving/workflow.yaml +32 -0
- package/bmad/cis/workflows/storytelling/README.md +58 -0
- package/bmad/cis/workflows/storytelling/instructions.md +291 -0
- package/bmad/cis/workflows/storytelling/story-types.csv +26 -0
- package/bmad/cis/workflows/storytelling/template.md +113 -0
- package/bmad/cis/workflows/storytelling/workflow.yaml +32 -0
- package/bmad/core/agents/bmad-master.md.bak +69 -0
- package/bmad/core/config.yaml +2 -2
- package/bmad/core/tasks/workflow.xml +0 -8
- package/bmad/core/tools/shard-doc.xml +8 -43
- package/docs/document-sharding-guide.md +447 -0
- package/docs/index.md +225 -0
- package/docs/v4-to-v6-upgrade.md +9 -7
- package/package.json +1 -1
- package/src/core/tools/shard-doc.xml +8 -43
- package/src/modules/bmb/README.md +135 -73
- package/src/modules/bmb/workflows/create-agent/README.md +126 -243
- package/src/modules/bmb/workflows/create-agent/instructions.md +25 -12
- package/src/modules/bmb/workflows/create-module/README.md +163 -154
- package/src/modules/bmb/workflows/create-workflow/instructions.md +16 -8
- package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +158 -0
- package/src/modules/bmm/README.md +79 -92
- package/src/modules/bmm/agents/game-designer.agent.yaml +2 -2
- package/src/modules/bmm/agents/paige.agent.yaml +69 -0
- package/src/modules/bmm/agents/pm.agent.yaml +11 -1
- package/src/modules/bmm/docs/README.md +235 -0
- package/src/modules/bmm/docs/agents-guide.md +1109 -0
- package/src/modules/bmm/docs/brownfield-guide.md +638 -0
- package/src/modules/bmm/docs/brownfield-guide.md.backup +1324 -0
- package/src/modules/bmm/docs/enterprise-agentic-development.md +1040 -0
- package/src/modules/bmm/docs/faq.md +589 -0
- package/src/modules/bmm/docs/glossary.md +327 -0
- package/src/modules/bmm/docs/party-mode.md +1236 -0
- package/src/modules/bmm/docs/quick-spec-flow.md +652 -0
- package/src/modules/bmm/docs/quick-start.md +366 -0
- package/src/modules/bmm/docs/scale-adaptive-system.md +749 -0
- package/src/modules/bmm/docs/troubleshooting.md +680 -0
- package/src/modules/bmm/docs/workflow-architecture-reference.md +371 -0
- package/src/modules/bmm/docs/workflow-document-project-reference.md +487 -0
- package/src/modules/bmm/docs/workflows-analysis.md +670 -0
- package/src/modules/bmm/docs/workflows-implementation.md +1759 -0
- package/src/modules/bmm/docs/workflows-planning.md +1086 -0
- package/src/modules/bmm/docs/workflows-solutioning.md +726 -0
- package/src/modules/bmm/docs/workflows-testing.md +1572 -0
- package/src/modules/bmm/workflows/1-analysis/brainstorm-game/instructions.md +45 -26
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +42 -23
- package/src/modules/bmm/workflows/1-analysis/domain-research/instructions.md +423 -0
- package/src/modules/bmm/workflows/1-analysis/domain-research/template.md +180 -0
- package/src/modules/bmm/workflows/1-analysis/domain-research/workflow.yaml +36 -0
- package/src/modules/bmm/workflows/1-analysis/game-brief/instructions.md +42 -28
- package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +434 -231
- package/src/modules/bmm/workflows/1-analysis/product-brief/template.md +93 -77
- package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +14 -0
- package/src/modules/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +144 -0
- package/src/modules/bmm/workflows/1-analysis/research/checklist-technical.md +249 -0
- package/src/modules/bmm/workflows/1-analysis/research/checklist.md +154 -57
- package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +68 -62
- package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +203 -137
- package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +53 -45
- package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +116 -79
- package/src/modules/bmm/workflows/1-analysis/research/template-market.md +37 -1
- package/src/modules/bmm/workflows/1-analysis/research/template-technical.md +36 -1
- package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +13 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +58 -22
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +22 -0
- package/src/modules/bmm/workflows/2-plan-workflows/gdd/instructions-gdd.md +52 -21
- package/src/modules/bmm/workflows/2-plan-workflows/gdd/workflow.yaml +14 -0
- package/src/modules/bmm/workflows/2-plan-workflows/narrative/instructions-narrative.md +73 -22
- package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +295 -63
- package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/epics-template.md +63 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/instructions.md +395 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/workflow.yaml +43 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +13 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +295 -321
- package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +198 -23
- package/src/modules/bmm/workflows/2-plan-workflows/prd/project-types.csv +11 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +24 -6
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +138 -31
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +51 -4
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level0-story.md +50 -17
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level1-stories.md +199 -26
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +1005 -141
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +132 -6
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +36 -5
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +21 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-template.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +91 -79
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +17 -4
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +94 -45
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +26 -0
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +29 -0
- package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +20 -0
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +31 -0
- package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +27 -0
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/instructions.md +29 -0
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +31 -5
- package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +1222 -241
- package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +28 -0
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +17 -0
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +8 -0
- package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +34 -1
- package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +27 -0
- package/src/modules/bmm/workflows/techdoc/documentation-standards.md +239 -0
- package/src/modules/bmm/workflows/workflow-status/init/instructions.md +117 -24
- package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/workflow-status/instructions.md +173 -111
- package/src/modules/bmm/workflows/workflow-status/sample-level-3-workflow.yaml +49 -0
- package/src/modules/bmm/workflows/workflow-status/workflow-status-template.yaml +31 -0
- package/src/modules/bmm/workflows/workflow-status/workflow.yaml +3 -3
- package/src/modules/cis/README.md +153 -0
- package/src/modules/cis/workflows/README.md +102 -30
- package/src/modules/cis/workflows/storytelling/instructions.md +10 -2
- package/tools/cli/commands/install.js +1 -1
- package/tools/cli/installers/lib/core/manifest-generator.js +4 -1
- package/.claude/commands/bmad/bmd/agents/cli-chief.md +0 -108
- package/.claude/commands/bmad/bmd/agents/doc-keeper.md +0 -115
- package/.claude/commands/bmad/bmd/agents/release-chief.md +0 -109
- package/.claude/hooks/bmad-tts-injector.sh +0 -415
- package/.claude/hooks/bmad-voice-manager.sh +0 -511
- package/.claude/hooks/check-output-style.sh +0 -112
- package/.claude/hooks/download-extra-voices.sh +0 -244
- package/.claude/hooks/github-star-reminder.sh +0 -154
- package/.claude/hooks/language-manager.sh +0 -392
- package/.claude/hooks/learn-manager.sh +0 -475
- package/.claude/hooks/personality-manager.sh +0 -438
- package/.claude/hooks/piper-download-voices.sh +0 -165
- package/.claude/hooks/piper-installer.sh +0 -178
- package/.claude/hooks/piper-multispeaker-registry.sh +0 -165
- package/.claude/hooks/piper-voice-manager.sh +0 -293
- package/.claude/hooks/play-tts-elevenlabs.sh +0 -404
- package/.claude/hooks/play-tts-piper.sh +0 -338
- package/.claude/hooks/play-tts.sh +0 -100
- package/.claude/hooks/provider-commands.sh +0 -540
- package/.claude/hooks/provider-manager.sh +0 -298
- package/.claude/hooks/replay-target-audio.sh +0 -95
- package/.claude/hooks/sentiment-manager.sh +0 -201
- package/.claude/hooks/speed-manager.sh +0 -291
- package/.claude/hooks/voice-manager.sh +0 -594
- package/.claude/hooks/voices-config.sh +0 -70
- package/bmad/_cfg/agents/bmd-cli-chief.customize.yaml +0 -32
- package/bmad/bmb/workflows/create-agent/agent-architecture.md.bak +0 -412
- package/bmad/bmb/workflows/create-agent/agent-command-patterns.md.bak +0 -759
- package/bmad/bmb/workflows/create-module/README.md.bak +0 -218
- package/bmad/bmb/workflows/create-module/checklist.md.bak +0 -245
- package/bmad/bmb/workflows/create-module/installer-templates/installer.js.bak +0 -231
- package/bmad/bmb/workflows/create-module/instructions.md.bak +0 -521
- package/bmad/bmb/workflows/create-module/module-structure.md.bak +0 -310
- package/bmad/bmd/README.md +0 -193
- package/bmad/bmd/README.md.bak +0 -193
- package/bmad/bmd/agents/cli-chief-sidecar/instructions.md +0 -102
- package/bmad/bmd/agents/cli-chief-sidecar/instructions.md.bak +0 -102
- package/bmad/bmd/agents/cli-chief-sidecar/knowledge/README.md +0 -68
- package/bmad/bmd/agents/cli-chief-sidecar/knowledge/README.md.bak +0 -68
- package/bmad/bmd/agents/cli-chief-sidecar/knowledge/cli-reference.md +0 -123
- package/bmad/bmd/agents/cli-chief-sidecar/knowledge/cli-reference.md.bak +0 -123
- package/bmad/bmd/agents/cli-chief-sidecar/memories.md +0 -53
- package/bmad/bmd/agents/cli-chief-sidecar/memories.md.bak +0 -53
- package/bmad/bmd/agents/cli-chief.md +0 -108
- package/bmad/bmd/agents/cli-chief.md.bak +0 -108
- package/bmad/bmd/agents/doc-keeper-sidecar/instructions.md +0 -177
- package/bmad/bmd/agents/doc-keeper-sidecar/instructions.md.bak +0 -177
- package/bmad/bmd/agents/doc-keeper-sidecar/knowledge/README.md +0 -81
- package/bmad/bmd/agents/doc-keeper-sidecar/knowledge/README.md.bak +0 -81
- package/bmad/bmd/agents/doc-keeper-sidecar/memories.md +0 -88
- package/bmad/bmd/agents/doc-keeper-sidecar/memories.md.bak +0 -88
- package/bmad/bmd/agents/doc-keeper.md +0 -115
- package/bmad/bmd/agents/doc-keeper.md.bak +0 -115
- package/bmad/bmd/agents/release-chief-sidecar/instructions.md +0 -164
- package/bmad/bmd/agents/release-chief-sidecar/instructions.md.bak +0 -164
- package/bmad/bmd/agents/release-chief-sidecar/knowledge/README.md +0 -82
- package/bmad/bmd/agents/release-chief-sidecar/knowledge/README.md.bak +0 -82
- package/bmad/bmd/agents/release-chief-sidecar/memories.md +0 -73
- package/bmad/bmd/agents/release-chief-sidecar/memories.md.bak +0 -73
- package/bmad/bmd/agents/release-chief.md +0 -109
- package/bmad/bmd/agents/release-chief.md.bak +0 -109
- package/bmad/docs/codex-instructions.md +0 -21
- package/docs/conversion-report-shard-doc-2025-10-26.md +0 -188
- package/src/modules/bmm/workflows/1-analysis/brainstorm-game/README.md +0 -38
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/README.md +0 -29
- package/src/modules/bmm/workflows/1-analysis/game-brief/README.md +0 -221
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-competitor-analyzer.md +0 -259
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-data-analyst.md +0 -190
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-market-researcher.md +0 -337
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-trend-spotter.md +0 -107
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-user-researcher.md +0 -329
- package/src/modules/bmm/workflows/2-plan-workflows/gdd/README.md +0 -222
- package/src/modules/bmm/workflows/4-implementation/create-story/README.md +0 -129
- package/src/modules/bmm/workflows/README.md +0 -577
- package/src/modules/bmm/workflows/workflow-status/workflow-status-template.md +0 -30
- package/src/modules/cis/readme.md +0 -86
- /package/bmad/_cfg/agents/{bmd-doc-keeper.customize.yaml → bmm-analyst.customize.yaml} +0 -0
- /package/bmad/_cfg/agents/{bmd-release-chief.customize.yaml → bmm-architect.customize.yaml} +0 -0
- /package/{docs/bmad-brownfield-guide.md → bmad/bmm/docs/brownfield-guide.md} +0 -0
- /package/{src/modules → bmad}/bmm/tasks/retrospective.xml +0 -0
- /package/{src/modules → bmad}/bmm/testarch/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/1-analysis/product-brief/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/1-analysis/research/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/2-plan-workflows/README.md +0 -0
- /package/{src/modules/bmm/workflows/2-plan-workflows/prd → bmad/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories}/epics-template.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/3-solutioning/README.md +0 -0
- /package/{src/modules/bmm/workflows/3-solutioning/architecture/readme.md → bmad/bmm/workflows/3-solutioning/architecture/README.md} +0 -0
- /package/{src/modules → bmad}/bmm/workflows/3-solutioning/solutioning-gate-check/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/4-implementation/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/4-implementation/code-review/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/4-implementation/correct-course/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/4-implementation/dev-story/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/4-implementation/epic-tech-context/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/4-implementation/retrospective/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/4-implementation/sprint-planning/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/4-implementation/story-context/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/document-project/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/document-project/templates/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/testarch/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/testarch/atdd/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/testarch/automate/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/testarch/ci/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/testarch/framework/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/testarch/nfr-assess/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/testarch/test-design/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/testarch/test-review/README.md +0 -0
- /package/{src/modules → bmad}/bmm/workflows/testarch/trace/README.md +0 -0
- /package/src/modules/bmm/sub-modules/claude-code/{readme.md → README.md} +0 -0
|
@@ -1,338 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
#
|
|
3
|
-
# File: .claude/hooks/play-tts-piper.sh
|
|
4
|
-
#
|
|
5
|
-
# AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
|
|
6
|
-
# Website: https://agentvibes.org
|
|
7
|
-
# Repository: https://github.com/paulpreibisch/AgentVibes
|
|
8
|
-
#
|
|
9
|
-
# Co-created by Paul Preibisch with Claude AI
|
|
10
|
-
# Copyright (c) 2025 Paul Preibisch
|
|
11
|
-
#
|
|
12
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
-
# you may not use this file except in compliance with the License.
|
|
14
|
-
# You may obtain a copy of the License at
|
|
15
|
-
#
|
|
16
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
-
#
|
|
18
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
19
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
-
# See the License for the specific language governing permissions and
|
|
22
|
-
# limitations under the License.
|
|
23
|
-
#
|
|
24
|
-
# DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
25
|
-
# express or implied. Use at your own risk. See the Apache License for details.
|
|
26
|
-
#
|
|
27
|
-
# ---
|
|
28
|
-
#
|
|
29
|
-
# @fileoverview Piper TTS Provider Implementation - Free, offline neural TTS
|
|
30
|
-
# @context Provides local, privacy-first TTS alternative to cloud services for WSL/Linux
|
|
31
|
-
# @architecture Implements provider interface contract for Piper binary integration
|
|
32
|
-
# @dependencies piper (pipx), piper-voice-manager.sh, mpv/aplay, ffmpeg (optional padding)
|
|
33
|
-
# @entrypoints Called by play-tts.sh router when provider=piper
|
|
34
|
-
# @patterns Provider contract: text/voice → audio file path, voice auto-download, language-aware synthesis
|
|
35
|
-
# @related play-tts.sh, piper-voice-manager.sh, language-manager.sh, GitHub Issue #25
|
|
36
|
-
#
|
|
37
|
-
|
|
38
|
-
# Fix locale warnings
|
|
39
|
-
export LC_ALL=C
|
|
40
|
-
|
|
41
|
-
TEXT="$1"
|
|
42
|
-
VOICE_OVERRIDE="$2" # Optional: voice model name
|
|
43
|
-
|
|
44
|
-
# Source voice manager and language manager
|
|
45
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
46
|
-
source "$SCRIPT_DIR/piper-voice-manager.sh"
|
|
47
|
-
source "$SCRIPT_DIR/language-manager.sh"
|
|
48
|
-
|
|
49
|
-
# Default voice for Piper
|
|
50
|
-
DEFAULT_VOICE="en_US-lessac-medium"
|
|
51
|
-
|
|
52
|
-
# @function determine_voice_model
|
|
53
|
-
# @intent Resolve voice name to Piper model name with language support
|
|
54
|
-
# @why Support voice override, language-specific voices, and default fallback
|
|
55
|
-
# @param Uses global: $VOICE_OVERRIDE
|
|
56
|
-
# @returns Sets $VOICE_MODEL global variable
|
|
57
|
-
# @sideeffects None
|
|
58
|
-
VOICE_MODEL=""
|
|
59
|
-
|
|
60
|
-
# Get current language setting
|
|
61
|
-
CURRENT_LANGUAGE=$(get_language_code)
|
|
62
|
-
|
|
63
|
-
if [[ -n "$VOICE_OVERRIDE" ]]; then
|
|
64
|
-
# Use override if provided
|
|
65
|
-
VOICE_MODEL="$VOICE_OVERRIDE"
|
|
66
|
-
echo "🎤 Using voice: $VOICE_OVERRIDE (session-specific)"
|
|
67
|
-
else
|
|
68
|
-
# Try to get voice from voice file (check CLAUDE_PROJECT_DIR first for MCP context)
|
|
69
|
-
VOICE_FILE=""
|
|
70
|
-
|
|
71
|
-
# Priority order:
|
|
72
|
-
# 1. CLAUDE_PROJECT_DIR env var (set by MCP for project-specific settings)
|
|
73
|
-
# 2. Script location (for direct slash command usage)
|
|
74
|
-
# 3. Global ~/.claude (fallback)
|
|
75
|
-
|
|
76
|
-
if [[ -n "$CLAUDE_PROJECT_DIR" ]] && [[ -f "$CLAUDE_PROJECT_DIR/.claude/tts-voice.txt" ]]; then
|
|
77
|
-
# MCP context: Use the project directory where MCP was invoked
|
|
78
|
-
VOICE_FILE="$CLAUDE_PROJECT_DIR/.claude/tts-voice.txt"
|
|
79
|
-
elif [[ -f "$SCRIPT_DIR/../tts-voice.txt" ]]; then
|
|
80
|
-
# Direct usage: Use script location
|
|
81
|
-
VOICE_FILE="$SCRIPT_DIR/../tts-voice.txt"
|
|
82
|
-
elif [[ -f "$HOME/.claude/tts-voice.txt" ]]; then
|
|
83
|
-
# Fallback: Use global
|
|
84
|
-
VOICE_FILE="$HOME/.claude/tts-voice.txt"
|
|
85
|
-
fi
|
|
86
|
-
|
|
87
|
-
if [[ -n "$VOICE_FILE" ]]; then
|
|
88
|
-
FILE_VOICE=$(cat "$VOICE_FILE" 2>/dev/null)
|
|
89
|
-
|
|
90
|
-
# Check for multi-speaker voice (model + speaker ID stored separately)
|
|
91
|
-
# Use same directory as VOICE_FILE for consistency
|
|
92
|
-
VOICE_DIR=$(dirname "$VOICE_FILE")
|
|
93
|
-
MODEL_FILE="$VOICE_DIR/tts-piper-model.txt"
|
|
94
|
-
SPEAKER_ID_FILE="$VOICE_DIR/tts-piper-speaker-id.txt"
|
|
95
|
-
|
|
96
|
-
if [[ -f "$MODEL_FILE" ]] && [[ -f "$SPEAKER_ID_FILE" ]]; then
|
|
97
|
-
# Multi-speaker voice
|
|
98
|
-
VOICE_MODEL=$(cat "$MODEL_FILE" 2>/dev/null)
|
|
99
|
-
SPEAKER_ID=$(cat "$SPEAKER_ID_FILE" 2>/dev/null)
|
|
100
|
-
echo "🎭 Using multi-speaker voice: $FILE_VOICE (Model: $VOICE_MODEL, Speaker ID: $SPEAKER_ID)"
|
|
101
|
-
# Check if it's a standard Piper model name or custom voice (just use as-is)
|
|
102
|
-
elif [[ -n "$FILE_VOICE" ]]; then
|
|
103
|
-
VOICE_MODEL="$FILE_VOICE"
|
|
104
|
-
fi
|
|
105
|
-
fi
|
|
106
|
-
|
|
107
|
-
# If no Piper voice from file, try language-specific voice
|
|
108
|
-
if [[ -z "$VOICE_MODEL" ]]; then
|
|
109
|
-
LANG_VOICE=$(get_voice_for_language "$CURRENT_LANGUAGE" "piper" 2>/dev/null)
|
|
110
|
-
|
|
111
|
-
if [[ -n "$LANG_VOICE" ]]; then
|
|
112
|
-
VOICE_MODEL="$LANG_VOICE"
|
|
113
|
-
echo "🌍 Using $CURRENT_LANGUAGE voice: $LANG_VOICE (Piper)"
|
|
114
|
-
else
|
|
115
|
-
# Use default voice
|
|
116
|
-
VOICE_MODEL="$DEFAULT_VOICE"
|
|
117
|
-
fi
|
|
118
|
-
fi
|
|
119
|
-
fi
|
|
120
|
-
|
|
121
|
-
# @function validate_inputs
|
|
122
|
-
# @intent Check required parameters
|
|
123
|
-
# @why Fail fast with clear errors if inputs missing
|
|
124
|
-
# @exitcode 1=missing text, 2=missing piper binary
|
|
125
|
-
if [[ -z "$TEXT" ]]; then
|
|
126
|
-
echo "Usage: $0 \"text to speak\" [voice_model_name]"
|
|
127
|
-
exit 1
|
|
128
|
-
fi
|
|
129
|
-
|
|
130
|
-
# Check if Piper is installed
|
|
131
|
-
if ! command -v piper &> /dev/null; then
|
|
132
|
-
echo "❌ Error: Piper TTS not installed"
|
|
133
|
-
echo "Install with: pipx install piper-tts"
|
|
134
|
-
echo "Or run: .claude/hooks/piper-installer.sh"
|
|
135
|
-
exit 2
|
|
136
|
-
fi
|
|
137
|
-
|
|
138
|
-
# @function ensure_voice_downloaded
|
|
139
|
-
# @intent Download voice model if not cached
|
|
140
|
-
# @why Provide seamless experience with automatic downloads
|
|
141
|
-
# @param Uses global: $VOICE_MODEL
|
|
142
|
-
# @sideeffects Downloads voice model files
|
|
143
|
-
# @edgecases Prompts user for consent before downloading
|
|
144
|
-
if ! verify_voice "$VOICE_MODEL"; then
|
|
145
|
-
echo "📥 Voice model not found: $VOICE_MODEL"
|
|
146
|
-
echo " File size: ~25MB"
|
|
147
|
-
echo " Preview: https://huggingface.co/rhasspy/piper-voices"
|
|
148
|
-
echo ""
|
|
149
|
-
read -p " Download this voice model? [y/N]: " -n 1 -r
|
|
150
|
-
echo
|
|
151
|
-
|
|
152
|
-
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
153
|
-
if ! download_voice "$VOICE_MODEL"; then
|
|
154
|
-
echo "❌ Failed to download voice model"
|
|
155
|
-
echo "Fix: Download manually or choose different voice"
|
|
156
|
-
exit 3
|
|
157
|
-
fi
|
|
158
|
-
else
|
|
159
|
-
echo "❌ Voice download cancelled"
|
|
160
|
-
exit 3
|
|
161
|
-
fi
|
|
162
|
-
fi
|
|
163
|
-
|
|
164
|
-
# Get voice model path
|
|
165
|
-
VOICE_PATH=$(get_voice_path "$VOICE_MODEL")
|
|
166
|
-
if [[ $? -ne 0 ]]; then
|
|
167
|
-
echo "❌ Voice model path not found: $VOICE_MODEL"
|
|
168
|
-
exit 3
|
|
169
|
-
fi
|
|
170
|
-
|
|
171
|
-
# @function determine_audio_directory
|
|
172
|
-
# @intent Find appropriate directory for audio file storage
|
|
173
|
-
# @why Supports project-local and global storage
|
|
174
|
-
# @returns Sets $AUDIO_DIR global variable
|
|
175
|
-
if [[ -n "$CLAUDE_PROJECT_DIR" ]]; then
|
|
176
|
-
AUDIO_DIR="$CLAUDE_PROJECT_DIR/.claude/audio"
|
|
177
|
-
else
|
|
178
|
-
# Fallback: try to find .claude directory in current path
|
|
179
|
-
CURRENT_DIR="$PWD"
|
|
180
|
-
while [[ "$CURRENT_DIR" != "/" ]]; do
|
|
181
|
-
if [[ -d "$CURRENT_DIR/.claude" ]]; then
|
|
182
|
-
AUDIO_DIR="$CURRENT_DIR/.claude/audio"
|
|
183
|
-
break
|
|
184
|
-
fi
|
|
185
|
-
CURRENT_DIR=$(dirname "$CURRENT_DIR")
|
|
186
|
-
done
|
|
187
|
-
# Final fallback to global if no project .claude found
|
|
188
|
-
if [[ -z "$AUDIO_DIR" ]]; then
|
|
189
|
-
AUDIO_DIR="$HOME/.claude/audio"
|
|
190
|
-
fi
|
|
191
|
-
fi
|
|
192
|
-
|
|
193
|
-
mkdir -p "$AUDIO_DIR"
|
|
194
|
-
TEMP_FILE="$AUDIO_DIR/tts-$(date +%s).wav"
|
|
195
|
-
|
|
196
|
-
# @function get_speech_rate
|
|
197
|
-
# @intent Determine speech rate for Piper synthesis
|
|
198
|
-
# @why Convert user-facing speed (0.5=slower, 2.0=faster) to Piper length-scale (inverted)
|
|
199
|
-
# @returns Piper length-scale value (inverted from user scale)
|
|
200
|
-
# @note Piper uses length-scale where higher=slower, opposite of user expectation
|
|
201
|
-
get_speech_rate() {
|
|
202
|
-
local target_config=""
|
|
203
|
-
local main_config=""
|
|
204
|
-
|
|
205
|
-
# Check for target-specific config first (new and legacy paths)
|
|
206
|
-
if [[ -f "$SCRIPT_DIR/../config/tts-target-speech-rate.txt" ]]; then
|
|
207
|
-
target_config="$SCRIPT_DIR/../config/tts-target-speech-rate.txt"
|
|
208
|
-
elif [[ -f "$HOME/.claude/config/tts-target-speech-rate.txt" ]]; then
|
|
209
|
-
target_config="$HOME/.claude/config/tts-target-speech-rate.txt"
|
|
210
|
-
elif [[ -f "$SCRIPT_DIR/../config/piper-target-speech-rate.txt" ]]; then
|
|
211
|
-
target_config="$SCRIPT_DIR/../config/piper-target-speech-rate.txt"
|
|
212
|
-
elif [[ -f "$HOME/.claude/config/piper-target-speech-rate.txt" ]]; then
|
|
213
|
-
target_config="$HOME/.claude/config/piper-target-speech-rate.txt"
|
|
214
|
-
fi
|
|
215
|
-
|
|
216
|
-
# Check for main config (new and legacy paths)
|
|
217
|
-
if [[ -f "$SCRIPT_DIR/../config/tts-speech-rate.txt" ]]; then
|
|
218
|
-
main_config="$SCRIPT_DIR/../config/tts-speech-rate.txt"
|
|
219
|
-
elif [[ -f "$HOME/.claude/config/tts-speech-rate.txt" ]]; then
|
|
220
|
-
main_config="$HOME/.claude/config/tts-speech-rate.txt"
|
|
221
|
-
elif [[ -f "$SCRIPT_DIR/../config/piper-speech-rate.txt" ]]; then
|
|
222
|
-
main_config="$SCRIPT_DIR/../config/piper-speech-rate.txt"
|
|
223
|
-
elif [[ -f "$HOME/.claude/config/piper-speech-rate.txt" ]]; then
|
|
224
|
-
main_config="$HOME/.claude/config/piper-speech-rate.txt"
|
|
225
|
-
fi
|
|
226
|
-
|
|
227
|
-
# If this is a non-English voice and target config exists, use it
|
|
228
|
-
if [[ "$CURRENT_LANGUAGE" != "english" ]] && [[ -n "$target_config" ]]; then
|
|
229
|
-
local user_speed=$(cat "$target_config" 2>/dev/null)
|
|
230
|
-
# Convert user speed to Piper length-scale (invert)
|
|
231
|
-
# User: 0.5=slower, 1.0=normal, 2.0=faster
|
|
232
|
-
# Piper: 2.0=slower, 1.0=normal, 0.5=faster
|
|
233
|
-
# Formula: piper_length_scale = 1.0 / user_speed
|
|
234
|
-
echo "scale=2; 1.0 / $user_speed" | bc -l 2>/dev/null || echo "1.0"
|
|
235
|
-
return
|
|
236
|
-
fi
|
|
237
|
-
|
|
238
|
-
# Otherwise use main config if available
|
|
239
|
-
if [[ -n "$main_config" ]]; then
|
|
240
|
-
local user_speed=$(grep -v '^#' "$main_config" 2>/dev/null | grep -v '^$' | tail -1)
|
|
241
|
-
echo "scale=2; 1.0 / $user_speed" | bc -l 2>/dev/null || echo "1.0"
|
|
242
|
-
return
|
|
243
|
-
fi
|
|
244
|
-
|
|
245
|
-
# Default: 1.0 (normal) for English, 2.0 (slower) for learning
|
|
246
|
-
if [[ "$CURRENT_LANGUAGE" != "english" ]]; then
|
|
247
|
-
echo "2.0"
|
|
248
|
-
else
|
|
249
|
-
echo "1.0"
|
|
250
|
-
fi
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
SPEECH_RATE=$(get_speech_rate)
|
|
254
|
-
|
|
255
|
-
# @function synthesize_with_piper
|
|
256
|
-
# @intent Generate speech using Piper TTS
|
|
257
|
-
# @why Provides free, offline TTS alternative
|
|
258
|
-
# @param Uses globals: $TEXT, $VOICE_PATH, $SPEECH_RATE, $SPEAKER_ID (optional)
|
|
259
|
-
# @returns Creates WAV file at $TEMP_FILE
|
|
260
|
-
# @exitcode 0=success, 4=synthesis error
|
|
261
|
-
# @sideeffects Creates audio file
|
|
262
|
-
# @edgecases Handles piper errors, invalid models, multi-speaker voices
|
|
263
|
-
if [[ -n "$SPEAKER_ID" ]]; then
|
|
264
|
-
# Multi-speaker voice: Pass speaker ID
|
|
265
|
-
echo "$TEXT" | piper --model "$VOICE_PATH" --speaker "$SPEAKER_ID" --length-scale "$SPEECH_RATE" --output_file "$TEMP_FILE" 2>/dev/null
|
|
266
|
-
else
|
|
267
|
-
# Single-speaker voice
|
|
268
|
-
echo "$TEXT" | piper --model "$VOICE_PATH" --length-scale "$SPEECH_RATE" --output_file "$TEMP_FILE" 2>/dev/null
|
|
269
|
-
fi
|
|
270
|
-
|
|
271
|
-
if [[ ! -f "$TEMP_FILE" ]] || [[ ! -s "$TEMP_FILE" ]]; then
|
|
272
|
-
echo "❌ Failed to synthesize speech with Piper"
|
|
273
|
-
echo "Voice model: $VOICE_MODEL"
|
|
274
|
-
echo "Check that voice model is valid"
|
|
275
|
-
exit 4
|
|
276
|
-
fi
|
|
277
|
-
|
|
278
|
-
# @function add_silence_padding
|
|
279
|
-
# @intent Add silence to prevent WSL audio static
|
|
280
|
-
# @why WSL audio subsystem cuts off first ~200ms
|
|
281
|
-
# @param Uses global: $TEMP_FILE
|
|
282
|
-
# @returns Updates $TEMP_FILE to padded version
|
|
283
|
-
# @sideeffects Modifies audio file
|
|
284
|
-
# AI NOTE: Use ffmpeg if available, otherwise skip padding (degraded experience)
|
|
285
|
-
if command -v ffmpeg &> /dev/null; then
|
|
286
|
-
PADDED_FILE="$AUDIO_DIR/tts-padded-$(date +%s).wav"
|
|
287
|
-
# Add 200ms of silence at the beginning
|
|
288
|
-
ffmpeg -f lavfi -i anullsrc=r=44100:cl=stereo:d=0.2 -i "$TEMP_FILE" \
|
|
289
|
-
-filter_complex "[0:a][1:a]concat=n=2:v=0:a=1[out]" \
|
|
290
|
-
-map "[out]" -y "$PADDED_FILE" 2>/dev/null
|
|
291
|
-
|
|
292
|
-
if [[ -f "$PADDED_FILE" ]]; then
|
|
293
|
-
rm -f "$TEMP_FILE"
|
|
294
|
-
TEMP_FILE="$PADDED_FILE"
|
|
295
|
-
fi
|
|
296
|
-
fi
|
|
297
|
-
|
|
298
|
-
# @function play_audio
|
|
299
|
-
# @intent Play generated audio using available player with sequential playback
|
|
300
|
-
# @why Support multiple audio players and prevent overlapping audio in learning mode
|
|
301
|
-
# @param Uses global: $TEMP_FILE, $CURRENT_LANGUAGE
|
|
302
|
-
# @sideeffects Plays audio with lock mechanism for sequential playback
|
|
303
|
-
LOCK_FILE="/tmp/agentvibes-audio.lock"
|
|
304
|
-
|
|
305
|
-
# Wait for previous audio to finish (max 30 seconds)
|
|
306
|
-
for i in {1..60}; do
|
|
307
|
-
if [ ! -f "$LOCK_FILE" ]; then
|
|
308
|
-
break
|
|
309
|
-
fi
|
|
310
|
-
sleep 0.5
|
|
311
|
-
done
|
|
312
|
-
|
|
313
|
-
# Track last target language audio for replay command
|
|
314
|
-
if [[ "$CURRENT_LANGUAGE" != "english" ]]; then
|
|
315
|
-
TARGET_AUDIO_FILE="${CLAUDE_PROJECT_DIR:-.}/.claude/last-target-audio.txt"
|
|
316
|
-
echo "$TEMP_FILE" > "$TARGET_AUDIO_FILE"
|
|
317
|
-
fi
|
|
318
|
-
|
|
319
|
-
# Create lock and play audio
|
|
320
|
-
touch "$LOCK_FILE"
|
|
321
|
-
|
|
322
|
-
# Get audio duration for proper lock timing
|
|
323
|
-
DURATION=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$TEMP_FILE" 2>/dev/null)
|
|
324
|
-
DURATION=${DURATION%.*} # Round to integer
|
|
325
|
-
DURATION=${DURATION:-1} # Default to 1 second if detection fails
|
|
326
|
-
|
|
327
|
-
# Play audio in background (skip if in test mode)
|
|
328
|
-
if [[ "${AGENTVIBES_TEST_MODE:-false}" != "true" ]]; then
|
|
329
|
-
(mpv "$TEMP_FILE" || aplay "$TEMP_FILE" || paplay "$TEMP_FILE") >/dev/null 2>&1 &
|
|
330
|
-
PLAYER_PID=$!
|
|
331
|
-
fi
|
|
332
|
-
|
|
333
|
-
# Wait for audio to finish, then release lock
|
|
334
|
-
(sleep $DURATION; rm -f "$LOCK_FILE") &
|
|
335
|
-
disown
|
|
336
|
-
|
|
337
|
-
echo "🎵 Saved to: $TEMP_FILE"
|
|
338
|
-
echo "🎤 Voice used: $VOICE_MODEL (Piper TTS)"
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
#
|
|
3
|
-
# File: .claude/hooks/play-tts.sh
|
|
4
|
-
#
|
|
5
|
-
# AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
|
|
6
|
-
# Website: https://agentvibes.org
|
|
7
|
-
# Repository: https://github.com/paulpreibisch/AgentVibes
|
|
8
|
-
#
|
|
9
|
-
# Co-created by Paul Preibisch with Claude AI
|
|
10
|
-
# Copyright (c) 2025 Paul Preibisch
|
|
11
|
-
#
|
|
12
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
-
# you may not use this file except in compliance with the License.
|
|
14
|
-
# You may obtain a copy of the License at
|
|
15
|
-
#
|
|
16
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
-
#
|
|
18
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
19
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
-
# See the License for the specific language governing permissions and
|
|
22
|
-
# limitations under the License.
|
|
23
|
-
#
|
|
24
|
-
# DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
25
|
-
# express or implied, including but not limited to the warranties of
|
|
26
|
-
# merchantability, fitness for a particular purpose and noninfringement.
|
|
27
|
-
# In no event shall the authors or copyright holders be liable for any claim,
|
|
28
|
-
# damages or other liability, whether in an action of contract, tort or
|
|
29
|
-
# otherwise, arising from, out of or in connection with the software or the
|
|
30
|
-
# use or other dealings in the software.
|
|
31
|
-
#
|
|
32
|
-
# ---
|
|
33
|
-
#
|
|
34
|
-
# @fileoverview TTS Provider Router with Language Learning Support
|
|
35
|
-
# @context Routes TTS requests to active provider (ElevenLabs or Piper)
|
|
36
|
-
# @architecture Provider abstraction layer - single entry point for all TTS
|
|
37
|
-
# @dependencies provider-manager.sh, play-tts-elevenlabs.sh, play-tts-piper.sh, github-star-reminder.sh
|
|
38
|
-
# @entrypoints Called by hooks, slash commands, personality-manager.sh, and all TTS features
|
|
39
|
-
# @patterns Provider pattern - delegates to provider-specific implementations, auto-detects provider from voice name
|
|
40
|
-
# @related provider-manager.sh, play-tts-elevenlabs.sh, play-tts-piper.sh, learn-manager.sh
|
|
41
|
-
#
|
|
42
|
-
|
|
43
|
-
# Fix locale warnings
|
|
44
|
-
export LC_ALL=C
|
|
45
|
-
|
|
46
|
-
TEXT="$1"
|
|
47
|
-
VOICE_OVERRIDE="$2" # Optional: voice name or ID
|
|
48
|
-
|
|
49
|
-
# Get script directory
|
|
50
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
51
|
-
|
|
52
|
-
# Source provider manager to get active provider
|
|
53
|
-
source "$SCRIPT_DIR/provider-manager.sh"
|
|
54
|
-
|
|
55
|
-
# Get active provider
|
|
56
|
-
ACTIVE_PROVIDER=$(get_active_provider)
|
|
57
|
-
|
|
58
|
-
# Show GitHub star reminder (once per day)
|
|
59
|
-
"$SCRIPT_DIR/github-star-reminder.sh" 2>/dev/null || true
|
|
60
|
-
|
|
61
|
-
# @function detect_voice_provider
|
|
62
|
-
# @intent Auto-detect provider from voice name (for mixed-provider support)
|
|
63
|
-
# @why Allow ElevenLabs for main language + Piper for target language
|
|
64
|
-
# @param $1 voice name/ID
|
|
65
|
-
# @returns Provider name (elevenlabs or piper)
|
|
66
|
-
detect_voice_provider() {
|
|
67
|
-
local voice="$1"
|
|
68
|
-
# Piper voice names contain underscore and dash (e.g., es_ES-davefx-medium)
|
|
69
|
-
if [[ "$voice" == *"_"*"-"* ]]; then
|
|
70
|
-
echo "piper"
|
|
71
|
-
else
|
|
72
|
-
echo "$ACTIVE_PROVIDER"
|
|
73
|
-
fi
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
# Override provider if voice indicates different provider (mixed-provider mode)
|
|
77
|
-
if [[ -n "$VOICE_OVERRIDE" ]]; then
|
|
78
|
-
DETECTED_PROVIDER=$(detect_voice_provider "$VOICE_OVERRIDE")
|
|
79
|
-
if [[ "$DETECTED_PROVIDER" != "$ACTIVE_PROVIDER" ]]; then
|
|
80
|
-
ACTIVE_PROVIDER="$DETECTED_PROVIDER"
|
|
81
|
-
fi
|
|
82
|
-
fi
|
|
83
|
-
|
|
84
|
-
# Normal single-language mode - route to appropriate provider implementation
|
|
85
|
-
# Note: For learning mode, the output style will call this script TWICE:
|
|
86
|
-
# 1. First call with main language text and current voice
|
|
87
|
-
# 2. Second call with translated text and target voice
|
|
88
|
-
case "$ACTIVE_PROVIDER" in
|
|
89
|
-
elevenlabs)
|
|
90
|
-
exec "$SCRIPT_DIR/play-tts-elevenlabs.sh" "$TEXT" "$VOICE_OVERRIDE"
|
|
91
|
-
;;
|
|
92
|
-
piper)
|
|
93
|
-
exec "$SCRIPT_DIR/play-tts-piper.sh" "$TEXT" "$VOICE_OVERRIDE"
|
|
94
|
-
;;
|
|
95
|
-
*)
|
|
96
|
-
echo "❌ Unknown provider: $ACTIVE_PROVIDER"
|
|
97
|
-
echo " Run: /agent-vibes:provider list"
|
|
98
|
-
exit 1
|
|
99
|
-
;;
|
|
100
|
-
esac
|