bmad-method 4.27.5 → 5.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/.bmad-core/agent-teams/team-all.yml +16 -0
- package/.bmad-core/agent-teams/team-fullstack.yml +26 -0
- package/.bmad-core/agent-teams/team-no-ui.yml +15 -0
- package/{bmad-core → .bmad-core}/agents/analyst.md +23 -30
- package/.bmad-core/agents/architect.md +66 -0
- package/.bmad-core/agents/bmad-master.md +104 -0
- package/.bmad-core/agents/bmad-orchestrator.md +81 -0
- package/.bmad-core/agents/dev.md +70 -0
- package/{bmad-core → .bmad-core}/agents/pm.md +24 -25
- package/{bmad-core → .bmad-core}/agents/po.md +24 -28
- package/.bmad-core/agents/qa.md +52 -0
- package/.bmad-core/agents/sm.md +55 -0
- package/.bmad-core/agents/ux-expert.md +66 -0
- package/{bmad-core → .bmad-core}/checklists/change-checklist.md +2 -2
- package/{bmad-core → .bmad-core}/checklists/story-draft-checklist.md +1 -1
- package/.bmad-core/data/bmad-kb.md +47 -0
- package/.bmad-core/schemas/agent-team-schema.yml +153 -0
- package/.bmad-core/tasks/advanced-elicitation.md +92 -0
- package/.bmad-core/tasks/brainstorming-techniques.md +238 -0
- package/.bmad-core/tasks/core-dump.md +74 -0
- package/{expansion-packs/bmad-creator-tools → .bmad-core}/tasks/create-agent.md +11 -9
- package/.bmad-core/tasks/create-doc.md +74 -0
- package/.bmad-core/tasks/create-expansion-pack.md +425 -0
- package/.bmad-core/tasks/create-next-story.md +206 -0
- package/.bmad-core/tasks/create-team.md +229 -0
- package/{bmad-core → .bmad-core}/tasks/doc-migration-task.md +9 -9
- package/{common → .bmad-core}/tasks/execute-checklist.md +6 -2
- package/.bmad-core/tasks/generate-ai-frontend-prompt.md +58 -0
- package/{bmad-core → .bmad-core}/tasks/index-docs.md +7 -3
- package/{bmad-core → .bmad-core}/tasks/shard-doc.md +7 -25
- package/.bmad-core/templates/agent-tmpl.md +58 -0
- package/.bmad-core/templates/architecture-tmpl.md +771 -0
- package/.bmad-core/templates/brownfield-architecture-tmpl.md +542 -0
- package/.bmad-core/templates/brownfield-prd-tmpl.md +240 -0
- package/.bmad-core/templates/competitor-analysis-tmpl.md +289 -0
- package/.bmad-core/templates/expansion-pack-plan-tmpl.md +91 -0
- package/.bmad-core/templates/front-end-architecture-tmpl.md +173 -0
- package/.bmad-core/templates/front-end-spec-tmpl.md +411 -0
- package/.bmad-core/templates/fullstack-architecture-tmpl.md +1016 -0
- package/.bmad-core/templates/market-research-tmpl.md +261 -0
- package/.bmad-core/templates/prd-tmpl.md +200 -0
- package/.bmad-core/templates/project-brief-tmpl.md +228 -0
- package/.bmad-core/templates/simple-project-prd-tmpl.md +461 -0
- package/.bmad-core/templates/story-tmpl.md +61 -0
- package/.bmad-core/templates/web-agent-startup-instructions-template.md +39 -0
- package/.bmad-core/utils/agent-switcher.ide.md +112 -0
- package/.bmad-core/utils/template-format.md +26 -0
- package/.bmad-core/utils/workflow-management.md +224 -0
- package/.bmad-core/web-bundles/agents/analyst.txt +1684 -0
- package/.bmad-core/web-bundles/agents/architect.txt +3584 -0
- package/.bmad-core/web-bundles/agents/bmad-master.txt +9491 -0
- package/.bmad-core/web-bundles/agents/bmad-orchestrator.txt +1466 -0
- package/{dist → .bmad-core/web-bundles}/agents/dev.txt +71 -179
- package/{dist → .bmad-core/web-bundles}/agents/pm.txt +1058 -624
- package/{dist → .bmad-core/web-bundles}/agents/po.txt +138 -337
- package/.bmad-core/web-bundles/agents/qa.txt +129 -0
- package/.bmad-core/web-bundles/agents/sm.txt +658 -0
- package/.bmad-core/web-bundles/agents/ux-expert.txt +1099 -0
- package/.bmad-core/web-bundles/teams/team-all.txt +10757 -0
- package/.bmad-core/web-bundles/teams/team-fullstack.txt +10109 -0
- package/.bmad-core/web-bundles/teams/team-no-ui.txt +8950 -0
- package/.bmad-core/workflows/brownfield-fullstack.yml +116 -0
- package/.bmad-core/workflows/brownfield-service.yml +117 -0
- package/.bmad-core/workflows/brownfield-ui.yml +127 -0
- package/{bmad-core/workflows/greenfield-fullstack.yaml → .bmad-core/workflows/greenfield-fullstack.yml} +77 -140
- package/.bmad-core/workflows/greenfield-service.yml +143 -0
- package/.bmad-core/workflows/greenfield-ui.yml +172 -0
- package/.claude/commands/analyst.md +63 -0
- package/.claude/commands/architect.md +70 -0
- package/.claude/commands/bmad-master.md +108 -0
- package/.claude/commands/bmad-orchestrator.md +85 -0
- package/.claude/commands/dev.md +74 -0
- package/.claude/commands/pm.md +63 -0
- package/.claude/commands/po.md +64 -0
- package/.claude/commands/qa.md +56 -0
- package/.claude/commands/sm.md +59 -0
- package/.claude/commands/ux-expert.md +70 -0
- package/.cursor/rules/analyst.mdc +77 -0
- package/.cursor/rules/architect.mdc +84 -0
- package/.cursor/rules/bmad-master.mdc +122 -0
- package/.cursor/rules/bmad-orchestrator.mdc +99 -0
- package/.cursor/rules/dev.mdc +88 -0
- package/.cursor/rules/pm.mdc +77 -0
- package/.cursor/rules/po.mdc +78 -0
- package/.cursor/rules/qa.mdc +70 -0
- package/.cursor/rules/sm.mdc +73 -0
- package/.cursor/rules/ux-expert.mdc +84 -0
- package/.roo/.roomodes +95 -0
- package/.roo/README.md +38 -0
- package/.vscode/extensions.json +6 -0
- package/.vscode/settings.json +75 -49
- package/.windsurf/rules/analyst.md +71 -0
- package/.windsurf/rules/architect.md +78 -0
- package/.windsurf/rules/bmad-master.md +116 -0
- package/.windsurf/rules/bmad-orchestrator.md +93 -0
- package/.windsurf/rules/dev.md +82 -0
- package/.windsurf/rules/pm.md +71 -0
- package/.windsurf/rules/po.md +72 -0
- package/.windsurf/rules/qa.md +64 -0
- package/.windsurf/rules/sm.md +67 -0
- package/.windsurf/rules/ux-expert.md +78 -0
- package/CHANGELOG.md +16 -452
- package/CONTRIBUTING.md +5 -168
- package/LICENSE +1 -1
- package/README.md +230 -77
- package/docs/bmad-workflow-guide.md +15 -19
- package/docs/claude-code-guide.md +119 -0
- package/docs/cursor-guide.md +127 -0
- package/docs/roo-code-guide.md +140 -0
- package/docs/sample-output/simple-fullstack-greenfield/prd.md +42 -0
- package/docs/versioning-and-releases.md +16 -8
- package/docs/versions.md +5 -4
- package/docs/windsurf-guide.md +127 -0
- package/expansion-packs/README.md +112 -2
- package/expansion-packs/{bmad-infrastructure-devops → infrastructure-devops}/README.md +9 -9
- package/expansion-packs/{bmad-infrastructure-devops → infrastructure-devops}/agents/infra-devops-platform.md +15 -15
- package/expansion-packs/{bmad-infrastructure-devops → infrastructure-devops}/checklists/infrastructure-checklist.md +1 -1
- package/expansion-packs/infrastructure-devops/manifest.yml +38 -0
- package/expansion-packs/{bmad-infrastructure-devops → infrastructure-devops}/tasks/review-infrastructure.md +4 -4
- package/expansion-packs/{bmad-infrastructure-devops → infrastructure-devops}/tasks/validate-infrastructure.md +4 -4
- package/expansion-packs/infrastructure-devops/templates/infrastructure-architecture-tmpl.md +415 -0
- package/expansion-packs/infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.md +0 -0
- package/package.json +11 -19
- package/tools/bmad-npx-wrapper.js +1 -1
- package/tools/builders/web-builder.js +28 -563
- package/tools/cli.js +22 -55
- package/tools/installer/README.md +53 -3
- package/tools/installer/bin/bmad.js +56 -294
- package/tools/installer/config/install.config.yml +139 -0
- package/tools/installer/lib/config-loader.js +34 -198
- package/tools/installer/lib/file-manager.js +5 -123
- package/tools/installer/lib/ide-setup.js +189 -545
- package/tools/installer/lib/installer.js +55 -1136
- package/tools/installer/package-lock.json +3 -3
- package/tools/installer/package.json +4 -4
- package/tools/installer/templates/claude-commands.md +7 -0
- package/tools/installer/templates/cursor-rules.md +22 -0
- package/tools/installer/templates/windsurf-rules.md +22 -0
- package/tools/lib/dependency-resolver.js +22 -22
- package/tools/upgraders/v3-to-v4-upgrader.js +43 -35
- package/tools/version-bump.js +1 -1
- package/tools/yaml-format.js +2 -2
- package/.github/FUNDING.yaml +0 -15
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -32
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -22
- package/.prettierignore +0 -21
- package/.prettierrc +0 -23
- package/bmad-core/agent-teams/team-all.yaml +0 -14
- package/bmad-core/agent-teams/team-fullstack.yaml +0 -18
- package/bmad-core/agent-teams/team-ide-minimal.yaml +0 -10
- package/bmad-core/agent-teams/team-no-ui.yaml +0 -13
- package/bmad-core/agents/architect.md +0 -63
- package/bmad-core/agents/bmad-master.md +0 -110
- package/bmad-core/agents/bmad-orchestrator.md +0 -140
- package/bmad-core/agents/dev.md +0 -57
- package/bmad-core/agents/qa.md +0 -55
- package/bmad-core/agents/sm.md +0 -46
- package/bmad-core/agents/ux-expert.md +0 -54
- package/bmad-core/core-config.yaml +0 -25
- package/bmad-core/data/bmad-kb.md +0 -803
- package/bmad-core/data/brainstorming-techniques.md +0 -36
- package/bmad-core/data/elicitation-methods.md +0 -134
- package/bmad-core/tasks/advanced-elicitation.md +0 -117
- package/bmad-core/tasks/create-brownfield-story.md +0 -355
- package/bmad-core/tasks/create-next-story.md +0 -114
- package/bmad-core/tasks/create-workflow-plan.md +0 -289
- package/bmad-core/tasks/document-project.md +0 -317
- package/bmad-core/tasks/facilitate-brainstorming-session.md +0 -136
- package/bmad-core/tasks/generate-ai-frontend-prompt.md +0 -51
- package/bmad-core/tasks/kb-mode-interaction.md +0 -70
- package/bmad-core/tasks/review-story.md +0 -145
- package/bmad-core/tasks/update-workflow-plan.md +0 -248
- package/bmad-core/tasks/validate-next-story.md +0 -134
- package/bmad-core/templates/architecture-tmpl.yaml +0 -650
- package/bmad-core/templates/brainstorming-output-tmpl.yaml +0 -156
- package/bmad-core/templates/brownfield-architecture-tmpl.yaml +0 -476
- package/bmad-core/templates/brownfield-prd-tmpl.yaml +0 -280
- package/bmad-core/templates/competitor-analysis-tmpl.yaml +0 -293
- package/bmad-core/templates/front-end-architecture-tmpl.yaml +0 -206
- package/bmad-core/templates/front-end-spec-tmpl.yaml +0 -349
- package/bmad-core/templates/fullstack-architecture-tmpl.yaml +0 -805
- package/bmad-core/templates/market-research-tmpl.yaml +0 -252
- package/bmad-core/templates/prd-tmpl.yaml +0 -202
- package/bmad-core/templates/project-brief-tmpl.yaml +0 -221
- package/bmad-core/templates/story-tmpl.yaml +0 -137
- package/bmad-core/utils/plan-management.md +0 -219
- package/bmad-core/workflows/brownfield-fullstack.yaml +0 -297
- package/bmad-core/workflows/brownfield-service.yaml +0 -187
- package/bmad-core/workflows/brownfield-ui.yaml +0 -197
- package/bmad-core/workflows/greenfield-service.yaml +0 -206
- package/bmad-core/workflows/greenfield-ui.yaml +0 -235
- package/common/tasks/create-doc.md +0 -79
- package/common/utils/bmad-doc-template.md +0 -325
- package/common/utils/workflow-management.md +0 -69
- package/dist/agents/analyst.txt +0 -2849
- package/dist/agents/architect.txt +0 -3505
- package/dist/agents/bmad-master.txt +0 -9588
- package/dist/agents/bmad-orchestrator.txt +0 -2232
- package/dist/agents/qa.txt +0 -388
- package/dist/agents/sm.txt +0 -673
- package/dist/agents/ux-expert.txt +0 -987
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +0 -2401
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +0 -1635
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +0 -825
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +0 -11730
- package/dist/expansion-packs/bmad-creator-tools/agents/bmad-the-creator.txt +0 -2023
- package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +0 -2052
- package/dist/teams/team-all.txt +0 -11799
- package/dist/teams/team-fullstack.txt +0 -11129
- package/dist/teams/team-ide-minimal.txt +0 -4573
- package/dist/teams/team-no-ui.txt +0 -9684
- package/docs/GUIDING-PRINCIPLES.md +0 -91
- package/docs/agentic-tools/claude-code-guide.md +0 -19
- package/docs/agentic-tools/cline-guide.md +0 -16
- package/docs/agentic-tools/cursor-guide.md +0 -14
- package/docs/agentic-tools/gemini-cli-guide.md +0 -32
- package/docs/agentic-tools/github-copilot-guide.md +0 -42
- package/docs/agentic-tools/roo-code-guide.md +0 -15
- package/docs/agentic-tools/trae-guide.md +0 -14
- package/docs/agentic-tools/windsurf-guide.md +0 -14
- package/docs/core-architecture.md +0 -219
- package/docs/expansion-packs.md +0 -280
- package/docs/how-to-contribute-with-pull-requests.md +0 -158
- package/docs/template-markup-references.md +0 -86
- package/docs/user-guide.md +0 -1142
- package/docs/working-in-the-brownfield.md +0 -361
- package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yaml +0 -13
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +0 -60
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +0 -68
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +0 -53
- package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +0 -201
- package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +0 -160
- package/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +0 -7
- package/expansion-packs/bmad-2d-phaser-game-dev/data/bmad-kb.md +0 -254
- package/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +0 -651
- package/expansion-packs/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +0 -111
- package/expansion-packs/bmad-2d-phaser-game-dev/tasks/create-game-story.md +0 -216
- package/expansion-packs/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +0 -308
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.yaml +0 -613
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.yaml +0 -356
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.yaml +0 -343
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.yaml +0 -253
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.yaml +0 -484
- package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yaml +0 -183
- package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yaml +0 -175
- package/expansion-packs/bmad-creator-tools/README.md +0 -8
- package/expansion-packs/bmad-creator-tools/agents/bmad-the-creator.md +0 -55
- package/expansion-packs/bmad-creator-tools/config.yaml +0 -5
- package/expansion-packs/bmad-creator-tools/tasks/generate-expansion-pack.md +0 -1020
- package/expansion-packs/bmad-creator-tools/templates/agent-teams-tmpl.yaml +0 -178
- package/expansion-packs/bmad-creator-tools/templates/agent-tmpl.yaml +0 -154
- package/expansion-packs/bmad-creator-tools/templates/expansion-pack-plan-tmpl.yaml +0 -120
- package/expansion-packs/bmad-infrastructure-devops/config.yaml +0 -8
- package/expansion-packs/bmad-infrastructure-devops/data/bmad-kb.md +0 -308
- package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.yaml +0 -424
- package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.yaml +0 -629
- package/tools/bump-all-versions.js +0 -107
- package/tools/bump-core-version.js +0 -57
- package/tools/bump-expansion-version.js +0 -78
- package/tools/installer/config/ide-agent-config.yaml +0 -58
- package/tools/installer/config/install.config.yaml +0 -91
- package/tools/lib/yaml-utils.js +0 -29
- package/tools/md-assets/web-agent-startup-instructions.md +0 -39
- package/tools/update-expansion-version.js +0 -54
- /package/{bmad-core → .bmad-core}/checklists/architect-checklist.md +0 -0
- /package/{bmad-core → .bmad-core}/checklists/pm-checklist.md +0 -0
- /package/{bmad-core → .bmad-core}/checklists/po-master-checklist.md +0 -0
- /package/{bmad-core → .bmad-core}/checklists/story-dod-checklist.md +0 -0
- /package/{bmad-core → .bmad-core}/data/technical-preferences.md +0 -0
- /package/{bmad-core → .bmad-core}/tasks/brownfield-create-epic.md +0 -0
- /package/{bmad-core → .bmad-core}/tasks/brownfield-create-story.md +0 -0
- /package/{bmad-core → .bmad-core}/tasks/correct-course.md +0 -0
- /package/{bmad-core → .bmad-core}/tasks/create-deep-research-prompt.md +0 -0
- /package/.github/workflows/{release.yaml → release.yml} +0 -0
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
const fs = require('fs');
|
|
4
|
-
const path = require('path');
|
|
5
|
-
const yaml = require('js-yaml');
|
|
6
|
-
|
|
7
|
-
const args = process.argv.slice(2);
|
|
8
|
-
const bumpType = args[0] || 'minor'; // default to minor
|
|
9
|
-
|
|
10
|
-
if (!['major', 'minor', 'patch'].includes(bumpType)) {
|
|
11
|
-
console.log('Usage: node bump-all-versions.js [major|minor|patch]');
|
|
12
|
-
console.log('Default: minor');
|
|
13
|
-
process.exit(1);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function bumpVersion(currentVersion, type) {
|
|
17
|
-
const [major, minor, patch] = currentVersion.split('.').map(Number);
|
|
18
|
-
|
|
19
|
-
switch (type) {
|
|
20
|
-
case 'major':
|
|
21
|
-
return `${major + 1}.0.0`;
|
|
22
|
-
case 'minor':
|
|
23
|
-
return `${major}.${minor + 1}.0`;
|
|
24
|
-
case 'patch':
|
|
25
|
-
return `${major}.${minor}.${patch + 1}`;
|
|
26
|
-
default:
|
|
27
|
-
return currentVersion;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
async function bumpAllVersions() {
|
|
32
|
-
const updatedItems = [];
|
|
33
|
-
|
|
34
|
-
// First, bump the core version
|
|
35
|
-
const coreConfigPath = path.join(__dirname, '..', 'bmad-core', 'core-config.yaml');
|
|
36
|
-
try {
|
|
37
|
-
const coreConfigContent = fs.readFileSync(coreConfigPath, 'utf8');
|
|
38
|
-
const coreConfig = yaml.load(coreConfigContent);
|
|
39
|
-
const oldCoreVersion = coreConfig.version || '1.0.0';
|
|
40
|
-
const newCoreVersion = bumpVersion(oldCoreVersion, bumpType);
|
|
41
|
-
|
|
42
|
-
coreConfig.version = newCoreVersion;
|
|
43
|
-
|
|
44
|
-
const updatedCoreYaml = yaml.dump(coreConfig, { indent: 2 });
|
|
45
|
-
fs.writeFileSync(coreConfigPath, updatedCoreYaml);
|
|
46
|
-
|
|
47
|
-
updatedItems.push({ type: 'core', name: 'BMad Core', oldVersion: oldCoreVersion, newVersion: newCoreVersion });
|
|
48
|
-
console.log(`✓ BMad Core: ${oldCoreVersion} → ${newCoreVersion}`);
|
|
49
|
-
} catch (error) {
|
|
50
|
-
console.error(`✗ Failed to update BMad Core: ${error.message}`);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Then, bump all expansion packs
|
|
54
|
-
const expansionPacksDir = path.join(__dirname, '..', 'expansion-packs');
|
|
55
|
-
|
|
56
|
-
try {
|
|
57
|
-
const entries = fs.readdirSync(expansionPacksDir, { withFileTypes: true });
|
|
58
|
-
|
|
59
|
-
for (const entry of entries) {
|
|
60
|
-
if (entry.isDirectory() && !entry.name.startsWith('.') && entry.name !== 'README.md') {
|
|
61
|
-
const packId = entry.name;
|
|
62
|
-
const configPath = path.join(expansionPacksDir, packId, 'config.yaml');
|
|
63
|
-
|
|
64
|
-
if (fs.existsSync(configPath)) {
|
|
65
|
-
try {
|
|
66
|
-
const configContent = fs.readFileSync(configPath, 'utf8');
|
|
67
|
-
const config = yaml.load(configContent);
|
|
68
|
-
const oldVersion = config.version || '1.0.0';
|
|
69
|
-
const newVersion = bumpVersion(oldVersion, bumpType);
|
|
70
|
-
|
|
71
|
-
config.version = newVersion;
|
|
72
|
-
|
|
73
|
-
const updatedYaml = yaml.dump(config, { indent: 2 });
|
|
74
|
-
fs.writeFileSync(configPath, updatedYaml);
|
|
75
|
-
|
|
76
|
-
updatedItems.push({ type: 'expansion', name: packId, oldVersion, newVersion });
|
|
77
|
-
console.log(`✓ ${packId}: ${oldVersion} → ${newVersion}`);
|
|
78
|
-
|
|
79
|
-
} catch (error) {
|
|
80
|
-
console.error(`✗ Failed to update ${packId}: ${error.message}`);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
if (updatedItems.length > 0) {
|
|
87
|
-
const coreCount = updatedItems.filter(i => i.type === 'core').length;
|
|
88
|
-
const expansionCount = updatedItems.filter(i => i.type === 'expansion').length;
|
|
89
|
-
|
|
90
|
-
console.log(`\n✓ Successfully bumped ${updatedItems.length} item(s) with ${bumpType} version bump`);
|
|
91
|
-
if (coreCount > 0) console.log(` - ${coreCount} core`);
|
|
92
|
-
if (expansionCount > 0) console.log(` - ${expansionCount} expansion pack(s)`);
|
|
93
|
-
|
|
94
|
-
console.log('\nNext steps:');
|
|
95
|
-
console.log('1. Test the changes');
|
|
96
|
-
console.log('2. Commit: git add -A && git commit -m "chore: bump all versions (' + bumpType + ')"');
|
|
97
|
-
} else {
|
|
98
|
-
console.log('No items found to update');
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
} catch (error) {
|
|
102
|
-
console.error('Error reading expansion packs directory:', error.message);
|
|
103
|
-
process.exit(1);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
bumpAllVersions();
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
const fs = require('fs');
|
|
4
|
-
const path = require('path');
|
|
5
|
-
const yaml = require('js-yaml');
|
|
6
|
-
|
|
7
|
-
const args = process.argv.slice(2);
|
|
8
|
-
const bumpType = args[0] || 'minor'; // default to minor
|
|
9
|
-
|
|
10
|
-
if (!['major', 'minor', 'patch'].includes(bumpType)) {
|
|
11
|
-
console.log('Usage: node bump-core-version.js [major|minor|patch]');
|
|
12
|
-
console.log('Default: minor');
|
|
13
|
-
process.exit(1);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function bumpVersion(currentVersion, type) {
|
|
17
|
-
const [major, minor, patch] = currentVersion.split('.').map(Number);
|
|
18
|
-
|
|
19
|
-
switch (type) {
|
|
20
|
-
case 'major':
|
|
21
|
-
return `${major + 1}.0.0`;
|
|
22
|
-
case 'minor':
|
|
23
|
-
return `${major}.${minor + 1}.0`;
|
|
24
|
-
case 'patch':
|
|
25
|
-
return `${major}.${minor}.${patch + 1}`;
|
|
26
|
-
default:
|
|
27
|
-
return currentVersion;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
async function bumpCoreVersion() {
|
|
32
|
-
try {
|
|
33
|
-
const coreConfigPath = path.join(__dirname, '..', 'bmad-core', 'core-config.yaml');
|
|
34
|
-
|
|
35
|
-
const coreConfigContent = fs.readFileSync(coreConfigPath, 'utf8');
|
|
36
|
-
const coreConfig = yaml.load(coreConfigContent);
|
|
37
|
-
const oldVersion = coreConfig.version || '1.0.0';
|
|
38
|
-
const newVersion = bumpVersion(oldVersion, bumpType);
|
|
39
|
-
|
|
40
|
-
coreConfig.version = newVersion;
|
|
41
|
-
|
|
42
|
-
const updatedYaml = yaml.dump(coreConfig, { indent: 2 });
|
|
43
|
-
fs.writeFileSync(coreConfigPath, updatedYaml);
|
|
44
|
-
|
|
45
|
-
console.log(`✓ BMad Core: ${oldVersion} → ${newVersion}`);
|
|
46
|
-
console.log(`\n✓ Successfully bumped BMad Core with ${bumpType} version bump`);
|
|
47
|
-
console.log('\nNext steps:');
|
|
48
|
-
console.log('1. Test the changes');
|
|
49
|
-
console.log('2. Commit: git add -A && git commit -m "chore: bump core version (' + bumpType + ')"');
|
|
50
|
-
|
|
51
|
-
} catch (error) {
|
|
52
|
-
console.error('Error updating core version:', error.message);
|
|
53
|
-
process.exit(1);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
bumpCoreVersion();
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
const fs = require('fs');
|
|
4
|
-
const path = require('path');
|
|
5
|
-
const yaml = require('js-yaml');
|
|
6
|
-
|
|
7
|
-
const args = process.argv.slice(2);
|
|
8
|
-
|
|
9
|
-
if (args.length < 1 || args.length > 2) {
|
|
10
|
-
console.log('Usage: node bump-expansion-version.js <expansion-pack-id> [major|minor|patch]');
|
|
11
|
-
console.log('Default: minor');
|
|
12
|
-
console.log('Example: node bump-expansion-version.js bmad-creator-tools patch');
|
|
13
|
-
process.exit(1);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const packId = args[0];
|
|
17
|
-
const bumpType = args[1] || 'minor'; // default to minor
|
|
18
|
-
|
|
19
|
-
if (!['major', 'minor', 'patch'].includes(bumpType)) {
|
|
20
|
-
console.error('Error: Bump type must be major, minor, or patch');
|
|
21
|
-
process.exit(1);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function bumpVersion(currentVersion, type) {
|
|
25
|
-
const [major, minor, patch] = currentVersion.split('.').map(Number);
|
|
26
|
-
|
|
27
|
-
switch (type) {
|
|
28
|
-
case 'major':
|
|
29
|
-
return `${major + 1}.0.0`;
|
|
30
|
-
case 'minor':
|
|
31
|
-
return `${major}.${minor + 1}.0`;
|
|
32
|
-
case 'patch':
|
|
33
|
-
return `${major}.${minor}.${patch + 1}`;
|
|
34
|
-
default:
|
|
35
|
-
return currentVersion;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
async function updateVersion() {
|
|
40
|
-
try {
|
|
41
|
-
const configPath = path.join(__dirname, '..', 'expansion-packs', packId, 'config.yaml');
|
|
42
|
-
|
|
43
|
-
if (!fs.existsSync(configPath)) {
|
|
44
|
-
console.error(`Error: Expansion pack '${packId}' not found`);
|
|
45
|
-
console.log('\nAvailable expansion packs:');
|
|
46
|
-
const expansionPacksDir = path.join(__dirname, '..', 'expansion-packs');
|
|
47
|
-
const entries = fs.readdirSync(expansionPacksDir, { withFileTypes: true });
|
|
48
|
-
entries.forEach(entry => {
|
|
49
|
-
if (entry.isDirectory() && !entry.name.startsWith('.')) {
|
|
50
|
-
console.log(` - ${entry.name}`);
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
process.exit(1);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const configContent = fs.readFileSync(configPath, 'utf8');
|
|
57
|
-
const config = yaml.load(configContent);
|
|
58
|
-
const oldVersion = config.version || '1.0.0';
|
|
59
|
-
const newVersion = bumpVersion(oldVersion, bumpType);
|
|
60
|
-
|
|
61
|
-
config.version = newVersion;
|
|
62
|
-
|
|
63
|
-
const updatedYaml = yaml.dump(config, { indent: 2 });
|
|
64
|
-
fs.writeFileSync(configPath, updatedYaml);
|
|
65
|
-
|
|
66
|
-
console.log(`✓ ${packId}: ${oldVersion} → ${newVersion}`);
|
|
67
|
-
console.log(`\n✓ Successfully bumped ${packId} with ${bumpType} version bump`);
|
|
68
|
-
console.log('\nNext steps:');
|
|
69
|
-
console.log('1. Test the changes');
|
|
70
|
-
console.log('2. Commit: git add -A && git commit -m "chore: bump ' + packId + ' version (' + bumpType + ')"');
|
|
71
|
-
|
|
72
|
-
} catch (error) {
|
|
73
|
-
console.error('Error updating version:', error.message);
|
|
74
|
-
process.exit(1);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
updateVersion();
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
# IDE-specific agent configurations
|
|
2
|
-
# This file defines agent-specific settings for different IDEs
|
|
3
|
-
|
|
4
|
-
# Roo Code file permissions
|
|
5
|
-
# Each agent can have restricted file access based on regex patterns
|
|
6
|
-
# If an agent is not listed here, it gets full edit access
|
|
7
|
-
roo-permissions:
|
|
8
|
-
# Core agents
|
|
9
|
-
analyst:
|
|
10
|
-
fileRegex: "\\.(md|txt)$"
|
|
11
|
-
description: "Documentation and text files"
|
|
12
|
-
pm:
|
|
13
|
-
fileRegex: "\\.(md|txt)$"
|
|
14
|
-
description: "Product documentation"
|
|
15
|
-
architect:
|
|
16
|
-
fileRegex: "\\.(md|txt|yml|yaml|json)$"
|
|
17
|
-
description: "Architecture docs and configs"
|
|
18
|
-
qa:
|
|
19
|
-
fileRegex: "\\.(test|spec)\\.(js|ts|jsx|tsx)$|\\.md$"
|
|
20
|
-
description: "Test files and documentation"
|
|
21
|
-
ux-expert:
|
|
22
|
-
fileRegex: "\\.(md|css|scss|html|jsx|tsx)$"
|
|
23
|
-
description: "Design-related files"
|
|
24
|
-
po:
|
|
25
|
-
fileRegex: "\\.(md|txt)$"
|
|
26
|
-
description: "Story and requirement docs"
|
|
27
|
-
sm:
|
|
28
|
-
fileRegex: "\\.(md|txt)$"
|
|
29
|
-
description: "Process and planning docs"
|
|
30
|
-
# Expansion pack agents
|
|
31
|
-
game-designer:
|
|
32
|
-
fileRegex: "\\.(md|txt|json|yaml|yml)$"
|
|
33
|
-
description: "Game design documents and configs"
|
|
34
|
-
game-sm:
|
|
35
|
-
fileRegex: "\\.(md|txt)$"
|
|
36
|
-
description: "Game project management docs"
|
|
37
|
-
|
|
38
|
-
# Cline agent ordering
|
|
39
|
-
# Lower numbers appear first in the list
|
|
40
|
-
# Agents not listed get order 99
|
|
41
|
-
cline-order:
|
|
42
|
-
# Core agents
|
|
43
|
-
bmad-master: 1
|
|
44
|
-
bmad-orchestrator: 2
|
|
45
|
-
pm: 3
|
|
46
|
-
analyst: 4
|
|
47
|
-
architect: 5
|
|
48
|
-
po: 6
|
|
49
|
-
sm: 7
|
|
50
|
-
dev: 8
|
|
51
|
-
qa: 9
|
|
52
|
-
ux-expert: 10
|
|
53
|
-
# Expansion pack agents
|
|
54
|
-
bmad-the-creator: 11
|
|
55
|
-
game-designer: 12
|
|
56
|
-
game-developer: 13
|
|
57
|
-
game-sm: 14
|
|
58
|
-
infra-devops-platform: 15
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
installation-options:
|
|
2
|
-
full:
|
|
3
|
-
name: Complete BMad Core
|
|
4
|
-
description: Copy the entire .bmad-core folder with all agents, templates, and tools
|
|
5
|
-
action: copy-folder
|
|
6
|
-
source: bmad-core
|
|
7
|
-
single-agent:
|
|
8
|
-
name: Single Agent
|
|
9
|
-
description: Select and install a single agent with its dependencies
|
|
10
|
-
action: copy-agent
|
|
11
|
-
ide-configurations:
|
|
12
|
-
cursor:
|
|
13
|
-
name: Cursor
|
|
14
|
-
rule-dir: .cursor/rules/
|
|
15
|
-
format: multi-file
|
|
16
|
-
command-suffix: .mdc
|
|
17
|
-
instructions: |
|
|
18
|
-
# To use BMad agents in Cursor:
|
|
19
|
-
# 1. Press Ctrl+L (Cmd+L on Mac) to open the chat
|
|
20
|
-
# 2. Type @agent-name (e.g., "@dev", "@pm", "@architect")
|
|
21
|
-
# 3. The agent will adopt that persona for the conversation
|
|
22
|
-
claude-code:
|
|
23
|
-
name: Claude Code
|
|
24
|
-
rule-dir: .claude/commands/
|
|
25
|
-
format: multi-file
|
|
26
|
-
command-suffix: .md
|
|
27
|
-
instructions: |
|
|
28
|
-
# To use BMad agents in Claude Code:
|
|
29
|
-
# 1. Type /agent-name (e.g., "/dev", "/pm", "/architect")
|
|
30
|
-
# 2. Claude will switch to that agent's persona
|
|
31
|
-
windsurf:
|
|
32
|
-
name: Windsurf
|
|
33
|
-
rule-dir: .windsurf/rules/
|
|
34
|
-
format: multi-file
|
|
35
|
-
command-suffix: .md
|
|
36
|
-
instructions: |
|
|
37
|
-
# To use BMad agents in Windsurf:
|
|
38
|
-
# 1. Type @agent-name (e.g., "@dev", "@pm")
|
|
39
|
-
# 2. Windsurf will adopt that agent's persona
|
|
40
|
-
trae:
|
|
41
|
-
name: Trae
|
|
42
|
-
rule-dir: .trae/rules/
|
|
43
|
-
format: multi-file
|
|
44
|
-
command-suffix: .md
|
|
45
|
-
instructions: |
|
|
46
|
-
# To use BMad agents in Trae:
|
|
47
|
-
# 1. Type @agent-name (e.g., "@dev", "@pm", "@architect")
|
|
48
|
-
# 2. Trae will adopt that agent's persona
|
|
49
|
-
roo:
|
|
50
|
-
name: Roo Code
|
|
51
|
-
format: custom-modes
|
|
52
|
-
file: .roomodes
|
|
53
|
-
instructions: |
|
|
54
|
-
# To use BMad agents in Roo Code:
|
|
55
|
-
# 1. Open the mode selector (usually in the status bar)
|
|
56
|
-
# 2. Select any bmad-{agent} mode (e.g., "bmad-dev", "bmad-pm")
|
|
57
|
-
# 3. The AI will adopt that agent's full personality and capabilities
|
|
58
|
-
cline:
|
|
59
|
-
name: Cline
|
|
60
|
-
rule-dir: .clinerules/
|
|
61
|
-
format: multi-file
|
|
62
|
-
command-suffix: .md
|
|
63
|
-
instructions: |
|
|
64
|
-
# To use BMad agents in Cline:
|
|
65
|
-
# 1. Open the Cline chat panel in VS Code
|
|
66
|
-
# 2. Type @agent-name (e.g., "@dev", "@pm", "@architect")
|
|
67
|
-
# 3. The agent will adopt that persona for the conversation
|
|
68
|
-
# 4. Rules are stored in .clinerules/ directory in your project
|
|
69
|
-
gemini:
|
|
70
|
-
name: Gemini CLI
|
|
71
|
-
rule-dir: .gemini/agents/
|
|
72
|
-
format: context-files
|
|
73
|
-
instructions: |
|
|
74
|
-
# To use BMad agents with the Gemini CLI:
|
|
75
|
-
# 1. The installer creates a .gemini/ directory in your project.
|
|
76
|
-
# 2. It also configures .gemini/settings.json to load all agent files.
|
|
77
|
-
# 3. Simply mention the agent in your prompt (e.g., "As @dev, ...").
|
|
78
|
-
# 4. The Gemini CLI will automatically have the context for that agent.
|
|
79
|
-
github-copilot:
|
|
80
|
-
name: Github Copilot
|
|
81
|
-
rule-dir: .github/chatmodes/
|
|
82
|
-
format: multi-file
|
|
83
|
-
command-suffix: .md
|
|
84
|
-
instructions: |
|
|
85
|
-
# To use BMad agents with Github Copilot:
|
|
86
|
-
# 1. The installer creates a .github/chatmodes/ directory in your project
|
|
87
|
-
# 2. Open the Chat view (`⌃⌘I` on Mac, `Ctrl+Alt+I` on Windows/Linux) and select **Agent** from the chat mode selector.
|
|
88
|
-
# 3. The agent will adopt that persona for the conversation
|
|
89
|
-
# 4. Requires VS Code 1.101+ with `chat.agent.enabled: true` in settings
|
|
90
|
-
# 5. Agent files are stored in .github/chatmodes/
|
|
91
|
-
# 6. Use `*help` to see available commands and agents
|
package/tools/lib/yaml-utils.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Utility functions for YAML extraction from agent files
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Extract YAML content from agent markdown files
|
|
7
|
-
* @param {string} agentContent - The full content of the agent file
|
|
8
|
-
* @param {boolean} cleanCommands - Whether to clean command descriptions (default: false)
|
|
9
|
-
* @returns {string|null} - The extracted YAML content or null if not found
|
|
10
|
-
*/
|
|
11
|
-
function extractYamlFromAgent(agentContent, cleanCommands = false) {
|
|
12
|
-
// Remove carriage returns and match YAML block
|
|
13
|
-
const yamlMatch = agentContent.replace(/\r/g, "").match(/```ya?ml\n([\s\S]*?)\n```/);
|
|
14
|
-
if (!yamlMatch) return null;
|
|
15
|
-
|
|
16
|
-
let yamlContent = yamlMatch[1].trim();
|
|
17
|
-
|
|
18
|
-
// Clean up command descriptions if requested
|
|
19
|
-
// Converts "- command - description" to just "- command"
|
|
20
|
-
if (cleanCommands) {
|
|
21
|
-
yamlContent = yamlContent.replace(/^(\s*-)(\s*"[^"]+")(\s*-\s*.*)$/gm, '$1$2');
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return yamlContent;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
module.exports = {
|
|
28
|
-
extractYamlFromAgent
|
|
29
|
-
};
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# Web Agent Bundle Instructions
|
|
2
|
-
|
|
3
|
-
You are now operating as a specialized AI agent from the BMad-Method framework. This is a bundled web-compatible version containing all necessary resources for your role.
|
|
4
|
-
|
|
5
|
-
## Important Instructions
|
|
6
|
-
|
|
7
|
-
### **Follow all startup commands**: Your agent configuration includes startup instructions that define your behavior, personality, and approach. These MUST be followed exactly.
|
|
8
|
-
|
|
9
|
-
### **Resource Navigation**: This bundle contains all resources you need. Resources are marked with tags like:
|
|
10
|
-
|
|
11
|
-
- `==================== START: .bmad-core/folder/filename.md ====================`
|
|
12
|
-
- `==================== END: .bmad-core/folder/filename.md ====================`
|
|
13
|
-
|
|
14
|
-
When you need to reference a resource mentioned in your instructions:
|
|
15
|
-
|
|
16
|
-
- Look for the corresponding START/END tags
|
|
17
|
-
- The format is always the full path with dot prefix (e.g., `.bmad-core/personas/analyst.md`, `.bmad-core/tasks/create-story.md`)
|
|
18
|
-
- If a section is specified (e.g., `{root}/tasks/create-story.md#section-name`), navigate to that section within the file
|
|
19
|
-
|
|
20
|
-
**Understanding YAML References**: In the agent configuration, resources are referenced in the dependencies section. For example:
|
|
21
|
-
|
|
22
|
-
```yaml
|
|
23
|
-
dependencies:
|
|
24
|
-
utils:
|
|
25
|
-
- template-format
|
|
26
|
-
tasks:
|
|
27
|
-
- create-story
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
These references map directly to bundle sections:
|
|
31
|
-
|
|
32
|
-
- `dependencies.utils: template-format` → Look for `==================== START: .bmad-core/utils/template-format.md ====================`
|
|
33
|
-
- `dependencies.utils: create-story` → Look for `==================== START: .bmad-core/tasks/create-story.md ====================`
|
|
34
|
-
|
|
35
|
-
### **Execution Context**: You are operating in a web environment. All your capabilities and knowledge are contained within this bundle. Work within these constraints to provide the best possible assistance. You have no file system to write to, so you will maintain document history being drafted in your memory unless a canvas feature is available and the user confirms its usage.
|
|
36
|
-
|
|
37
|
-
## **Primary Directive**: Your primary goal is defined in your agent configuration below. Focus on fulfilling your designated role explicitly as defined.
|
|
38
|
-
|
|
39
|
-
---
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
const fs = require('fs');
|
|
4
|
-
const path = require('path');
|
|
5
|
-
const yaml = require('js-yaml');
|
|
6
|
-
|
|
7
|
-
const args = process.argv.slice(2);
|
|
8
|
-
|
|
9
|
-
if (args.length < 2) {
|
|
10
|
-
console.log('Usage: node update-expansion-version.js <expansion-pack-id> <new-version>');
|
|
11
|
-
console.log('Example: node update-expansion-version.js bmad-creator-tools 1.1.0');
|
|
12
|
-
process.exit(1);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const [packId, newVersion] = args;
|
|
16
|
-
|
|
17
|
-
// Validate version format
|
|
18
|
-
if (!/^\d+\.\d+\.\d+$/.test(newVersion)) {
|
|
19
|
-
console.error('Error: Version must be in format X.Y.Z (e.g., 1.2.3)');
|
|
20
|
-
process.exit(1);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
async function updateVersion() {
|
|
24
|
-
try {
|
|
25
|
-
// Update in config.yaml
|
|
26
|
-
const configPath = path.join(__dirname, '..', 'expansion-packs', packId, 'config.yaml');
|
|
27
|
-
|
|
28
|
-
if (!fs.existsSync(configPath)) {
|
|
29
|
-
console.error(`Error: Expansion pack '${packId}' not found`);
|
|
30
|
-
process.exit(1);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const configContent = fs.readFileSync(configPath, 'utf8');
|
|
34
|
-
const config = yaml.load(configContent);
|
|
35
|
-
const oldVersion = config.version || 'unknown';
|
|
36
|
-
|
|
37
|
-
config.version = newVersion;
|
|
38
|
-
|
|
39
|
-
const updatedYaml = yaml.dump(config, { indent: 2 });
|
|
40
|
-
fs.writeFileSync(configPath, updatedYaml);
|
|
41
|
-
|
|
42
|
-
console.log(`✓ Updated ${packId}/config.yaml: ${oldVersion} → ${newVersion}`);
|
|
43
|
-
console.log(`\n✓ Successfully updated ${packId} to version ${newVersion}`);
|
|
44
|
-
console.log('\nNext steps:');
|
|
45
|
-
console.log('1. Test the changes');
|
|
46
|
-
console.log('2. Commit: git add -A && git commit -m "chore: bump ' + packId + ' to v' + newVersion + '"');
|
|
47
|
-
|
|
48
|
-
} catch (error) {
|
|
49
|
-
console.error('Error updating version:', error.message);
|
|
50
|
-
process.exit(1);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
updateVersion();
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|