bmad-method-quarkus 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/.claude-plugin/marketplace.json +53 -0
- package/AGENTS.md +12 -0
- package/LICENSE +30 -0
- package/README.md +94 -0
- package/README_CN.md +108 -0
- package/README_VN.md +109 -0
- package/bmad-modules.yaml +133 -0
- package/package.json +123 -0
- package/removals.txt +87 -0
- package/src/bmm-skills/agents/bmad-agent-analyst/SKILL.md +76 -0
- package/src/bmm-skills/agents/bmad-agent-analyst/customize.toml +105 -0
- package/src/bmm-skills/agents/bmad-agent-architect/SKILL.md +76 -0
- package/src/bmm-skills/agents/bmad-agent-architect/customize.toml +65 -0
- package/src/bmm-skills/agents/bmad-agent-dev/SKILL.md +76 -0
- package/src/bmm-skills/agents/bmad-agent-dev/customize.toml +83 -0
- package/src/bmm-skills/agents/bmad-agent-pm/SKILL.md +76 -0
- package/src/bmm-skills/agents/bmad-agent-pm/customize.toml +75 -0
- package/src/bmm-skills/agents/bmad-agent-ux-designer/SKILL.md +76 -0
- package/src/bmm-skills/agents/bmad-agent-ux-designer/customize.toml +60 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/.memlog.md +12 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/.memlog.md:Zone.Identifier +0 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/SKILL.md +86 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/SKILL.md:Zone.Identifier +0 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/customize.toml +37 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/customize.toml:Zone.Identifier +0 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/references/enrich-stories.md +19 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/references/enrich-stories.md:Zone.Identifier +0 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/references/prompt-quality-canon.md +79 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/references/prompt-quality-canon.md:Zone.Identifier +0 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/bqa-setup/SKILL.md +80 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/bqa-setup/SKILL.md:Zone.Identifier +0 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/bqa-setup/assets/module-help.csv +9 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/bqa-setup/assets/module-help.csv:Zone.Identifier +0 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/bqa-setup/assets/module.yaml +16 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/bqa-setup/assets/module.yaml:Zone.Identifier +0 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/bqa-setup/scripts/cleanup-legacy.py +287 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/bqa-setup/scripts/cleanup-legacy.py:Zone.Identifier +0 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/bqa-setup/scripts/merge-config.py +441 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/bqa-setup/scripts/merge-config.py:Zone.Identifier +0 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/bqa-setup/scripts/merge-help-csv.py +246 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/bqa-setup/scripts/merge-help-csv.py:Zone.Identifier +0 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/quarkus-error-handling-i18n/SKILL.md +181 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/quarkus-error-handling-i18n/SKILL.md:Zone.Identifier +0 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/quarkus-grpc-services/SKILL.md +141 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/quarkus-grpc-services/SKILL.md:Zone.Identifier +0 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/quarkus-hexagonal-core/SKILL.md +392 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/quarkus-hexagonal-core/SKILL.md:Zone.Identifier +0 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/quarkus-kafka-messaging/SKILL.md +148 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/quarkus-kafka-messaging/SKILL.md:Zone.Identifier +0 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/quarkus-observability-otel/SKILL.md +180 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/quarkus-observability-otel/SKILL.md:Zone.Identifier +0 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/quarkus-openapi-tmforum/SKILL.md +128 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/quarkus-openapi-tmforum/SKILL.md:Zone.Identifier +0 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/quarkus-sql-jdbc-agroal/SKILL.md +245 -0
- package/src/bmm-skills/agents/bmad-quarkus-architect/skills/quarkus-sql-jdbc-agroal/SKILL.md:Zone.Identifier +0 -0
- package/src/bmm-skills/module-help.csv +19 -0
- package/src/bmm-skills/module.yaml +92 -0
- package/src/bmm-skills/plan/bmad-architecture/SKILL.md +85 -0
- package/src/bmm-skills/plan/bmad-architecture/assets/spine-template.md +79 -0
- package/src/bmm-skills/plan/bmad-architecture/customize.toml +102 -0
- package/src/bmm-skills/plan/bmad-architecture/references/headless.md +26 -0
- package/src/bmm-skills/plan/bmad-architecture/references/reviewer-gate.md +13 -0
- package/src/bmm-skills/plan/bmad-architecture/scripts/lint_spine.py +257 -0
- package/src/bmm-skills/plan/bmad-architecture/scripts/tests/test_lint_spine.py +270 -0
- package/src/bmm-skills/plan/bmad-create-epics-and-stories/SKILL.md +93 -0
- package/src/bmm-skills/plan/bmad-create-epics-and-stories/customize.toml +41 -0
- package/src/bmm-skills/plan/bmad-create-epics-and-stories/steps/step-01-validate-prerequisites.md +263 -0
- package/src/bmm-skills/plan/bmad-create-epics-and-stories/steps/step-02-design-epics.md +242 -0
- package/src/bmm-skills/plan/bmad-create-epics-and-stories/steps/step-03-create-stories.md +255 -0
- package/src/bmm-skills/plan/bmad-create-epics-and-stories/steps/step-04-final-validation.md +143 -0
- package/src/bmm-skills/plan/bmad-create-epics-and-stories/templates/epics-template.md +61 -0
- package/src/bmm-skills/plan/bmad-generate-project-context/SKILL.md +10 -0
- package/src/bmm-skills/plan/bmad-prd/SKILL.md +94 -0
- package/src/bmm-skills/plan/bmad-prd/assets/headless-schemas.md +76 -0
- package/src/bmm-skills/plan/bmad-prd/assets/prd-template.md +165 -0
- package/src/bmm-skills/plan/bmad-prd/assets/prd-validation-checklist.md +135 -0
- package/src/bmm-skills/plan/bmad-prd/assets/validation-report-template.html +325 -0
- package/src/bmm-skills/plan/bmad-prd/customize.toml +149 -0
- package/src/bmm-skills/plan/bmad-prd/references/headless.md +39 -0
- package/src/bmm-skills/plan/bmad-prd/references/validate.md +97 -0
- package/src/bmm-skills/plan/bmad-prfaq/SKILL.md +135 -0
- package/src/bmm-skills/plan/bmad-prfaq/agents/artifact-analyzer.md +60 -0
- package/src/bmm-skills/plan/bmad-prfaq/agents/web-researcher.md +49 -0
- package/src/bmm-skills/plan/bmad-prfaq/assets/prfaq-template.md +62 -0
- package/src/bmm-skills/plan/bmad-prfaq/bmad-manifest.json +16 -0
- package/src/bmm-skills/plan/bmad-prfaq/customize.toml +41 -0
- package/src/bmm-skills/plan/bmad-prfaq/references/customer-faq.md +55 -0
- package/src/bmm-skills/plan/bmad-prfaq/references/internal-faq.md +51 -0
- package/src/bmm-skills/plan/bmad-prfaq/references/press-release.md +60 -0
- package/src/bmm-skills/plan/bmad-prfaq/references/verdict.md +83 -0
- package/src/bmm-skills/plan/bmad-product-brief/SKILL.md +91 -0
- package/src/bmm-skills/plan/bmad-product-brief/assets/brief-template.md +41 -0
- package/src/bmm-skills/plan/bmad-product-brief/customize.toml +101 -0
- package/src/bmm-skills/plan/bmad-project-context/SKILL.md +110 -0
- package/src/bmm-skills/plan/bmad-project-context/customize.toml +24 -0
- package/src/bmm-skills/plan/bmad-project-context/references/best-practices.md +65 -0
- package/src/bmm-skills/plan/bmad-project-context/references/template.md +55 -0
- package/src/bmm-skills/plan/bmad-spec/SKILL.md +160 -0
- package/src/bmm-skills/plan/bmad-spec/assets/headless-schemas.md +33 -0
- package/src/bmm-skills/plan/bmad-spec/assets/spec-template.md +49 -0
- package/src/bmm-skills/plan/bmad-spec/assets/stories-schema.md +44 -0
- package/src/bmm-skills/plan/bmad-spec/customize.toml +52 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/SKILL.md +62 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/customize.toml +41 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/references/fix-sprint-status.md +30 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/references/generate-tracking.md +25 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/references/readiness-gate.md +20 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/references/status-view.md +14 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/references/validate.md +10 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/scripts/__pycache__/sprint_plan.cpython-311.pyc +0 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/scripts/sprint_plan.py +697 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/scripts/tests/__pycache__/test_sprint_plan.cpython-311-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/scripts/tests/test_sprint_plan.py +524 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/sprint-status-template.yaml +71 -0
- package/src/bmm-skills/plan/bmad-ux/SKILL.md +90 -0
- package/src/bmm-skills/plan/bmad-ux/assets/color-themes.md +9 -0
- package/src/bmm-skills/plan/bmad-ux/assets/design-directions.md +9 -0
- package/src/bmm-skills/plan/bmad-ux/assets/design-example-editorial.md +158 -0
- package/src/bmm-skills/plan/bmad-ux/assets/design-example-mobile.md +93 -0
- package/src/bmm-skills/plan/bmad-ux/assets/design-example-shadcn.md +109 -0
- package/src/bmm-skills/plan/bmad-ux/assets/excalidraw-wireframe.md +19 -0
- package/src/bmm-skills/plan/bmad-ux/assets/experience-example-mobile.md +112 -0
- package/src/bmm-skills/plan/bmad-ux/assets/experience-example-shadcn.md +133 -0
- package/src/bmm-skills/plan/bmad-ux/assets/headless-schemas.md +84 -0
- package/src/bmm-skills/plan/bmad-ux/assets/key-screens.md +29 -0
- package/src/bmm-skills/plan/bmad-ux/assets/validation-report-template.html +319 -0
- package/src/bmm-skills/plan/bmad-ux/customize.toml +102 -0
- package/src/bmm-skills/plan/bmad-ux/references/creative-tools.md +19 -0
- package/src/bmm-skills/plan/bmad-ux/references/design-md-spec.md +50 -0
- package/src/bmm-skills/plan/bmad-ux/references/headless.md +37 -0
- package/src/bmm-skills/plan/bmad-ux/references/validate.md +115 -0
- package/src/bmm-skills/ship/bmad-build/SKILL.md +13 -0
- package/src/bmm-skills/ship/bmad-build/compile-epic-context.md +62 -0
- package/src/bmm-skills/ship/bmad-build/customize.toml +164 -0
- package/src/bmm-skills/ship/bmad-build/references/deletion-check.md +14 -0
- package/src/bmm-skills/ship/bmad-build/review-prompts/edge-case-hunter.md +88 -0
- package/src/bmm-skills/ship/bmad-build/review-prompts/verification-gap.md +113 -0
- package/src/bmm-skills/ship/bmad-build/spec-template.md +89 -0
- package/src/bmm-skills/ship/bmad-build/step-01-clarify-and-route.md +105 -0
- package/src/bmm-skills/ship/bmad-build/step-02-plan.md +47 -0
- package/src/bmm-skills/ship/bmad-build/step-03-implement.md +49 -0
- package/src/bmm-skills/ship/bmad-build/step-04-review.md +55 -0
- package/src/bmm-skills/ship/bmad-build/step-05-present.md +75 -0
- package/src/bmm-skills/ship/bmad-build/step-oneshot.md +77 -0
- package/src/bmm-skills/ship/bmad-build/sync-sprint-status.md +19 -0
- package/src/bmm-skills/ship/bmad-build/workflow.md +84 -0
- package/src/bmm-skills/ship/bmad-build-auto/SKILL.md +13 -0
- package/src/bmm-skills/ship/bmad-build-auto/compile-epic-context.md +62 -0
- package/src/bmm-skills/ship/bmad-build-auto/customize.toml +121 -0
- package/src/bmm-skills/ship/bmad-build-auto/references/deletion-check.md +14 -0
- package/src/bmm-skills/ship/bmad-build-auto/review-prompts/edge-case-hunter.md +88 -0
- package/src/bmm-skills/ship/bmad-build-auto/review-prompts/verification-gap.md +113 -0
- package/src/bmm-skills/ship/bmad-build-auto/spec-template.md +99 -0
- package/src/bmm-skills/ship/bmad-build-auto/step-01-clarify-and-route.md +83 -0
- package/src/bmm-skills/ship/bmad-build-auto/step-02-plan.md +27 -0
- package/src/bmm-skills/ship/bmad-build-auto/step-03-implement.md +44 -0
- package/src/bmm-skills/ship/bmad-build-auto/step-04-review.md +96 -0
- package/src/bmm-skills/ship/bmad-build-auto/workflow.md +104 -0
- package/src/bmm-skills/ship/bmad-checkpoint-preview/SKILL.md +68 -0
- package/src/bmm-skills/ship/bmad-checkpoint-preview/customize.toml +41 -0
- package/src/bmm-skills/ship/bmad-checkpoint-preview/generate-trail.md +38 -0
- package/src/bmm-skills/ship/bmad-checkpoint-preview/step-01-orientation.md +105 -0
- package/src/bmm-skills/ship/bmad-checkpoint-preview/step-02-walkthrough.md +89 -0
- package/src/bmm-skills/ship/bmad-checkpoint-preview/step-03-detail-pass.md +106 -0
- package/src/bmm-skills/ship/bmad-checkpoint-preview/step-04-testing.md +74 -0
- package/src/bmm-skills/ship/bmad-checkpoint-preview/step-05-wrapup.md +30 -0
- package/src/bmm-skills/ship/bmad-code-review/SKILL.md +90 -0
- package/src/bmm-skills/ship/bmad-code-review/customize.toml +113 -0
- package/src/bmm-skills/ship/bmad-code-review/references/deletion-check.md +14 -0
- package/src/bmm-skills/ship/bmad-code-review/review-prompts/edge-case-hunter.md +88 -0
- package/src/bmm-skills/ship/bmad-code-review/review-prompts/verification-gap.md +113 -0
- package/src/bmm-skills/ship/bmad-code-review/steps/step-01-gather-context.md +87 -0
- package/src/bmm-skills/ship/bmad-code-review/steps/step-02-review.md +32 -0
- package/src/bmm-skills/ship/bmad-code-review/steps/step-03-triage.md +50 -0
- package/src/bmm-skills/ship/bmad-code-review/steps/step-04-present.md +132 -0
- package/src/bmm-skills/ship/bmad-correct-course/SKILL.md +300 -0
- package/src/bmm-skills/ship/bmad-correct-course/checklist.md +288 -0
- package/src/bmm-skills/ship/bmad-correct-course/customize.toml +41 -0
- package/src/bmm-skills/ship/bmad-qa-generate-e2e-tests/SKILL.md +176 -0
- package/src/bmm-skills/ship/bmad-qa-generate-e2e-tests/checklist.md +33 -0
- package/src/bmm-skills/ship/bmad-qa-generate-e2e-tests/customize.toml +41 -0
- package/src/bmm-skills/ship/bmad-retrospective/SKILL.md +94 -0
- package/src/bmm-skills/ship/bmad-retrospective/customize.toml +41 -0
- package/src/bmm-skills/ship/bmad-retrospective/references/acceptance-verdict.md +55 -0
- package/src/bmm-skills/ship/bmad-retrospective/references/aggregate-views.md +17 -0
- package/src/bmm-skills/ship/bmad-retrospective/references/evidence-gathering.md +30 -0
- package/src/bmm-skills/ship/bmad-retrospective/references/retro-document.md +84 -0
- package/src/bmm-skills/ship/bmad-retrospective/references/team-discussion.md +22 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/__pycache__/sprint_status.cpython-311.pyc +0 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/git_evidence.py +304 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/sprint_status.py +746 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/__pycache__/test_git_evidence.cpython-311-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/__pycache__/test_sprint_status.cpython-311-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/fixtures/sprint-status-template.yaml +71 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/test_git_evidence.py +750 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/test_sprint_status.py +1579 -0
- package/src/bmm-skills/v6-shims/README.md +28 -0
- package/src/bmm-skills/v6-shims/bmad-create-architecture/SKILL.md +30 -0
- package/src/bmm-skills/v6-shims/bmad-create-architecture/customize.toml +41 -0
- package/src/bmm-skills/v6-shims/bmad-create-prd/SKILL.md +30 -0
- package/src/bmm-skills/v6-shims/bmad-create-prd/customize.toml +41 -0
- package/src/bmm-skills/v6-shims/bmad-create-story/SKILL.md +434 -0
- package/src/bmm-skills/v6-shims/bmad-create-story/checklist.md +357 -0
- package/src/bmm-skills/v6-shims/bmad-create-story/customize.toml +41 -0
- package/src/bmm-skills/v6-shims/bmad-create-story/discover-inputs.md +88 -0
- package/src/bmm-skills/v6-shims/bmad-create-story/template.md +49 -0
- package/src/bmm-skills/v6-shims/bmad-dev-auto/SKILL.md +19 -0
- package/src/bmm-skills/v6-shims/bmad-dev-story/SKILL.md +502 -0
- package/src/bmm-skills/v6-shims/bmad-dev-story/checklist.md +80 -0
- package/src/bmm-skills/v6-shims/bmad-dev-story/customize.toml +44 -0
- package/src/bmm-skills/v6-shims/bmad-document-project/SKILL.md +14 -0
- package/src/bmm-skills/v6-shims/bmad-domain-research/SKILL.md +14 -0
- package/src/bmm-skills/v6-shims/bmad-edit-prd/SKILL.md +30 -0
- package/src/bmm-skills/v6-shims/bmad-edit-prd/customize.toml +42 -0
- package/src/bmm-skills/v6-shims/bmad-market-research/SKILL.md +14 -0
- package/src/bmm-skills/v6-shims/bmad-quick-dev/SKILL.md +19 -0
- package/src/bmm-skills/v6-shims/bmad-sprint-status/SKILL.md +26 -0
- package/src/bmm-skills/v6-shims/bmad-sprint-status/customize.toml +41 -0
- package/src/bmm-skills/v6-shims/bmad-technical-research/SKILL.md +14 -0
- package/src/bmm-skills/v6-shims/bmad-validate-prd/SKILL.md +30 -0
- package/src/bmm-skills/v6-shims/bmad-validate-prd/customize.toml +42 -0
- package/src/core-skills/bmad-advanced-elicitation/SKILL.md +65 -0
- package/src/core-skills/bmad-advanced-elicitation/assets/methods.csv +72 -0
- package/src/core-skills/bmad-advanced-elicitation/customize.toml +54 -0
- package/src/core-skills/bmad-advanced-elicitation/scripts/pick_methods.py +233 -0
- package/src/core-skills/bmad-advanced-elicitation/scripts/tests/test_pick_methods.py +228 -0
- package/src/core-skills/bmad-brainstorming/SKILL.md +80 -0
- package/src/core-skills/bmad-brainstorming/assets/brain-icons.json +166 -0
- package/src/core-skills/bmad-brainstorming/assets/brain-methods.csv +109 -0
- package/src/core-skills/bmad-brainstorming/assets/brain-selector.html +328 -0
- package/src/core-skills/bmad-brainstorming/customize.toml +84 -0
- package/src/core-skills/bmad-brainstorming/references/converge.md +24 -0
- package/src/core-skills/bmad-brainstorming/references/finalize.md +26 -0
- package/src/core-skills/bmad-brainstorming/references/headless.md +54 -0
- package/src/core-skills/bmad-brainstorming/references/in-chat-techniques.md +18 -0
- package/src/core-skills/bmad-brainstorming/references/mode-autonomous.md +10 -0
- package/src/core-skills/bmad-brainstorming/references/mode-facilitator.md +11 -0
- package/src/core-skills/bmad-brainstorming/references/mode-partner.md +16 -0
- package/src/core-skills/bmad-brainstorming/references/resume.md +5 -0
- package/src/core-skills/bmad-brainstorming/scripts/brain.py +770 -0
- package/src/core-skills/bmad-brainstorming/scripts/tests/test_brain.py +239 -0
- package/src/core-skills/bmad-customize/SKILL.md +111 -0
- package/src/core-skills/bmad-customize/scripts/list_customizable_skills.py +231 -0
- package/src/core-skills/bmad-customize/scripts/tests/test_list_customizable_skills.py +249 -0
- package/src/core-skills/bmad-deep-recon/SKILL.md +82 -0
- package/src/core-skills/bmad-deep-recon/assets/research.template.md +18 -0
- package/src/core-skills/bmad-deep-recon/customize.toml +212 -0
- package/src/core-skills/bmad-deep-recon/references/draft.md +8 -0
- package/src/core-skills/bmad-deep-recon/references/finalize.md +11 -0
- package/src/core-skills/bmad-deep-recon/references/html-briefing.md +16 -0
- package/src/core-skills/bmad-deep-recon/references/lifecycle.md +11 -0
- package/src/core-skills/bmad-deep-recon/references/process.md +10 -0
- package/src/core-skills/bmad-deep-recon/references/run.md +73 -0
- package/src/core-skills/bmad-deep-recon/references/selection.md +13 -0
- package/src/core-skills/bmad-deep-recon/references/synthesis.md +16 -0
- package/src/core-skills/bmad-deep-recon/references/verification.md +29 -0
- package/src/core-skills/bmad-deep-recon/scripts/recon_kit.py +322 -0
- package/src/core-skills/bmad-deep-recon/scripts/tests/test_recon_kit.py +144 -0
- package/src/core-skills/bmad-deep-recon/types/academic-lit.md +19 -0
- package/src/core-skills/bmad-deep-recon/types/competitive.md +19 -0
- package/src/core-skills/bmad-deep-recon/types/domain.md +19 -0
- package/src/core-skills/bmad-deep-recon/types/market.md +19 -0
- package/src/core-skills/bmad-deep-recon/types/technical.md +19 -0
- package/src/core-skills/bmad-deep-recon/types/user-voice.md +19 -0
- package/src/core-skills/bmad-forge-idea/SKILL.md +107 -0
- package/src/core-skills/bmad-forge-idea/customize.toml +42 -0
- package/src/core-skills/bmad-forge-idea/scripts/resolve_personas.py +275 -0
- package/src/core-skills/bmad-forge-idea/scripts/tests/test_resolve_personas.py +138 -0
- package/src/core-skills/bmad-help/SKILL.md +75 -0
- package/src/core-skills/bmad-party-mode/SKILL.md +60 -0
- package/src/core-skills/bmad-party-mode/customize.toml +211 -0
- package/src/core-skills/bmad-party-mode/references/create-party.md +70 -0
- package/src/core-skills/bmad-party-mode/references/mode-agent-team.md +13 -0
- package/src/core-skills/bmad-party-mode/references/mode-auto.md +13 -0
- package/src/core-skills/bmad-party-mode/references/mode-subagent.md +31 -0
- package/src/core-skills/bmad-party-mode/references/party-memory.md +51 -0
- package/src/core-skills/bmad-party-mode/scripts/resolve_party.py +282 -0
- package/src/core-skills/bmad-party-mode/scripts/tests/test_resolve_party.py +146 -0
- package/src/core-skills/bmad-review/SKILL.md +49 -0
- package/src/core-skills/bmad-review/customize.toml +141 -0
- package/src/core-skills/bmad-review/references/editorial-common.md +56 -0
- package/src/core-skills/bmad-review/references/lens-adversarial.md +19 -0
- package/src/core-skills/bmad-review/references/lens-edge-case-hunter.md +54 -0
- package/src/core-skills/bmad-review/references/lens-prose.md +7 -0
- package/src/core-skills/bmad-review/references/lens-structure.md +9 -0
- package/src/core-skills/bmad-review/references/lens-verification-gap.md +92 -0
- package/src/core-skills/bmad-review/references/structure-models.md +44 -0
- package/src/core-skills/bmad-review/scripts/tests/test_word_metrics.py +62 -0
- package/src/core-skills/bmad-review/scripts/word_metrics.py +102 -0
- package/src/core-skills/module-help.csv +10 -0
- package/src/core-skills/module.yaml +38 -0
- package/src/core-skills/v6-shims/README.md +25 -0
- package/src/core-skills/v6-shims/bmad-editorial-review/SKILL.md +6 -0
- package/src/core-skills/v6-shims/bmad-editorial-review/customize.toml +31 -0
- package/src/core-skills/v6-shims/bmad-editorial-review-prose/SKILL.md +6 -0
- package/src/core-skills/v6-shims/bmad-editorial-review-structure/SKILL.md +6 -0
- package/src/core-skills/v6-shims/bmad-review-adversarial-general/SKILL.md +6 -0
- package/src/core-skills/v6-shims/bmad-review-edge-case-hunter/SKILL.md +6 -0
- package/src/core-skills/v6-shims/bmad-review-verification-gap/SKILL.md +6 -0
- package/src/scripts/__pycache__/config_utils.cpython-311.pyc +0 -0
- package/src/scripts/config_utils.py +119 -0
- package/src/scripts/memlog.py +224 -0
- package/src/scripts/render_skill.py +401 -0
- package/src/scripts/resolve_config.py +74 -0
- package/src/scripts/resolve_customization.py +99 -0
- package/src/scripts/tests/__pycache__/test_config_utils.cpython-311.pyc +0 -0
- package/src/scripts/tests/__pycache__/test_resolve_config.cpython-311.pyc +0 -0
- package/src/scripts/tests/__pycache__/test_resolve_customization.cpython-311.pyc +0 -0
- package/src/scripts/tests/test_config_utils.py +85 -0
- package/src/scripts/tests/test_memlog.py +306 -0
- package/src/scripts/tests/test_resolve_config.py +89 -0
- package/src/scripts/tests/test_resolve_customization.py +77 -0
- package/tools/bundle-web-bundles.js +117 -0
- package/tools/format-workflow-md.js +263 -0
- package/tools/installer/README.md +60 -0
- package/tools/installer/bmad-cli.js +105 -0
- package/tools/installer/cli-utils.js +57 -0
- package/tools/installer/commands/install.js +149 -0
- package/tools/installer/commands/status.js +65 -0
- package/tools/installer/commands/uninstall.js +167 -0
- package/tools/installer/core/config.js +73 -0
- package/tools/installer/core/existing-install.js +121 -0
- package/tools/installer/core/install-paths.js +132 -0
- package/tools/installer/core/installer.js +1767 -0
- package/tools/installer/core/legacy-warnings.js +151 -0
- package/tools/installer/core/manifest-generator.js +859 -0
- package/tools/installer/core/manifest.js +433 -0
- package/tools/installer/core/uv-check.js +195 -0
- package/tools/installer/core/wsl-node-check.js +109 -0
- package/tools/installer/file-ops.js +204 -0
- package/tools/installer/fs-native.js +116 -0
- package/tools/installer/ide/_config-driven.js +972 -0
- package/tools/installer/ide/manager.js +324 -0
- package/tools/installer/ide/platform-codes.js +80 -0
- package/tools/installer/ide/platform-codes.yaml +343 -0
- package/tools/installer/ide/shared/installed-skills.js +50 -0
- package/tools/installer/ide/shared/path-utils.js +219 -0
- package/tools/installer/ide/shared/skill-manifest.js +57 -0
- package/tools/installer/install-messages.yaml +37 -0
- package/tools/installer/list-options.js +210 -0
- package/tools/installer/message-loader.js +83 -0
- package/tools/installer/modules/channel-plan.js +203 -0
- package/tools/installer/modules/channel-resolver.js +241 -0
- package/tools/installer/modules/custom-module-manager.js +924 -0
- package/tools/installer/modules/external-manager.js +671 -0
- package/tools/installer/modules/git-env.js +47 -0
- package/tools/installer/modules/module-help-schema.js +13 -0
- package/tools/installer/modules/official-modules.js +2257 -0
- package/tools/installer/modules/plugin-resolver.js +398 -0
- package/tools/installer/modules/version-resolver.js +336 -0
- package/tools/installer/project-root.js +224 -0
- package/tools/installer/prompts.js +791 -0
- package/tools/installer/set-overrides.js +330 -0
- package/tools/installer/ui.js +2167 -0
- package/tools/installer/yaml-format.js +245 -0
- package/tools/javascript-conventions.md +5 -0
- package/tools/migrate-custom-module-paths.js +124 -0
- package/tools/skill-validator.md +378 -0
- package/tools/validate-published-implementation-model.mjs +68 -0
- package/tools/validate-sidebar-order.js +388 -0
- package/tools/validate-skills.js +735 -0
- package/tools/validate-svg-changes.sh +356 -0
- package/web-bundles/README.md +46 -0
- package/web-bundles/brainstorming-coach/INSTRUCTIONS.md +86 -0
- package/web-bundles/brainstorming-coach/SKILL.md +83 -0
- package/web-bundles/brainstorming-coach/brain-methods.csv +62 -0
- package/web-bundles/bundles.json +139 -0
- package/web-bundles/market-and-industry-research/INSTRUCTIONS.md +88 -0
- package/web-bundles/market-and-industry-research/SKILL.md +59 -0
- package/web-bundles/prd-coach/INSTRUCTIONS.md +86 -0
- package/web-bundles/prd-coach/SKILL.md +101 -0
- package/web-bundles/prd-coach/prd-template.md +165 -0
- package/web-bundles/prd-coach/prd-validation-checklist.md +135 -0
- package/web-bundles/prfaq-coach/INSTRUCTIONS.md +86 -0
- package/web-bundles/prfaq-coach/SKILL.md +139 -0
- package/web-bundles/product-brief-coach/INSTRUCTIONS.md +86 -0
- package/web-bundles/product-brief-coach/SKILL.md +113 -0
- package/web-bundles/ux-coach/INSTRUCTIONS.md +92 -0
- package/web-bundles/ux-coach/SKILL.md +187 -0
- package/web-bundles/ux-coach/ux-validation.md +100 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
# /// script
|
|
2
|
+
# requires-python = ">=3.10"
|
|
3
|
+
# ///
|
|
4
|
+
"""Measure git commit and file-change evidence over a revision range.
|
|
5
|
+
|
|
6
|
+
Prints ONLY JSON to stdout. Errors are emitted as JSON to stdout with a
|
|
7
|
+
non-zero exit code: 2 for invalid arguments (rejected before git runs),
|
|
8
|
+
1 for git or I/O failures. This script only MEASURES — it never judges
|
|
9
|
+
acceleration or violations. The model interprets the numbers.
|
|
10
|
+
|
|
11
|
+
Two git passes. The first lists every commit in the range (merges included)
|
|
12
|
+
and sums the per-file churn of the non-merge commits, which is what `files`
|
|
13
|
+
reports. The second runs only when the range contains merges and measures
|
|
14
|
+
those merges alone, reported separately as `merge_files` — never folded into
|
|
15
|
+
`files`, because a merge's diff against its first parent restates the churn
|
|
16
|
+
of the commits it merged in, which the first pass already counted.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
import argparse
|
|
20
|
+
import json
|
|
21
|
+
import os
|
|
22
|
+
import re
|
|
23
|
+
import subprocess
|
|
24
|
+
import sys
|
|
25
|
+
|
|
26
|
+
UNIT_SEP = "\x1f"
|
|
27
|
+
# sha, space-separated parents (empty for a root commit), subject.
|
|
28
|
+
LOG_FORMAT = f"--format=%H{UNIT_SEP}%P{UNIT_SEP}%s"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _emit(obj, code=0):
|
|
32
|
+
sys.stdout.write(json.dumps(obj))
|
|
33
|
+
sys.exit(code)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class JsonArgumentParser(argparse.ArgumentParser):
|
|
37
|
+
"""Emit argparse failures on the JSON-only stdout contract, not usage text.
|
|
38
|
+
|
|
39
|
+
The parser is constructed with ``add_help=False``. The override below covers
|
|
40
|
+
``error()``, but ``-h`` never reaches it: the built-in help action calls
|
|
41
|
+
``print_help()`` and ``exit(0)`` directly, which would put plain usage text
|
|
42
|
+
on stdout with a zero exit and break the JSON-only contract. Removing the
|
|
43
|
+
action instead of intercepting it routes ``-h`` through the already-tested
|
|
44
|
+
``error()`` path as an ordinary unrecognized argument. The cost is that the
|
|
45
|
+
``help=`` strings are unreachable from the CLI; the skill's references carry
|
|
46
|
+
the usage a human needs.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
def error(self, message):
|
|
50
|
+
_emit({"ok": False, "error": f"argument error: {message}"}, 2)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _parse_numstat_line(line):
|
|
54
|
+
# numstat lines: "<added>\t<deleted>\t<path>"; binary files use "-".
|
|
55
|
+
parts = line.split("\t")
|
|
56
|
+
if len(parts) < 3:
|
|
57
|
+
return None
|
|
58
|
+
added_raw, deleted_raw, path = parts[0], parts[1], "\t".join(parts[2:])
|
|
59
|
+
added = None if added_raw == "-" else int(added_raw)
|
|
60
|
+
deleted = None if deleted_raw == "-" else int(deleted_raw)
|
|
61
|
+
return added, deleted, path
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _git_log(repo, extra_args, rng):
|
|
65
|
+
"""Run one `git log --numstat` pass over `rng` and return its stdout.
|
|
66
|
+
|
|
67
|
+
`core.quotePath=false` keeps non-ASCII paths as real UTF-8 strings instead
|
|
68
|
+
of octal escapes, and `--no-renames` makes a rename an honest delete + add
|
|
69
|
+
instead of an unopenable "src/{a => b}" pseudo-path that splits one file's
|
|
70
|
+
churn across several keys. Both matter for every pass, so both live here.
|
|
71
|
+
|
|
72
|
+
`log.diffMerges=separate` is pinned on the command line because it is what
|
|
73
|
+
`-m` means: a user or repo config setting it to `off` makes pass 2 emit no
|
|
74
|
+
file rows at all, so `merge_files` would come back empty beside a non-zero
|
|
75
|
+
`merges_measured` and read as "the merges changed nothing".
|
|
76
|
+
"""
|
|
77
|
+
cmd = [
|
|
78
|
+
"git",
|
|
79
|
+
"-c",
|
|
80
|
+
"core.quotePath=false",
|
|
81
|
+
"-c",
|
|
82
|
+
"log.diffMerges=separate",
|
|
83
|
+
"-C",
|
|
84
|
+
repo,
|
|
85
|
+
"log",
|
|
86
|
+
"--numstat",
|
|
87
|
+
"--no-renames",
|
|
88
|
+
*extra_args,
|
|
89
|
+
LOG_FORMAT,
|
|
90
|
+
rng,
|
|
91
|
+
"--", # terminate rev parsing so the range can never match a pathspec
|
|
92
|
+
]
|
|
93
|
+
try:
|
|
94
|
+
# Decode explicitly: git emits UTF-8 path bytes regardless of the
|
|
95
|
+
# caller's locale, and a C locale would otherwise decode them as ASCII.
|
|
96
|
+
# surrogateescape, not replace: replace maps every invalid byte to the
|
|
97
|
+
# same U+FFFD, so two distinct non-UTF-8 paths would collapse into one
|
|
98
|
+
# `files` key with their churn silently summed. Lone surrogates survive
|
|
99
|
+
# json.dumps (escaped as \udcXX under ensure_ascii) and json.loads.
|
|
100
|
+
proc = subprocess.run(
|
|
101
|
+
cmd,
|
|
102
|
+
capture_output=True,
|
|
103
|
+
text=True,
|
|
104
|
+
encoding="utf-8",
|
|
105
|
+
errors="surrogateescape",
|
|
106
|
+
env={k: v for k, v in os.environ.items() if not k.startswith("GIT_")},
|
|
107
|
+
)
|
|
108
|
+
except Exception as exc: # noqa: BLE001
|
|
109
|
+
_emit({"ok": False, "error": str(exc)}, 1)
|
|
110
|
+
|
|
111
|
+
if proc.returncode != 0:
|
|
112
|
+
# stderr can be empty (a signal kill, a quiet failure); the exit code is
|
|
113
|
+
# then the only thing left to report, so never emit an empty error.
|
|
114
|
+
_emit(
|
|
115
|
+
{
|
|
116
|
+
"ok": False,
|
|
117
|
+
"error": proc.stderr.strip() or f"git exited {proc.returncode}",
|
|
118
|
+
},
|
|
119
|
+
1,
|
|
120
|
+
)
|
|
121
|
+
return proc.stdout
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def _parse_log(output, stories):
|
|
125
|
+
"""Turn one pass's log output into (commits, files_map). Shared by both."""
|
|
126
|
+
commits = []
|
|
127
|
+
files = {} # path -> {path, _added, _deleted, binary_revisions, commit_count}
|
|
128
|
+
seen = set()
|
|
129
|
+
counting = True
|
|
130
|
+
|
|
131
|
+
for raw in output.splitlines():
|
|
132
|
+
if UNIT_SEP in raw:
|
|
133
|
+
sha, parents, subject = raw.split(UNIT_SEP, 2)
|
|
134
|
+
# Under -m, git repeats a merge's header once per parent unless it
|
|
135
|
+
# also honours --first-parent (git 2.31+). Count only the first
|
|
136
|
+
# block for a sha — git emits parents in order, so that block is
|
|
137
|
+
# the first-parent diff either way, and no churn is double counted.
|
|
138
|
+
counting = sha not in seen
|
|
139
|
+
if not counting:
|
|
140
|
+
continue
|
|
141
|
+
seen.add(sha)
|
|
142
|
+
commits.append(
|
|
143
|
+
{
|
|
144
|
+
"sha": sha,
|
|
145
|
+
"subject": subject,
|
|
146
|
+
# Every id the subject names, in --stories order: a commit
|
|
147
|
+
# spanning two stories belongs to both. Word-boundary match
|
|
148
|
+
# so a story id like "1-2" does not also match "11-2".
|
|
149
|
+
"stories": [
|
|
150
|
+
sid
|
|
151
|
+
for sid in stories
|
|
152
|
+
if re.search(rf"\b{re.escape(sid)}\b", subject)
|
|
153
|
+
],
|
|
154
|
+
"is_merge": len(parents.split()) > 1,
|
|
155
|
+
}
|
|
156
|
+
)
|
|
157
|
+
continue
|
|
158
|
+
|
|
159
|
+
if not counting or not raw.strip():
|
|
160
|
+
continue
|
|
161
|
+
|
|
162
|
+
parsed = _parse_numstat_line(raw)
|
|
163
|
+
if parsed is None:
|
|
164
|
+
continue
|
|
165
|
+
added, deleted, path = parsed
|
|
166
|
+
|
|
167
|
+
entry = files.get(path)
|
|
168
|
+
if entry is None:
|
|
169
|
+
# _added/_deleted are running sums over the path's text revisions.
|
|
170
|
+
entry = {
|
|
171
|
+
"path": path,
|
|
172
|
+
"_added": 0,
|
|
173
|
+
"_deleted": 0,
|
|
174
|
+
"binary_revisions": 0,
|
|
175
|
+
"commit_count": 0,
|
|
176
|
+
}
|
|
177
|
+
files[path] = entry
|
|
178
|
+
|
|
179
|
+
entry["commit_count"] += 1
|
|
180
|
+
if added is None or deleted is None:
|
|
181
|
+
# A binary revision is unmeasurable, not zero — count it alongside
|
|
182
|
+
# the sums instead of nulling the path's real measured churn.
|
|
183
|
+
entry["binary_revisions"] += 1
|
|
184
|
+
else:
|
|
185
|
+
entry["_added"] += added
|
|
186
|
+
entry["_deleted"] += deleted
|
|
187
|
+
|
|
188
|
+
return commits, files
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def _file_list(files):
|
|
192
|
+
return [
|
|
193
|
+
{
|
|
194
|
+
"path": entry["path"],
|
|
195
|
+
"added": entry["_added"],
|
|
196
|
+
"deleted": entry["_deleted"],
|
|
197
|
+
"net": entry["_added"] - entry["_deleted"],
|
|
198
|
+
"commit_count": entry["commit_count"],
|
|
199
|
+
"binary_revisions": entry["binary_revisions"],
|
|
200
|
+
}
|
|
201
|
+
for entry in files.values()
|
|
202
|
+
]
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def main(argv=None):
|
|
206
|
+
parser = JsonArgumentParser(
|
|
207
|
+
description=(
|
|
208
|
+
"Measure commit and per-file change evidence over a git revision "
|
|
209
|
+
"range. Measures only; does not judge."
|
|
210
|
+
),
|
|
211
|
+
add_help=False,
|
|
212
|
+
)
|
|
213
|
+
parser.add_argument("--repo", default=".", help="Path to the git repo (default: .)")
|
|
214
|
+
parser.add_argument("--range", dest="range", help="Revision range REV..REV")
|
|
215
|
+
parser.add_argument(
|
|
216
|
+
"--stories",
|
|
217
|
+
help="Comma-separated story ids to match against commit subjects.",
|
|
218
|
+
)
|
|
219
|
+
args = parser.parse_args(argv)
|
|
220
|
+
|
|
221
|
+
stories = []
|
|
222
|
+
if args.stories:
|
|
223
|
+
# dict.fromkeys dedupes while keeping the caller's order: a repeated id
|
|
224
|
+
# would otherwise land twice in a commit's `stories`, double counting
|
|
225
|
+
# that commit in any per-story total built from the output.
|
|
226
|
+
stories = list(
|
|
227
|
+
dict.fromkeys(s.strip() for s in args.stories.split(",") if s.strip())
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
if not args.range:
|
|
231
|
+
_emit(
|
|
232
|
+
{
|
|
233
|
+
"range": None,
|
|
234
|
+
"note": "no range supplied",
|
|
235
|
+
"commits": [],
|
|
236
|
+
"files": [],
|
|
237
|
+
}
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
# Accept only an explicit REV..REV range. Anything else silently measures
|
|
241
|
+
# the wrong thing: a leading "-" is consumed by git as an option, a single
|
|
242
|
+
# rev logs all history up to it, a bare pathspec logs by path, an empty
|
|
243
|
+
# endpoint ("..", "a..", "..b") makes git default that side to HEAD, and a
|
|
244
|
+
# three-dot "A...B" is a symmetric difference — a different commit set
|
|
245
|
+
# entirely. partition splits at the FIRST "..", so any of those extra-dot
|
|
246
|
+
# shapes leaves `right` empty or dot-prefixed.
|
|
247
|
+
left, _, right = args.range.partition("..")
|
|
248
|
+
if (
|
|
249
|
+
args.range != args.range.strip()
|
|
250
|
+
or args.range.startswith("-")
|
|
251
|
+
or not left
|
|
252
|
+
or not right
|
|
253
|
+
or right.startswith(".")
|
|
254
|
+
):
|
|
255
|
+
_emit(
|
|
256
|
+
{
|
|
257
|
+
"ok": False,
|
|
258
|
+
"error": f"invalid --range {args.range!r}: expected a revision range like REV..REV",
|
|
259
|
+
},
|
|
260
|
+
2,
|
|
261
|
+
)
|
|
262
|
+
|
|
263
|
+
# Pass 1 — the listing. No extra args, so full topology: every commit in
|
|
264
|
+
# the range including merges, which is what per-story attribution reads.
|
|
265
|
+
# Merges contribute no numstat rows here, so `files` is non-merge churn.
|
|
266
|
+
commits, files = _parse_log(_git_log(args.repo, [], args.range), stories)
|
|
267
|
+
merge_count = sum(1 for commit in commits if commit["is_merge"])
|
|
268
|
+
|
|
269
|
+
# Pass 2 — merge churn, only when there is any. `-m --first-parent
|
|
270
|
+
# --min-parents=2` walks the range head's first-parent spine and emits
|
|
271
|
+
# exactly one diff-against-first-parent block per merge sitting on it.
|
|
272
|
+
# Merges off that spine are counted in merge_count and never measured,
|
|
273
|
+
# which is precisely why merges_measured is a separate key: the gap
|
|
274
|
+
# between the two is a visible statement that some merges went
|
|
275
|
+
# unmeasured. This never folds into `files` — a merge's first-parent diff
|
|
276
|
+
# restates the churn of the commits it merged in, which pass 1 already
|
|
277
|
+
# counted, so adding it in would double count.
|
|
278
|
+
merge_commits, merge_files = [], {}
|
|
279
|
+
if merge_count:
|
|
280
|
+
merge_commits, merge_files = _parse_log(
|
|
281
|
+
_git_log(
|
|
282
|
+
args.repo,
|
|
283
|
+
["-m", "--first-parent", "--min-parents=2"],
|
|
284
|
+
args.range,
|
|
285
|
+
),
|
|
286
|
+
stories,
|
|
287
|
+
)
|
|
288
|
+
|
|
289
|
+
_emit(
|
|
290
|
+
{
|
|
291
|
+
"range": args.range,
|
|
292
|
+
"commit_count": len(commits),
|
|
293
|
+
"merge_count": merge_count,
|
|
294
|
+
"merges_measured": len(merge_commits),
|
|
295
|
+
"commits": commits,
|
|
296
|
+
"files": _file_list(files),
|
|
297
|
+
"merge_files": _file_list(merge_files),
|
|
298
|
+
"stories_supplied": stories,
|
|
299
|
+
}
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
if __name__ == "__main__":
|
|
304
|
+
main()
|