bmad-plus 0.22.0 → 0.23.1

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 (60) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +46 -26
  3. package/SECURITY.md +1 -1
  4. package/osint-agent-package/agents/osint-investigator.md +3 -3
  5. package/osint-agent-package/skills/bmad-osint-investigate/osint/SKILL.md +51 -51
  6. package/osint-agent-package/skills/bmad-osint-investigate/osint/references/content-extraction.md +7 -7
  7. package/osint-agent-package/skills/bmad-osint-investigate/osint/references/platforms.md +2 -2
  8. package/osint-agent-package/skills/bmad-osint-investigate/osint/references/tools.md +31 -41
  9. package/package.json +24 -5
  10. package/readme-international/README.de.md +46 -26
  11. package/readme-international/README.es.md +47 -27
  12. package/readme-international/README.fr.md +46 -26
  13. package/src/bmad-plus/agents/agent-maker/SKILL.md +39 -14
  14. package/src/bmad-plus/agents/agent-orchestrator/SKILL.md +5 -1
  15. package/src/bmad-plus/data/role-triggers.yaml +34 -0
  16. package/src/bmad-plus/module-help.csv +2 -0
  17. package/src/bmad-plus/module.yaml +26 -4
  18. package/src/bmad-plus/packs/pack-animated/animated-website-agent.md +40 -14
  19. package/src/bmad-plus/packs/pack-animated/templates/animated-website-workflow.md +15 -12
  20. package/src/bmad-plus/packs/pack-backup/backup-agent.md +2 -1
  21. package/src/bmad-plus/packs/pack-backup/templates/backup-workflow.md +2 -0
  22. package/src/bmad-plus/packs/pack-design/SKILL.md +72 -0
  23. package/src/bmad-plus/packs/pack-design/bmad-skill-manifest.yaml +13 -0
  24. package/src/bmad-plus/packs/pack-design/design-engine.md +126 -0
  25. package/src/bmad-plus/packs/pack-design/intake.yaml +105 -0
  26. package/src/bmad-plus/packs/pack-memory/zecher-agent.md +1 -1
  27. package/src/bmad-plus/packs/pack-shield/README.md +1 -1
  28. package/src/bmad-plus/packs/pack-shield/SKILL.md +3 -3
  29. package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/pci-dss-agent.md +1 -1
  30. package/src/bmad-plus/packs/pack-shield/shield-orchestrator.md +2 -2
  31. package/src/bmad-plus/skills/bmad-plus-autopilot/SKILL.md +7 -0
  32. package/src/bmad-plus/skills/bmad-plus-intake/SKILL.md +87 -0
  33. package/src/bmad-plus/skills/bmad-plus-intake/ref/intake-format.md +112 -0
  34. package/src/bmad-plus/skills/bmad-plus-parallel/SKILL.md +18 -0
  35. package/src/bmad-plus/skills/bmad-plus-swarm/SKILL.md +115 -0
  36. package/src/bmad-plus/skills/bmad-plus-swarm/ref/definition.md +188 -0
  37. package/tools/build/adapters.config.js +3 -1
  38. package/tools/build/generate-adapters.js +26 -2
  39. package/tools/build/generate.js +269 -7
  40. package/tools/build/intake-contract.js +522 -0
  41. package/tools/cli/bmad-plus-cli.js +2 -0
  42. package/tools/cli/commands/install.js +45 -11
  43. package/tools/cli/commands/intake.js +124 -0
  44. package/tools/cli/commands/nexus.js +2 -1
  45. package/tools/cli/commands/review.js +1 -1
  46. package/tools/cli/commands/swarm.js +119 -0
  47. package/tools/cli/commands/uninstall.js +17 -0
  48. package/tools/cli/commands/update.js +30 -1
  49. package/tools/cli/i18n.js +50 -30
  50. package/tools/cli/lib/intake.js +202 -0
  51. package/tools/cli/lib/pack-copy.js +95 -5
  52. package/tools/cli/lib/packs.js +102 -12
  53. package/tools/cli/lib/review.js +2 -1
  54. package/tools/cli/lib/swarm-deal.js +116 -0
  55. package/tools/cli/lib/swarm-defaults.js +6 -0
  56. package/tools/cli/lib/swarm-tally.js +195 -0
  57. package/tools/cli/lib/swarm-validate.js +589 -0
  58. package/tools/cli/lib/swarm.js +712 -0
  59. package/tools/cli/lib/update-dispatch.js +10 -2
  60. package/tools/cli/lib/update-transaction.js +9 -6
@@ -24,6 +24,14 @@ function refusal(reason, detail) {
24
24
  });
25
25
  }
26
26
 
27
+ /**
28
+ * One refusal for an `--auto` request, wherever it is evaluated: a policy that
29
+ * is not in `auto` mode never reads as the generic `approval-required` status.
30
+ */
31
+ function autoRefusal(reason) {
32
+ return refusal(reason === 'approval-required' ? 'automatic-updates-not-authorized' : reason);
33
+ }
34
+
27
35
  function requirePolicy(policy, targetVersion, auto) {
28
36
  if (policy.registry !== OFFICIAL_REGISTRY) throw refusal('unsupported-registry');
29
37
  if (policy.mode === 'off') throw refusal('updates-disabled');
@@ -31,7 +39,7 @@ function requirePolicy(policy, targetVersion, auto) {
31
39
  throw refusal('prerelease-not-allowed');
32
40
  if (auto) {
33
41
  const authorization = authorizeTarget(policy, targetVersion);
34
- if (!authorization.allowed) throw refusal(authorization.reason);
42
+ if (!authorization.allowed) throw autoRefusal(authorization.reason);
35
43
  }
36
44
  }
37
45
 
@@ -179,4 +187,4 @@ async function runLatestUpdate({ projectDir, auto = false, yes = false }, inject
179
187
  };
180
188
  }
181
189
 
182
- module.exports = { runLatestUpdate };
190
+ module.exports = { runLatestUpdate, autoRefusal };
@@ -78,11 +78,15 @@ function collectManagedFiles({ projectDir, packageRoot = DEFAULT_PACKAGE_ROOT, p
78
78
  pack: PACKS[id],
79
79
  });
80
80
  for (const entry of entries.files)
81
- files.set(relativeFile(projectDir, entry.target), entry.source);
81
+ files.set(relativeFile(projectDir, entry.target), {
82
+ source: entry.source,
83
+ root: entry.root || packageRoot,
84
+ });
82
85
  }
83
- for (const file of MODULE_FILES) files.set(file, path.join(bmadSrc, path.basename(file)));
84
- return [...files].map(([file, source]) => {
85
- safeTarget(packageRoot, relativeFile(packageRoot, source));
86
+ for (const file of MODULE_FILES)
87
+ files.set(file, { source: path.join(bmadSrc, path.basename(file)), root: packageRoot });
88
+ return [...files].map(([file, { source, root }]) => {
89
+ safeTarget(root, relativeFile(root, source));
86
90
  return { file, content: fs.readFileSync(source), kind: 'pack' };
87
91
  });
88
92
  }
@@ -260,8 +264,7 @@ function planUpdate({
260
264
  for (const { file } of files) safeTarget(projectDir, file);
261
265
  if (auto && (legacy || conflicts.length))
262
266
  throw new Error(
263
- 'Automatic update refused: ' +
264
- (legacy ? 'legacy ownership inventory' : 'local file conflicts')
267
+ 'Update refused: ' + (legacy ? 'legacy ownership inventory' : 'local file conflicts') + '.'
265
268
  );
266
269
  return {
267
270
  projectDir,