bmad-method 4.37.0-beta.2 → 4.37.0-beta.3
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/README.md +3 -214
- package/package.json +26 -63
- 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/.github/workflows/discord.yaml +0 -16
- package/.github/workflows/release.yaml +0 -60
- package/.releaserc.json +0 -21
- package/.vscode/settings.json +0 -44
- package/CHANGELOG.md +0 -689
- package/CONTRIBUTING.md +0 -209
- package/LICENSE +0 -21
- 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/analyst.md +0 -81
- package/bmad-core/agents/architect.md +0 -84
- package/bmad-core/agents/bmad-master.md +0 -108
- package/bmad-core/agents/bmad-orchestrator.md +0 -150
- package/bmad-core/agents/dev.md +0 -76
- package/bmad-core/agents/pm.md +0 -81
- package/bmad-core/agents/po.md +0 -76
- package/bmad-core/agents/qa.md +0 -69
- package/bmad-core/agents/sm.md +0 -62
- package/bmad-core/agents/ux-expert.md +0 -66
- package/bmad-core/checklists/architect-checklist.md +0 -443
- package/bmad-core/checklists/change-checklist.md +0 -182
- package/bmad-core/checklists/pm-checklist.md +0 -375
- package/bmad-core/checklists/po-master-checklist.md +0 -441
- package/bmad-core/checklists/story-dod-checklist.md +0 -101
- package/bmad-core/checklists/story-draft-checklist.md +0 -156
- package/bmad-core/core-config.yaml +0 -20
- 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/data/technical-preferences.md +0 -3
- package/bmad-core/tasks/advanced-elicitation.md +0 -117
- package/bmad-core/tasks/brownfield-create-epic.md +0 -160
- package/bmad-core/tasks/brownfield-create-story.md +0 -147
- package/bmad-core/tasks/correct-course.md +0 -70
- package/bmad-core/tasks/create-brownfield-story.md +0 -304
- package/bmad-core/tasks/create-deep-research-prompt.md +0 -289
- package/bmad-core/tasks/create-next-story.md +0 -112
- package/bmad-core/tasks/document-project.md +0 -341
- 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/index-docs.md +0 -179
- package/bmad-core/tasks/kb-mode-interaction.md +0 -75
- package/bmad-core/tasks/review-story.md +0 -145
- package/bmad-core/tasks/shard-doc.md +0 -187
- 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/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-fullstack.yaml +0 -240
- 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 -101
- package/common/tasks/execute-checklist.md +0 -93
- package/common/utils/bmad-doc-template.md +0 -325
- package/common/utils/workflow-management.md +0 -69
- package/dist/agents/analyst.txt +0 -2882
- package/dist/agents/architect.txt +0 -3543
- package/dist/agents/bmad-master.txt +0 -8756
- package/dist/agents/bmad-orchestrator.txt +0 -1490
- package/dist/agents/dev.txt +0 -428
- package/dist/agents/pm.txt +0 -2229
- package/dist/agents/po.txt +0 -1364
- package/dist/agents/qa.txt +0 -386
- package/dist/agents/sm.txt +0 -668
- package/dist/agents/ux-expert.txt +0 -701
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +0 -2408
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +0 -1631
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +0 -822
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +0 -10989
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.txt +0 -4047
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.txt +0 -3744
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.txt +0 -465
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.txt +0 -990
- package/dist/expansion-packs/bmad-2d-unity-game-dev/teams/unity-2d-game-team.txt +0 -15467
- package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +0 -2077
- package/dist/teams/team-all.txt +0 -11062
- package/dist/teams/team-fullstack.txt +0 -10392
- package/dist/teams/team-ide-minimal.txt +0 -3507
- package/dist/teams/team-no-ui.txt +0 -8951
- package/docs/GUIDING-PRINCIPLES.md +0 -91
- package/docs/core-architecture.md +0 -219
- package/docs/enhanced-ide-development-workflow.md +0 -43
- package/docs/expansion-packs.md +0 -280
- package/docs/how-to-contribute-with-pull-requests.md +0 -158
- package/docs/user-guide.md +0 -251
- package/docs/versioning-and-releases.md +0 -77
- package/docs/versions.md +0 -48
- package/docs/working-in-the-brownfield.md +0 -364
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/Complete AI Agent System - Flowchart.svg +0 -102
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.1 Google Cloud Project Setup/1.1.1 - Initial Project Configuration - bash copy.txt +0 -13
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.1 Google Cloud Project Setup/1.1.1 - Initial Project Configuration - bash.txt +0 -13
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.2 Agent Development Kit Installation/1.2.2 - Basic Project Structure - txt.txt +0 -25
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.3 Core Configuration Files/1.3.1 - settings.py +0 -34
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.3 Core Configuration Files/1.3.2 - main.py - Base Application.py +0 -70
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.4 Deployment Configuration/1.4.2 - cloudbuild.yaml +0 -26
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/README.md +0 -109
- package/expansion-packs/README.md +0 -3
- 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 -71
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +0 -78
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +0 -64
- 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 -8
- 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-2d-unity-game-dev/agent-teams/unity-2d-game-team.yaml +0 -14
- package/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.md +0 -80
- package/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.md +0 -77
- package/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.md +0 -78
- package/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.md +0 -65
- package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-architect-checklist.md +0 -396
- package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-change-checklist.md +0 -203
- package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-design-checklist.md +0 -201
- package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-story-dod-checklist.md +0 -132
- package/expansion-packs/bmad-2d-unity-game-dev/config.yaml +0 -6
- package/expansion-packs/bmad-2d-unity-game-dev/data/bmad-kb.md +0 -776
- package/expansion-packs/bmad-2d-unity-game-dev/data/development-guidelines.md +0 -590
- package/expansion-packs/bmad-2d-unity-game-dev/tasks/advanced-elicitation.md +0 -111
- package/expansion-packs/bmad-2d-unity-game-dev/tasks/correct-course-game.md +0 -151
- package/expansion-packs/bmad-2d-unity-game-dev/tasks/create-game-story.md +0 -184
- package/expansion-packs/bmad-2d-unity-game-dev/tasks/game-design-brainstorming.md +0 -308
- package/expansion-packs/bmad-2d-unity-game-dev/tasks/validate-game-story.md +0 -200
- package/expansion-packs/bmad-2d-unity-game-dev/templates/game-architecture-tmpl.yaml +0 -1030
- package/expansion-packs/bmad-2d-unity-game-dev/templates/game-brief-tmpl.yaml +0 -356
- package/expansion-packs/bmad-2d-unity-game-dev/templates/game-design-doc-tmpl.yaml +0 -705
- package/expansion-packs/bmad-2d-unity-game-dev/templates/game-story-tmpl.yaml +0 -256
- package/expansion-packs/bmad-2d-unity-game-dev/templates/level-design-doc-tmpl.yaml +0 -484
- package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-dev-greenfield.yaml +0 -183
- package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-prototype.yaml +0 -175
- package/expansion-packs/bmad-infrastructure-devops/README.md +0 -147
- package/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.md +0 -71
- package/expansion-packs/bmad-infrastructure-devops/checklists/infrastructure-checklist.md +0 -484
- package/expansion-packs/bmad-infrastructure-devops/config.yaml +0 -9
- package/expansion-packs/bmad-infrastructure-devops/data/bmad-kb.md +0 -308
- package/expansion-packs/bmad-infrastructure-devops/tasks/review-infrastructure.md +0 -160
- package/expansion-packs/bmad-infrastructure-devops/tasks/validate-infrastructure.md +0 -154
- 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/bmad-npx-wrapper.js +0 -39
- package/tools/builders/web-builder.js +0 -681
- package/tools/bump-all-versions.js +0 -106
- package/tools/bump-expansion-version.js +0 -83
- package/tools/cli.js +0 -154
- package/tools/flattener/aggregate.js +0 -76
- package/tools/flattener/binary.js +0 -53
- package/tools/flattener/discovery.js +0 -70
- package/tools/flattener/files.js +0 -35
- package/tools/flattener/ignoreRules.js +0 -176
- package/tools/flattener/main.js +0 -217
- package/tools/flattener/projectRoot.js +0 -45
- package/tools/flattener/prompts.js +0 -44
- package/tools/flattener/stats.js +0 -30
- package/tools/flattener/xml.js +0 -86
- package/tools/installer/README.md +0 -8
- package/tools/installer/package.json +0 -44
- package/tools/lib/dependency-resolver.js +0 -179
- package/tools/lib/yaml-utils.js +0 -29
- package/tools/md-assets/web-agent-startup-instructions.md +0 -39
- package/tools/semantic-release-sync-installer.js +0 -30
- package/tools/shared/bannerArt.js +0 -105
- package/tools/sync-installer-version.js +0 -34
- package/tools/update-expansion-version.js +0 -54
- package/tools/upgraders/v3-to-v4-upgrader.js +0 -763
- package/tools/version-bump.js +0 -79
- package/tools/yaml-format.js +0 -240
- /package/{tools/installer/bin → bin}/bmad.js +0 -0
- /package/{tools/installer/config → config}/ide-agent-config.yaml +0 -0
- /package/{tools/installer/config → config}/install.config.yaml +0 -0
- /package/{tools/installer/lib → lib}/config-loader.js +0 -0
- /package/{tools/installer/lib → lib}/file-manager.js +0 -0
- /package/{tools/installer/lib → lib}/ide-base-setup.js +0 -0
- /package/{tools/installer/lib → lib}/ide-setup.js +0 -0
- /package/{tools/installer/lib → lib}/installer.js +0 -0
- /package/{tools/installer/lib → lib}/memory-profiler.js +0 -0
- /package/{tools/installer/lib → lib}/module-manager.js +0 -0
- /package/{tools/installer/lib → lib}/resource-locator.js +0 -0
package/tools/version-bump.js
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
const fs = require('fs');
|
|
4
|
-
const { execSync } = require('child_process');
|
|
5
|
-
const path = require('path');
|
|
6
|
-
|
|
7
|
-
// Dynamic import for ES module
|
|
8
|
-
let chalk;
|
|
9
|
-
|
|
10
|
-
// Initialize ES modules
|
|
11
|
-
async function initializeModules() {
|
|
12
|
-
if (!chalk) {
|
|
13
|
-
chalk = (await import('chalk')).default;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Simple version bumping script for BMad-Method
|
|
19
|
-
* Usage: node tools/version-bump.js [patch|minor|major]
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
function getCurrentVersion() {
|
|
23
|
-
const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8'));
|
|
24
|
-
return packageJson.version;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
async function bumpVersion(type = 'patch') {
|
|
28
|
-
await initializeModules();
|
|
29
|
-
|
|
30
|
-
const validTypes = ['patch', 'minor', 'major'];
|
|
31
|
-
if (!validTypes.includes(type)) {
|
|
32
|
-
console.error(chalk.red(`Invalid version type: ${type}. Use: ${validTypes.join(', ')}`));
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
console.log(chalk.yellow('⚠️ Manual version bumping is disabled.'));
|
|
37
|
-
console.log(chalk.blue('🤖 This project uses semantic-release for automated versioning.'));
|
|
38
|
-
console.log('');
|
|
39
|
-
console.log(chalk.bold('To create a new release, use conventional commits:'));
|
|
40
|
-
console.log(chalk.cyan(' feat: new feature (minor version bump)'));
|
|
41
|
-
console.log(chalk.cyan(' fix: bug fix (patch version bump)'));
|
|
42
|
-
console.log(chalk.cyan(' feat!: breaking change (major version bump)'));
|
|
43
|
-
console.log('');
|
|
44
|
-
console.log(chalk.dim('Example: git commit -m "feat: add new installer features"'));
|
|
45
|
-
console.log(chalk.dim('Then push to main branch to trigger automatic release.'));
|
|
46
|
-
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
async function main() {
|
|
51
|
-
await initializeModules();
|
|
52
|
-
|
|
53
|
-
const type = process.argv[2] || 'patch';
|
|
54
|
-
const currentVersion = getCurrentVersion();
|
|
55
|
-
|
|
56
|
-
console.log(chalk.blue(`Current version: ${currentVersion}`));
|
|
57
|
-
|
|
58
|
-
// Check if working directory is clean
|
|
59
|
-
try {
|
|
60
|
-
execSync('git diff-index --quiet HEAD --');
|
|
61
|
-
} catch (error) {
|
|
62
|
-
console.error(chalk.red('❌ Working directory is not clean. Commit your changes first.'));
|
|
63
|
-
process.exit(1);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const newVersion = await bumpVersion(type);
|
|
67
|
-
|
|
68
|
-
console.log(chalk.green(`\n🎉 Version bump complete!`));
|
|
69
|
-
console.log(chalk.blue(`📦 ${currentVersion} → ${newVersion}`));
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if (require.main === module) {
|
|
73
|
-
main().catch(error => {
|
|
74
|
-
console.error('Error:', error);
|
|
75
|
-
process.exit(1);
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
module.exports = { bumpVersion, getCurrentVersion };
|
package/tools/yaml-format.js
DELETED
|
@@ -1,240 +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
|
-
const { execSync } = require('child_process');
|
|
7
|
-
|
|
8
|
-
// Dynamic import for ES module
|
|
9
|
-
let chalk;
|
|
10
|
-
|
|
11
|
-
// Initialize ES modules
|
|
12
|
-
async function initializeModules() {
|
|
13
|
-
if (!chalk) {
|
|
14
|
-
chalk = (await import('chalk')).default;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* YAML Formatter and Linter for BMad-Method
|
|
20
|
-
* Formats and validates YAML files and YAML embedded in Markdown
|
|
21
|
-
*/
|
|
22
|
-
|
|
23
|
-
async function formatYamlContent(content, filename) {
|
|
24
|
-
await initializeModules();
|
|
25
|
-
try {
|
|
26
|
-
// First try to fix common YAML issues
|
|
27
|
-
let fixedContent = content
|
|
28
|
-
// Fix "commands :" -> "commands:"
|
|
29
|
-
.replace(/^(\s*)(\w+)\s+:/gm, '$1$2:')
|
|
30
|
-
// Fix inconsistent list indentation
|
|
31
|
-
.replace(/^(\s*)-\s{3,}/gm, '$1- ');
|
|
32
|
-
|
|
33
|
-
// Skip auto-fixing for .roomodes files - they have special nested structure
|
|
34
|
-
if (!filename.includes('.roomodes')) {
|
|
35
|
-
fixedContent = fixedContent
|
|
36
|
-
// Fix unquoted list items that contain special characters or multiple parts
|
|
37
|
-
.replace(/^(\s*)-\s+(.*)$/gm, (match, indent, content) => {
|
|
38
|
-
// Skip if already quoted
|
|
39
|
-
if (content.startsWith('"') && content.endsWith('"')) {
|
|
40
|
-
return match;
|
|
41
|
-
}
|
|
42
|
-
// If the content contains special YAML characters or looks complex, quote it
|
|
43
|
-
// BUT skip if it looks like a proper YAML key-value pair (like "key: value")
|
|
44
|
-
if ((content.includes(':') || content.includes('-') || content.includes('{') || content.includes('}')) &&
|
|
45
|
-
!content.match(/^\w+:\s/)) {
|
|
46
|
-
// Remove any existing quotes first, escape internal quotes, then add proper quotes
|
|
47
|
-
const cleanContent = content.replace(/^["']|["']$/g, '').replace(/"/g, '\\"');
|
|
48
|
-
return `${indent}- "${cleanContent}"`;
|
|
49
|
-
}
|
|
50
|
-
return match;
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Debug: show what we're trying to parse
|
|
55
|
-
if (fixedContent !== content) {
|
|
56
|
-
console.log(chalk.blue(`🔧 Applied YAML fixes to ${filename}`));
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Parse and re-dump YAML to format it
|
|
60
|
-
const parsed = yaml.load(fixedContent);
|
|
61
|
-
const formatted = yaml.dump(parsed, {
|
|
62
|
-
indent: 2,
|
|
63
|
-
lineWidth: -1, // Disable line wrapping
|
|
64
|
-
noRefs: true,
|
|
65
|
-
sortKeys: false // Preserve key order
|
|
66
|
-
});
|
|
67
|
-
return formatted;
|
|
68
|
-
} catch (error) {
|
|
69
|
-
console.error(chalk.red(`❌ YAML syntax error in ${filename}:`), error.message);
|
|
70
|
-
console.error(chalk.yellow(`💡 Try manually fixing the YAML structure first`));
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
async function processMarkdownFile(filePath) {
|
|
76
|
-
await initializeModules();
|
|
77
|
-
const content = fs.readFileSync(filePath, 'utf8');
|
|
78
|
-
let modified = false;
|
|
79
|
-
let newContent = content;
|
|
80
|
-
|
|
81
|
-
// Fix untyped code blocks by adding 'text' type
|
|
82
|
-
// Match ``` at start of line followed by newline, but only if it's an opening fence
|
|
83
|
-
newContent = newContent.replace(/^```\n([\s\S]*?)\n```$/gm, '```text\n$1\n```');
|
|
84
|
-
if (newContent !== content) {
|
|
85
|
-
modified = true;
|
|
86
|
-
console.log(chalk.blue(`🔧 Added 'text' type to untyped code blocks in ${filePath}`));
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Find YAML code blocks
|
|
90
|
-
const yamlBlockRegex = /```ya?ml\n([\s\S]*?)\n```/g;
|
|
91
|
-
let match;
|
|
92
|
-
const replacements = [];
|
|
93
|
-
|
|
94
|
-
while ((match = yamlBlockRegex.exec(newContent)) !== null) {
|
|
95
|
-
const [fullMatch, yamlContent] = match;
|
|
96
|
-
const formatted = await formatYamlContent(yamlContent, filePath);
|
|
97
|
-
if (formatted !== null) {
|
|
98
|
-
// Remove trailing newline that js-yaml adds
|
|
99
|
-
const trimmedFormatted = formatted.replace(/\n$/, '');
|
|
100
|
-
|
|
101
|
-
if (trimmedFormatted !== yamlContent) {
|
|
102
|
-
modified = true;
|
|
103
|
-
console.log(chalk.green(`✓ Formatted YAML in ${filePath}`));
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
replacements.push({
|
|
107
|
-
start: match.index,
|
|
108
|
-
end: match.index + fullMatch.length,
|
|
109
|
-
replacement: `\`\`\`yaml\n${trimmedFormatted}\n\`\`\``
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// Apply replacements in reverse order to maintain indices
|
|
115
|
-
for (let i = replacements.length - 1; i >= 0; i--) {
|
|
116
|
-
const { start, end, replacement } = replacements[i];
|
|
117
|
-
newContent = newContent.slice(0, start) + replacement + newContent.slice(end);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
if (modified) {
|
|
121
|
-
fs.writeFileSync(filePath, newContent);
|
|
122
|
-
return true;
|
|
123
|
-
}
|
|
124
|
-
return false;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
async function processYamlFile(filePath) {
|
|
128
|
-
await initializeModules();
|
|
129
|
-
const content = fs.readFileSync(filePath, 'utf8');
|
|
130
|
-
const formatted = await formatYamlContent(content, filePath);
|
|
131
|
-
|
|
132
|
-
if (formatted === null) {
|
|
133
|
-
return false; // Syntax error
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
if (formatted !== content) {
|
|
137
|
-
fs.writeFileSync(filePath, formatted);
|
|
138
|
-
return true;
|
|
139
|
-
}
|
|
140
|
-
return false;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
async function lintYamlFile(filePath) {
|
|
144
|
-
await initializeModules();
|
|
145
|
-
try {
|
|
146
|
-
// Use yaml-lint for additional validation
|
|
147
|
-
execSync(`npx yaml-lint "${filePath}"`, { stdio: 'pipe' });
|
|
148
|
-
return true;
|
|
149
|
-
} catch (error) {
|
|
150
|
-
console.error(chalk.red(`❌ YAML lint error in ${filePath}:`));
|
|
151
|
-
console.error(error.stdout?.toString() || error.message);
|
|
152
|
-
return false;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
async function main() {
|
|
157
|
-
await initializeModules();
|
|
158
|
-
const args = process.argv.slice(2);
|
|
159
|
-
const glob = require('glob');
|
|
160
|
-
|
|
161
|
-
if (args.length === 0) {
|
|
162
|
-
console.error('Usage: node yaml-format.js <file1> [file2] ...');
|
|
163
|
-
process.exit(1);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
let hasErrors = false;
|
|
167
|
-
let hasChanges = false;
|
|
168
|
-
let filesProcessed = [];
|
|
169
|
-
|
|
170
|
-
// Expand glob patterns and collect all files
|
|
171
|
-
const allFiles = [];
|
|
172
|
-
for (const arg of args) {
|
|
173
|
-
if (arg.includes('*')) {
|
|
174
|
-
// It's a glob pattern
|
|
175
|
-
const matches = glob.sync(arg);
|
|
176
|
-
allFiles.push(...matches);
|
|
177
|
-
} else {
|
|
178
|
-
// It's a direct file path
|
|
179
|
-
allFiles.push(arg);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
for (const filePath of allFiles) {
|
|
184
|
-
if (!fs.existsSync(filePath)) {
|
|
185
|
-
// Skip silently for glob patterns that don't match anything
|
|
186
|
-
if (!args.some(arg => arg.includes('*') && filePath === arg)) {
|
|
187
|
-
console.error(chalk.red(`❌ File not found: ${filePath}`));
|
|
188
|
-
hasErrors = true;
|
|
189
|
-
}
|
|
190
|
-
continue;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
194
|
-
const basename = path.basename(filePath).toLowerCase();
|
|
195
|
-
|
|
196
|
-
try {
|
|
197
|
-
let changed = false;
|
|
198
|
-
if (ext === '.md') {
|
|
199
|
-
changed = await processMarkdownFile(filePath);
|
|
200
|
-
} else if (ext === '.yaml' || ext === '.yml' || basename.includes('roomodes') || basename.includes('.yaml') || basename.includes('.yml')) {
|
|
201
|
-
// Handle YAML files and special cases like .roomodes
|
|
202
|
-
changed = await processYamlFile(filePath);
|
|
203
|
-
|
|
204
|
-
// Also run linting
|
|
205
|
-
const lintPassed = await lintYamlFile(filePath);
|
|
206
|
-
if (!lintPassed) hasErrors = true;
|
|
207
|
-
} else {
|
|
208
|
-
// Skip silently for unsupported files
|
|
209
|
-
continue;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
if (changed) {
|
|
213
|
-
hasChanges = true;
|
|
214
|
-
filesProcessed.push(filePath);
|
|
215
|
-
}
|
|
216
|
-
} catch (error) {
|
|
217
|
-
console.error(chalk.red(`❌ Error processing ${filePath}:`), error.message);
|
|
218
|
-
hasErrors = true;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
if (hasChanges) {
|
|
223
|
-
console.log(chalk.green(`\n✨ YAML formatting completed! Modified ${filesProcessed.length} files:`));
|
|
224
|
-
filesProcessed.forEach(file => console.log(chalk.blue(` 📝 ${file}`)));
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
if (hasErrors) {
|
|
228
|
-
console.error(chalk.red('\n💥 Some files had errors. Please fix them before committing.'));
|
|
229
|
-
process.exit(1);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
if (require.main === module) {
|
|
234
|
-
main().catch(error => {
|
|
235
|
-
console.error('Error:', error);
|
|
236
|
-
process.exit(1);
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
module.exports = { formatYamlContent, processMarkdownFile, processYamlFile };
|
|
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
|
|
File without changes
|