frappe-builder 1.1.0-dev.10
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/.fb/state.db +0 -0
- package/AGENTS.md +167 -0
- package/README.md +89 -0
- package/_bmad/_config/agent-manifest.csv +10 -0
- package/_bmad/_config/agents/bmm-analyst.customize.yaml +41 -0
- package/_bmad/_config/agents/bmm-architect.customize.yaml +41 -0
- package/_bmad/_config/agents/bmm-dev.customize.yaml +41 -0
- package/_bmad/_config/agents/bmm-pm.customize.yaml +41 -0
- package/_bmad/_config/agents/bmm-qa.customize.yaml +41 -0
- package/_bmad/_config/agents/bmm-quick-flow-solo-dev.customize.yaml +41 -0
- package/_bmad/_config/agents/bmm-sm.customize.yaml +41 -0
- package/_bmad/_config/agents/bmm-tech-writer.customize.yaml +41 -0
- package/_bmad/_config/agents/bmm-ux-designer.customize.yaml +41 -0
- package/_bmad/_config/bmad-help.csv +47 -0
- package/_bmad/_config/files-manifest.csv +369 -0
- package/_bmad/_config/ides/claude-code.yaml +5 -0
- package/_bmad/_config/manifest.yaml +28 -0
- package/_bmad/_config/skill-manifest.csv +41 -0
- package/_bmad/_config/task-manifest.csv +1 -0
- package/_bmad/_config/tool-manifest.csv +1 -0
- package/_bmad/_config/workflow-manifest.csv +1 -0
- package/_bmad/_memory/config.yaml +11 -0
- package/_bmad/_memory/tech-writer-sidecar/documentation-standards.md +224 -0
- package/_bmad/bmm/agents/analyst.md +69 -0
- package/_bmad/bmm/agents/architect.md +59 -0
- package/_bmad/bmm/agents/bmad-skill-manifest.yaml +39 -0
- package/_bmad/bmm/agents/dev.md +66 -0
- package/_bmad/bmm/agents/pm.md +63 -0
- package/_bmad/bmm/agents/qa.md +89 -0
- package/_bmad/bmm/agents/quick-flow-solo-dev.md +61 -0
- package/_bmad/bmm/agents/sm.md +67 -0
- package/_bmad/bmm/agents/tech-writer/bmad-skill-manifest.yaml +3 -0
- package/_bmad/bmm/agents/tech-writer/tech-writer.md +67 -0
- package/_bmad/bmm/agents/ux-designer.md +58 -0
- package/_bmad/bmm/config.yaml +16 -0
- package/_bmad/bmm/data/project-context-template.md +26 -0
- package/_bmad/bmm/module-help.csv +32 -0
- package/_bmad/bmm/teams/default-party.csv +20 -0
- package/_bmad/bmm/teams/team-fullstack.yaml +12 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-create-product-brief/SKILL.md +6 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-create-product-brief/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-create-product-brief/product-brief.template.md +10 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-01-init.md +170 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-01b-continue.md +158 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-02-vision.md +193 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-03-users.md +196 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-04-metrics.md +199 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-05-scope.md +213 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-06-complete.md +159 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-create-product-brief/workflow.md +55 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/SKILL.md +88 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/artifact-analyzer.md +60 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/opportunity-reviewer.md +44 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/skeptic-reviewer.md +44 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/web-researcher.md +49 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/bmad-manifest.json +17 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/contextual-discovery.md +57 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/draft-and-review.md +86 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/finalize.md +75 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/guided-elicitation.md +70 -0
- package/_bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/resources/brief-template.md +60 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-domain-research/SKILL.md +6 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-domain-research/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-domain-research/domain-steps/step-01-init.md +137 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-domain-research/domain-steps/step-02-domain-analysis.md +229 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-domain-research/domain-steps/step-03-competitive-landscape.md +238 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-domain-research/domain-steps/step-04-regulatory-focus.md +206 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-domain-research/domain-steps/step-05-technical-trends.md +234 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-domain-research/domain-steps/step-06-research-synthesis.md +444 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-domain-research/research.template.md +29 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-domain-research/workflow.md +49 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-market-research/SKILL.md +6 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-market-research/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-market-research/research.template.md +29 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-01-init.md +184 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-02-customer-behavior.md +239 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-03-customer-pain-points.md +251 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-04-customer-decisions.md +261 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-05-competitive-analysis.md +173 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-06-research-completion.md +478 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-market-research/workflow.md +49 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-technical-research/SKILL.md +6 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-technical-research/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-technical-research/research.template.md +29 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-technical-research/technical-steps/step-01-init.md +137 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-technical-research/technical-steps/step-02-technical-overview.md +239 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-technical-research/technical-steps/step-03-integration-patterns.md +248 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-technical-research/technical-steps/step-04-architectural-patterns.md +202 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-technical-research/technical-steps/step-05-implementation-research.md +233 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-technical-research/technical-steps/step-06-research-synthesis.md +487 -0
- package/_bmad/bmm/workflows/1-analysis/research/bmad-technical-research/workflow.md +50 -0
- package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
- package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
- package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
- package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
- package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
- package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +476 -0
- package/_bmad/bmm/workflows/1-analysis/research/research.template.md +29 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/SKILL.md +6 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/steps/step-01-init.md +135 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/steps/step-01b-continue.md +127 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/steps/step-02-discovery.md +190 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/steps/step-03-core-experience.md +217 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/steps/step-04-emotional-response.md +220 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/steps/step-05-inspiration.md +235 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/steps/step-06-design-system.md +253 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/steps/step-07-defining-experience.md +255 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/steps/step-08-visual-foundation.md +225 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/steps/step-09-design-directions.md +225 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/steps/step-10-user-journeys.md +242 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/steps/step-11-component-strategy.md +249 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/steps/step-12-ux-patterns.md +238 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/steps/step-13-responsive-accessibility.md +265 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/steps/step-14-complete.md +171 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/ux-design-template.md +13 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/workflow.md +36 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/SKILL.md +6 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/steps-e/step-e-01-discovery.md +242 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/steps-e/step-e-01b-legacy-conversion.md +204 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/steps-e/step-e-02-review.md +245 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/steps-e/step-e-03-edit.md +250 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/steps-e/step-e-04-complete.md +165 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/workflow.md +63 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/SKILL.md +6 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/domain-complexity.csv +15 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/prd-purpose.md +197 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/project-types.csv +11 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-01-discovery.md +221 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02-format-detection.md +188 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +206 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-03-density-validation.md +171 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +211 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +225 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +214 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +202 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +240 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +260 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +206 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +261 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +239 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-13-report-complete.md +229 -0
- package/_bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/workflow.md +62 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +15 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +197 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/data/project-types.csv +11 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +224 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +191 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +209 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +174 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +228 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +217 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +263 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +209 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +242 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +232 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +65 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/SKILL.md +6 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/steps/step-01-document-discovery.md +179 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md +168 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +169 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/steps/step-04-ux-alignment.md +129 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/steps/step-05-epic-quality-review.md +241 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/steps/step-06-final-assessment.md +126 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/templates/readiness-report-template.md +4 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/workflow.md +49 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-architecture/SKILL.md +6 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-architecture/architecture-decision-template.md +12 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-architecture/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-architecture/data/domain-complexity.csv +13 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-architecture/data/project-types.csv +7 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-architecture/steps/step-01-init.md +153 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-architecture/steps/step-01b-continue.md +173 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-architecture/steps/step-02-context.md +224 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-architecture/steps/step-03-starter.md +329 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-architecture/steps/step-04-decisions.md +318 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-architecture/steps/step-05-patterns.md +359 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-architecture/steps/step-06-structure.md +379 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-architecture/steps/step-07-validation.md +359 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-architecture/steps/step-08-complete.md +76 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-architecture/workflow.md +38 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/SKILL.md +6 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/steps/step-01-validate-prerequisites.md +255 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/steps/step-02-design-epics.md +212 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/steps/step-03-create-stories.md +255 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/steps/step-04-final-validation.md +131 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/templates/epics-template.md +61 -0
- package/_bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/workflow.md +53 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-code-review/SKILL.md +6 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-code-review/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-01-gather-context.md +61 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-02-review.md +41 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-03-triage.md +50 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-04-present.md +38 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-code-review/workflow.md +54 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-correct-course/SKILL.md +6 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-correct-course/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-correct-course/checklist.md +288 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-correct-course/workflow.md +267 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-create-story/SKILL.md +6 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-create-story/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-create-story/checklist.md +357 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-create-story/discover-inputs.md +88 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-create-story/template.md +49 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-create-story/workflow.md +380 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-dev-story/SKILL.md +6 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-dev-story/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-dev-story/checklist.md +80 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-dev-story/workflow.md +450 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-retrospective/SKILL.md +6 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-retrospective/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-retrospective/workflow.md +1479 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-sprint-planning/SKILL.md +6 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-sprint-planning/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-sprint-planning/checklist.md +33 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-sprint-planning/sprint-status-template.yaml +56 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-sprint-planning/workflow.md +263 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-sprint-status/SKILL.md +6 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-sprint-status/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/4-implementation/bmad-sprint-status/workflow.md +261 -0
- package/_bmad/bmm/workflows/bmad-document-project/SKILL.md +6 -0
- package/_bmad/bmm/workflows/bmad-document-project/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/bmad-document-project/checklist.md +245 -0
- package/_bmad/bmm/workflows/bmad-document-project/documentation-requirements.csv +12 -0
- package/_bmad/bmm/workflows/bmad-document-project/instructions.md +128 -0
- package/_bmad/bmm/workflows/bmad-document-project/templates/deep-dive-template.md +345 -0
- package/_bmad/bmm/workflows/bmad-document-project/templates/index-template.md +169 -0
- package/_bmad/bmm/workflows/bmad-document-project/templates/project-overview-template.md +103 -0
- package/_bmad/bmm/workflows/bmad-document-project/templates/project-scan-report-schema.json +160 -0
- package/_bmad/bmm/workflows/bmad-document-project/templates/source-tree-template.md +135 -0
- package/_bmad/bmm/workflows/bmad-document-project/workflow.md +27 -0
- package/_bmad/bmm/workflows/bmad-document-project/workflows/deep-dive-instructions.md +299 -0
- package/_bmad/bmm/workflows/bmad-document-project/workflows/deep-dive-workflow.md +34 -0
- package/_bmad/bmm/workflows/bmad-document-project/workflows/full-scan-instructions.md +1107 -0
- package/_bmad/bmm/workflows/bmad-document-project/workflows/full-scan-workflow.md +34 -0
- package/_bmad/bmm/workflows/bmad-generate-project-context/SKILL.md +6 -0
- package/_bmad/bmm/workflows/bmad-generate-project-context/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/bmad-generate-project-context/project-context-template.md +21 -0
- package/_bmad/bmm/workflows/bmad-generate-project-context/steps/step-01-discover.md +186 -0
- package/_bmad/bmm/workflows/bmad-generate-project-context/steps/step-02-generate.md +321 -0
- package/_bmad/bmm/workflows/bmad-generate-project-context/steps/step-03-complete.md +278 -0
- package/_bmad/bmm/workflows/bmad-generate-project-context/workflow.md +43 -0
- package/_bmad/bmm/workflows/bmad-qa-generate-e2e-tests/SKILL.md +6 -0
- package/_bmad/bmm/workflows/bmad-qa-generate-e2e-tests/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/bmad-qa-generate-e2e-tests/checklist.md +33 -0
- package/_bmad/bmm/workflows/bmad-qa-generate-e2e-tests/workflow.md +136 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/SKILL.md +6 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-01-mode-detection.md +169 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-02-context-gathering.md +114 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-03-execute.md +107 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-04-self-check.md +107 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-05-adversarial-review.md +94 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-06-resolve-findings.md +144 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/workflow.md +38 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/SKILL.md +6 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-01-clarify-and-route.md +51 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-02-plan.md +35 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-03-implement.md +33 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-04-review.md +50 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-05-present.md +17 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/tech-spec-template.md +90 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/workflow.md +79 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/SKILL.md +6 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/bmad-skill-manifest.yaml +1 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/steps/step-01-understand.md +185 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/steps/step-02-investigate.md +140 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/steps/step-03-generate.md +123 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/steps/step-04-review.md +195 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/tech-spec-template.md +74 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/workflow.md +73 -0
- package/_bmad/cis/config.yaml +12 -0
- package/_bmad/cis/module-help.csv +6 -0
- package/_bmad/cis/skills/bmad-cis-agent-brainstorming-coach/SKILL.md +51 -0
- package/_bmad/cis/skills/bmad-cis-agent-brainstorming-coach/bmad-skill-manifest.yaml +11 -0
- package/_bmad/cis/skills/bmad-cis-agent-creative-problem-solver/SKILL.md +51 -0
- package/_bmad/cis/skills/bmad-cis-agent-creative-problem-solver/bmad-skill-manifest.yaml +11 -0
- package/_bmad/cis/skills/bmad-cis-agent-design-thinking-coach/SKILL.md +52 -0
- package/_bmad/cis/skills/bmad-cis-agent-design-thinking-coach/bmad-skill-manifest.yaml +11 -0
- package/_bmad/cis/skills/bmad-cis-agent-innovation-strategist/SKILL.md +51 -0
- package/_bmad/cis/skills/bmad-cis-agent-innovation-strategist/bmad-skill-manifest.yaml +11 -0
- package/_bmad/cis/skills/bmad-cis-agent-presentation-master/SKILL.md +62 -0
- package/_bmad/cis/skills/bmad-cis-agent-presentation-master/bmad-skill-manifest.yaml +11 -0
- package/_bmad/cis/skills/bmad-cis-agent-storyteller/SKILL.md +56 -0
- package/_bmad/cis/skills/bmad-cis-agent-storyteller/bmad-skill-manifest.yaml +11 -0
- package/_bmad/cis/skills/bmad-cis-agent-storyteller/stories-told.md +7 -0
- package/_bmad/cis/skills/bmad-cis-agent-storyteller/story-preferences.md +7 -0
- package/_bmad/cis/skills/bmad-cis-design-thinking/SKILL.md +6 -0
- package/_bmad/cis/skills/bmad-cis-design-thinking/bmad-skill-manifest.yaml +1 -0
- package/_bmad/cis/skills/bmad-cis-design-thinking/design-methods.csv +31 -0
- package/_bmad/cis/skills/bmad-cis-design-thinking/template.md +111 -0
- package/_bmad/cis/skills/bmad-cis-design-thinking/workflow.md +242 -0
- package/_bmad/cis/skills/bmad-cis-innovation-strategy/SKILL.md +6 -0
- package/_bmad/cis/skills/bmad-cis-innovation-strategy/bmad-skill-manifest.yaml +1 -0
- package/_bmad/cis/skills/bmad-cis-innovation-strategy/innovation-frameworks.csv +31 -0
- package/_bmad/cis/skills/bmad-cis-innovation-strategy/template.md +189 -0
- package/_bmad/cis/skills/bmad-cis-innovation-strategy/workflow.md +315 -0
- package/_bmad/cis/skills/bmad-cis-problem-solving/SKILL.md +6 -0
- package/_bmad/cis/skills/bmad-cis-problem-solving/bmad-skill-manifest.yaml +1 -0
- package/_bmad/cis/skills/bmad-cis-problem-solving/solving-methods.csv +31 -0
- package/_bmad/cis/skills/bmad-cis-problem-solving/template.md +165 -0
- package/_bmad/cis/skills/bmad-cis-problem-solving/workflow.md +291 -0
- package/_bmad/cis/skills/bmad-cis-storytelling/SKILL.md +6 -0
- package/_bmad/cis/skills/bmad-cis-storytelling/bmad-skill-manifest.yaml +1 -0
- package/_bmad/cis/skills/bmad-cis-storytelling/story-types.csv +26 -0
- package/_bmad/cis/skills/bmad-cis-storytelling/template.md +113 -0
- package/_bmad/cis/skills/bmad-cis-storytelling/workflow.md +321 -0
- package/_bmad/core/config.yaml +9 -0
- package/_bmad/core/module-help.csv +11 -0
- package/_bmad/core/skills/bmad-advanced-elicitation/SKILL.md +6 -0
- package/_bmad/core/skills/bmad-advanced-elicitation/bmad-skill-manifest.yaml +1 -0
- package/_bmad/core/skills/bmad-advanced-elicitation/methods.csv +51 -0
- package/_bmad/core/skills/bmad-advanced-elicitation/workflow.md +135 -0
- package/_bmad/core/skills/bmad-brainstorming/SKILL.md +6 -0
- package/_bmad/core/skills/bmad-brainstorming/bmad-skill-manifest.yaml +1 -0
- package/_bmad/core/skills/bmad-brainstorming/brain-methods.csv +62 -0
- package/_bmad/core/skills/bmad-brainstorming/steps/step-01-session-setup.md +214 -0
- package/_bmad/core/skills/bmad-brainstorming/steps/step-01b-continue.md +124 -0
- package/_bmad/core/skills/bmad-brainstorming/steps/step-02a-user-selected.md +229 -0
- package/_bmad/core/skills/bmad-brainstorming/steps/step-02b-ai-recommended.md +239 -0
- package/_bmad/core/skills/bmad-brainstorming/steps/step-02c-random-selection.md +211 -0
- package/_bmad/core/skills/bmad-brainstorming/steps/step-02d-progressive-flow.md +266 -0
- package/_bmad/core/skills/bmad-brainstorming/steps/step-03-technique-execution.md +401 -0
- package/_bmad/core/skills/bmad-brainstorming/steps/step-04-idea-organization.md +305 -0
- package/_bmad/core/skills/bmad-brainstorming/template.md +15 -0
- package/_bmad/core/skills/bmad-brainstorming/workflow.md +53 -0
- package/_bmad/core/skills/bmad-distillator/SKILL.md +178 -0
- package/_bmad/core/skills/bmad-distillator/agents/distillate-compressor.md +116 -0
- package/_bmad/core/skills/bmad-distillator/agents/round-trip-reconstructor.md +68 -0
- package/_bmad/core/skills/bmad-distillator/bmad-skill-manifest.yaml +15 -0
- package/_bmad/core/skills/bmad-distillator/resources/compression-rules.md +51 -0
- package/_bmad/core/skills/bmad-distillator/resources/distillate-format-reference.md +227 -0
- package/_bmad/core/skills/bmad-distillator/resources/splitting-strategy.md +78 -0
- package/_bmad/core/skills/bmad-editorial-review-prose/SKILL.md +6 -0
- package/_bmad/core/skills/bmad-editorial-review-prose/bmad-skill-manifest.yaml +1 -0
- package/_bmad/core/skills/bmad-editorial-review-prose/workflow.md +81 -0
- package/_bmad/core/skills/bmad-editorial-review-structure/SKILL.md +6 -0
- package/_bmad/core/skills/bmad-editorial-review-structure/bmad-skill-manifest.yaml +1 -0
- package/_bmad/core/skills/bmad-editorial-review-structure/workflow.md +174 -0
- package/_bmad/core/skills/bmad-help/SKILL.md +6 -0
- package/_bmad/core/skills/bmad-help/bmad-skill-manifest.yaml +1 -0
- package/_bmad/core/skills/bmad-help/workflow.md +88 -0
- package/_bmad/core/skills/bmad-index-docs/SKILL.md +6 -0
- package/_bmad/core/skills/bmad-index-docs/bmad-skill-manifest.yaml +1 -0
- package/_bmad/core/skills/bmad-index-docs/workflow.md +61 -0
- package/_bmad/core/skills/bmad-party-mode/SKILL.md +6 -0
- package/_bmad/core/skills/bmad-party-mode/bmad-skill-manifest.yaml +1 -0
- package/_bmad/core/skills/bmad-party-mode/steps/step-01-agent-loading.md +138 -0
- package/_bmad/core/skills/bmad-party-mode/steps/step-02-discussion-orchestration.md +187 -0
- package/_bmad/core/skills/bmad-party-mode/steps/step-03-graceful-exit.md +167 -0
- package/_bmad/core/skills/bmad-party-mode/workflow.md +190 -0
- package/_bmad/core/skills/bmad-review-adversarial-general/SKILL.md +6 -0
- package/_bmad/core/skills/bmad-review-adversarial-general/bmad-skill-manifest.yaml +1 -0
- package/_bmad/core/skills/bmad-review-adversarial-general/workflow.md +32 -0
- package/_bmad/core/skills/bmad-review-edge-case-hunter/SKILL.md +6 -0
- package/_bmad/core/skills/bmad-review-edge-case-hunter/bmad-skill-manifest.yaml +1 -0
- package/_bmad/core/skills/bmad-review-edge-case-hunter/workflow.md +62 -0
- package/_bmad/core/skills/bmad-shard-doc/SKILL.md +6 -0
- package/_bmad/core/skills/bmad-shard-doc/bmad-skill-manifest.yaml +1 -0
- package/_bmad/core/skills/bmad-shard-doc/workflow.md +100 -0
- package/_bmad/core/tasks/bmad-create-prd/SKILL.md +6 -0
- package/_bmad/core/tasks/bmad-create-prd/bmad-skill-manifest.yaml +1 -0
- package/_bmad/core/tasks/bmad-create-prd/data/domain-complexity.csv +15 -0
- package/_bmad/core/tasks/bmad-create-prd/data/prd-purpose.md +197 -0
- package/_bmad/core/tasks/bmad-create-prd/data/project-types.csv +11 -0
- package/_bmad/core/tasks/bmad-create-prd/steps-c/step-01-init.md +178 -0
- package/_bmad/core/tasks/bmad-create-prd/steps-c/step-01b-continue.md +161 -0
- package/_bmad/core/tasks/bmad-create-prd/steps-c/step-02-discovery.md +208 -0
- package/_bmad/core/tasks/bmad-create-prd/steps-c/step-02b-vision.md +142 -0
- package/_bmad/core/tasks/bmad-create-prd/steps-c/step-02c-executive-summary.md +158 -0
- package/_bmad/core/tasks/bmad-create-prd/steps-c/step-03-success.md +214 -0
- package/_bmad/core/tasks/bmad-create-prd/steps-c/step-04-journeys.md +201 -0
- package/_bmad/core/tasks/bmad-create-prd/steps-c/step-05-domain.md +194 -0
- package/_bmad/core/tasks/bmad-create-prd/steps-c/step-06-innovation.md +211 -0
- package/_bmad/core/tasks/bmad-create-prd/steps-c/step-07-project-type.md +222 -0
- package/_bmad/core/tasks/bmad-create-prd/steps-c/step-08-scoping.md +216 -0
- package/_bmad/core/tasks/bmad-create-prd/steps-c/step-09-functional.md +219 -0
- package/_bmad/core/tasks/bmad-create-prd/steps-c/step-10-nonfunctional.md +230 -0
- package/_bmad/core/tasks/bmad-create-prd/steps-c/step-11-polish.md +221 -0
- package/_bmad/core/tasks/bmad-create-prd/steps-c/step-12-complete.md +115 -0
- package/_bmad/core/tasks/bmad-create-prd/templates/prd-template.md +10 -0
- package/_bmad/core/tasks/bmad-create-prd/workflow.md +62 -0
- package/config/allowed-commands.ts +39 -0
- package/config/defaults.ts +19 -0
- package/config/loader.ts +105 -0
- package/dist/cli.mjs +67 -0
- package/dist/init-BYJy3ztn.mjs +159 -0
- package/extensions/frappe-gates.ts +160 -0
- package/extensions/frappe-session.ts +324 -0
- package/extensions/frappe-state.ts +235 -0
- package/extensions/frappe-tools.ts +278 -0
- package/extensions/frappe-ui.ts +119 -0
- package/extensions/frappe-workflow.ts +85 -0
- package/gates/coverage-check.ts +37 -0
- package/gates/frappe-native-check.ts +65 -0
- package/gates/permission-check.ts +65 -0
- package/gates/query-check.ts +40 -0
- package/gates/server-side-check.ts +67 -0
- package/gates/style-check.ts +92 -0
- package/gates/types.ts +13 -0
- package/package.json +47 -0
- package/project-context.md +146 -0
- package/state/db.ts +85 -0
- package/state/fsm.ts +68 -0
- package/state/journal.ts +164 -0
- package/state/schema.ts +41 -0
- package/tools/agent-tools.ts +60 -0
- package/tools/bench-tools.ts +63 -0
- package/tools/context-sandbox.ts +31 -0
- package/tools/debug-tools.ts +12 -0
- package/tools/feature-tools.ts +126 -0
- package/tools/frappe-context7.ts +70 -0
- package/tools/frappe-query-tools.ts +47 -0
- package/tools/project-tools.ts +107 -0
- package/tsdown.config.ts +7 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Step 12: Workflow Completion
|
|
2
|
+
|
|
3
|
+
**Final Step - Complete the PRD**
|
|
4
|
+
|
|
5
|
+
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
6
|
+
|
|
7
|
+
- ✅ THIS IS A FINAL STEP - Workflow completion required
|
|
8
|
+
- 📖 CRITICAL: ALWAYS read the complete step file before taking any action
|
|
9
|
+
- 🛑 NO content generation - this is a wrap-up step
|
|
10
|
+
- 📋 FINALIZE document and update workflow status
|
|
11
|
+
- 💬 FOCUS on completion, validation options, and next steps
|
|
12
|
+
- 🎯 UPDATE workflow status files with completion information
|
|
13
|
+
- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}`
|
|
14
|
+
|
|
15
|
+
## EXECUTION PROTOCOLS:
|
|
16
|
+
|
|
17
|
+
- 🎯 Show your analysis before taking any action
|
|
18
|
+
- 💾 Update the main workflow status file with completion information (if exists)
|
|
19
|
+
- 📖 Offer validation workflow options to user
|
|
20
|
+
- 🚫 DO NOT load additional steps after this one
|
|
21
|
+
|
|
22
|
+
## TERMINATION STEP PROTOCOLS:
|
|
23
|
+
|
|
24
|
+
- This is a FINAL step - workflow completion required
|
|
25
|
+
- Update workflow status file with finalized document
|
|
26
|
+
- Suggest validation and next workflow steps
|
|
27
|
+
- Mark workflow as complete in status tracking
|
|
28
|
+
|
|
29
|
+
## CONTEXT BOUNDARIES:
|
|
30
|
+
|
|
31
|
+
- Complete and polished PRD document is available from all previous steps
|
|
32
|
+
- Workflow frontmatter shows all completed steps including polish
|
|
33
|
+
- All collaborative content has been generated, saved, and optimized
|
|
34
|
+
- Focus on completion, validation options, and next steps
|
|
35
|
+
|
|
36
|
+
## YOUR TASK:
|
|
37
|
+
|
|
38
|
+
Complete the PRD workflow, update status files, offer validation options, and suggest next steps for the project.
|
|
39
|
+
|
|
40
|
+
## WORKFLOW COMPLETION SEQUENCE:
|
|
41
|
+
|
|
42
|
+
### 1. Announce Workflow Completion
|
|
43
|
+
|
|
44
|
+
Inform user that the PRD is complete and polished:
|
|
45
|
+
- Celebrate successful completion of comprehensive PRD
|
|
46
|
+
- Summarize all sections that were created
|
|
47
|
+
- Highlight that document has been polished for flow and coherence
|
|
48
|
+
- Emphasize document is ready for downstream work
|
|
49
|
+
|
|
50
|
+
### 2. Workflow Status Update
|
|
51
|
+
|
|
52
|
+
Update the main workflow status file if there is one:
|
|
53
|
+
|
|
54
|
+
- Check workflow configuration for a status file (if one exists)
|
|
55
|
+
- Update workflow_status["prd"] = "{outputFile}"
|
|
56
|
+
- Save file, preserving all comments and structure
|
|
57
|
+
- Mark current timestamp as completion time
|
|
58
|
+
|
|
59
|
+
### 3. Validation Workflow Options
|
|
60
|
+
|
|
61
|
+
Offer validation workflows to ensure PRD is ready for implementation:
|
|
62
|
+
|
|
63
|
+
**Available Validation Workflows:**
|
|
64
|
+
|
|
65
|
+
**Option 1: Check Implementation Readiness** (`skill:bmad-check-implementation-readiness`)
|
|
66
|
+
- Validates PRD has all information needed for development
|
|
67
|
+
- Checks epic coverage completeness
|
|
68
|
+
- Reviews UX alignment with requirements
|
|
69
|
+
- Assesses epic quality and readiness
|
|
70
|
+
- Identifies gaps before architecture/design work begins
|
|
71
|
+
|
|
72
|
+
**When to use:** Before starting technical architecture or epic breakdown
|
|
73
|
+
|
|
74
|
+
**Option 2: Skip for Now**
|
|
75
|
+
- Proceed directly to next workflows (architecture, UX, epics)
|
|
76
|
+
- Validation can be done later if needed
|
|
77
|
+
- Some teams prefer to validate during architecture reviews
|
|
78
|
+
|
|
79
|
+
### 4. Suggest Next Workflows
|
|
80
|
+
|
|
81
|
+
PRD complete. Invoke the `bmad-help` skill.
|
|
82
|
+
|
|
83
|
+
### 5. Final Completion Confirmation
|
|
84
|
+
|
|
85
|
+
- Confirm completion with user and summarize what has been accomplished
|
|
86
|
+
- Document now contains: Executive Summary, Success Criteria, User Journeys, Domain Requirements (if applicable), Innovation Analysis (if applicable), Project-Type Requirements, Functional Requirements (capability contract), Non-Functional Requirements, and has been polished for flow and coherence
|
|
87
|
+
- Ask if they'd like to run validation workflow or proceed to next workflows
|
|
88
|
+
|
|
89
|
+
## SUCCESS METRICS:
|
|
90
|
+
|
|
91
|
+
✅ PRD document contains all required sections and has been polished
|
|
92
|
+
✅ All collaborative content properly saved and optimized
|
|
93
|
+
✅ Workflow status file updated with completion information (if exists)
|
|
94
|
+
✅ Validation workflow options clearly presented
|
|
95
|
+
✅ Clear next step guidance provided to user
|
|
96
|
+
✅ Document quality validation completed
|
|
97
|
+
✅ User acknowledges completion and understands next options
|
|
98
|
+
|
|
99
|
+
## FAILURE MODES:
|
|
100
|
+
|
|
101
|
+
❌ Not updating workflow status file with completion information (if exists)
|
|
102
|
+
❌ Not offering validation workflow options
|
|
103
|
+
❌ Missing clear next step guidance for user
|
|
104
|
+
❌ Not confirming document completeness with user
|
|
105
|
+
❌ Workflow not properly marked as complete in status tracking (if applicable)
|
|
106
|
+
❌ User unclear about what happens next or what validation options exist
|
|
107
|
+
|
|
108
|
+
❌ **CRITICAL**: Reading only partial step file - leads to incomplete understanding and poor decisions
|
|
109
|
+
❌ **CRITICAL**: Making decisions without complete understanding of step requirements and protocols
|
|
110
|
+
|
|
111
|
+
## FINAL REMINDER to give the user:
|
|
112
|
+
|
|
113
|
+
The polished PRD serves as the foundation for all subsequent product development activities. All design, architecture, and development work should trace back to the requirements and vision documented in this PRD - update it also as needed as you continue planning.
|
|
114
|
+
|
|
115
|
+
**Congratulations on completing the Product Requirements Document for {{project_name}}!** 🎉
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
main_config: '{project-root}/_bmad/bmm/config.yaml'
|
|
3
|
+
outputFile: '{planning_artifacts}/prd.md'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# PRD Create Workflow
|
|
7
|
+
|
|
8
|
+
**Goal:** Create comprehensive PRDs through structured workflow facilitation.
|
|
9
|
+
|
|
10
|
+
**Your Role:** Product-focused PM facilitator collaborating with an expert peer.
|
|
11
|
+
|
|
12
|
+
You will continue to operate with your given name, identity, and communication_style, merged with the details of this role description.
|
|
13
|
+
|
|
14
|
+
## WORKFLOW ARCHITECTURE
|
|
15
|
+
|
|
16
|
+
This uses **step-file architecture** for disciplined execution:
|
|
17
|
+
|
|
18
|
+
### Core Principles
|
|
19
|
+
|
|
20
|
+
- **Micro-file Design**: Each step is a self contained instruction file that is a part of an overall workflow that must be followed exactly
|
|
21
|
+
- **Just-In-Time Loading**: Only the current step file is in memory - never load future step files until told to do so
|
|
22
|
+
- **Sequential Enforcement**: Sequence within the step files must be completed in order, no skipping or optimization allowed
|
|
23
|
+
- **State Tracking**: Document progress in output file frontmatter using `stepsCompleted` array when a workflow produces a document
|
|
24
|
+
- **Append-Only Building**: Build documents by appending content as directed to the output file
|
|
25
|
+
|
|
26
|
+
### Step Processing Rules
|
|
27
|
+
|
|
28
|
+
1. **READ COMPLETELY**: Always read the entire step file before taking any action
|
|
29
|
+
2. **FOLLOW SEQUENCE**: Execute all numbered sections in order, never deviate
|
|
30
|
+
3. **WAIT FOR INPUT**: If a menu is presented, halt and wait for user selection
|
|
31
|
+
4. **CHECK CONTINUATION**: If the step has a menu with Continue as an option, only proceed to next step when user selects 'C' (Continue)
|
|
32
|
+
5. **SAVE STATE**: Update `stepsCompleted` in frontmatter before loading next step
|
|
33
|
+
6. **LOAD NEXT**: When directed, read fully and follow the next step file
|
|
34
|
+
|
|
35
|
+
### Critical Rules (NO EXCEPTIONS)
|
|
36
|
+
|
|
37
|
+
- 🛑 **NEVER** load multiple step files simultaneously
|
|
38
|
+
- 📖 **ALWAYS** read entire step file before execution
|
|
39
|
+
- 🚫 **NEVER** skip steps or optimize the sequence
|
|
40
|
+
- 💾 **ALWAYS** update frontmatter of output files when writing the final output for a specific step
|
|
41
|
+
- 🎯 **ALWAYS** follow the exact instructions in the step file
|
|
42
|
+
- ⏸️ **ALWAYS** halt at menus and wait for user input
|
|
43
|
+
- 📋 **NEVER** create mental todo lists from future steps
|
|
44
|
+
|
|
45
|
+
## INITIALIZATION SEQUENCE
|
|
46
|
+
|
|
47
|
+
### 1. Configuration Loading
|
|
48
|
+
|
|
49
|
+
Load and read full config from {main_config} and resolve:
|
|
50
|
+
|
|
51
|
+
- `project_name`, `output_folder`, `planning_artifacts`, `user_name`
|
|
52
|
+
- `communication_language`, `document_output_language`, `user_skill_level`
|
|
53
|
+
- `date` as system-generated current datetime
|
|
54
|
+
|
|
55
|
+
✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the configured `{communication_language}`.
|
|
56
|
+
✅ YOU MUST ALWAYS WRITE all artifact and document content in `{document_output_language}`.
|
|
57
|
+
|
|
58
|
+
### 2. Route to Create Workflow
|
|
59
|
+
|
|
60
|
+
"**Create Mode: Creating a new PRD from scratch.**"
|
|
61
|
+
|
|
62
|
+
Read fully and follow: `./steps-c/step-01-init.md`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
4
|
+
|
|
5
|
+
const CONFIG_DIR = join(homedir(), ".frappe-builder");
|
|
6
|
+
const WHITELIST_PATH = join(CONFIG_DIR, "allowed-commands.json");
|
|
7
|
+
|
|
8
|
+
export const DEFAULT_BENCH_COMMANDS: string[] = [
|
|
9
|
+
"bench migrate",
|
|
10
|
+
"bench build",
|
|
11
|
+
"bench install",
|
|
12
|
+
"bench update",
|
|
13
|
+
"bench run-tests",
|
|
14
|
+
"bench restart",
|
|
15
|
+
"bench clear-cache",
|
|
16
|
+
"bench console",
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Loads the bench command whitelist from ~/.frappe-builder/allowed-commands.json.
|
|
21
|
+
* On first run (file missing): writes defaults to disk and returns them.
|
|
22
|
+
* On malformed JSON: logs warning and returns defaults — never throws.
|
|
23
|
+
*/
|
|
24
|
+
export function loadAllowedCommands(): string[] {
|
|
25
|
+
if (!existsSync(WHITELIST_PATH)) {
|
|
26
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
27
|
+
writeFileSync(WHITELIST_PATH, JSON.stringify(DEFAULT_BENCH_COMMANDS, null, 2), "utf-8");
|
|
28
|
+
return [...DEFAULT_BENCH_COMMANDS];
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
const raw = readFileSync(WHITELIST_PATH, "utf-8");
|
|
32
|
+
const parsed = JSON.parse(raw);
|
|
33
|
+
if (!Array.isArray(parsed)) throw new Error("Expected JSON array");
|
|
34
|
+
return parsed.map(String);
|
|
35
|
+
} catch {
|
|
36
|
+
console.warn("[WHITELIST WARNING: allowed-commands.json is malformed — using defaults]");
|
|
37
|
+
return [...DEFAULT_BENCH_COMMANDS];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface SpawnRule {
|
|
2
|
+
trigger: string;
|
|
3
|
+
delegate: string;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export interface AppConfig {
|
|
7
|
+
autoGitCheckpoint: boolean;
|
|
8
|
+
allowSubAgents: boolean;
|
|
9
|
+
requirePermission: boolean;
|
|
10
|
+
rules: SpawnRule[];
|
|
11
|
+
frappeMcpUrl?: string; // URL of Frappe MCP server for frappe_query (e.g. "http://localhost:8000")
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const defaults: AppConfig = {
|
|
15
|
+
autoGitCheckpoint: true,
|
|
16
|
+
allowSubAgents: false, // opt-in — disabled by default
|
|
17
|
+
requirePermission: true, // always prompt unless explicitly disabled
|
|
18
|
+
rules: [],
|
|
19
|
+
};
|
package/config/loader.ts
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { readFileSync, existsSync, mkdirSync } from "node:fs";
|
|
4
|
+
import { defaults } from "./defaults.js";
|
|
5
|
+
import type { AppConfig } from "./defaults.js";
|
|
6
|
+
|
|
7
|
+
// ── Credential config types (NFR6, NFR9) ────────────────────────────────────
|
|
8
|
+
|
|
9
|
+
export interface GlobalConfig {
|
|
10
|
+
llm_api_key: string;
|
|
11
|
+
llm_provider?: string;
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface ProjectConfig {
|
|
16
|
+
site_url: string;
|
|
17
|
+
api_key: string;
|
|
18
|
+
api_secret: string;
|
|
19
|
+
[key: string]: unknown;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface CredentialConfig {
|
|
23
|
+
global: GlobalConfig;
|
|
24
|
+
project: ProjectConfig;
|
|
25
|
+
sessionLogDir: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Always ~/.frappe-builder/sessions/ — never the project directory (NFR9). */
|
|
29
|
+
export const SESSION_LOG_DIR = join(homedir(), ".frappe-builder", "sessions");
|
|
30
|
+
|
|
31
|
+
const GITIGNORE_ERROR =
|
|
32
|
+
"Site credentials file is not gitignored. Add .frappe-builder-config.json to .gitignore before proceeding.";
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Validates that {projectRoot}/.gitignore lists .frappe-builder-config.json.
|
|
36
|
+
* Throws with the exact AC error message if missing or absent.
|
|
37
|
+
*/
|
|
38
|
+
export function validateGitignore(projectRoot: string): void {
|
|
39
|
+
const gitignorePath = join(projectRoot, ".gitignore");
|
|
40
|
+
if (!existsSync(gitignorePath)) {
|
|
41
|
+
throw new Error(GITIGNORE_ERROR);
|
|
42
|
+
}
|
|
43
|
+
const contents = readFileSync(gitignorePath, "utf8");
|
|
44
|
+
const lines = contents.split("\n").map((l) => l.trim());
|
|
45
|
+
if (!lines.includes(".frappe-builder-config.json")) {
|
|
46
|
+
throw new Error(GITIGNORE_ERROR);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Reads LLM API keys from ~/.frappe-builder/config.json (user-global, never project).
|
|
52
|
+
* Creates ~/.frappe-builder/ on first run. Returns empty defaults if file absent.
|
|
53
|
+
*/
|
|
54
|
+
export function loadGlobalConfig(): GlobalConfig {
|
|
55
|
+
const configDir = join(homedir(), ".frappe-builder");
|
|
56
|
+
mkdirSync(configDir, { recursive: true });
|
|
57
|
+
const configPath = join(configDir, "config.json");
|
|
58
|
+
if (!existsSync(configPath)) return { llm_api_key: "" };
|
|
59
|
+
try {
|
|
60
|
+
return JSON.parse(readFileSync(configPath, "utf8")) as GlobalConfig;
|
|
61
|
+
} catch {
|
|
62
|
+
return { llm_api_key: "" };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Reads Frappe site credentials from {projectRoot}/.frappe-builder-config.json.
|
|
68
|
+
* Returns empty defaults if file absent (caller should surface a warning).
|
|
69
|
+
*/
|
|
70
|
+
export function loadProjectConfig(projectRoot: string): ProjectConfig {
|
|
71
|
+
const configPath = join(projectRoot, ".frappe-builder-config.json");
|
|
72
|
+
if (!existsSync(configPath)) return { site_url: "", api_key: "", api_secret: "" };
|
|
73
|
+
try {
|
|
74
|
+
return JSON.parse(readFileSync(configPath, "utf8")) as ProjectConfig;
|
|
75
|
+
} catch {
|
|
76
|
+
return { site_url: "", api_key: "", api_secret: "" };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Full credential loader: validates gitignore, loads global + project configs.
|
|
82
|
+
* Throws if .frappe-builder-config.json is not gitignored.
|
|
83
|
+
* API keys are only ever read from ~/.frappe-builder/ — never from projectRoot.
|
|
84
|
+
*/
|
|
85
|
+
export function loadCredentials(projectRoot: string): CredentialConfig {
|
|
86
|
+
validateGitignore(projectRoot);
|
|
87
|
+
const global = loadGlobalConfig();
|
|
88
|
+
const project = loadProjectConfig(projectRoot);
|
|
89
|
+
return { global, project, sessionLogDir: SESSION_LOG_DIR };
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Loads ~/.frappe-builder/config.json and merges with defaults.
|
|
94
|
+
* Never throws — returns defaults on any read/parse failure.
|
|
95
|
+
*/
|
|
96
|
+
export function loadConfig(): AppConfig {
|
|
97
|
+
const configPath = join(homedir(), ".frappe-builder", "config.json");
|
|
98
|
+
if (!existsSync(configPath)) return { ...defaults };
|
|
99
|
+
try {
|
|
100
|
+
const raw = JSON.parse(readFileSync(configPath, "utf-8")) as Partial<AppConfig>;
|
|
101
|
+
return { ...defaults, ...raw };
|
|
102
|
+
} catch {
|
|
103
|
+
return { ...defaults };
|
|
104
|
+
}
|
|
105
|
+
}
|
package/dist/cli.mjs
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { resolve } from "node:path";
|
|
5
|
+
import { spawnSync } from "node:child_process";
|
|
6
|
+
import { existsSync } from "node:fs";
|
|
7
|
+
//#region src/cli.ts
|
|
8
|
+
/**
|
|
9
|
+
* src/cli.ts — frappe-builder CLI entry point
|
|
10
|
+
*
|
|
11
|
+
* Commands:
|
|
12
|
+
* frappe-builder init — interactive setup wizard (run once per project)
|
|
13
|
+
* frappe-builder — start a pi session with frappe-builder extensions loaded
|
|
14
|
+
*/
|
|
15
|
+
const cmd = process.argv[2];
|
|
16
|
+
if (cmd === "init") {
|
|
17
|
+
const { runInit } = await import("./init-BYJy3ztn.mjs");
|
|
18
|
+
await runInit();
|
|
19
|
+
process.exit(0);
|
|
20
|
+
}
|
|
21
|
+
if (cmd === "--help" || cmd === "-h") {
|
|
22
|
+
console.log(`
|
|
23
|
+
Usage: frappe-builder [command]
|
|
24
|
+
|
|
25
|
+
Commands:
|
|
26
|
+
init Configure frappe-builder for this project (run once per project)
|
|
27
|
+
(none) Start a frappe-builder session
|
|
28
|
+
|
|
29
|
+
Options:
|
|
30
|
+
--help, -h Show this help message
|
|
31
|
+
`);
|
|
32
|
+
process.exit(0);
|
|
33
|
+
}
|
|
34
|
+
if (!existsSync(resolve(process.cwd(), ".frappe-builder-config.json"))) {
|
|
35
|
+
console.error("frappe-builder is not configured in this directory.");
|
|
36
|
+
console.error("Run: frappe-builder init");
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
const pkgRoot = resolve(fileURLToPath(import.meta.url), "..", "..");
|
|
40
|
+
const extensions = [
|
|
41
|
+
"frappe-session",
|
|
42
|
+
"frappe-state",
|
|
43
|
+
"frappe-workflow",
|
|
44
|
+
"frappe-tools",
|
|
45
|
+
"frappe-gates",
|
|
46
|
+
"frappe-ui"
|
|
47
|
+
].map((name) => resolve(pkgRoot, "extensions", `${name}.ts`));
|
|
48
|
+
const agentsFile = resolve(pkgRoot, "AGENTS.md");
|
|
49
|
+
const require = createRequire(import.meta.url);
|
|
50
|
+
let piCli;
|
|
51
|
+
try {
|
|
52
|
+
piCli = require.resolve("@mariozechner/pi-coding-agent/dist/cli.js");
|
|
53
|
+
} catch {
|
|
54
|
+
console.error("Could not locate pi CLI.");
|
|
55
|
+
console.error("Try reinstalling: npm install -g frappe-builder@dev");
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
const extArgs = extensions.flatMap((e) => ["-e", e]);
|
|
59
|
+
const result = spawnSync(process.execPath, [
|
|
60
|
+
piCli,
|
|
61
|
+
...extArgs,
|
|
62
|
+
"--append-system-prompt",
|
|
63
|
+
agentsFile
|
|
64
|
+
], { stdio: "inherit" });
|
|
65
|
+
process.exit(result.status ?? 0);
|
|
66
|
+
//#endregion
|
|
67
|
+
export {};
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
import { createInterface } from "node:readline";
|
|
6
|
+
//#region src/init.ts
|
|
7
|
+
/**
|
|
8
|
+
* src/init.ts — interactive setup wizard for frappe-builder
|
|
9
|
+
*
|
|
10
|
+
* Handles: global config (~/.frappe-builder/config.json),
|
|
11
|
+
* project config (.frappe-builder-config.json),
|
|
12
|
+
* and .gitignore patching.
|
|
13
|
+
*
|
|
14
|
+
* No imports from state/, extensions/, or gates/.
|
|
15
|
+
* Uses Node.js built-ins only — no external prompt libraries.
|
|
16
|
+
*/
|
|
17
|
+
let cancelled = false;
|
|
18
|
+
process.on("SIGINT", () => {
|
|
19
|
+
cancelled = true;
|
|
20
|
+
});
|
|
21
|
+
function promptLine(question) {
|
|
22
|
+
return new Promise((resolve) => {
|
|
23
|
+
if (cancelled) {
|
|
24
|
+
resolve("");
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const rl = createInterface({
|
|
28
|
+
input: process.stdin,
|
|
29
|
+
output: process.stdout
|
|
30
|
+
});
|
|
31
|
+
rl.question(question, (answer) => {
|
|
32
|
+
rl.close();
|
|
33
|
+
resolve(answer);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
async function promptYN(question) {
|
|
38
|
+
const answer = await promptLine(question + " (y/N): ");
|
|
39
|
+
return answer.trim().toLowerCase() === "y" || answer.trim().toLowerCase() === "yes";
|
|
40
|
+
}
|
|
41
|
+
function writeAtomic(filePath, content) {
|
|
42
|
+
const tmp = filePath + ".tmp";
|
|
43
|
+
writeFileSync(tmp, content, "utf-8");
|
|
44
|
+
renameSync(tmp, filePath);
|
|
45
|
+
}
|
|
46
|
+
/** Patches .gitignore to include the exact entry if not already present. */
|
|
47
|
+
function patchGitignore(projectRoot, entry) {
|
|
48
|
+
const gitignorePath = join(projectRoot, ".gitignore");
|
|
49
|
+
if (!existsSync(gitignorePath)) {
|
|
50
|
+
writeFileSync(gitignorePath, entry + "\n", "utf-8");
|
|
51
|
+
return "created";
|
|
52
|
+
}
|
|
53
|
+
const content = readFileSync(gitignorePath, "utf-8");
|
|
54
|
+
if (content.split("\n").includes(entry)) return "already-present";
|
|
55
|
+
writeFileSync(gitignorePath, content.endsWith("\n") ? content + entry + "\n" : content + "\n" + entry + "\n", "utf-8");
|
|
56
|
+
return "patched";
|
|
57
|
+
}
|
|
58
|
+
async function runInit(opts = {}) {
|
|
59
|
+
const projectRoot = opts.projectRoot ?? process.cwd();
|
|
60
|
+
const globalConfigDir = join(homedir(), ".frappe-builder");
|
|
61
|
+
const globalConfigPath = join(globalConfigDir, "config.json");
|
|
62
|
+
const projectConfigPath = join(projectRoot, ".frappe-builder-config.json");
|
|
63
|
+
console.log("\n=== frappe-builder Setup ===\n");
|
|
64
|
+
console.log(`[Global config: ${globalConfigPath}]`);
|
|
65
|
+
let globalConfig = {};
|
|
66
|
+
let globalAction = "written";
|
|
67
|
+
if (existsSync(globalConfigPath)) {
|
|
68
|
+
try {
|
|
69
|
+
globalConfig = JSON.parse(readFileSync(globalConfigPath, "utf-8"));
|
|
70
|
+
} catch {}
|
|
71
|
+
if (!cancelled) {
|
|
72
|
+
const overwrite = await promptYN(`Overwrite existing ${globalConfigPath}?`);
|
|
73
|
+
if (cancelled) {
|
|
74
|
+
printCancelled();
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (!overwrite) {
|
|
78
|
+
globalAction = "skipped";
|
|
79
|
+
console.log(" Keeping existing global config.\n");
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (!cancelled && globalAction === "written") {
|
|
84
|
+
const llmKey = await promptLine("LLM API key (leave blank to skip): ");
|
|
85
|
+
if (cancelled) {
|
|
86
|
+
printCancelled();
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
globalConfig.llm_api_key = llmKey.trim();
|
|
90
|
+
}
|
|
91
|
+
console.log(`\n[Project config: ${projectConfigPath}]`);
|
|
92
|
+
let projectConfig = {};
|
|
93
|
+
let projectAction = "written";
|
|
94
|
+
if (existsSync(projectConfigPath)) {
|
|
95
|
+
try {
|
|
96
|
+
projectConfig = JSON.parse(readFileSync(projectConfigPath, "utf-8"));
|
|
97
|
+
} catch {}
|
|
98
|
+
if (!cancelled) {
|
|
99
|
+
const overwrite = await promptYN(`Overwrite existing ${projectConfigPath}?`);
|
|
100
|
+
if (cancelled) {
|
|
101
|
+
printCancelled();
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (!overwrite) {
|
|
105
|
+
projectAction = "skipped";
|
|
106
|
+
console.log(" Keeping existing project config.\n");
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (!cancelled && projectAction === "written") {
|
|
111
|
+
const siteUrl = await promptLine("Frappe site URL (e.g. http://site1.localhost): ");
|
|
112
|
+
if (cancelled) {
|
|
113
|
+
printCancelled();
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const apiKey = await promptLine("Frappe API key: ");
|
|
117
|
+
if (cancelled) {
|
|
118
|
+
printCancelled();
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const apiSecret = await promptLine("Frappe API secret: ");
|
|
122
|
+
if (cancelled) {
|
|
123
|
+
printCancelled();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
projectConfig = {
|
|
127
|
+
site_url: siteUrl.trim(),
|
|
128
|
+
api_key: apiKey.trim(),
|
|
129
|
+
api_secret: apiSecret.trim()
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
const written = [];
|
|
133
|
+
const skipped = [];
|
|
134
|
+
if (globalAction === "written") {
|
|
135
|
+
mkdirSync(globalConfigDir, { recursive: true });
|
|
136
|
+
writeAtomic(globalConfigPath, JSON.stringify(globalConfig, null, 2) + "\n");
|
|
137
|
+
written.push(`~/.frappe-builder/config.json`);
|
|
138
|
+
} else skipped.push(`~/.frappe-builder/config.json`);
|
|
139
|
+
if (projectAction === "written") {
|
|
140
|
+
writeAtomic(projectConfigPath, JSON.stringify(projectConfig, null, 2) + "\n");
|
|
141
|
+
written.push(`.frappe-builder-config.json`);
|
|
142
|
+
} else skipped.push(`.frappe-builder-config.json`);
|
|
143
|
+
const gitignoreResult = patchGitignore(projectRoot, ".frappe-builder-config.json");
|
|
144
|
+
if (gitignoreResult === "patched") written.push(".gitignore (patched)");
|
|
145
|
+
else if (gitignoreResult === "created") written.push(".gitignore (created)");
|
|
146
|
+
else skipped.push(".gitignore (entry already present)");
|
|
147
|
+
console.log("\nFiles written:");
|
|
148
|
+
for (const f of written) console.log(` ✓ ${f}`);
|
|
149
|
+
if (skipped.length > 0) {
|
|
150
|
+
console.log("Skipped:");
|
|
151
|
+
for (const f of skipped) console.log(` - ${f}`);
|
|
152
|
+
}
|
|
153
|
+
console.log("\nReady. Run: frappe-builder\n");
|
|
154
|
+
}
|
|
155
|
+
function printCancelled() {
|
|
156
|
+
console.log("\nSetup cancelled. No files were written.\n");
|
|
157
|
+
}
|
|
158
|
+
//#endregion
|
|
159
|
+
export { runInit };
|