bmad-elsabro 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.auto-claude-security.json +209 -0
- package/.claude_settings.json +34 -0
- package/.coderabbit.yaml +40 -0
- package/.nvmrc +1 -0
- package/.prettierignore +9 -0
- package/AI_TEST_GENERATOR_VERIFICATION.md +260 -0
- package/BUDGET_ALERT_TESTING.md +325 -0
- package/CHANGELOG.md +1488 -0
- package/CNAME +1 -0
- package/CONTRIBUTING.md +167 -0
- package/CONTRIBUTORS.md +32 -0
- package/LEGACY_MIGRATION_TESTING.md +428 -0
- package/LICENSE +30 -0
- package/PARTY_MODE_VERIFICATION.md +274 -0
- package/PROJECT_DETECTOR_TESTING.md +288 -0
- package/README.md +236 -0
- package/SECURITY.md +85 -0
- package/TRADEMARK.md +55 -0
- package/WORKFLOW_ROUTER_IMPLEMENTATION.md +379 -0
- package/Wordmark.png +0 -0
- package/banner-bmad-method.png +0 -0
- package/build/icons/512x512.png +0 -0
- package/build-mac.sh +3 -0
- package/docs/404.md +9 -0
- package/docs/_STYLE_GUIDE.md +367 -0
- package/docs/developer/api-reference.md +945 -0
- package/docs/developer/architecture.md +563 -0
- package/docs/developer/contributing.md +831 -0
- package/docs/downloads.md +74 -0
- package/docs/explanation/advanced-elicitation.md +24 -0
- package/docs/explanation/adversarial-review.md +57 -0
- package/docs/explanation/brainstorming.md +31 -0
- package/docs/explanation/brownfield-faq.md +55 -0
- package/docs/explanation/party-mode.md +57 -0
- package/docs/explanation/preventing-agent-conflicts.md +110 -0
- package/docs/explanation/quick-flow.md +27 -0
- package/docs/explanation/why-solutioning-matters.md +75 -0
- package/docs/how-to/brownfield/index.md +84 -0
- package/docs/how-to/brownfield/quick-fix-in-brownfield.md +76 -0
- package/docs/how-to/customize-bmad.md +158 -0
- package/docs/how-to/get-answers-about-bmad.md +102 -0
- package/docs/how-to/install-bmad.md +82 -0
- package/docs/how-to/shard-large-documents.md +101 -0
- package/docs/how-to/upgrade-to-v6.md +131 -0
- package/docs/index.md +56 -0
- package/docs/reference/workflow-map.md +83 -0
- package/docs/tea/explanation/engagement-models.md +710 -0
- package/docs/tea/explanation/fixture-architecture.md +457 -0
- package/docs/tea/explanation/knowledge-base-system.md +554 -0
- package/docs/tea/explanation/network-first-patterns.md +853 -0
- package/docs/tea/explanation/risk-based-testing.md +586 -0
- package/docs/tea/explanation/tea-overview.md +410 -0
- package/docs/tea/explanation/test-quality-standards.md +907 -0
- package/docs/tea/explanation/testing-as-engineering.md +112 -0
- package/docs/tea/glossary/index.md +159 -0
- package/docs/tea/how-to/brownfield/use-tea-for-enterprise.md +525 -0
- package/docs/tea/how-to/brownfield/use-tea-with-existing-tests.md +577 -0
- package/docs/tea/how-to/customization/enable-tea-mcp-enhancements.md +424 -0
- package/docs/tea/how-to/customization/integrate-playwright-utils.md +813 -0
- package/docs/tea/how-to/workflows/run-atdd.md +436 -0
- package/docs/tea/how-to/workflows/run-automate.md +653 -0
- package/docs/tea/how-to/workflows/run-nfr-assess.md +679 -0
- package/docs/tea/how-to/workflows/run-test-design.md +135 -0
- package/docs/tea/how-to/workflows/run-test-review.md +605 -0
- package/docs/tea/how-to/workflows/run-trace.md +883 -0
- package/docs/tea/how-to/workflows/setup-ci.md +712 -0
- package/docs/tea/how-to/workflows/setup-test-framework.md +98 -0
- package/docs/tea/reference/commands.md +276 -0
- package/docs/tea/reference/configuration.md +678 -0
- package/docs/tea/reference/knowledge-base.md +340 -0
- package/docs/tea/tutorials/tea-lite-quickstart.md +444 -0
- package/docs/tutorials/getting-started.md +205 -0
- package/docs/user-guide/getting-started.md +348 -0
- package/docs/user-guide/token-economy.md +601 -0
- package/docs/user-guide/workflows.md +546 -0
- package/electron-builder.yml +75 -0
- package/eslint.config.mjs +152 -0
- package/package.json +162 -0
- package/prettier.config.mjs +32 -0
- package/public/monaco-workers/index.js +21 -0
- package/renderer/App.tsx +311 -0
- package/renderer/components/ChatPanel.tsx +285 -0
- package/renderer/components/CodeEditor.tsx +327 -0
- package/renderer/components/CodeEditor.types.ts +245 -0
- package/renderer/components/FlowSelector.tsx +534 -0
- package/renderer/components/MessageInput.tsx +252 -0
- package/renderer/components/MessageList.tsx +204 -0
- package/renderer/components/MigrationWizard.tsx +896 -0
- package/renderer/components/NotificationCenter.tsx +291 -0
- package/renderer/components/OnboardingWizard.tsx +112 -0
- package/renderer/components/PartyMode.tsx +555 -0
- package/renderer/components/Sidebar.module.css +258 -0
- package/renderer/components/Sidebar.tsx +157 -0
- package/renderer/components/TemplateSelector.tsx +553 -0
- package/renderer/components/Terminal.tsx +523 -0
- package/renderer/components/TestCenter.tsx +364 -0
- package/renderer/components/TokenAnalytics.tsx +607 -0
- package/renderer/components/TokenMonitor.tsx +331 -0
- package/renderer/components/TutorialOverlay.tsx +483 -0
- package/renderer/components/WorkflowEditor.tsx +470 -0
- package/renderer/components/onboarding/Step1Welcome.tsx +72 -0
- package/renderer/components/onboarding/Step2Setup.tsx +193 -0
- package/renderer/components/onboarding/Step3CreateProject.tsx +209 -0
- package/renderer/components/test-center/CoverageDashboard.tsx +588 -0
- package/renderer/components/test-center/ELI5Guide.tsx +521 -0
- package/renderer/components/test-center/TestList.tsx +381 -0
- package/renderer/components/test-center/TestRunner.tsx +431 -0
- package/renderer/components/test-center/TestStepWizard.tsx +1000 -0
- package/renderer/components/test-center/VisualTestBuilder.tsx +460 -0
- package/renderer/components/workflow/DependencyEdge.tsx +200 -0
- package/renderer/components/workflow/StepNode.tsx +234 -0
- package/renderer/components/workflow/StepPalette.tsx +412 -0
- package/renderer/context/ThemeContext.tsx +97 -0
- package/renderer/data/shortcuts.json +94 -0
- package/renderer/data/testing-guides.json +261 -0
- package/renderer/data/tutorials.json +546 -0
- package/renderer/hooks/useKeyboardShortcuts.ts +249 -0
- package/renderer/hooks/useNotifications.ts +267 -0
- package/renderer/hooks/useTheme.ts +149 -0
- package/renderer/hooks/useTokenTracking.ts +464 -0
- package/renderer/hooks/useWorkflowState.ts +309 -0
- package/renderer/index.html +16 -0
- package/renderer/index.tsx +17 -0
- package/renderer/lib/MONACO_OFFLINE_CONFIG.md +153 -0
- package/renderer/lib/chart-utils.ts +472 -0
- package/renderer/lib/file-system-provider.ts +295 -0
- package/renderer/lib/monaco-loader.ts +247 -0
- package/renderer/renderer/components/NOTIFICATION_SYSTEM.md +192 -0
- package/renderer/styles.css +55 -0
- package/renderer/types/css-modules.d.ts +21 -0
- package/renderer/types/electron.d.ts +316 -0
- package/src/bmm/_module-installer/installer.js +48 -0
- package/src/bmm/agents/analyst.agent.yaml +36 -0
- package/src/bmm/agents/architect.agent.yaml +28 -0
- package/src/bmm/agents/dev.agent.yaml +38 -0
- package/src/bmm/agents/parallel-orchestrator.agent.yaml +50 -0
- package/src/bmm/agents/pm.agent.yaml +46 -0
- package/src/bmm/agents/quick-flow-solo-dev.agent.yaml +32 -0
- package/src/bmm/agents/sm.agent.yaml +36 -0
- package/src/bmm/agents/tea.agent.yaml +63 -0
- package/src/bmm/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +224 -0
- package/src/bmm/agents/tech-writer/tech-writer.agent.yaml +45 -0
- package/src/bmm/agents/ux-designer.agent.yaml +26 -0
- package/src/bmm/agents/yolo-dev.agent.yaml +41 -0
- package/src/bmm/data/auto-testing-config.yaml +84 -0
- package/src/bmm/data/guided-mode-instructions.yaml +112 -0
- package/src/bmm/data/parallelization-config.yaml +136 -0
- package/src/bmm/data/project-context-template.md +26 -0
- package/src/bmm/data/speed-profiles.yaml +127 -0
- package/src/bmm/module-help.csv +32 -0
- package/src/bmm/module.yaml +60 -0
- package/src/bmm/teams/default-party.csv +21 -0
- package/src/bmm/teams/team-fullstack.yaml +12 -0
- package/src/bmm/testarch/knowledge/adr-quality-readiness-checklist.md +350 -0
- package/src/bmm/testarch/knowledge/api-request.md +442 -0
- package/src/bmm/testarch/knowledge/api-testing-patterns.md +843 -0
- package/src/bmm/testarch/knowledge/auth-session.md +552 -0
- package/src/bmm/testarch/knowledge/burn-in.md +273 -0
- package/src/bmm/testarch/knowledge/ci-burn-in.md +675 -0
- package/src/bmm/testarch/knowledge/component-tdd.md +486 -0
- package/src/bmm/testarch/knowledge/contract-testing.md +957 -0
- package/src/bmm/testarch/knowledge/data-factories.md +500 -0
- package/src/bmm/testarch/knowledge/email-auth.md +721 -0
- package/src/bmm/testarch/knowledge/error-handling.md +725 -0
- package/src/bmm/testarch/knowledge/feature-flags.md +750 -0
- package/src/bmm/testarch/knowledge/file-utils.md +463 -0
- package/src/bmm/testarch/knowledge/fixture-architecture.md +401 -0
- package/src/bmm/testarch/knowledge/fixtures-composition.md +382 -0
- package/src/bmm/testarch/knowledge/intercept-network-call.md +430 -0
- package/src/bmm/testarch/knowledge/log.md +429 -0
- package/src/bmm/testarch/knowledge/network-error-monitor.md +405 -0
- package/src/bmm/testarch/knowledge/network-first.md +486 -0
- package/src/bmm/testarch/knowledge/network-recorder.md +527 -0
- package/src/bmm/testarch/knowledge/nfr-criteria.md +670 -0
- package/src/bmm/testarch/knowledge/overview.md +286 -0
- package/src/bmm/testarch/knowledge/playwright-config.md +730 -0
- package/src/bmm/testarch/knowledge/probability-impact.md +601 -0
- package/src/bmm/testarch/knowledge/recurse.md +421 -0
- package/src/bmm/testarch/knowledge/risk-governance.md +615 -0
- package/src/bmm/testarch/knowledge/selective-testing.md +732 -0
- package/src/bmm/testarch/knowledge/selector-resilience.md +527 -0
- package/src/bmm/testarch/knowledge/test-healing-patterns.md +644 -0
- package/src/bmm/testarch/knowledge/test-levels-framework.md +473 -0
- package/src/bmm/testarch/knowledge/test-priorities-matrix.md +373 -0
- package/src/bmm/testarch/knowledge/test-quality.md +664 -0
- package/src/bmm/testarch/knowledge/timing-debugging.md +372 -0
- package/src/bmm/testarch/knowledge/visual-debugging.md +524 -0
- package/src/bmm/testarch/tea-index.csv +35 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +162 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +58 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +443 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +200 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +475 -0
- package/src/bmm/workflows/1-analysis/research/research.template.md +29 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +239 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +486 -0
- package/src/bmm/workflows/1-analysis/research/workflow.md +173 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +13 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +197 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/data/project-types.csv +11 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01-init.md +191 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +153 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +224 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +226 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +213 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +207 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +226 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +237 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +228 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +231 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +242 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +217 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +124 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +247 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +249 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +253 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +168 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +218 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +191 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +209 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +174 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +228 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +217 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +263 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +209 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +242 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +231 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/templates/prd-template.md +10 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/validation-report-prd-workflow.md +433 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow.md +150 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +171 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +43 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +190 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +178 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +179 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +139 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +252 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +135 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +55 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +11 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +164 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +331 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +76 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +50 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +149 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +59 -0
- package/src/bmm/workflows/4-implementation/code-review/checklist.md +23 -0
- package/src/bmm/workflows/4-implementation/code-review/instructions.xml +227 -0
- package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +51 -0
- package/src/bmm/workflows/4-implementation/correct-course/checklist.md +288 -0
- package/src/bmm/workflows/4-implementation/correct-course/instructions.md +206 -0
- package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +60 -0
- package/src/bmm/workflows/4-implementation/create-story/checklist.md +358 -0
- package/src/bmm/workflows/4-implementation/create-story/instructions.xml +345 -0
- package/src/bmm/workflows/4-implementation/create-story/template.md +49 -0
- package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +61 -0
- package/src/bmm/workflows/4-implementation/dev-story/checklist.md +80 -0
- package/src/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -0
- package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +32 -0
- package/src/bmm/workflows/4-implementation/fix-and-test/workflow.md +197 -0
- package/src/bmm/workflows/4-implementation/retrospective/instructions.md +1443 -0
- package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +58 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/instructions.md +225 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +54 -0
- package/src/bmm/workflows/4-implementation/sprint-status/instructions.md +229 -0
- package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +36 -0
- package/src/bmm/workflows/bmad-quick-flow/brownfield-fast-track/steps/step-01-detect.md +55 -0
- package/src/bmm/workflows/bmad-quick-flow/brownfield-fast-track/steps/step-02-confirm.md +48 -0
- package/src/bmm/workflows/bmad-quick-flow/brownfield-fast-track/steps/step-03-implement.md +61 -0
- package/src/bmm/workflows/bmad-quick-flow/brownfield-fast-track/workflow.md +41 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +176 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +120 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +153 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +113 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +106 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +149 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +73 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +192 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +145 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +128 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +201 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +93 -0
- package/src/bmm/workflows/bmad-quick-flow/yolo-mode/steps/step-01-rapid-spec.md +54 -0
- package/src/bmm/workflows/bmad-quick-flow/yolo-mode/steps/step-02-ship-it.md +65 -0
- package/src/bmm/workflows/bmad-quick-flow/yolo-mode/workflow.md +54 -0
- package/src/bmm/workflows/document-project/checklist.md +245 -0
- package/src/bmm/workflows/document-project/documentation-requirements.csv +12 -0
- package/src/bmm/workflows/document-project/instructions.md +221 -0
- package/src/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
- package/src/bmm/workflows/document-project/templates/index-template.md +169 -0
- package/src/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
- package/src/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
- package/src/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
- package/src/bmm/workflows/document-project/workflow.yaml +30 -0
- package/src/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
- package/src/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
- package/src/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
- package/src/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
- package/src/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-library.json +90 -0
- package/src/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-templates.yaml +127 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/checklist.md +39 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/instructions.md +130 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/workflow.yaml +27 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-diagram/checklist.md +43 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-diagram/instructions.md +141 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-diagram/workflow.yaml +27 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/checklist.md +49 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/instructions.md +241 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/workflow.yaml +27 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/checklist.md +38 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/instructions.md +133 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/workflow.yaml +27 -0
- package/src/bmm/workflows/parallel-work/parallel-analysis/steps/step-01-parse-target.md +49 -0
- package/src/bmm/workflows/parallel-work/parallel-analysis/steps/step-02-launch-streams.md +135 -0
- package/src/bmm/workflows/parallel-work/parallel-analysis/steps/step-03-sync-point.md +74 -0
- package/src/bmm/workflows/parallel-work/parallel-analysis/steps/step-04-merge-insights.md +179 -0
- package/src/bmm/workflows/parallel-work/parallel-analysis/workflow.md +55 -0
- package/src/bmm/workflows/parallel-work/parallel-generation/workflow.md +109 -0
- package/src/bmm/workflows/parallel-work/parallel-reviews/workflow.md +111 -0
- package/src/bmm/workflows/parallel-work/parallel-stories/workflow.md +112 -0
- package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-01-load-sprint.md +54 -0
- package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-02-plan-execution.md +63 -0
- package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-03-execute-stories.md +112 -0
- package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-04-code-review.md +148 -0
- package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-05-integration-testing.md +200 -0
- package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-06-sprint-report.md +290 -0
- package/src/bmm/workflows/parallel-work/sprint-mode/workflow.md +58 -0
- package/src/bmm/workflows/testarch/atdd/atdd-checklist-template.md +363 -0
- package/src/bmm/workflows/testarch/atdd/checklist.md +374 -0
- package/src/bmm/workflows/testarch/atdd/instructions.md +806 -0
- package/src/bmm/workflows/testarch/atdd/workflow.yaml +47 -0
- package/src/bmm/workflows/testarch/automate/checklist.md +582 -0
- package/src/bmm/workflows/testarch/automate/instructions.md +1324 -0
- package/src/bmm/workflows/testarch/automate/workflow.yaml +54 -0
- package/src/bmm/workflows/testarch/ci/checklist.md +247 -0
- package/src/bmm/workflows/testarch/ci/github-actions-template.yaml +198 -0
- package/src/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +149 -0
- package/src/bmm/workflows/testarch/ci/instructions.md +536 -0
- package/src/bmm/workflows/testarch/ci/workflow.yaml +47 -0
- package/src/bmm/workflows/testarch/framework/checklist.md +320 -0
- package/src/bmm/workflows/testarch/framework/instructions.md +481 -0
- package/src/bmm/workflows/testarch/framework/workflow.yaml +49 -0
- package/src/bmm/workflows/testarch/nfr-assess/checklist.md +407 -0
- package/src/bmm/workflows/testarch/nfr-assess/instructions.md +726 -0
- package/src/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +461 -0
- package/src/bmm/workflows/testarch/nfr-assess/workflow.yaml +49 -0
- package/src/bmm/workflows/testarch/test-design/checklist.md +407 -0
- package/src/bmm/workflows/testarch/test-design/instructions.md +1158 -0
- package/src/bmm/workflows/testarch/test-design/test-design-architecture-template.md +213 -0
- package/src/bmm/workflows/testarch/test-design/test-design-qa-template.md +286 -0
- package/src/bmm/workflows/testarch/test-design/test-design-template.md +294 -0
- package/src/bmm/workflows/testarch/test-design/workflow.yaml +71 -0
- package/src/bmm/workflows/testarch/test-review/checklist.md +472 -0
- package/src/bmm/workflows/testarch/test-review/instructions.md +628 -0
- package/src/bmm/workflows/testarch/test-review/test-review-template.md +390 -0
- package/src/bmm/workflows/testarch/test-review/workflow.yaml +48 -0
- package/src/bmm/workflows/testarch/trace/checklist.md +642 -0
- package/src/bmm/workflows/testarch/trace/instructions.md +1030 -0
- package/src/bmm/workflows/testarch/trace/trace-template.md +675 -0
- package/src/bmm/workflows/testarch/trace/workflow.yaml +57 -0
- package/src/core/_module-installer/installer.js +60 -0
- package/src/core/agents/bmad-master.agent.yaml +29 -0
- package/src/core/module-help.csv +9 -0
- package/src/core/module.yaml +25 -0
- package/src/core/resources/excalidraw/README.md +160 -0
- package/src/core/resources/excalidraw/excalidraw-helpers.md +127 -0
- package/src/core/resources/excalidraw/library-loader.md +50 -0
- package/src/core/resources/excalidraw/validate-json-instructions.md +79 -0
- package/src/core/tasks/editorial-review-prose.xml +100 -0
- package/src/core/tasks/editorial-review-structure.xml +209 -0
- package/src/core/tasks/help.md +62 -0
- package/src/core/tasks/index-docs.xml +65 -0
- package/src/core/tasks/review-adversarial-general.xml +48 -0
- package/src/core/tasks/shard-doc.xml +109 -0
- package/src/core/tasks/workflow.xml +235 -0
- package/src/core/workflows/advanced-elicitation/methods.csv +51 -0
- package/src/core/workflows/advanced-elicitation/workflow.xml +117 -0
- package/src/core/workflows/brainstorming/brain-methods.csv +62 -0
- package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -0
- package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
- package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
- package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
- package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
- package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
- package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -0
- package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
- package/src/core/workflows/brainstorming/template.md +15 -0
- package/src/core/workflows/brainstorming/workflow.md +58 -0
- package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
- package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
- package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +157 -0
- package/src/core/workflows/party-mode/workflow.md +194 -0
- package/src/utility/agent-components/activation-rules.txt +6 -0
- package/src/utility/agent-components/activation-steps.txt +14 -0
- package/src/utility/agent-components/agent-command-header.md +1 -0
- package/src/utility/agent-components/agent.customize.template.yaml +41 -0
- package/src/utility/agent-components/handler-action.txt +4 -0
- package/src/utility/agent-components/handler-data.txt +5 -0
- package/src/utility/agent-components/handler-exec.txt +6 -0
- package/src/utility/agent-components/handler-multi.txt +14 -0
- package/src/utility/agent-components/handler-tmpl.txt +5 -0
- package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
- package/src/utility/agent-components/handler-workflow.txt +10 -0
- package/src/utility/agent-components/menu-handlers.txt +6 -0
- package/tools/bmad-npx-wrapper.js +69 -0
- package/tools/build-docs.js +577 -0
- package/tools/cli/README.md +7 -0
- package/tools/cli/bmad-cli.js +65 -0
- package/tools/cli/commands/diagnostics.js +303 -0
- package/tools/cli/commands/install.js +87 -0
- package/tools/cli/commands/module.js +210 -0
- package/tools/cli/commands/status.js +65 -0
- package/tools/cli/commands/uninstall.js +86 -0
- package/tools/cli/external-official-modules.yaml +54 -0
- package/tools/cli/installers/install-messages.yaml +59 -0
- package/tools/cli/installers/lib/core/config-collector.js +1079 -0
- package/tools/cli/installers/lib/core/custom-module-cache.js +259 -0
- package/tools/cli/installers/lib/core/dependency-resolver.js +739 -0
- package/tools/cli/installers/lib/core/detector.js +223 -0
- package/tools/cli/installers/lib/core/ide-config-manager.js +156 -0
- package/tools/cli/installers/lib/core/installer.js +2812 -0
- package/tools/cli/installers/lib/core/manifest-generator.js +1054 -0
- package/tools/cli/installers/lib/core/manifest.js +1036 -0
- package/tools/cli/installers/lib/custom/handler.js +363 -0
- package/tools/cli/installers/lib/ide/_base-ide.js +655 -0
- package/tools/cli/installers/lib/ide/_config-driven.js +450 -0
- package/tools/cli/installers/lib/ide/codex.js +440 -0
- package/tools/cli/installers/lib/ide/kilo.js +250 -0
- package/tools/cli/installers/lib/ide/kiro-cli.js +326 -0
- package/tools/cli/installers/lib/ide/manager.js +271 -0
- package/tools/cli/installers/lib/ide/platform-codes.js +100 -0
- package/tools/cli/installers/lib/ide/platform-codes.yaml +227 -0
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +181 -0
- package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +163 -0
- package/tools/cli/installers/lib/ide/shared/module-injections.js +136 -0
- package/tools/cli/installers/lib/ide/shared/path-utils.js +292 -0
- package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +270 -0
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +319 -0
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/antigravity.md +8 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-agent.md +15 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-workflow-yaml.md +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-workflow.md +6 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-agent.toml +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow-yaml.toml +16 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow.toml +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/rovodev.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/trae.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/windsurf-workflow.md +10 -0
- package/tools/cli/installers/lib/ide/templates/split/opencode/body.md +10 -0
- package/tools/cli/installers/lib/ide/templates/split/opencode/header.md +4 -0
- package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +13 -0
- package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
- package/tools/cli/installers/lib/message-loader.js +85 -0
- package/tools/cli/installers/lib/modules/external-manager.js +135 -0
- package/tools/cli/installers/lib/modules/manager.js +1375 -0
- package/tools/cli/lib/activation-builder.js +163 -0
- package/tools/cli/lib/agent/compiler.js +522 -0
- package/tools/cli/lib/agent/compiler.ts +572 -0
- package/tools/cli/lib/agent/installer.js +716 -0
- package/tools/cli/lib/agent/template-engine.js +152 -0
- package/tools/cli/lib/agent/types.ts +155 -0
- package/tools/cli/lib/agent-analyzer.js +109 -0
- package/tools/cli/lib/agent-party-generator.js +194 -0
- package/tools/cli/lib/cli-utils.js +227 -0
- package/tools/cli/lib/config.js +213 -0
- package/tools/cli/lib/config.ts +227 -0
- package/tools/cli/lib/file-ops.js +204 -0
- package/tools/cli/lib/file-ops.ts +215 -0
- package/tools/cli/lib/platform-codes.js +116 -0
- package/tools/cli/lib/project-root.js +77 -0
- package/tools/cli/lib/prompts.js +433 -0
- package/tools/cli/lib/prompts.ts +541 -0
- package/tools/cli/lib/types/config.types.ts +43 -0
- package/tools/cli/lib/types/xml-handler.types.ts +50 -0
- package/tools/cli/lib/ui.js +1660 -0
- package/tools/cli/lib/xml-handler.js +177 -0
- package/tools/cli/lib/xml-handler.ts +188 -0
- package/tools/cli/lib/xml-to-markdown.js +82 -0
- package/tools/cli/lib/yaml-format.js +245 -0
- package/tools/cli/lib/yaml-xml-builder.js +587 -0
- package/tools/docs/BUNDLE_DISTRIBUTION_SETUP.md +95 -0
- package/tools/docs/fix-refs.md +91 -0
- package/tools/docs/index.md +2 -0
- package/tools/fix-doc-links.js +288 -0
- package/tools/flattener/aggregate.js +76 -0
- package/tools/flattener/aggregate.ts +78 -0
- package/tools/flattener/binary.js +80 -0
- package/tools/flattener/discovery.js +71 -0
- package/tools/flattener/files.js +35 -0
- package/tools/flattener/files.ts +31 -0
- package/tools/flattener/ignoreRules.js +172 -0
- package/tools/flattener/main.js +483 -0
- package/tools/flattener/main.ts +262 -0
- package/tools/flattener/projectRoot.js +201 -0
- package/tools/flattener/prompts.js +44 -0
- package/tools/flattener/stats.helpers.js +368 -0
- package/tools/flattener/stats.js +75 -0
- package/tools/flattener/test-matrix.js +409 -0
- package/tools/flattener/types.ts +53 -0
- package/tools/flattener/xml.js +82 -0
- package/tools/format-workflow-md.js +263 -0
- package/tools/lib/xml-utils.js +13 -0
- package/tools/maintainer/review-pr-README.md +55 -0
- package/tools/maintainer/review-pr.md +242 -0
- package/tools/migrate-custom-module-paths.js +124 -0
- package/tools/platform-codes.yaml +157 -0
- package/tools/schema/agent.js +491 -0
- package/tools/schema/agent.ts +489 -0
- package/tools/schema/agent.types.ts +31 -0
- package/tools/update-bmad.sh +24 -0
- package/tools/validate-agent-schema.js +110 -0
- package/tools/validate-doc-links.js +371 -0
- package/tools/validate-svg-changes.sh +356 -0
- package/vite-plugin-monaco-editor.ts +108 -0
|
@@ -0,0 +1,831 @@
|
|
|
1
|
+
# Contributing to BMAD Studio
|
|
2
|
+
|
|
3
|
+
Developer guide for contributing to BMAD Studio, the Electron desktop application for BMAD Method.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
### Prerequisites
|
|
8
|
+
|
|
9
|
+
- Node.js 20.0.0 or higher
|
|
10
|
+
- Git
|
|
11
|
+
- Code editor (VS Code recommended)
|
|
12
|
+
|
|
13
|
+
### Setup
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Clone repository
|
|
17
|
+
git clone https://github.com/bmad-code-org/BMAD-METHOD.git
|
|
18
|
+
cd BMAD-METHOD
|
|
19
|
+
|
|
20
|
+
# Install dependencies
|
|
21
|
+
npm install
|
|
22
|
+
|
|
23
|
+
# Start development environment
|
|
24
|
+
npm run electron:dev
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The app will launch with hot reload enabled. Changes to renderer code refresh automatically. Main process changes require restart.
|
|
28
|
+
|
|
29
|
+
## Development Workflow
|
|
30
|
+
|
|
31
|
+
### Branch Strategy
|
|
32
|
+
|
|
33
|
+
- `main` — Production-ready code
|
|
34
|
+
- `develop` — Integration branch for features
|
|
35
|
+
- `feature/*` — New features
|
|
36
|
+
- `fix/*` — Bug fixes
|
|
37
|
+
- `docs/*` — Documentation updates
|
|
38
|
+
|
|
39
|
+
### Making Changes
|
|
40
|
+
|
|
41
|
+
1. **Create feature branch**
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
git checkout develop
|
|
45
|
+
git pull origin develop
|
|
46
|
+
git checkout -b feature/my-feature
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
2. **Make changes following code standards** (see below)
|
|
50
|
+
|
|
51
|
+
3. **Test your changes**
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
npm test # Run all tests
|
|
55
|
+
npm run test:coverage # Check coverage
|
|
56
|
+
npm run lint # Check code style
|
|
57
|
+
npm run format:check # Check formatting
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
4. **Commit with conventional commits**
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
git add .
|
|
64
|
+
git commit -m "feat(workflow): add drag-and-drop reordering"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
5. **Push and create pull request**
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
git push origin feature/my-feature
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Then create PR on GitHub targeting `develop` branch.
|
|
74
|
+
|
|
75
|
+
### Commit Message Format
|
|
76
|
+
|
|
77
|
+
Follow [Conventional Commits](https://www.conventionalcommits.org/):
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
<type>(<scope>): <description>
|
|
81
|
+
|
|
82
|
+
[optional body]
|
|
83
|
+
|
|
84
|
+
[optional footer]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Types:**
|
|
88
|
+
- `feat` — New feature
|
|
89
|
+
- `fix` — Bug fix
|
|
90
|
+
- `docs` — Documentation only
|
|
91
|
+
- `style` — Code style (formatting, no logic change)
|
|
92
|
+
- `refactor` — Code refactoring
|
|
93
|
+
- `perf` — Performance improvement
|
|
94
|
+
- `test` — Adding/updating tests
|
|
95
|
+
- `chore` — Build process, dependencies
|
|
96
|
+
|
|
97
|
+
**Scopes:**
|
|
98
|
+
- `main` — Main process code
|
|
99
|
+
- `renderer` — Renderer process code
|
|
100
|
+
- `ipc` — IPC communication
|
|
101
|
+
- `services` — Core services
|
|
102
|
+
- `components` — React components
|
|
103
|
+
- `workflow` — Workflow system
|
|
104
|
+
- `token` — Token tracking
|
|
105
|
+
- `test` — Test infrastructure
|
|
106
|
+
|
|
107
|
+
**Examples:**
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
feat(workflow): add Party Mode multi-agent coordination
|
|
111
|
+
fix(token): correct budget alert threshold calculation
|
|
112
|
+
docs(api): update IPC handler documentation
|
|
113
|
+
refactor(components): extract common TokenDisplay component
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Code Standards
|
|
117
|
+
|
|
118
|
+
### TypeScript
|
|
119
|
+
|
|
120
|
+
#### Type Safety
|
|
121
|
+
|
|
122
|
+
Always use explicit types. Avoid `any` except when absolutely necessary.
|
|
123
|
+
|
|
124
|
+
**Good:**
|
|
125
|
+
```typescript
|
|
126
|
+
interface WorkflowStep {
|
|
127
|
+
id: string;
|
|
128
|
+
name: string;
|
|
129
|
+
action: string;
|
|
130
|
+
params?: Record<string, unknown>;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function loadWorkflow(id: string): Promise<WorkflowDefinition> {
|
|
134
|
+
// implementation
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**Bad:**
|
|
139
|
+
```typescript
|
|
140
|
+
function loadWorkflow(id: any): any {
|
|
141
|
+
// implementation
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
#### Strict Mode
|
|
146
|
+
|
|
147
|
+
All TypeScript configs use strict mode:
|
|
148
|
+
|
|
149
|
+
```json
|
|
150
|
+
{
|
|
151
|
+
"compilerOptions": {
|
|
152
|
+
"strict": true,
|
|
153
|
+
"noImplicitAny": true,
|
|
154
|
+
"strictNullChecks": true
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
#### Naming Conventions
|
|
160
|
+
|
|
161
|
+
- **Interfaces/Types**: PascalCase (e.g., `WorkflowDefinition`)
|
|
162
|
+
- **Functions/Variables**: camelCase (e.g., `loadWorkflow`)
|
|
163
|
+
- **Components**: PascalCase (e.g., `ChatPanel`)
|
|
164
|
+
- **Constants**: SCREAMING_SNAKE_CASE (e.g., `MAX_TOKEN_BUDGET`)
|
|
165
|
+
- **Files**: kebab-case (e.g., `token-tracker.ts`)
|
|
166
|
+
|
|
167
|
+
### React
|
|
168
|
+
|
|
169
|
+
#### Functional Components
|
|
170
|
+
|
|
171
|
+
Use functional components with hooks, not class components.
|
|
172
|
+
|
|
173
|
+
**Good:**
|
|
174
|
+
```typescript
|
|
175
|
+
export function ChatPanel({ agentId }: ChatPanelProps) {
|
|
176
|
+
const [messages, setMessages] = useState<Message[]>([]);
|
|
177
|
+
|
|
178
|
+
useEffect(() => {
|
|
179
|
+
loadMessages(agentId);
|
|
180
|
+
}, [agentId]);
|
|
181
|
+
|
|
182
|
+
return (
|
|
183
|
+
<div className="chat-panel">
|
|
184
|
+
{/* content */}
|
|
185
|
+
</div>
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Bad:**
|
|
191
|
+
```typescript
|
|
192
|
+
class ChatPanel extends React.Component {
|
|
193
|
+
// Don't use class components
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
#### Props Interface
|
|
198
|
+
|
|
199
|
+
Always define props interface before component:
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
interface ChatPanelProps {
|
|
203
|
+
agentId?: string;
|
|
204
|
+
onMessage?: (message: string) => void;
|
|
205
|
+
className?: string;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
export function ChatPanel(props: ChatPanelProps) {
|
|
209
|
+
// implementation
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
#### Hooks Rules
|
|
214
|
+
|
|
215
|
+
Follow React hooks rules:
|
|
216
|
+
|
|
217
|
+
1. **Call hooks at top level** (not in loops/conditions)
|
|
218
|
+
2. **Use dependency arrays correctly** in `useEffect`
|
|
219
|
+
3. **Clean up side effects** in `useEffect` return
|
|
220
|
+
4. **Extract custom hooks** for reusable logic
|
|
221
|
+
|
|
222
|
+
**Good:**
|
|
223
|
+
```typescript
|
|
224
|
+
useEffect(() => {
|
|
225
|
+
const subscription = subscribeToMessages(onMessage);
|
|
226
|
+
|
|
227
|
+
return () => {
|
|
228
|
+
subscription.unsubscribe();
|
|
229
|
+
};
|
|
230
|
+
}, [onMessage]);
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
#### Component Organization
|
|
234
|
+
|
|
235
|
+
Structure components consistently:
|
|
236
|
+
|
|
237
|
+
```typescript
|
|
238
|
+
// 1. Imports
|
|
239
|
+
import { useState, useEffect } from 'react';
|
|
240
|
+
import type { WorkflowDefinition } from '@/types';
|
|
241
|
+
|
|
242
|
+
// 2. Types/Interfaces
|
|
243
|
+
interface MyComponentProps {
|
|
244
|
+
// props
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// 3. Component
|
|
248
|
+
export function MyComponent({ prop1, prop2 }: MyComponentProps) {
|
|
249
|
+
// 4. Hooks
|
|
250
|
+
const [state, setState] = useState<string>('');
|
|
251
|
+
|
|
252
|
+
// 5. Effects
|
|
253
|
+
useEffect(() => {
|
|
254
|
+
// side effects
|
|
255
|
+
}, []);
|
|
256
|
+
|
|
257
|
+
// 6. Event handlers
|
|
258
|
+
const handleClick = () => {
|
|
259
|
+
// handler logic
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
// 7. Render helpers
|
|
263
|
+
const renderItem = (item: Item) => {
|
|
264
|
+
// render logic
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
// 8. Return JSX
|
|
268
|
+
return (
|
|
269
|
+
<div className="my-component">
|
|
270
|
+
{/* JSX */}
|
|
271
|
+
</div>
|
|
272
|
+
);
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### Styling
|
|
277
|
+
|
|
278
|
+
#### TailwindCSS
|
|
279
|
+
|
|
280
|
+
Use TailwindCSS utility classes for all styling.
|
|
281
|
+
|
|
282
|
+
**Good:**
|
|
283
|
+
```typescript
|
|
284
|
+
<div className="flex items-center justify-between p-4 bg-gray-100 dark:bg-gray-800">
|
|
285
|
+
<h2 className="text-xl font-bold">Title</h2>
|
|
286
|
+
</div>
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
**Bad:**
|
|
290
|
+
```typescript
|
|
291
|
+
<div style={{ display: 'flex', padding: '16px' }}>
|
|
292
|
+
<h2 style={{ fontSize: '20px' }}>Title</h2>
|
|
293
|
+
</div>
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
#### Dark Mode
|
|
297
|
+
|
|
298
|
+
Always support dark mode with `dark:` prefix:
|
|
299
|
+
|
|
300
|
+
```typescript
|
|
301
|
+
<div className="bg-white dark:bg-gray-900 text-black dark:text-white">
|
|
302
|
+
Content
|
|
303
|
+
</div>
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
#### Custom Styles
|
|
307
|
+
|
|
308
|
+
For complex styling, create `.module.css` file:
|
|
309
|
+
|
|
310
|
+
```typescript
|
|
311
|
+
// Sidebar.module.css
|
|
312
|
+
.sidebar {
|
|
313
|
+
@apply flex flex-col w-64 bg-white dark:bg-gray-900;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
.sidebarCollapsed {
|
|
317
|
+
@apply w-16;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Sidebar.tsx
|
|
321
|
+
import styles from './Sidebar.module.css';
|
|
322
|
+
|
|
323
|
+
export function Sidebar({ collapsed }: Props) {
|
|
324
|
+
return (
|
|
325
|
+
<div className={collapsed ? styles.sidebarCollapsed : styles.sidebar}>
|
|
326
|
+
{/* content */}
|
|
327
|
+
</div>
|
|
328
|
+
);
|
|
329
|
+
}
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### IPC Communication
|
|
333
|
+
|
|
334
|
+
#### Handler Pattern
|
|
335
|
+
|
|
336
|
+
Create dedicated handler files in `electron/ipc/`:
|
|
337
|
+
|
|
338
|
+
```typescript
|
|
339
|
+
// electron/ipc/my-handler.ts
|
|
340
|
+
import { ipcMain } from 'electron';
|
|
341
|
+
|
|
342
|
+
export function setupMyHandlers(): void {
|
|
343
|
+
ipcMain.handle('my:action', async (_event, data) => {
|
|
344
|
+
try {
|
|
345
|
+
// Validate input
|
|
346
|
+
if (!data || typeof data.param !== 'string') {
|
|
347
|
+
throw new Error('Invalid parameters');
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// Perform action
|
|
351
|
+
const result = await doSomething(data.param);
|
|
352
|
+
|
|
353
|
+
return { success: true, result };
|
|
354
|
+
} catch (error) {
|
|
355
|
+
return {
|
|
356
|
+
success: false,
|
|
357
|
+
error: (error as Error).message
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
Register in `main.ts`:
|
|
365
|
+
|
|
366
|
+
```typescript
|
|
367
|
+
import { setupMyHandlers } from './ipc/my-handler';
|
|
368
|
+
|
|
369
|
+
function setupIpcHandlers(): void {
|
|
370
|
+
setupMyHandlers();
|
|
371
|
+
// other handlers...
|
|
372
|
+
}
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
#### Preload Exposure
|
|
376
|
+
|
|
377
|
+
Expose APIs in `preload.ts`:
|
|
378
|
+
|
|
379
|
+
```typescript
|
|
380
|
+
import { contextBridge, ipcRenderer } from 'electron';
|
|
381
|
+
|
|
382
|
+
contextBridge.exposeInMainWorld('electronAPI', {
|
|
383
|
+
my: {
|
|
384
|
+
action: (param: string) => ipcRenderer.invoke('my:action', { param })
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
Add types in `renderer/types/electron-api.d.ts`:
|
|
390
|
+
|
|
391
|
+
```typescript
|
|
392
|
+
interface ElectronAPI {
|
|
393
|
+
my: {
|
|
394
|
+
action: (param: string) => Promise<{ success: boolean; result?: any; error?: string }>;
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
#### Security
|
|
400
|
+
|
|
401
|
+
- ✅ **Always validate input** in IPC handlers
|
|
402
|
+
- ✅ **Use `contextBridge.exposeInMainWorld`** in preload
|
|
403
|
+
- ✅ **Return structured responses** (`{ success, data?, error? }`)
|
|
404
|
+
- ❌ **Never pass functions** through IPC
|
|
405
|
+
- ❌ **Never use `nodeIntegration: true`**
|
|
406
|
+
- ❌ **Never disable `contextIsolation`**
|
|
407
|
+
|
|
408
|
+
### Services
|
|
409
|
+
|
|
410
|
+
#### Service Pattern
|
|
411
|
+
|
|
412
|
+
Create services in `electron/services/`:
|
|
413
|
+
|
|
414
|
+
```typescript
|
|
415
|
+
// electron/services/my-service.ts
|
|
416
|
+
|
|
417
|
+
interface MyServiceOptions {
|
|
418
|
+
option1: string;
|
|
419
|
+
option2?: number;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
export class MyService {
|
|
423
|
+
private state: Map<string, any>;
|
|
424
|
+
|
|
425
|
+
constructor(private options: MyServiceOptions) {
|
|
426
|
+
this.state = new Map();
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
async doSomething(param: string): Promise<Result> {
|
|
430
|
+
// Validate
|
|
431
|
+
if (!param) {
|
|
432
|
+
throw new Error('Parameter required');
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// Process
|
|
436
|
+
const result = await this.processInternal(param);
|
|
437
|
+
|
|
438
|
+
// Update state
|
|
439
|
+
this.state.set(param, result);
|
|
440
|
+
|
|
441
|
+
return result;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
private async processInternal(param: string): Promise<Result> {
|
|
445
|
+
// Internal implementation
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
// Export singleton instance
|
|
450
|
+
export const myService = new MyService({
|
|
451
|
+
option1: 'default'
|
|
452
|
+
});
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
#### Dependency Injection
|
|
456
|
+
|
|
457
|
+
Use constructor injection for dependencies:
|
|
458
|
+
|
|
459
|
+
```typescript
|
|
460
|
+
export class WorkflowEngine {
|
|
461
|
+
constructor(
|
|
462
|
+
private tokenTracker: TokenTracker,
|
|
463
|
+
private storage: WorkflowStorage
|
|
464
|
+
) {}
|
|
465
|
+
|
|
466
|
+
async execute(workflowId: string): Promise<Result> {
|
|
467
|
+
const workflow = await this.storage.load(workflowId);
|
|
468
|
+
const tokens = this.tokenTracker.getCurrentUsage();
|
|
469
|
+
// ...
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
### Testing
|
|
475
|
+
|
|
476
|
+
#### Unit Tests
|
|
477
|
+
|
|
478
|
+
Write unit tests for all services and utilities:
|
|
479
|
+
|
|
480
|
+
```typescript
|
|
481
|
+
// token-tracker.test.ts
|
|
482
|
+
import { TokenTracker } from '../services/token-tracker';
|
|
483
|
+
|
|
484
|
+
describe('TokenTracker', () => {
|
|
485
|
+
let tracker: TokenTracker;
|
|
486
|
+
|
|
487
|
+
beforeEach(() => {
|
|
488
|
+
tracker = new TokenTracker();
|
|
489
|
+
});
|
|
490
|
+
|
|
491
|
+
afterEach(() => {
|
|
492
|
+
tracker.reset();
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
test('tracks token usage', async () => {
|
|
496
|
+
await tracker.track({
|
|
497
|
+
tokensUsed: 100,
|
|
498
|
+
mode: 'balanced'
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
expect(tracker.getCurrentUsage()).toBe(100);
|
|
502
|
+
});
|
|
503
|
+
|
|
504
|
+
test('calculates stats correctly', async () => {
|
|
505
|
+
await tracker.track({ tokensUsed: 100, mode: 'balanced' });
|
|
506
|
+
await tracker.track({ tokensUsed: 50, mode: 'ultra-save' });
|
|
507
|
+
|
|
508
|
+
const stats = await tracker.getStats('day');
|
|
509
|
+
expect(stats.totalTokens).toBe(150);
|
|
510
|
+
});
|
|
511
|
+
});
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
#### Component Tests
|
|
515
|
+
|
|
516
|
+
Test React components with React Testing Library:
|
|
517
|
+
|
|
518
|
+
```typescript
|
|
519
|
+
// ChatPanel.test.tsx
|
|
520
|
+
import { render, screen, fireEvent } from '@testing-library/react';
|
|
521
|
+
import { ChatPanel } from './ChatPanel';
|
|
522
|
+
|
|
523
|
+
describe('ChatPanel', () => {
|
|
524
|
+
test('renders messages', () => {
|
|
525
|
+
render(<ChatPanel agentId="pm" />);
|
|
526
|
+
expect(screen.getByRole('list')).toBeInTheDocument();
|
|
527
|
+
});
|
|
528
|
+
|
|
529
|
+
test('sends message on submit', async () => {
|
|
530
|
+
const onMessage = jest.fn();
|
|
531
|
+
render(<ChatPanel onMessage={onMessage} />);
|
|
532
|
+
|
|
533
|
+
const input = screen.getByPlaceholderText('Type message...');
|
|
534
|
+
fireEvent.change(input, { target: { value: 'Hello' } });
|
|
535
|
+
|
|
536
|
+
const button = screen.getByText('Send');
|
|
537
|
+
fireEvent.click(button);
|
|
538
|
+
|
|
539
|
+
expect(onMessage).toHaveBeenCalledWith('Hello');
|
|
540
|
+
});
|
|
541
|
+
});
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
#### Test Coverage
|
|
545
|
+
|
|
546
|
+
Maintain >80% code coverage:
|
|
547
|
+
|
|
548
|
+
```bash
|
|
549
|
+
npm run test:coverage
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
Coverage reports in `coverage/` directory.
|
|
553
|
+
|
|
554
|
+
### Documentation
|
|
555
|
+
|
|
556
|
+
#### Code Comments
|
|
557
|
+
|
|
558
|
+
Use JSDoc for functions and classes:
|
|
559
|
+
|
|
560
|
+
```typescript
|
|
561
|
+
/**
|
|
562
|
+
* Load workflow definition from disk.
|
|
563
|
+
*
|
|
564
|
+
* @param id - Workflow identifier (e.g., 'create-prd')
|
|
565
|
+
* @returns Promise resolving to workflow definition
|
|
566
|
+
* @throws Error if workflow not found
|
|
567
|
+
*
|
|
568
|
+
* @example
|
|
569
|
+
* ```typescript
|
|
570
|
+
* const workflow = await loadWorkflow('create-prd');
|
|
571
|
+
* console.log(workflow.name);
|
|
572
|
+
* ```
|
|
573
|
+
*/
|
|
574
|
+
export async function loadWorkflow(id: string): Promise<WorkflowDefinition> {
|
|
575
|
+
// implementation
|
|
576
|
+
}
|
|
577
|
+
```
|
|
578
|
+
|
|
579
|
+
#### Inline Comments
|
|
580
|
+
|
|
581
|
+
Use inline comments for complex logic:
|
|
582
|
+
|
|
583
|
+
```typescript
|
|
584
|
+
// Calculate token usage with mode multiplier
|
|
585
|
+
// Ultra-save mode: 0.6x tokens (40% reduction)
|
|
586
|
+
// Balanced mode: 1.0x tokens (baseline)
|
|
587
|
+
// Power mode: 1.2x tokens (20% increase for accuracy)
|
|
588
|
+
const adjustedTokens = baseTokens * MODE_MULTIPLIERS[mode];
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
#### README Updates
|
|
592
|
+
|
|
593
|
+
Update relevant READMEs when adding features:
|
|
594
|
+
|
|
595
|
+
- Project README for user-facing features
|
|
596
|
+
- Component READMEs for new component libraries
|
|
597
|
+
- Service READMEs for new services
|
|
598
|
+
|
|
599
|
+
## Performance Guidelines
|
|
600
|
+
|
|
601
|
+
### Renderer Process
|
|
602
|
+
|
|
603
|
+
#### Virtualization
|
|
604
|
+
|
|
605
|
+
Use virtualized lists for large data sets:
|
|
606
|
+
|
|
607
|
+
```typescript
|
|
608
|
+
import { FixedSizeList } from 'react-window';
|
|
609
|
+
|
|
610
|
+
function FileList({ files }: Props) {
|
|
611
|
+
const Row = ({ index, style }: any) => (
|
|
612
|
+
<div style={style}>
|
|
613
|
+
{files[index].name}
|
|
614
|
+
</div>
|
|
615
|
+
);
|
|
616
|
+
|
|
617
|
+
return (
|
|
618
|
+
<FixedSizeList
|
|
619
|
+
height={600}
|
|
620
|
+
itemCount={files.length}
|
|
621
|
+
itemSize={35}
|
|
622
|
+
>
|
|
623
|
+
{Row}
|
|
624
|
+
</FixedSizeList>
|
|
625
|
+
);
|
|
626
|
+
}
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
#### Code Splitting
|
|
630
|
+
|
|
631
|
+
Use React.lazy for large components:
|
|
632
|
+
|
|
633
|
+
```typescript
|
|
634
|
+
import { lazy, Suspense } from 'react';
|
|
635
|
+
|
|
636
|
+
const WorkflowEditor = lazy(() => import('./components/WorkflowEditor'));
|
|
637
|
+
|
|
638
|
+
function App() {
|
|
639
|
+
return (
|
|
640
|
+
<Suspense fallback={<LoadingSpinner />}>
|
|
641
|
+
<WorkflowEditor />
|
|
642
|
+
</Suspense>
|
|
643
|
+
);
|
|
644
|
+
}
|
|
645
|
+
```
|
|
646
|
+
|
|
647
|
+
#### Memoization
|
|
648
|
+
|
|
649
|
+
Memoize expensive computations:
|
|
650
|
+
|
|
651
|
+
```typescript
|
|
652
|
+
import { useMemo } from 'react';
|
|
653
|
+
|
|
654
|
+
function WorkflowStats({ workflow }: Props) {
|
|
655
|
+
const stats = useMemo(() => {
|
|
656
|
+
return calculateComplexStats(workflow);
|
|
657
|
+
}, [workflow]);
|
|
658
|
+
|
|
659
|
+
return <div>{stats.totalSteps}</div>;
|
|
660
|
+
}
|
|
661
|
+
```
|
|
662
|
+
|
|
663
|
+
### Main Process
|
|
664
|
+
|
|
665
|
+
#### Async Operations
|
|
666
|
+
|
|
667
|
+
Never block the main thread:
|
|
668
|
+
|
|
669
|
+
```typescript
|
|
670
|
+
// Good: Async file operations
|
|
671
|
+
const content = await fs.readFile(path, 'utf-8');
|
|
672
|
+
|
|
673
|
+
// Bad: Sync operations
|
|
674
|
+
const content = fs.readFileSync(path, 'utf-8');
|
|
675
|
+
```
|
|
676
|
+
|
|
677
|
+
#### Streaming
|
|
678
|
+
|
|
679
|
+
Stream large files instead of loading into memory:
|
|
680
|
+
|
|
681
|
+
```typescript
|
|
682
|
+
import { createReadStream } from 'fs';
|
|
683
|
+
|
|
684
|
+
async function processLargeFile(path: string): Promise<void> {
|
|
685
|
+
const stream = createReadStream(path, { encoding: 'utf-8' });
|
|
686
|
+
|
|
687
|
+
for await (const chunk of stream) {
|
|
688
|
+
await processChunk(chunk);
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
## Debugging
|
|
694
|
+
|
|
695
|
+
### Renderer Process
|
|
696
|
+
|
|
697
|
+
Use Chrome DevTools (auto-opens in development):
|
|
698
|
+
|
|
699
|
+
- **Console** — Log messages, errors
|
|
700
|
+
- **Sources** — Set breakpoints, step through code
|
|
701
|
+
- **React DevTools** — Inspect component tree
|
|
702
|
+
|
|
703
|
+
### Main Process
|
|
704
|
+
|
|
705
|
+
Use VS Code debugger:
|
|
706
|
+
|
|
707
|
+
1. Create `.vscode/launch.json`:
|
|
708
|
+
|
|
709
|
+
```json
|
|
710
|
+
{
|
|
711
|
+
"version": "0.2.0",
|
|
712
|
+
"configurations": [
|
|
713
|
+
{
|
|
714
|
+
"name": "Electron Main",
|
|
715
|
+
"type": "node",
|
|
716
|
+
"request": "launch",
|
|
717
|
+
"runtimeExecutable": "npm",
|
|
718
|
+
"runtimeArgs": ["run", "electron:start"],
|
|
719
|
+
"port": 9229,
|
|
720
|
+
"skipFiles": ["<node_internals>/**"]
|
|
721
|
+
}
|
|
722
|
+
]
|
|
723
|
+
}
|
|
724
|
+
```
|
|
725
|
+
|
|
726
|
+
2. Set breakpoints in `.ts` files
|
|
727
|
+
3. Press F5 to start debugging
|
|
728
|
+
|
|
729
|
+
### IPC Debugging
|
|
730
|
+
|
|
731
|
+
Log IPC calls for debugging:
|
|
732
|
+
|
|
733
|
+
```typescript
|
|
734
|
+
// In preload.ts (temporary debugging)
|
|
735
|
+
contextBridge.exposeInMainWorld('electronAPI', {
|
|
736
|
+
workflow: {
|
|
737
|
+
load: (id: string) => {
|
|
738
|
+
console.log('[IPC] workflow:load', id);
|
|
739
|
+
return ipcRenderer.invoke('workflow:load', id);
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
});
|
|
743
|
+
```
|
|
744
|
+
|
|
745
|
+
## Common Tasks
|
|
746
|
+
|
|
747
|
+
### Adding a New Component
|
|
748
|
+
|
|
749
|
+
1. Create component file: `renderer/components/MyComponent.tsx`
|
|
750
|
+
2. Define props interface
|
|
751
|
+
3. Implement component with TypeScript and TailwindCSS
|
|
752
|
+
4. Add tests: `renderer/components/MyComponent.test.tsx`
|
|
753
|
+
5. Export from parent component or `App.tsx`
|
|
754
|
+
6. Document in API reference if public API
|
|
755
|
+
|
|
756
|
+
### Adding an IPC Handler
|
|
757
|
+
|
|
758
|
+
1. Create handler: `electron/ipc/my-handler.ts`
|
|
759
|
+
2. Export setup function: `setupMyHandlers()`
|
|
760
|
+
3. Register in `electron/main.ts` → `setupIpcHandlers()`
|
|
761
|
+
4. Expose in `electron/preload.ts`
|
|
762
|
+
5. Add types in `renderer/types/electron-api.d.ts`
|
|
763
|
+
6. Document in API reference
|
|
764
|
+
|
|
765
|
+
### Adding a Service
|
|
766
|
+
|
|
767
|
+
1. Create service: `electron/services/my-service.ts`
|
|
768
|
+
2. Export class or functions with types
|
|
769
|
+
3. Add unit tests: `test/services/my-service.test.ts`
|
|
770
|
+
4. Use in IPC handlers or other services
|
|
771
|
+
5. Document in API reference
|
|
772
|
+
|
|
773
|
+
### Updating Dependencies
|
|
774
|
+
|
|
775
|
+
```bash
|
|
776
|
+
# Check for updates
|
|
777
|
+
npm outdated
|
|
778
|
+
|
|
779
|
+
# Update specific package
|
|
780
|
+
npm update package-name
|
|
781
|
+
|
|
782
|
+
# Update all (carefully)
|
|
783
|
+
npm update
|
|
784
|
+
|
|
785
|
+
# Test thoroughly after updates
|
|
786
|
+
npm test
|
|
787
|
+
npm run electron:dev
|
|
788
|
+
```
|
|
789
|
+
|
|
790
|
+
## Pull Request Process
|
|
791
|
+
|
|
792
|
+
1. **Ensure all tests pass**
|
|
793
|
+
|
|
794
|
+
```bash
|
|
795
|
+
npm test
|
|
796
|
+
npm run lint
|
|
797
|
+
npm run format:check
|
|
798
|
+
```
|
|
799
|
+
|
|
800
|
+
2. **Update documentation** if needed
|
|
801
|
+
|
|
802
|
+
3. **Create descriptive PR**
|
|
803
|
+
|
|
804
|
+
Title: Follow conventional commits format
|
|
805
|
+
Description: Explain what, why, and how
|
|
806
|
+
|
|
807
|
+
4. **Request review** from maintainers
|
|
808
|
+
|
|
809
|
+
5. **Address feedback** promptly
|
|
810
|
+
|
|
811
|
+
6. **Squash commits** before merge (if requested)
|
|
812
|
+
|
|
813
|
+
## Getting Help
|
|
814
|
+
|
|
815
|
+
- 💬 [Discord](https://discord.gg/gk8jAdXWmj) — Real-time help
|
|
816
|
+
- 📝 [GitHub Issues](https://github.com/bmad-code-org/BMAD-METHOD/issues) — Bug reports, features
|
|
817
|
+
- 💡 [Discussions](https://github.com/bmad-code-org/BMAD-METHOD/discussions) — Questions, ideas
|
|
818
|
+
|
|
819
|
+
## Code of Conduct
|
|
820
|
+
|
|
821
|
+
Be respectful, inclusive, and collaborative. See [CODE_OF_CONDUCT.md](../../CODE_OF_CONDUCT.md) for details.
|
|
822
|
+
|
|
823
|
+
## License
|
|
824
|
+
|
|
825
|
+
By contributing, you agree that your contributions will be licensed under the MIT License.
|
|
826
|
+
|
|
827
|
+
## Next Steps
|
|
828
|
+
|
|
829
|
+
- [Architecture Guide](./architecture.md) — Understand system design
|
|
830
|
+
- [API Reference](./api-reference.md) — API documentation
|
|
831
|
+
- [User Guide](../user-guide/) — End-user documentation
|