mirror of
https://github.com/bmad-code-org/BMAD-METHOD.git
synced 2026-08-30 17:14:59 +08:00
b1bfce9aa7
* feat(cli): complete @clack/prompts migration
Full migration of BMAD CLI installer from legacy terminal libraries
(chalk, ora, boxen, figlet, wrap-ansi, cli-table3, readline) to unified
@clack/prompts v1.0.0 visual system.
Foundation (prompts.js + cli-utils.js):
- Extended prompts.js wrapper with box, spinner, progress, taskLog,
path, autocomplete, selectKey, stream, color re-export
- Refactored cli-utils.js: displayLogo uses box(), sections use note(),
steps use log.step(), removed boxen/figlet/wrap-ansi/cli-table3
UI orchestration (ui.js):
- Replaced ~100 console.log+chalk calls with log.*, note(), box()
- Replaced ora spinner with @clack spinner
- Module selection: autocompleteMultiselect with locked core module,
bulleted post-selection display, maxItems for no-scroll
Spinner migration (installer.js):
- Replaced 40+ ora spinner calls with @clack spinner
- All spinner.stop() calls include meaningful messages
- Failure paths use spinner.error() (red cross) instead of stop()
Readline migration (agent/installer.js + config-collector.js):
- Migrated readline prompts to @clack text/confirm/select
- Fixed chalk.dim bug (chalk was never imported)
- Removed chalk from config-collector.js
IDE handlers + modules (7 files):
- Replaced chalk+ora across all IDE handlers and module manager
- Fixed options.installer undefined bug in manager.js update()
Cleanup:
- Removed ora, boxen, figlet, wrap-ansi, cli-table3 from dependencies
- chalk stays (used outside tools/cli/ scope)
- Replaced hand-drawn Unicode update box in bmad-cli.js with box()
- Added process.stdin.setMaxListeners(25) for sequential prompts
Spinner wrapper adds isSpinning state tracking (not native to @clack).
Removed dead groupMultiselect and sortKey sort calls.
Ref: tech-spec-installer-clack-migration-ui-enhancement.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(cli): consolidate installer output to single spinner + summary
Replace ~40 lines of output from 15+ spinner start/stop cycles with a
single animated spinner during installation and a final note() summary
block showing checkmarks per step.
Key changes:
- Add results collector pattern in install() method
- Replace spinner.stop/start pairs with addResult + spinner.message
- Add renderInstallSummary() using prompts.note() with colored output
- Propagate silent flag through IDE handlers and module manager
- Add spinner race condition guards (start while spinning, stop while stopped)
- Add no-op spinner pattern for silent external module cloning
- Fix stdin listener limit to be defensive with Math.max
- Add GIT_TERMINAL_PROMPT=0 for non-interactive git operations
- Merge locked values into initialValue for autocomplete prompts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(cli): resolve code review findings from @clack/prompts migration
Address 31 issues across 14 CLI files found during PR #1586 review
(Augment Code + CodeRabbit):
- Fix bmadDir ReferenceError by hoisting declaration before try block
- Wrap console.log monkey-patch in try/finally for safe restoration
- Fix transformWorkflowPath dead code and undefined return path
- Fix broken symlink crash in _config-driven.js and codex.js cleanup
- Pass installer instance through update() for agent recompilation
- Fix @clack/prompts API: defaultValue→default, initialValue→default
- Use nullish coalescing (??) instead of logical OR for falsy values
- Forward options in recursive promptToolSelection calls
- Remove no-op replaceAll('_bmad','_bmad') in manager and generator
- Remove unused confirm prompt in config-collector hasNoConfig branch
- Guard spinner.message() when spinner is not running
- Add missing methods to silent spinner stub (cancel, clear, isSpinning)
- Wrap install.js error handler with inner try/catch + console fallback
- Gate codex per-entry error log with silent flag
- Add return statements to all stream wrapper methods
- Remove dead variables (availableNames, hasCustomContentItems)
- Filter core module from update flow selection
- Replace borderColor ternary chain with object map
- Fix Kilo "agents" label to "modes" in IDE manager
- Normalize error return shape for unsupported IDEs
- Fix spinner message timing before dependency resolution
- Guard undefined moduleDir in dependency-resolver
- Fix workflowsInstalled counter inflation in custom handler
- Migrate console.warn calls to prompts.log.warn
- Replace console.log() with prompts.log.message('')
- Fix legacyBmadPath hardcoded to .bmad instead of entry.name
- Fix focusedValue never assigned breaking SPACE toggle and hints
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
111 lines
3.4 KiB
JSON
111 lines
3.4 KiB
JSON
{
|
|
"$schema": "https://json.schemastore.org/package.json",
|
|
"name": "bmad-method",
|
|
"version": "6.0.0-Beta.7",
|
|
"description": "Breakthrough Method of Agile AI-driven Development",
|
|
"keywords": [
|
|
"agile",
|
|
"ai",
|
|
"orchestrator",
|
|
"development",
|
|
"methodology",
|
|
"agents",
|
|
"bmad"
|
|
],
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "git+https://github.com/bmad-code-org/BMAD-METHOD.git"
|
|
},
|
|
"license": "MIT",
|
|
"author": "Brian (BMad) Madison",
|
|
"main": "tools/cli/bmad-cli.js",
|
|
"bin": {
|
|
"bmad": "tools/bmad-npx-wrapper.js",
|
|
"bmad-method": "tools/bmad-npx-wrapper.js"
|
|
},
|
|
"scripts": {
|
|
"bmad:install": "node tools/cli/bmad-cli.js install",
|
|
"bundle": "node tools/cli/bundlers/bundle-web.js all",
|
|
"docs:build": "node tools/build-docs.mjs",
|
|
"docs:dev": "astro dev --root website",
|
|
"docs:fix-links": "node tools/fix-doc-links.js",
|
|
"docs:preview": "astro preview --root website",
|
|
"docs:validate-links": "node tools/validate-doc-links.js",
|
|
"flatten": "node tools/flattener/main.js",
|
|
"format:check": "prettier --check \"**/*.{js,cjs,mjs,json,yaml}\"",
|
|
"format:fix": "prettier --write \"**/*.{js,cjs,mjs,json,yaml}\"",
|
|
"format:fix:staged": "prettier --write",
|
|
"install:bmad": "node tools/cli/bmad-cli.js install",
|
|
"lint": "eslint . --ext .js,.cjs,.mjs,.yaml --max-warnings=0",
|
|
"lint:fix": "eslint . --ext .js,.cjs,.mjs,.yaml --fix",
|
|
"lint:md": "markdownlint-cli2 \"**/*.md\"",
|
|
"prepare": "command -v husky >/dev/null 2>&1 && husky || exit 0",
|
|
"rebundle": "node tools/cli/bundlers/bundle-web.js rebundle",
|
|
"test": "npm run test:schemas && npm run test:install && npm run validate:schemas && npm run lint && npm run lint:md && npm run format:check",
|
|
"test:coverage": "c8 --reporter=text --reporter=html npm run test:schemas",
|
|
"test:install": "node test/test-installation-components.js",
|
|
"test:schemas": "node test/test-agent-schema.js",
|
|
"validate:refs": "node tools/validate-file-refs.js",
|
|
"validate:schemas": "node tools/validate-agent-schema.js"
|
|
},
|
|
"lint-staged": {
|
|
"*.{js,cjs,mjs}": [
|
|
"npm run lint:fix",
|
|
"npm run format:fix:staged"
|
|
],
|
|
"*.yaml": [
|
|
"eslint --fix",
|
|
"npm run format:fix:staged"
|
|
],
|
|
"*.json": [
|
|
"npm run format:fix:staged"
|
|
],
|
|
"*.md": [
|
|
"markdownlint-cli2"
|
|
]
|
|
},
|
|
"dependencies": {
|
|
"@clack/core": "^1.0.0",
|
|
"@clack/prompts": "^1.0.0",
|
|
"@kayvan/markdown-tree-parser": "^1.6.1",
|
|
"chalk": "^4.1.2",
|
|
"commander": "^14.0.0",
|
|
"csv-parse": "^6.1.0",
|
|
"fs-extra": "^11.3.0",
|
|
"glob": "^11.0.3",
|
|
"ignore": "^7.0.5",
|
|
"js-yaml": "^4.1.0",
|
|
"picocolors": "^1.1.1",
|
|
"semver": "^7.6.3",
|
|
"xml2js": "^0.6.2",
|
|
"yaml": "^2.7.0"
|
|
},
|
|
"devDependencies": {
|
|
"@astrojs/sitemap": "^3.6.0",
|
|
"@astrojs/starlight": "^0.37.5",
|
|
"@eslint/js": "^9.33.0",
|
|
"astro": "^5.16.0",
|
|
"c8": "^10.1.3",
|
|
"eslint": "^9.33.0",
|
|
"eslint-config-prettier": "^10.1.8",
|
|
"eslint-plugin-n": "^17.21.3",
|
|
"eslint-plugin-unicorn": "^60.0.0",
|
|
"eslint-plugin-yml": "^1.18.0",
|
|
"husky": "^9.1.7",
|
|
"jest": "^30.2.0",
|
|
"lint-staged": "^16.1.1",
|
|
"markdownlint-cli2": "^0.19.1",
|
|
"prettier": "^3.7.4",
|
|
"prettier-plugin-packagejson": "^2.5.19",
|
|
"sharp": "^0.33.5",
|
|
"yaml-eslint-parser": "^1.2.3",
|
|
"yaml-lint": "^1.7.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=20.0.0"
|
|
},
|
|
"publishConfig": {
|
|
"access": "public"
|
|
}
|
|
}
|