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,572 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BMAD Agent Compiler
|
|
3
|
+
* Transforms agent YAML to compiled XML (.md) format
|
|
4
|
+
* Uses the existing BMAD builder infrastructure for proper formatting
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import * as yaml from 'yaml';
|
|
8
|
+
import * as fs from 'node:fs';
|
|
9
|
+
import * as path from 'node:path';
|
|
10
|
+
import type {
|
|
11
|
+
AgentMetadata,
|
|
12
|
+
AgentPersona,
|
|
13
|
+
AgentPrompt,
|
|
14
|
+
MenuItem,
|
|
15
|
+
MultiMenuItem,
|
|
16
|
+
LegacyMenuItem,
|
|
17
|
+
ExecData,
|
|
18
|
+
ExecItem,
|
|
19
|
+
AgentYaml,
|
|
20
|
+
AgentProfile,
|
|
21
|
+
TemplateAnswers,
|
|
22
|
+
CompileOptions,
|
|
23
|
+
CompileResult,
|
|
24
|
+
FileCompileResult,
|
|
25
|
+
} from './types';
|
|
26
|
+
|
|
27
|
+
const { processAgentYaml, extractInstallConfig, stripInstallConfig, getDefaultValues } = require('./template-engine');
|
|
28
|
+
const { escapeXml } = require('../../../lib/xml-utils');
|
|
29
|
+
const { ActivationBuilder } = require('../activation-builder');
|
|
30
|
+
const { AgentAnalyzer } = require('../agent-analyzer');
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Build frontmatter for agent
|
|
34
|
+
* @param metadata - Agent metadata
|
|
35
|
+
* @param agentName - Final agent name
|
|
36
|
+
* @returns YAML frontmatter
|
|
37
|
+
*/
|
|
38
|
+
function buildFrontmatter(metadata: AgentMetadata, agentName: string): string {
|
|
39
|
+
const nameFromFile = agentName.replaceAll('-', ' ');
|
|
40
|
+
const description = metadata.title || 'BMAD Agent';
|
|
41
|
+
|
|
42
|
+
return `---
|
|
43
|
+
name: "${nameFromFile}"
|
|
44
|
+
description: "${description}"
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
|
48
|
+
|
|
49
|
+
`;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// buildSimpleActivation function removed - replaced by ActivationBuilder for proper fragment loading from src/utility/agent-components/
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Build persona XML section
|
|
56
|
+
* @param persona - Persona object
|
|
57
|
+
* @returns Persona XML
|
|
58
|
+
*/
|
|
59
|
+
function buildPersonaXml(persona?: AgentPersona): string {
|
|
60
|
+
if (!persona) return '';
|
|
61
|
+
|
|
62
|
+
let xml = ' <persona>\n';
|
|
63
|
+
|
|
64
|
+
if (persona.role) {
|
|
65
|
+
const roleText = persona.role.trim().replaceAll(/\n+/g, ' ').replaceAll(/\s+/g, ' ');
|
|
66
|
+
xml += ` <role>${escapeXml(roleText)}</role>\n`;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (persona.identity) {
|
|
70
|
+
const identityText = persona.identity.trim().replaceAll(/\n+/g, ' ').replaceAll(/\s+/g, ' ');
|
|
71
|
+
xml += ` <identity>${escapeXml(identityText)}</identity>\n`;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (persona.communication_style) {
|
|
75
|
+
const styleText = persona.communication_style.trim().replaceAll(/\n+/g, ' ').replaceAll(/\s+/g, ' ');
|
|
76
|
+
xml += ` <communication_style>${escapeXml(styleText)}</communication_style>\n`;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (persona.principles) {
|
|
80
|
+
let principlesText: string;
|
|
81
|
+
if (Array.isArray(persona.principles)) {
|
|
82
|
+
principlesText = persona.principles.join(' ');
|
|
83
|
+
} else {
|
|
84
|
+
principlesText = persona.principles.trim().replaceAll(/\n+/g, ' ');
|
|
85
|
+
}
|
|
86
|
+
xml += ` <principles>${escapeXml(principlesText)}</principles>\n`;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
xml += ' </persona>\n';
|
|
90
|
+
|
|
91
|
+
return xml;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Build prompts XML section
|
|
96
|
+
* @param prompts - Prompts array
|
|
97
|
+
* @returns Prompts XML
|
|
98
|
+
*/
|
|
99
|
+
function buildPromptsXml(prompts?: AgentPrompt[]): string {
|
|
100
|
+
if (!prompts || prompts.length === 0) return '';
|
|
101
|
+
|
|
102
|
+
let xml = ' <prompts>\n';
|
|
103
|
+
|
|
104
|
+
for (const prompt of prompts) {
|
|
105
|
+
xml += ` <prompt id="${prompt.id || ''}">\n`;
|
|
106
|
+
xml += ` <content>\n`;
|
|
107
|
+
// Don't escape prompt content - it's meant to be read as-is
|
|
108
|
+
xml += `${prompt.content || ''}\n`;
|
|
109
|
+
xml += ` </content>\n`;
|
|
110
|
+
xml += ` </prompt>\n`;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
xml += ' </prompts>\n';
|
|
114
|
+
|
|
115
|
+
return xml;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Build memories XML section
|
|
120
|
+
* @param memories - Memories array
|
|
121
|
+
* @returns Memories XML
|
|
122
|
+
*/
|
|
123
|
+
function buildMemoriesXml(memories?: unknown[]): string {
|
|
124
|
+
if (!memories || memories.length === 0) return '';
|
|
125
|
+
|
|
126
|
+
let xml = ' <memories>\n';
|
|
127
|
+
|
|
128
|
+
for (const memory of memories) {
|
|
129
|
+
xml += ` <memory>${escapeXml(String(memory))}</memory>\n`;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
xml += ' </memories>\n';
|
|
133
|
+
|
|
134
|
+
return xml;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Build menu XML section
|
|
139
|
+
* Supports both legacy and multi format menu items
|
|
140
|
+
* Multi items display as a single menu item with nested handlers
|
|
141
|
+
* @param menuItems - Menu items
|
|
142
|
+
* @returns Menu XML
|
|
143
|
+
*/
|
|
144
|
+
function buildMenuXml(menuItems?: MenuItem[]): string {
|
|
145
|
+
let xml = ' <menu>\n';
|
|
146
|
+
|
|
147
|
+
// Always inject menu display option first
|
|
148
|
+
xml += ` <item cmd="MH or fuzzy match on menu or help">[MH] Redisplay Menu Help</item>\n`;
|
|
149
|
+
xml += ` <item cmd="CH or fuzzy match on chat">[CH] Chat with the Agent about anything</item>\n`;
|
|
150
|
+
|
|
151
|
+
// Add user-defined menu items
|
|
152
|
+
if (menuItems && menuItems.length > 0) {
|
|
153
|
+
for (const item of menuItems) {
|
|
154
|
+
// Handle multi format menu items with nested handlers
|
|
155
|
+
if (isMultiMenuItem(item)) {
|
|
156
|
+
xml += ` <item type="multi">${escapeXml(item.multi)}\n`;
|
|
157
|
+
xml += buildNestedHandlers(item.triggers);
|
|
158
|
+
xml += ` </item>\n`;
|
|
159
|
+
}
|
|
160
|
+
// Handle legacy format menu items
|
|
161
|
+
else if (isLegacyMenuItem(item)) {
|
|
162
|
+
const trigger = item.trigger || '';
|
|
163
|
+
|
|
164
|
+
const attrs = [`cmd="${trigger}"`];
|
|
165
|
+
|
|
166
|
+
// Add handler attributes
|
|
167
|
+
if (item.workflow) attrs.push(`workflow="${item.workflow}"`);
|
|
168
|
+
if (item.exec) attrs.push(`exec="${item.exec}"`);
|
|
169
|
+
if (item.tmpl) attrs.push(`tmpl="${item.tmpl}"`);
|
|
170
|
+
if (item.data) attrs.push(`data="${item.data}"`);
|
|
171
|
+
if (item.action) attrs.push(`action="${item.action}"`);
|
|
172
|
+
|
|
173
|
+
xml += ` <item ${attrs.join(' ')}>${escapeXml(item.description || '')}</item>\n`;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
xml += ` <item cmd="PM or fuzzy match on party-mode" exec="{project-root}/_bmad/core/workflows/party-mode/workflow.md">[PM] Start Party Mode</item>\n`;
|
|
179
|
+
xml += ` <item cmd="DA or fuzzy match on exit, leave, goodbye or dismiss agent">[DA] Dismiss Agent</item>\n`;
|
|
180
|
+
|
|
181
|
+
xml += ' </menu>\n';
|
|
182
|
+
|
|
183
|
+
return xml;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Type guard for MultiMenuItem
|
|
188
|
+
*/
|
|
189
|
+
function isMultiMenuItem(item: MenuItem): item is MultiMenuItem {
|
|
190
|
+
return 'multi' in item && 'triggers' in item && Array.isArray(item.triggers);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Type guard for LegacyMenuItem
|
|
195
|
+
*/
|
|
196
|
+
function isLegacyMenuItem(item: MenuItem): item is LegacyMenuItem {
|
|
197
|
+
return 'trigger' in item;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Build nested handlers for multi format menu items
|
|
202
|
+
* @param triggers - Triggers array from multi format
|
|
203
|
+
* @returns Handler XML
|
|
204
|
+
*/
|
|
205
|
+
function buildNestedHandlers(triggers: Array<Record<string, ExecItem[]>>): string {
|
|
206
|
+
let xml = '';
|
|
207
|
+
|
|
208
|
+
for (const triggerGroup of triggers) {
|
|
209
|
+
for (const [triggerName, execArray] of Object.entries(triggerGroup)) {
|
|
210
|
+
// Build trigger with * prefix
|
|
211
|
+
const trigger = triggerName.startsWith('*') ? triggerName : '*' + triggerName;
|
|
212
|
+
|
|
213
|
+
// Extract the relevant execution data
|
|
214
|
+
const execData = processExecArray(execArray);
|
|
215
|
+
|
|
216
|
+
// For nested handlers in multi items, we use match attribute for fuzzy matching
|
|
217
|
+
const attrs = [`match="${escapeXml(execData.description || '')}"`];
|
|
218
|
+
|
|
219
|
+
// Add handler attributes based on exec data
|
|
220
|
+
if (execData.route) attrs.push(`exec="${execData.route}"`);
|
|
221
|
+
if (execData.workflow) attrs.push(`workflow="${execData.workflow}"`);
|
|
222
|
+
if (execData['validate-workflow']) attrs.push(`validate-workflow="${execData['validate-workflow']}"`);
|
|
223
|
+
if (execData.action) attrs.push(`action="${execData.action}"`);
|
|
224
|
+
if (execData.data) attrs.push(`data="${escapeXml(String(execData.data))}"`);
|
|
225
|
+
if (execData.tmpl) attrs.push(`tmpl="${execData.tmpl}"`);
|
|
226
|
+
// Only add type if it's not 'exec' (exec is already implied by the exec attribute)
|
|
227
|
+
if (execData.type && execData.type !== 'exec') attrs.push(`type="${execData.type}"`);
|
|
228
|
+
|
|
229
|
+
xml += ` <handler ${attrs.join(' ')}></handler>\n`;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return xml;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Process the execution array from multi format triggers
|
|
238
|
+
* Extracts relevant data for XML attributes
|
|
239
|
+
* @param execArray - Array of execution objects
|
|
240
|
+
* @returns Processed execution data
|
|
241
|
+
*/
|
|
242
|
+
function processExecArray(execArray: ExecItem[]): ExecData {
|
|
243
|
+
const result: ExecData = {
|
|
244
|
+
description: '',
|
|
245
|
+
route: null,
|
|
246
|
+
workflow: null,
|
|
247
|
+
data: null,
|
|
248
|
+
action: null,
|
|
249
|
+
type: null,
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
if (!Array.isArray(execArray)) {
|
|
253
|
+
return result;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
for (const exec of execArray) {
|
|
257
|
+
if (exec.input) {
|
|
258
|
+
// Use input as description if no explicit description is provided
|
|
259
|
+
result.description = exec.input;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
if (exec.route) {
|
|
263
|
+
// Determine if it's a workflow or exec based on file extension or context
|
|
264
|
+
if (exec.route.endsWith('.yaml') || exec.route.endsWith('.yml')) {
|
|
265
|
+
result.workflow = exec.route;
|
|
266
|
+
} else {
|
|
267
|
+
result.route = exec.route;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
if (exec.data !== null && exec.data !== undefined) {
|
|
272
|
+
result.data = exec.data;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
if (exec.action) {
|
|
276
|
+
result.action = exec.action;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
if (exec.type) {
|
|
280
|
+
result.type = exec.type;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
return result;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Compile agent YAML to proper XML format
|
|
289
|
+
* @param agentYaml - Parsed and processed agent YAML
|
|
290
|
+
* @param agentName - Final agent name (for ID and frontmatter)
|
|
291
|
+
* @param targetPath - Target path for agent ID
|
|
292
|
+
* @returns Compiled XML string with frontmatter
|
|
293
|
+
*/
|
|
294
|
+
async function compileToXml(agentYaml: AgentYaml, agentName: string = '', targetPath: string = ''): Promise<string> {
|
|
295
|
+
const agent = agentYaml.agent;
|
|
296
|
+
const meta = agent.metadata;
|
|
297
|
+
|
|
298
|
+
let xml = '';
|
|
299
|
+
|
|
300
|
+
// Build frontmatter
|
|
301
|
+
xml += buildFrontmatter(meta, agentName || meta.name || 'agent');
|
|
302
|
+
|
|
303
|
+
// Start code fence
|
|
304
|
+
xml += '```xml\n';
|
|
305
|
+
|
|
306
|
+
// Agent opening tag
|
|
307
|
+
const agentAttrs = [
|
|
308
|
+
`id="${targetPath || meta.id || ''}"`,
|
|
309
|
+
`name="${meta.name || ''}"`,
|
|
310
|
+
`title="${meta.title || ''}"`,
|
|
311
|
+
`icon="${meta.icon || '🤖'}"`,
|
|
312
|
+
];
|
|
313
|
+
|
|
314
|
+
xml += `<agent ${agentAttrs.join(' ')}>\n`;
|
|
315
|
+
|
|
316
|
+
// Activation block - use ActivationBuilder for proper fragment loading
|
|
317
|
+
const activationBuilder = new ActivationBuilder();
|
|
318
|
+
const analyzer = new AgentAnalyzer();
|
|
319
|
+
const profile: AgentProfile = analyzer.analyzeAgentObject(agentYaml);
|
|
320
|
+
xml += await activationBuilder.buildActivation(
|
|
321
|
+
profile,
|
|
322
|
+
meta,
|
|
323
|
+
agent.critical_actions || [],
|
|
324
|
+
false, // forWebBundle - set to false for IDE deployment
|
|
325
|
+
);
|
|
326
|
+
|
|
327
|
+
// Persona section
|
|
328
|
+
xml += buildPersonaXml(agent.persona);
|
|
329
|
+
|
|
330
|
+
// Prompts section (if present)
|
|
331
|
+
if (agent.prompts && agent.prompts.length > 0) {
|
|
332
|
+
xml += buildPromptsXml(agent.prompts);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
// Memories section (if present)
|
|
336
|
+
if (agent.memories && agent.memories.length > 0) {
|
|
337
|
+
xml += buildMemoriesXml(agent.memories);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
// Menu section
|
|
341
|
+
xml += buildMenuXml(agent.menu || []);
|
|
342
|
+
|
|
343
|
+
// Closing agent tag
|
|
344
|
+
xml += '</agent>\n';
|
|
345
|
+
|
|
346
|
+
// Close code fence
|
|
347
|
+
xml += '```\n';
|
|
348
|
+
|
|
349
|
+
return xml;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Full compilation pipeline
|
|
354
|
+
* @param yamlContent - Raw YAML string
|
|
355
|
+
* @param answers - Answers from install_config questions (or defaults)
|
|
356
|
+
* @param agentName - Optional final agent name (user's custom persona name)
|
|
357
|
+
* @param targetPath - Optional target path for agent ID
|
|
358
|
+
* @param options - Additional options including config
|
|
359
|
+
* @returns Compilation result
|
|
360
|
+
*/
|
|
361
|
+
async function compileAgent(
|
|
362
|
+
yamlContent: string,
|
|
363
|
+
answers: TemplateAnswers = {},
|
|
364
|
+
agentName: string = '',
|
|
365
|
+
targetPath: string = '',
|
|
366
|
+
options: CompileOptions = {}
|
|
367
|
+
): Promise<CompileResult> {
|
|
368
|
+
// Parse YAML
|
|
369
|
+
let agentYaml = yaml.parse(yamlContent) as AgentYaml;
|
|
370
|
+
|
|
371
|
+
// Apply customization merges before template processing
|
|
372
|
+
// Handle metadata overrides (like name)
|
|
373
|
+
if (answers.metadata) {
|
|
374
|
+
// Filter out empty values from metadata
|
|
375
|
+
const filteredMetadata = filterCustomizationData(answers.metadata) as Record<string, unknown>;
|
|
376
|
+
if (Object.keys(filteredMetadata).length > 0) {
|
|
377
|
+
agentYaml.agent.metadata = { ...agentYaml.agent.metadata, ...filteredMetadata };
|
|
378
|
+
}
|
|
379
|
+
// Remove from answers so it doesn't get processed as template variables
|
|
380
|
+
const { metadata, ...templateAnswers } = answers;
|
|
381
|
+
answers = templateAnswers;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// Handle other customization properties
|
|
385
|
+
// These should be merged into the agent structure, not processed as template variables
|
|
386
|
+
const customizationKeys: Array<keyof TemplateAnswers> = ['persona', 'critical_actions', 'memories', 'menu', 'prompts'];
|
|
387
|
+
const customizations: Partial<TemplateAnswers> = {};
|
|
388
|
+
const remainingAnswers: TemplateAnswers = { ...answers };
|
|
389
|
+
|
|
390
|
+
for (const key of customizationKeys) {
|
|
391
|
+
if (answers[key]) {
|
|
392
|
+
let filtered: unknown;
|
|
393
|
+
|
|
394
|
+
// Handle different data types
|
|
395
|
+
if (Array.isArray(answers[key])) {
|
|
396
|
+
// For arrays, filter out empty/null/undefined values
|
|
397
|
+
filtered = (answers[key] as unknown[]).filter((item) => item !== null && item !== undefined && item !== '');
|
|
398
|
+
} else {
|
|
399
|
+
// For objects, use filterCustomizationData
|
|
400
|
+
filtered = filterCustomizationData(answers[key] as Record<string, unknown>);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
// Check if we have valid content
|
|
404
|
+
const hasContent = Array.isArray(filtered) ? filtered.length > 0 : Object.keys(filtered as object).length > 0;
|
|
405
|
+
|
|
406
|
+
if (hasContent) {
|
|
407
|
+
customizations[key] = filtered as never;
|
|
408
|
+
}
|
|
409
|
+
delete remainingAnswers[key];
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
// Merge customizations into agentYaml
|
|
414
|
+
if (Object.keys(customizations).length > 0) {
|
|
415
|
+
// For persona: replace entire section
|
|
416
|
+
if (customizations.persona) {
|
|
417
|
+
agentYaml.agent.persona = customizations.persona;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
// For critical_actions: append to existing or create new
|
|
421
|
+
if (customizations.critical_actions) {
|
|
422
|
+
const existing = agentYaml.agent.critical_actions || [];
|
|
423
|
+
agentYaml.agent.critical_actions = [...existing, ...customizations.critical_actions];
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
// For memories: append to existing or create new
|
|
427
|
+
if (customizations.memories) {
|
|
428
|
+
const existing = agentYaml.agent.memories || [];
|
|
429
|
+
agentYaml.agent.memories = [...existing, ...customizations.memories];
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
// For menu: append to existing or create new
|
|
433
|
+
if (customizations.menu) {
|
|
434
|
+
const existing = agentYaml.agent.menu || [];
|
|
435
|
+
agentYaml.agent.menu = [...existing, ...customizations.menu];
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
// For prompts: append to existing or create new (by id)
|
|
439
|
+
if (customizations.prompts) {
|
|
440
|
+
const existing = agentYaml.agent.prompts || [];
|
|
441
|
+
// Merge by id, with customizations taking precedence
|
|
442
|
+
const mergedPrompts = [...existing];
|
|
443
|
+
for (const customPrompt of customizations.prompts) {
|
|
444
|
+
const existingIndex = mergedPrompts.findIndex((p) => p.id === customPrompt.id);
|
|
445
|
+
if (existingIndex === -1) {
|
|
446
|
+
mergedPrompts.push(customPrompt);
|
|
447
|
+
} else {
|
|
448
|
+
mergedPrompts[existingIndex] = customPrompt;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
agentYaml.agent.prompts = mergedPrompts;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
// Use remaining answers for template processing
|
|
456
|
+
answers = remainingAnswers;
|
|
457
|
+
|
|
458
|
+
// Extract install_config
|
|
459
|
+
const installConfig = extractInstallConfig(agentYaml);
|
|
460
|
+
|
|
461
|
+
// Merge defaults with provided answers
|
|
462
|
+
let finalAnswers = answers;
|
|
463
|
+
if (installConfig) {
|
|
464
|
+
const defaults = getDefaultValues(installConfig);
|
|
465
|
+
finalAnswers = { ...defaults, ...answers };
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
// Process templates with answers
|
|
469
|
+
const processedYaml = processAgentYaml(agentYaml, finalAnswers);
|
|
470
|
+
|
|
471
|
+
// Strip install_config from output
|
|
472
|
+
const cleanYaml = stripInstallConfig(processedYaml);
|
|
473
|
+
|
|
474
|
+
const xml = await compileToXml(cleanYaml, agentName, targetPath);
|
|
475
|
+
|
|
476
|
+
// Ensure xml is a string before attempting replaceAll
|
|
477
|
+
if (typeof xml !== 'string') {
|
|
478
|
+
throw new TypeError('compileToXml did not return a string');
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
return {
|
|
482
|
+
xml,
|
|
483
|
+
metadata: cleanYaml.agent.metadata,
|
|
484
|
+
processedYaml: cleanYaml,
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* Filter customization data to remove empty/null values
|
|
490
|
+
* @param data - Raw customization data
|
|
491
|
+
* @returns Filtered customization data
|
|
492
|
+
*/
|
|
493
|
+
function filterCustomizationData(data: Record<string, unknown>): Record<string, unknown> {
|
|
494
|
+
const filtered: Record<string, unknown> = {};
|
|
495
|
+
|
|
496
|
+
for (const [key, value] of Object.entries(data)) {
|
|
497
|
+
if (value === null || value === undefined || value === '') {
|
|
498
|
+
continue; // Skip null/undefined/empty values
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
if (Array.isArray(value)) {
|
|
502
|
+
if (value.length > 0) {
|
|
503
|
+
filtered[key] = value;
|
|
504
|
+
}
|
|
505
|
+
} else if (typeof value === 'object' && value !== null) {
|
|
506
|
+
const nested = filterCustomizationData(value as Record<string, unknown>);
|
|
507
|
+
if (Object.keys(nested).length > 0) {
|
|
508
|
+
filtered[key] = nested;
|
|
509
|
+
}
|
|
510
|
+
} else {
|
|
511
|
+
filtered[key] = value;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
return filtered;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* Compile agent file to .md
|
|
520
|
+
* @param yamlPath - Path to agent YAML file
|
|
521
|
+
* @param options - Compilation options
|
|
522
|
+
* @returns Compilation result
|
|
523
|
+
*/
|
|
524
|
+
async function compileAgentFile(yamlPath: string, options: CompileOptions = {}): Promise<FileCompileResult> {
|
|
525
|
+
const yamlContent = fs.readFileSync(yamlPath, 'utf8');
|
|
526
|
+
const result = await compileAgent(yamlContent, options.answers || {});
|
|
527
|
+
|
|
528
|
+
// Determine output path
|
|
529
|
+
let outputPath = options.outputPath;
|
|
530
|
+
if (!outputPath) {
|
|
531
|
+
// Default: same directory, same name, .md extension
|
|
532
|
+
const dir = path.dirname(yamlPath);
|
|
533
|
+
const basename = path.basename(yamlPath, '.agent.yaml');
|
|
534
|
+
outputPath = path.join(dir, `${basename}.md`);
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
// Write compiled XML
|
|
538
|
+
fs.writeFileSync(outputPath, result.xml, 'utf8');
|
|
539
|
+
|
|
540
|
+
return {
|
|
541
|
+
...result,
|
|
542
|
+
outputPath,
|
|
543
|
+
sourcePath: yamlPath,
|
|
544
|
+
};
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
export {
|
|
548
|
+
compileToXml,
|
|
549
|
+
compileAgent,
|
|
550
|
+
compileAgentFile,
|
|
551
|
+
escapeXml,
|
|
552
|
+
buildFrontmatter,
|
|
553
|
+
buildPersonaXml,
|
|
554
|
+
buildPromptsXml,
|
|
555
|
+
buildMemoriesXml,
|
|
556
|
+
buildMenuXml,
|
|
557
|
+
filterCustomizationData,
|
|
558
|
+
};
|
|
559
|
+
|
|
560
|
+
// Export for backward compatibility
|
|
561
|
+
module.exports = {
|
|
562
|
+
compileToXml,
|
|
563
|
+
compileAgent,
|
|
564
|
+
compileAgentFile,
|
|
565
|
+
escapeXml,
|
|
566
|
+
buildFrontmatter,
|
|
567
|
+
buildPersonaXml,
|
|
568
|
+
buildPromptsXml,
|
|
569
|
+
buildMemoriesXml,
|
|
570
|
+
buildMenuXml,
|
|
571
|
+
filterCustomizationData,
|
|
572
|
+
};
|