bmad-plus 0.12.2 → 0.14.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.
Files changed (127) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +96 -461
  3. package/package.json +12 -5
  4. package/readme-international/README.de.md +42 -9
  5. package/readme-international/README.es.md +43 -10
  6. package/readme-international/README.fr.md +42 -9
  7. package/src/bmad-plus/agents/agent-orchestrator/SKILL.md +5 -3
  8. package/src/bmad-plus/module.yaml +270 -220
  9. package/src/bmad-plus/packs/pack-dev-studio/README.md +133 -141
  10. package/src/bmad-plus/packs/pack-dev-studio/SKILL.md +49 -0
  11. package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/analyst-agent.md +35 -60
  12. package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/document-project.md +59 -59
  13. package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/domain-research.md +55 -93
  14. package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/market-research.md +58 -93
  15. package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/prfaq.md +55 -132
  16. package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/product-brief.md +63 -78
  17. package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/tech-writer-agent.md +54 -69
  18. package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/technical-research.md +54 -93
  19. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/architect-agent.md +32 -60
  20. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/create-architecture.md +67 -71
  21. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/create-epics-stories.md +61 -90
  22. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/generate-project-context.md +56 -78
  23. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/implementation-readiness.md +55 -88
  24. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-01-init.md +20 -153
  25. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-01b-continue.md +20 -173
  26. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-02-context.md +14 -220
  27. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-03-starter.md +20 -329
  28. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-04-decisions.md +15 -314
  29. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-05-patterns.md +15 -355
  30. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-06-structure.md +15 -375
  31. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-07-validation.md +14 -357
  32. package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-08-complete.md +13 -78
  33. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/checkpoint-preview.md +52 -65
  34. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review-steps/step-01-gather-context.md +14 -81
  35. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review-steps/step-02-review.md +14 -31
  36. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review-steps/step-03-triage.md +14 -45
  37. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review-steps/step-04-present.md +13 -128
  38. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review.md +61 -87
  39. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/correct-course.md +55 -298
  40. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/create-story.md +52 -426
  41. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/dev-agent.md +48 -69
  42. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/dev-story-checklist.md +22 -80
  43. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/dev-story.md +60 -482
  44. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/investigate.md +50 -184
  45. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/qa-e2e-tests.md +57 -173
  46. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/quick-dev.md +56 -108
  47. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/retrospective.md +54 -1509
  48. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/sprint-planning.md +54 -296
  49. package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/sprint-status.md +41 -283
  50. package/src/bmad-plus/packs/pack-dev-studio/categories/planning/create-prd.md +58 -18
  51. package/src/bmad-plus/packs/pack-dev-studio/categories/planning/create-ux-design.md +103 -72
  52. package/src/bmad-plus/packs/pack-dev-studio/categories/planning/edit-prd.md +55 -27
  53. package/src/bmad-plus/packs/pack-dev-studio/categories/planning/pm-agent.md +34 -60
  54. package/src/bmad-plus/packs/pack-dev-studio/categories/planning/prd.md +46 -87
  55. package/src/bmad-plus/packs/pack-dev-studio/categories/planning/steps/step-01-init.md +10 -0
  56. package/src/bmad-plus/packs/pack-dev-studio/categories/planning/ux-designer-agent.md +30 -60
  57. package/src/bmad-plus/packs/pack-dev-studio/categories/planning/validate-prd.md +57 -27
  58. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/advanced-elicitation.md +47 -138
  59. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/adversarial-review.md +48 -34
  60. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/bmad-help.md +51 -68
  61. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/brainstorming.md +46 -3
  62. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/customize.md +68 -109
  63. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/distillator.md +53 -174
  64. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/edge-case-hunter.md +39 -53
  65. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/editorial-review-prose.md +45 -83
  66. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/editorial-review-structure.md +45 -176
  67. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/index-docs.md +45 -63
  68. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/party-mode.md +53 -124
  69. package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/shard-doc.md +44 -100
  70. package/src/bmad-plus/packs/pack-dev-studio/dev-studio-orchestrator.md +56 -116
  71. package/src/bmad-plus/packs/pack-dev-studio/shared/architecture-decision-template.md +49 -12
  72. package/src/bmad-plus/packs/pack-dev-studio/shared/bwml-spec.md +51 -328
  73. package/src/bmad-plus/packs/pack-dev-studio/shared/catalog.json +489 -0
  74. package/src/bmad-plus/packs/pack-dev-studio/shared/execution.md +69 -0
  75. package/src/bmad-plus/packs/pack-dev-studio/shared/module-help.csv +39 -32
  76. package/src/bmad-plus/packs/pack-dev-studio/upstream-sync.yaml +85 -14
  77. package/src/bmad-plus/packs/pack-memory/README.md +6 -0
  78. package/src/bmad-plus/packs/pack-memory/memory-orchestrator.md +12 -5
  79. package/src/bmad-plus/packs/pack-seo/SKILL.md +27 -1
  80. package/src/bmad-plus/packs/pack-seo/scripts/seo_apis.py +8 -8
  81. package/src/bmad-plus/packs/pack-seo/scripts/seo_fetch.py +1 -2
  82. package/src/bmad-plus/packs/pack-seo/scripts/seo_report.py +0 -1
  83. package/src/bmad-plus/packs/pack-seo/seo-chief.md +16 -1
  84. package/src/bmad-plus/packs/pack-seo/seo-judge.md +12 -0
  85. package/src/bmad-plus/packs/pack-seo/seo-scout.md +12 -0
  86. package/src/bmad-plus/skills/bmad-plus-autopilot/SKILL.md +4 -4
  87. package/src/bmad-plus/skills/bmad-plus-sync/SKILL.md +5 -3
  88. package/src/bmad-plus/skills/dev-studio/SKILL.md +19 -0
  89. package/tools/bmad-plus-npx.js +4 -2
  90. package/tools/build/adapters.config.js +60 -51
  91. package/tools/build/check-counts.js +52 -54
  92. package/tools/build/check-install-contract.js +450 -0
  93. package/tools/build/generate-adapters.js +252 -56
  94. package/tools/build/generate.js +364 -14
  95. package/tools/build/generated-adapters/.codex/AGENTS.md +20 -7
  96. package/tools/build/generated-adapters/.cursor/rules/bmad-plus.mdc +20 -7
  97. package/tools/build/generated-adapters/.opencode/AGENTS.md +20 -7
  98. package/tools/build/generated-adapters/AGENTS.md +20 -7
  99. package/tools/build/generated-adapters/CLAUDE.md +20 -7
  100. package/tools/build/generated-adapters/CONVENTIONS.md +20 -7
  101. package/tools/build/generated-adapters/GEMINI.md +20 -7
  102. package/tools/build/module.template.yaml +82 -0
  103. package/tools/build/pack-delivery.js +78 -0
  104. package/tools/cli/bmad-plus-cli.js +16 -1
  105. package/tools/cli/commands/doctor.js +49 -217
  106. package/tools/cli/commands/install.js +109 -164
  107. package/tools/cli/commands/studio.js +68 -0
  108. package/tools/cli/commands/uninstall.js +173 -65
  109. package/tools/cli/commands/update-check.js +31 -0
  110. package/tools/cli/commands/update-policy.js +39 -0
  111. package/tools/cli/commands/update.js +102 -113
  112. package/tools/cli/i18n.js +60 -0
  113. package/tools/cli/lib/ide-config.js +4 -261
  114. package/tools/cli/lib/install-manifest.js +17 -0
  115. package/tools/cli/lib/installation-health.js +360 -0
  116. package/tools/cli/lib/installed-adapters.js +89 -0
  117. package/tools/cli/lib/npm-runner.js +177 -0
  118. package/tools/cli/lib/pack-copy.js +62 -66
  119. package/tools/cli/lib/packs.js +546 -3
  120. package/tools/cli/lib/python-health.js +233 -0
  121. package/tools/cli/lib/python-provision.js +2 -2
  122. package/tools/cli/lib/studio.js +310 -0
  123. package/tools/cli/lib/update-check.js +153 -0
  124. package/tools/cli/lib/update-dispatch.js +182 -0
  125. package/tools/cli/lib/update-policy.js +90 -0
  126. package/tools/cli/lib/update-transaction.js +334 -0
  127. package/tools/release/publication-content.js +901 -0
package/tools/cli/i18n.js CHANGED
@@ -58,6 +58,12 @@ const LANGUAGES = {
58
58
  guide_credits: '✨ BMAD+ is created by Laurent Rochetta — github.com/lrochetta/BMAD-PLUS ✨',
59
59
  // Uninstall
60
60
  uninstall_confirm: 'Remove BMAD+ from this project?',
61
+ noninteractive_requires_yes: (command) => "This command requires a terminal. Run `npx bmad-plus " + command + " --yes` to proceed without prompts.",
62
+ manifest_invalid: (error) => "Install manifest is unreadable or corrupt: " + error + "",
63
+ manifest_repair: 'Check _bmad/.bmad-plus-install.json and repair it before retrying.',
64
+ uninstall_not_installed: 'BMAD+ is not installed in this directory.',
65
+ uninstall_aborted: (error) => "Uninstall aborted: " + error + "",
66
+ uninstall_preserved: 'Project memory, settings, and unknown or modified files have been preserved.',
61
67
  uninstall_removing: 'Removing...',
62
68
  uninstall_done: (n) => `✅ BMAD+ removed (${n} items)`,
63
69
  uninstall_output_kept: '📁 _bmad-output/ kept (contains files)',
@@ -139,6 +145,12 @@ const LANGUAGES = {
139
145
  guide_ready: 'BMAD+ est prêt ! Parle à Atlas pour commencer 🚀',
140
146
  guide_credits: '✨ BMAD+ est créé par Laurent Rochetta — github.com/lrochetta/BMAD-PLUS ✨',
141
147
  uninstall_confirm: 'Supprimer BMAD+ de ce projet ?',
148
+ noninteractive_requires_yes: (command) => "Cette commande nécessite un terminal. Lancez `npx bmad-plus " + command + " --yes` pour continuer sans invite.",
149
+ manifest_invalid: (error) => "Le manifeste d’installation est illisible ou corrompu : " + error + "",
150
+ manifest_repair: 'Vérifiez _bmad/.bmad-plus-install.json et réparez-le avant de réessayer.',
151
+ uninstall_not_installed: 'BMAD+ n’est pas installé dans ce répertoire.',
152
+ uninstall_aborted: (error) => "Désinstallation interrompue : " + error + "",
153
+ uninstall_preserved: 'La mémoire, les réglages et les fichiers inconnus ou modifiés ont été conservés.',
142
154
  uninstall_removing: 'Suppression...',
143
155
  uninstall_done: (n) => `✅ BMAD+ supprimé (${n} éléments)`,
144
156
  uninstall_output_kept: '📁 _bmad-output/ conservé (contient des fichiers)',
@@ -219,6 +231,12 @@ const LANGUAGES = {
219
231
  guide_ready: '¡BMAD+ está listo! Habla con Atlas para comenzar 🚀',
220
232
  guide_credits: '✨ BMAD+ es creado por Laurent Rochetta — github.com/lrochetta/BMAD-PLUS ✨',
221
233
  uninstall_confirm: '¿Eliminar BMAD+ de este proyecto?',
234
+ noninteractive_requires_yes: (command) => "Este comando requiere una terminal. Ejecute `npx bmad-plus " + command + " --yes` para continuar sin preguntas.",
235
+ manifest_invalid: (error) => "El manifiesto de instalación no se puede leer o está dañado: " + error + "",
236
+ manifest_repair: 'Revise _bmad/.bmad-plus-install.json y repárelo antes de reintentar.',
237
+ uninstall_not_installed: 'BMAD+ no está instalado en este directorio.',
238
+ uninstall_aborted: (error) => "Desinstalación interrumpida: " + error + "",
239
+ uninstall_preserved: 'Se han conservado la memoria, los ajustes y los archivos desconocidos o modificados.',
222
240
  uninstall_removing: 'Eliminando...',
223
241
  uninstall_done: (n) => `✅ BMAD+ eliminado (${n} elementos)`,
224
242
  uninstall_output_kept: '📁 _bmad-output/ conservado (contiene archivos)',
@@ -299,6 +317,12 @@ const LANGUAGES = {
299
317
  guide_ready: 'BMAD+ ist bereit! Sprich mit Atlas um loszulegen 🚀',
300
318
  guide_credits: '✨ BMAD+ wurde erstellt von Laurent Rochetta — github.com/lrochetta/BMAD-PLUS ✨',
301
319
  uninstall_confirm: 'BMAD+ aus diesem Projekt entfernen?',
320
+ noninteractive_requires_yes: (command) => "Dieser Befehl benötigt ein Terminal. Führen Sie `npx bmad-plus " + command + " --yes` aus, um ohne Rückfragen fortzufahren.",
321
+ manifest_invalid: (error) => "Das Installationsmanifest ist unlesbar oder beschädigt: " + error + "",
322
+ manifest_repair: 'Prüfen und reparieren Sie _bmad/.bmad-plus-install.json vor einem erneuten Versuch.',
323
+ uninstall_not_installed: 'BMAD+ ist in diesem Verzeichnis nicht installiert.',
324
+ uninstall_aborted: (error) => "Deinstallation abgebrochen: " + error + "",
325
+ uninstall_preserved: 'Projektspeicher, Einstellungen sowie unbekannte oder geänderte Dateien wurden erhalten.',
302
326
  uninstall_removing: 'Entfernen...',
303
327
  uninstall_done: (n) => `✅ BMAD+ entfernt (${n} Elemente)`,
304
328
  uninstall_output_kept: '📁 _bmad-output/ beibehalten (enthält Dateien)',
@@ -379,6 +403,12 @@ const LANGUAGES = {
379
403
  guide_ready: 'BMAD+ está pronto! Fale com Atlas para começar 🚀',
380
404
  guide_credits: '✨ BMAD+ foi criado por Laurent Rochetta — github.com/lrochetta/BMAD-PLUS ✨',
381
405
  uninstall_confirm: 'Remover BMAD+ deste projeto?',
406
+ noninteractive_requires_yes: (command) => "Este comando exige um terminal. Execute `npx bmad-plus " + command + " --yes` para continuar sem perguntas.",
407
+ manifest_invalid: (error) => "O manifesto de instalação está ilegível ou corrompido: " + error + "",
408
+ manifest_repair: 'Verifique e repare _bmad/.bmad-plus-install.json antes de tentar novamente.',
409
+ uninstall_not_installed: 'BMAD+ não está instalado neste diretório.',
410
+ uninstall_aborted: (error) => "Desinstalação interrompida: " + error + "",
411
+ uninstall_preserved: 'A memória, as configurações e os arquivos desconhecidos ou modificados foram preservados.',
382
412
  uninstall_removing: 'Removendo...',
383
413
  uninstall_done: (n) => `✅ BMAD+ removido (${n} itens)`,
384
414
  uninstall_output_kept: '📁 _bmad-output/ mantido (contém arquivos)',
@@ -459,6 +489,12 @@ const LANGUAGES = {
459
489
  guide_ready: 'BMAD+ готов! Поговорите с Atlas чтобы начать 🚀',
460
490
  guide_credits: '✨ BMAD+ создан Laurent Rochetta — github.com/lrochetta/BMAD-PLUS ✨',
461
491
  uninstall_confirm: 'Удалить BMAD+ из этого проекта?',
492
+ noninteractive_requires_yes: (command) => "Для этой команды нужен терминал. Запустите `npx bmad-plus " + command + " --yes`, чтобы продолжить без запросов.",
493
+ manifest_invalid: (error) => "Манифест установки недоступен или повреждён: " + error + "",
494
+ manifest_repair: 'Проверьте и исправьте _bmad/.bmad-plus-install.json перед повторной попыткой.',
495
+ uninstall_not_installed: 'BMAD+ не установлен в этом каталоге.',
496
+ uninstall_aborted: (error) => "Удаление прервано: " + error + "",
497
+ uninstall_preserved: 'Память проекта, настройки и неизвестные или изменённые файлы сохранены.',
462
498
  uninstall_removing: 'Удаление...',
463
499
  uninstall_done: (n) => `✅ BMAD+ удалён (${n} элементов)`,
464
500
  uninstall_output_kept: '📁 _bmad-output/ сохранён (содержит файлы)',
@@ -539,6 +575,12 @@ const LANGUAGES = {
539
575
  guide_ready: 'BMAD+ 已就绪!与 Atlas 交谈开始 🚀',
540
576
  guide_credits: '✨ BMAD+ 由 Laurent Rochetta 创建 — github.com/lrochetta/BMAD-PLUS ✨',
541
577
  uninstall_confirm: '从此项目中删除 BMAD+?',
578
+ noninteractive_requires_yes: (command) => "此命令需要终端。运行 `npx bmad-plus " + command + " --yes` 可跳过提示并继续。",
579
+ manifest_invalid: (error) => "安装清单无法读取或已损坏:" + error + "",
580
+ manifest_repair: '请检查并修复 _bmad/.bmad-plus-install.json 后重试。',
581
+ uninstall_not_installed: '此目录未安装 BMAD+。',
582
+ uninstall_aborted: (error) => "卸载已中止:" + error + "",
583
+ uninstall_preserved: '项目记忆、设置以及未知或修改过的文件已保留。',
542
584
  uninstall_removing: '删除中...',
543
585
  uninstall_done: (n) => `✅ BMAD+ 已删除(${n} 项)`,
544
586
  uninstall_output_kept: '📁 _bmad-output/ 已保留(包含文件)',
@@ -619,6 +661,12 @@ const LANGUAGES = {
619
661
  guide_ready: '!BMAD+ מוכן! דבר עם Atlas כדי להתחיל 🚀',
620
662
  guide_credits: '✨ BMAD+ נוצר על ידי Laurent Rochetta — github.com/lrochetta/BMAD-PLUS ✨',
621
663
  uninstall_confirm: 'להסיר את BMAD+ מהפרויקט הזה?',
664
+ noninteractive_requires_yes: (command) => "פקודה זו דורשת מסוף. להרצה ללא שאלות, הפעילו `npx bmad-plus " + command + " --yes`.",
665
+ manifest_invalid: (error) => "קובץ פרטי ההתקנה אינו קריא או פגום: " + error + "",
666
+ manifest_repair: 'בדקו ותקנו את _bmad/.bmad-plus-install.json לפני ניסיון נוסף.',
667
+ uninstall_not_installed: 'BMAD+ אינו מותקן בתיקייה זו.',
668
+ uninstall_aborted: (error) => "ההסרה הופסקה: " + error + "",
669
+ uninstall_preserved: 'זיכרון הפרויקט, ההגדרות וקבצים לא מוכרים או ששונו נשמרו.',
622
670
  uninstall_removing: 'מסיר...',
623
671
  uninstall_done: (n) => `✅ BMAD+ הוסר (${n} פריטים)`,
624
672
  uninstall_output_kept: '📁 _bmad-output/ נשמר (מכיל קבצים)',
@@ -699,6 +747,12 @@ const LANGUAGES = {
699
747
  guide_ready: 'BMAD+ 準備完了!Atlasに話しかけて始めましょう 🚀',
700
748
  guide_credits: '✨ BMAD+ は Laurent Rochetta によって作成されました — github.com/lrochetta/BMAD-PLUS ✨',
701
749
  uninstall_confirm: 'このプロジェクトからBMAD+を削除しますか?',
750
+ noninteractive_requires_yes: (command) => "このコマンドには端末が必要です。確認なしで続行するには `npx bmad-plus " + command + " --yes` を実行してください。",
751
+ manifest_invalid: (error) => "インストール情報を読み込めないか破損しています:" + error + "",
752
+ manifest_repair: '_bmad/.bmad-plus-install.json を確認・修復してから再試行してください。',
753
+ uninstall_not_installed: 'このディレクトリには BMAD+ がインストールされていません。',
754
+ uninstall_aborted: (error) => "アンインストールを中止しました:" + error + "",
755
+ uninstall_preserved: 'プロジェクトの記憶、設定、不明なファイルや変更されたファイルは保持されました。',
702
756
  uninstall_removing: '削除中...',
703
757
  uninstall_done: (n) => `✅ BMAD+を削除しました(${n}項目)`,
704
758
  uninstall_output_kept: '📁 _bmad-output/ は保持されました(ファイルが含まれています)',
@@ -779,6 +833,12 @@ const LANGUAGES = {
779
833
  guide_ready: 'BMAD+ è pronto! Parla con Atlas per iniziare 🚀',
780
834
  guide_credits: '✨ BMAD+ è creato da Laurent Rochetta — github.com/lrochetta/BMAD-PLUS ✨',
781
835
  uninstall_confirm: 'Rimuovere BMAD+ da questo progetto?',
836
+ noninteractive_requires_yes: (command) => "Questo comando richiede un terminale. Eseguire `npx bmad-plus " + command + " --yes` per continuare senza domande.",
837
+ manifest_invalid: (error) => "Il manifesto di installazione è illeggibile o danneggiato: " + error + "",
838
+ manifest_repair: 'Controllare e riparare _bmad/.bmad-plus-install.json prima di riprovare.',
839
+ uninstall_not_installed: 'BMAD+ non è installato in questa directory.',
840
+ uninstall_aborted: (error) => "Disinstallazione interrotta: " + error + "",
841
+ uninstall_preserved: 'La memoria, le impostazioni e i file sconosciuti o modificati sono stati conservati.',
782
842
  uninstall_removing: 'Rimozione...',
783
843
  uninstall_done: (n) => `✅ BMAD+ rimosso (${n} elementi)`,
784
844
  uninstall_output_kept: '📁 _bmad-output/ conservato (contiene file)',
@@ -1,267 +1,10 @@
1
1
  /**
2
- * BMAD+ IDE Configuration Generator
3
- * Extracted from install.js for modularity.
4
- * Generates CLAUDE.md, GEMINI.md, AGENTS.md content with pack-aware agent filtering.
5
- *
2
+ * Compatibility entry for IDE metadata. Rendering lives in the registry generator.
6
3
  * Author: Laurent Rochetta
7
4
  */
8
-
9
- // ── IDE Configurations ──
10
-
11
- const IDE_CONFIGS = {
12
- 'claude-code': {
13
- name: 'Claude Code',
14
- detect: ['.claude'],
15
- configFile: 'CLAUDE.md',
16
- },
17
- 'gemini-cli': {
18
- name: 'Gemini CLI',
19
- detect: ['.gemini'],
20
- configFile: 'GEMINI.md',
21
- },
22
- 'codex-cli': {
23
- name: 'Codex CLI / OpenCode',
24
- detect: ['.codex', '.opencode'],
25
- configFile: 'AGENTS.md',
26
- },
27
- 'antigravity': {
28
- name: 'Antigravity',
29
- detect: ['.gemini/antigravity'],
30
- configFile: 'GEMINI.md',
31
- },
32
- };
33
-
34
- // Shield ships 27 compliance agents (registry.yaml `shield.categories`) AND 11
35
- // workflows (`shield.workflows`) — two separate dimensions that must never be
36
- // summed into a single "agents" figure. Summing them is what produced the retired
37
- // "38" over-count that shipped into every generated user config. Declared once so
38
- // the two call sites below cannot drift apart; gated by tools/build/check-counts.js.
39
- const SHIELD_AGENT_LINE =
40
- '- **Shield** (GRC) — 27 compliance agents + 11 workflows (GDPR, ISO 27001, SOC 2, HIPAA, EU AI Act, DORA, NIS2...)';
41
-
42
- // All 14 BMAD+ agents — always included in templates
43
- const AGENT_LIST = [
44
- '- **Atlas** (Strategist) — Business analysis + Product management',
45
- '- **Forge** (Architect-Dev) — Architecture + Development + Documentation',
46
- '- **Sentinel** (Quality) — QA + UX review',
47
- '- **Nexus** (Orchestrator) — Sprint management + Autopilot + Parallel execution',
48
- '- **Shadow** (OSINT) — Investigation + Scraping + Psychoprofiling',
49
- SHIELD_AGENT_LINE,
50
- '- **Miriam** (מרים) — Business Analyst — Strategic analysis, research, product briefs',
51
- '- **Huldah** (חולדה) — Technical Writer — Documentation, diagrams, editorial review',
52
- '- **Yosef** (יוסף) — Product Manager — PRD, requirements, feature prioritization',
53
- '- **Rachel** (רחל) — UX Designer — User experience, wireframes, empathy mapping',
54
- '- **Bezalel** (בצלאל) — System Architect — Architecture, ADRs, epics & stories',
55
- '- **Oholiab** (אהליאב) — Senior Engineer — TDD, sprint, code review, implementation',
56
- '- **Zecher** (זכר) — Memory Archivist — Consolidation, project scanning, context recall',
57
- '- **Maker** (Creator) — Custom agent builder — Create new agents from description',
58
- ];
59
-
60
- /**
61
- * Filter agents based on installed packs.
62
- * Core agents are always included; others depend on pack selection.
63
- *
64
- * @param {string[]} packs - List of installed pack IDs
65
- * @returns {string[]} Agent description lines
66
- */
67
- function getAgentsByPacks(packs) {
68
- const agents = [
69
- '- **Atlas** (Strategist) — Business analysis + Product management',
70
- '- **Forge** (Architect-Dev) — Architecture + Development + Documentation',
71
- '- **Sentinel** (Quality) — QA + UX review',
72
- '- **Nexus** (Orchestrator) — Sprint management + Autopilot + Parallel execution',
73
- ];
74
-
75
- if (packs.includes('osint')) {
76
- agents.push('- **Shadow** (OSINT) — Investigation + Scraping + Psychoprofiling');
77
- }
78
-
79
- if (packs.includes('shield')) {
80
- agents.push(SHIELD_AGENT_LINE);
81
- }
82
-
83
- if (packs.includes('maker')) {
84
- agents.push('- **Maker** (Creator) — Custom agent builder — Create new agents from description');
85
- }
86
-
87
- if (packs.includes('dev-studio')) {
88
- agents.push('- **Miriam** (מרים) — Business Analyst — Strategic analysis, research, product briefs');
89
- agents.push('- **Huldah** (חולדה) — Technical Writer — Documentation, diagrams, editorial review');
90
- agents.push('- **Yosef** (יוסף) — Product Manager — PRD, requirements, feature prioritization');
91
- agents.push('- **Rachel** (רחל) — UX Designer — User experience, wireframes, empathy mapping');
92
- agents.push('- **Bezalel** (בצלאל) — System Architecture — Architecture, ADRs, epics & stories');
93
- agents.push('- **Oholiab** (אהליאב) — Senior Engineer — TDD, sprint, code review, implementation');
94
- }
95
-
96
- if (packs.includes('memory')) {
97
- agents.push('- **Zecher** (זכר) — Memory Archivist — Consolidation, project scanning, context recall');
98
- }
99
-
100
- return agents;
101
- }
102
-
103
- /**
104
- * Build the Memory Protocol section if the memory pack is installed.
105
- *
106
- * @param {string[]} packs - List of installed pack IDs
107
- * @returns {string} Memory section markdown (empty string if no memory pack)
108
- */
109
- function getMemorySection(packs) {
110
- if (!packs.includes('memory')) return '';
111
- return [
112
- '',
113
- '## Memory Protocol (Karpathy Guardrails)',
114
- '',
115
- 'Agents MUST follow these behavioral principles:',
116
- '',
117
- '### G1 — Think Before Coding',
118
- '- State assumptions explicitly. If uncertain, ask.',
119
- '- Check `.agents/memory/decisions.md` for prior decisions before re-deciding.',
120
- '',
121
- '### G2 — Simplicity First',
122
- '- Minimum code that solves the problem. Nothing speculative.',
123
- '- Check `.agents/memory/patterns.md` for existing solutions.',
124
- '',
125
- '### G3 — Surgical Changes',
126
- '- Touch only what you must. Match existing style.',
127
- '- Log surprises in `.agents/memory/lessons.md`.',
128
- '',
129
- '### G4 — Goal-Driven Execution',
130
- '- Define success criteria before implementing.',
131
- '- Log non-obvious decisions in `.agents/memory/decisions.md`.',
132
- '',
133
- '### Memory Files',
134
- '- `.agents/memory/decisions.md` — Read at session start, write when making decisions',
135
- '- `.agents/memory/lessons.md` — Write when something unexpected happens',
136
- '- `.agents/memory/patterns.md` — Write when a reusable pattern is validated',
137
- '- `.agents/memory/context.md` — Update at session end with project state',
138
- ].join('\n');
139
- }
140
-
141
- /**
142
- * Generate IDE config content with pack-aware agent filtering.
143
- *
144
- * @param {string} userName - The user's display name
145
- * @param {string} language - User-facing communication language
146
- * @param {string[]} packs - List of installed pack IDs
147
- * @returns {string} Complete Markdown template
148
- */
149
- function generateIDEConfig(userName, language, packs) {
150
- const agents = getAgentsByPacks(packs);
151
- const memorySection = getMemorySection(packs);
152
-
153
- return `# BMAD+ — AI Agent Configuration
154
-
155
- ## Project Context
156
- This project uses BMAD+, an augmented AI-driven development framework.
157
- Based on BMAD-METHOD v6.6.0 with multi-role agents, autopilot mode, and parallel execution.
158
-
159
- ## Agents
160
- To activate an agent, say its name or persona:
161
- ${agents.join('\n')}
162
-
163
- ## Skills
164
- - Load skills from \`.agents/skills/\`
165
- - Each agent has a SKILL.md with capabilities, activation protocol, and role-switching rules
166
- - Auto-activation triggers: \`.agents/data/role-triggers.yaml\`
167
-
168
- ## Key Commands
169
- - \`bmad-help\` — Show all available agents and skills
170
- - \`autopilot\` — Launch Nexus in full pipeline mode
171
- - \`parallel\` — Enable parallel multi-agent execution
172
-
173
- ## Communication
174
- - User name: ${userName}
175
- - Default language: ${language} for user-facing content, English for code and technical docs.
176
- ${memorySection}`;
177
- }
178
-
179
- /**
180
- * Generate a complete CLAUDE.md / GEMINI.md / AGENTS.md config file
181
- * (all agents, no filtering — backward compatible)
182
- *
183
- * @param {string} userName - The user's display name
184
- * @param {string} language - User-facing communication language
185
- * @returns {string} Complete Markdown template
186
- */
187
- function generateBaseConfig(userName, language) {
188
- return `# BMAD+ — AI Agent Configuration
189
-
190
- ## Project Context
191
- This project uses BMAD+, an augmented AI-driven development framework.
192
- Based on BMAD-METHOD v6.6.0 with multi-role agents, autopilot mode, and parallel execution.
193
-
194
- ## Agents
195
- To activate an agent, say its name or persona:
196
- ${AGENT_LIST.join('\n')}
197
-
198
- ## Skills
199
- - Load skills from \`.agents/skills/\`
200
- - Each agent has a SKILL.md with capabilities, activation protocol, and role-switching rules
201
- - Auto-activation triggers: \`.agents/data/role-triggers.yaml\`
202
-
203
- ## Key Commands
204
- - \`bmad-help\` — Show all available agents and skills
205
- - \`autopilot\` — Launch Nexus in full pipeline mode
206
- - \`parallel\` — Enable parallel multi-agent execution
207
-
208
- ## Communication
209
- - User name: ${userName}
210
- - Default language: ${language} for user-facing content, English for code and technical docs.
211
-
212
- ## Memory Protocol (Karpathy Guardrails)
213
-
214
- Agents MUST follow these behavioral principles:
215
-
216
- ### G1 — Think Before Coding
217
- - State assumptions explicitly. If uncertain, ask.
218
- - Check \`.agents/memory/decisions.md\` for prior decisions before re-deciding.
219
-
220
- ### G2 — Simplicity First
221
- - Minimum code that solves the problem. Nothing speculative.
222
- - Check \`.agents/memory/patterns.md\` for existing solutions.
223
-
224
- ### G3 — Surgical Changes
225
- - Touch only what you must. Match existing style.
226
- - Log surprises in \`.agents/memory/lessons.md\`.
227
-
228
- ### G4 — Goal-Driven Execution
229
- - Define success criteria before implementing.
230
- - Log non-obvious decisions in \`.agents/memory/decisions.md\`.
231
-
232
- ### Memory Files
233
- - \`.agents/memory/decisions.md\` — Read at session start, write when making decisions
234
- - \`.agents/memory/lessons.md\` — Write when something unexpected happens
235
- - \`.agents/memory/patterns.md\` — Write when a reusable pattern is validated
236
- - \`.agents/memory/context.md\` — Update at session end with project state`;
237
- }
5
+ const adapters = require('../../build/generate-adapters');
238
6
 
239
7
  module.exports = {
240
- IDE_CONFIGS,
241
- generateIDEConfig,
242
- getAgentsByPacks,
243
-
244
- /**
245
- * Generate CLAUDE.md config for Claude Code
246
- * @param {string} userName
247
- * @param {string} language
248
- * @returns {string}
249
- */
250
- generateClaudeMD: generateBaseConfig,
251
-
252
- /**
253
- * Generate GEMINI.md config for Gemini CLI / Antigravity
254
- * @param {string} userName
255
- * @param {string} language
256
- * @returns {string}
257
- */
258
- generateGeminiMD: generateBaseConfig,
259
-
260
- /**
261
- * Generate AGENTS.md config for Codex CLI / OpenCode
262
- * @param {string} userName
263
- * @param {string} language
264
- * @returns {string}
265
- */
266
- generateAgentsMD: generateBaseConfig,
8
+ get IDE_CONFIGS() { return adapters.IDE_CONFIGS; },
9
+ buildIDEConfigs: adapters.buildIDEConfigs,
267
10
  };
@@ -0,0 +1,17 @@
1
+ /** Read the manifest fields used by maintenance commands without unsafe coercion. */
2
+ const fs = require('node:fs');
3
+
4
+ function readInstallManifest(manifestPath) {
5
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
6
+ if (!manifest || typeof manifest !== 'object' || Array.isArray(manifest) ||
7
+ typeof manifest.version !== 'string' || !manifest.version.trim() ||
8
+ typeof manifest.installed !== 'string' || !Number.isFinite(Date.parse(manifest.installed)) ||
9
+ !Array.isArray(manifest.packs) || manifest.packs.length === 0 ||
10
+ manifest.packs.some(pack => typeof pack !== 'string' || !/^[a-z0-9-]+$/.test(pack)) ||
11
+ (manifest.uiLanguage !== undefined && typeof manifest.uiLanguage !== 'string')) {
12
+ throw new Error('Expected version, installed date, and a nonempty array of pack IDs.');
13
+ }
14
+ return manifest;
15
+ }
16
+
17
+ module.exports = { readInstallManifest };