bmad-plus 0.9.0 → 0.9.2
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/CHANGELOG.md +36 -0
- package/LICENSE +21 -21
- package/README.md +106 -86
- package/osint-agent-package/README.md +88 -88
- package/osint-agent-package/SETUP_KEYS.md +108 -108
- package/osint-agent-package/agents/osint-investigator.md +80 -80
- package/osint-agent-package/install.ps1 +87 -87
- package/osint-agent-package/install.sh +76 -76
- package/osint-agent-package/skills/bmad-osint-investigate/SKILL.md +147 -147
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/enrichment-databases-fr.md +148 -148
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/_http.py +101 -101
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/apify.py +266 -266
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/brightdata.py +101 -101
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/diagnose.py +141 -141
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/exa.py +79 -79
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/jina.py +71 -71
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/parallel.py +85 -85
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/perplexity.py +102 -102
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/tavily.py +72 -72
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/volley.py +208 -208
- package/osint-agent-package/skills/bmad-osint-investigator/SKILL.md +15 -15
- package/package.json +30 -3
- package/readme-international/README.de.md +8 -3
- package/readme-international/README.es.md +8 -3
- package/readme-international/README.fr.md +8 -3
- package/src/bmad-plus/agents/agent-architect-dev/SKILL.md +96 -96
- package/src/bmad-plus/agents/agent-architect-dev/bmad-skill-manifest.yaml +13 -13
- package/src/bmad-plus/agents/agent-maker/SKILL.md +201 -201
- package/src/bmad-plus/agents/agent-maker/bmad-skill-manifest.yaml +13 -13
- package/src/bmad-plus/agents/agent-orchestrator/SKILL.md +137 -137
- package/src/bmad-plus/agents/agent-orchestrator/bmad-skill-manifest.yaml +13 -13
- package/src/bmad-plus/agents/agent-quality/SKILL.md +83 -83
- package/src/bmad-plus/agents/agent-quality/bmad-skill-manifest.yaml +13 -13
- package/src/bmad-plus/agents/agent-shadow/SKILL.md +71 -71
- package/src/bmad-plus/agents/agent-shadow/bmad-skill-manifest.yaml +13 -13
- package/src/bmad-plus/agents/agent-strategist/SKILL.md +80 -80
- package/src/bmad-plus/agents/agent-strategist/bmad-skill-manifest.yaml +13 -13
- package/src/bmad-plus/data/role-triggers.yaml +209 -209
- package/src/bmad-plus/module-help.csv +10 -10
- package/src/bmad-plus/packs/pack-memory/README.md +106 -106
- package/src/bmad-plus/packs/pack-memory/memory-orchestrator.md +79 -79
- package/src/bmad-plus/packs/pack-memory/shared/karpathy-guardrails.md +86 -86
- package/src/bmad-plus/packs/pack-memory/shared/memory-protocol.md +143 -143
- package/src/bmad-plus/packs/pack-memory/templates/context.md +39 -39
- package/src/bmad-plus/packs/pack-memory/templates/decisions.md +25 -25
- package/src/bmad-plus/packs/pack-memory/templates/identity.yaml +39 -39
- package/src/bmad-plus/packs/pack-memory/templates/lessons.md +31 -31
- package/src/bmad-plus/packs/pack-memory/templates/patterns.md +24 -24
- package/src/bmad-plus/packs/pack-memory/templates/session-handoff.md +25 -25
- package/src/bmad-plus/packs/pack-memory/zecher-agent.md +157 -157
- package/src/bmad-plus/packs/pack-seo/bmad-skill-manifest.yaml +13 -13
- package/src/bmad-plus/packs/pack-shield/README.md +110 -110
- package/src/bmad-plus/packs/pack-shield/SKILL.md +82 -82
- package/src/bmad-plus/packs/pack-shield/categories/accessibility-esg/csrd-agent.md +251 -251
- package/src/bmad-plus/packs/pack-shield/categories/accessibility-esg/section508-agent.md +168 -168
- package/src/bmad-plus/packs/pack-shield/categories/accessibility-esg/wcag-agent.md +190 -190
- package/src/bmad-plus/packs/pack-shield/categories/ai-governance/eu-ai-act-agent.md +86 -86
- package/src/bmad-plus/packs/pack-shield/categories/ai-governance/iso42001-agent.md +240 -240
- package/src/bmad-plus/packs/pack-shield/categories/ai-governance/nist-ai-rmf-agent.md +122 -122
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/cis-controls-agent.md +210 -210
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/ism-agent.md +139 -139
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/iso27001-agent.md +156 -156
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/nis2-agent.md +72 -72
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/nist-800-53-agent.md +239 -239
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/nist-csf-agent.md +207 -207
- package/src/bmad-plus/packs/pack-shield/categories/data-privacy/ccpa-agent.md +94 -94
- package/src/bmad-plus/packs/pack-shield/categories/data-privacy/dpdpa-agent.md +136 -136
- package/src/bmad-plus/packs/pack-shield/categories/data-privacy/gdpr-agent.md +296 -296
- package/src/bmad-plus/packs/pack-shield/categories/data-privacy/iso27701-agent.md +134 -134
- package/src/bmad-plus/packs/pack-shield/categories/data-privacy/lgpd-agent.md +129 -129
- package/src/bmad-plus/packs/pack-shield/categories/defense-export/cmmc-agent.md +116 -116
- package/src/bmad-plus/packs/pack-shield/categories/defense-export/ear-agent.md +261 -261
- package/src/bmad-plus/packs/pack-shield/categories/defense-export/itar-agent.md +191 -191
- package/src/bmad-plus/packs/pack-shield/categories/defense-export/tsa-agent.md +356 -356
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/dora-agent.md +499 -499
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/fedramp-agent.md +236 -236
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/hipaa-agent.md +162 -162
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/pci-dss-agent.md +228 -228
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/soc2-agent.md +255 -255
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/swift-csp-agent.md +153 -153
- package/src/bmad-plus/packs/pack-shield/categories/workflows/ai-act-classifier.md +131 -131
- package/src/bmad-plus/packs/pack-shield/categories/workflows/ai-act-fria.md +155 -155
- package/src/bmad-plus/packs/pack-shield/categories/workflows/ai-act-incidents.md +187 -187
- package/src/bmad-plus/packs/pack-shield/categories/workflows/ai-act-roles.md +113 -113
- package/src/bmad-plus/packs/pack-shield/categories/workflows/breach-sentinel.md +197 -197
- package/src/bmad-plus/packs/pack-shield/categories/workflows/cookie-policy-gen.md +180 -180
- package/src/bmad-plus/packs/pack-shield/categories/workflows/dpia-sentinel.md +235 -235
- package/src/bmad-plus/packs/pack-shield/categories/workflows/legitimate-interest.md +159 -159
- package/src/bmad-plus/packs/pack-shield/categories/workflows/privacy-advisor.md +133 -133
- package/src/bmad-plus/packs/pack-shield/categories/workflows/privacy-notice-gen.md +160 -160
- package/src/bmad-plus/packs/pack-shield/categories/workflows/privacy-policy-gen.md +135 -135
- package/src/bmad-plus/packs/pack-shield/references/ccpa/ccpa-gdpr-comparison.md +117 -117
- package/src/bmad-plus/packs/pack-shield/references/ccpa/consumer-rights-workflows.md +177 -177
- package/src/bmad-plus/packs/pack-shield/references/cis-controls/framework-mappings.md +162 -162
- package/src/bmad-plus/packs/pack-shield/references/cis-controls/implementation-guidance.md +235 -235
- package/src/bmad-plus/packs/pack-shield/references/cis-controls/safeguards-detail.md +252 -252
- package/src/bmad-plus/packs/pack-shield/references/cmmc/cmmc-assessment.md +170 -170
- package/src/bmad-plus/packs/pack-shield/references/cmmc/cmmc-levels.md +113 -113
- package/src/bmad-plus/packs/pack-shield/references/cmmc/cmmc-practices.md +211 -211
- package/src/bmad-plus/packs/pack-shield/references/csrd/compliance-program.md +281 -281
- package/src/bmad-plus/packs/pack-shield/references/csrd/double-materiality.md +253 -253
- package/src/bmad-plus/packs/pack-shield/references/csrd/esrs-standards.md +401 -401
- package/src/bmad-plus/packs/pack-shield/references/dora/article-reference.md +441 -441
- package/src/bmad-plus/packs/pack-shield/references/dora/incident-classification.md +297 -297
- package/src/bmad-plus/packs/pack-shield/references/dora/rts-its-guide.md +306 -306
- package/src/bmad-plus/packs/pack-shield/references/dora/third-party-risk.md +349 -349
- package/src/bmad-plus/packs/pack-shield/references/dpdpa/gdpr-comparison.md +173 -173
- package/src/bmad-plus/packs/pack-shield/references/dpdpa/rights-and-obligations.md +426 -426
- package/src/bmad-plus/packs/pack-shield/references/dpdpa/rules-2025.md +599 -599
- package/src/bmad-plus/packs/pack-shield/references/dpdpa/sections-reference.md +319 -319
- package/src/bmad-plus/packs/pack-shield/references/ear/ccl-eccn-guide.md +250 -250
- package/src/bmad-plus/packs/pack-shield/references/ear/compliance-program.md +280 -280
- package/src/bmad-plus/packs/pack-shield/references/ear/license-exceptions.md +207 -207
- package/src/bmad-plus/packs/pack-shield/references/eu-ai-act/gpai-governance.md +267 -267
- package/src/bmad-plus/packs/pack-shield/references/eu-ai-act/obligations-high-risk.md +287 -287
- package/src/bmad-plus/packs/pack-shield/references/eu-ai-act/risk-classification.md +182 -182
- package/src/bmad-plus/packs/pack-shield/references/fedramp/appendices-guide.md +209 -209
- package/src/bmad-plus/packs/pack-shield/references/fedramp/control-families.md +281 -281
- package/src/bmad-plus/packs/pack-shield/references/fedramp/poam-guide.md +93 -93
- package/src/bmad-plus/packs/pack-shield/references/fedramp/readiness-checklist.md +134 -134
- package/src/bmad-plus/packs/pack-shield/references/fedramp/sap-sar-guide.md +86 -86
- package/src/bmad-plus/packs/pack-shield/references/fedramp/ssp-guide.md +129 -129
- package/src/bmad-plus/packs/pack-shield/references/gdpr-compliance/documents.md +192 -192
- package/src/bmad-plus/packs/pack-shield/references/gdpr-compliance/dpa-template.md +121 -121
- package/src/bmad-plus/packs/pack-shield/references/gdpr-compliance/privacy-notice.md +87 -87
- package/src/bmad-plus/packs/pack-shield/references/hipaa-compliance/breach-notification.md +293 -293
- package/src/bmad-plus/packs/pack-shield/references/hipaa-compliance/privacy-rule.md +276 -276
- package/src/bmad-plus/packs/pack-shield/references/hipaa-compliance/security-rule.md +299 -299
- package/src/bmad-plus/packs/pack-shield/references/hipaa-compliance/templates.md +568 -568
- package/src/bmad-plus/packs/pack-shield/references/ism/control-applicability.md +181 -181
- package/src/bmad-plus/packs/pack-shield/references/ism/guidelines-overview.md +183 -183
- package/src/bmad-plus/packs/pack-shield/references/iso27001/annex-a-2013.md +203 -203
- package/src/bmad-plus/packs/pack-shield/references/iso27001/annex-a-2022.md +132 -132
- package/src/bmad-plus/packs/pack-shield/references/iso27001/control-mapping.md +153 -153
- package/src/bmad-plus/packs/pack-shield/references/iso27701/annex-a-controls.md +195 -195
- package/src/bmad-plus/packs/pack-shield/references/iso27701/regulatory-mapping.md +229 -229
- package/src/bmad-plus/packs/pack-shield/references/iso27701/transition-guide.md +219 -219
- package/src/bmad-plus/packs/pack-shield/references/iso42001/iso42001-ai-risk-assessment.md +258 -258
- package/src/bmad-plus/packs/pack-shield/references/iso42001/iso42001-clauses-requirements.md +279 -279
- package/src/bmad-plus/packs/pack-shield/references/iso42001/iso42001-controls-annex-a.md +155 -155
- package/src/bmad-plus/packs/pack-shield/references/itar/compliance-program.md +174 -174
- package/src/bmad-plus/packs/pack-shield/references/itar/licensing-guide.md +146 -146
- package/src/bmad-plus/packs/pack-shield/references/itar/usml-categories.md +93 -93
- package/src/bmad-plus/packs/pack-shield/references/lgpd/anpd-enforcement.md +147 -147
- package/src/bmad-plus/packs/pack-shield/references/lgpd/compliance-program.md +272 -272
- package/src/bmad-plus/packs/pack-shield/references/lgpd/lgpd-articles.md +271 -271
- package/src/bmad-plus/packs/pack-shield/references/nis2/article-21-measures.md +153 -153
- package/src/bmad-plus/packs/pack-shield/references/nis2/iso27001-nis2-mapping.md +68 -68
- package/src/bmad-plus/packs/pack-shield/references/nist-800-53/assessment-rmf.md +349 -349
- package/src/bmad-plus/packs/pack-shield/references/nist-800-53/baselines-tailoring.md +277 -277
- package/src/bmad-plus/packs/pack-shield/references/nist-800-53/control-families.md +450 -450
- package/src/bmad-plus/packs/pack-shield/references/nist-ai-rmf/rmf-core.md +361 -361
- package/src/bmad-plus/packs/pack-shield/references/nist-ai-rmf/rmf-profiles.md +192 -192
- package/src/bmad-plus/packs/pack-shield/references/nist-csf/csf-10-to-20-mapping.md +143 -143
- package/src/bmad-plus/packs/pack-shield/references/nist-csf/csf-20-functions-categories.md +278 -278
- package/src/bmad-plus/packs/pack-shield/references/nist-csf/csf-implementation-tiers.md +135 -135
- package/src/bmad-plus/packs/pack-shield/references/pci-compliance/pci-dss-requirements.md +366 -366
- package/src/bmad-plus/packs/pack-shield/references/pci-compliance/pci-dss-saq-guide.md +217 -217
- package/src/bmad-plus/packs/pack-shield/references/pci-compliance/pci-dss-v4-changes.md +190 -190
- package/src/bmad-plus/packs/pack-shield/references/section-508/wcag-mapping.md +160 -160
- package/src/bmad-plus/packs/pack-shield/references/soc2/controls.md +241 -241
- package/src/bmad-plus/packs/pack-shield/references/soc2/evidence.md +236 -236
- package/src/bmad-plus/packs/pack-shield/references/soc2/policies.md +254 -254
- package/src/bmad-plus/packs/pack-shield/references/soc2/vendor.md +276 -276
- package/src/bmad-plus/packs/pack-shield/references/swift-csp/swift-assessment.md +202 -202
- package/src/bmad-plus/packs/pack-shield/references/swift-csp/swift-controls.md +545 -545
- package/src/bmad-plus/packs/pack-shield/references/tsa-compliance/tsa-crmp-requirements.md +359 -359
- package/src/bmad-plus/packs/pack-shield/references/tsa-compliance/tsa-directives-overview.md +187 -187
- package/src/bmad-plus/packs/pack-shield/references/tsa-compliance/tsa-incident-reporting.md +187 -187
- package/src/bmad-plus/packs/pack-shield/references/wcag/criteria-detail.md +510 -510
- package/src/bmad-plus/packs/pack-shield/shared/audit-report-template.md +103 -103
- package/src/bmad-plus/packs/pack-shield/shared/cross-framework-mapper.md +103 -103
- package/src/bmad-plus/packs/pack-shield/shared/gap-analysis-template.md +83 -83
- package/src/bmad-plus/packs/pack-shield/shield-orchestrator.md +229 -229
- package/src/bmad-plus/packs/pack-shield/upstream-sync.yaml +68 -68
- package/src/bmad-plus/skills/bmad-plus-autopilot/SKILL.md +99 -99
- package/src/bmad-plus/skills/bmad-plus-parallel/SKILL.md +93 -93
- package/src/bmad-plus/skills/bmad-plus-sync/SKILL.md +69 -69
- package/tools/cli/bmad-plus-cli.js +5 -3
- package/tools/cli/commands/autoconfig.js +23 -59
- package/tools/cli/commands/doctor.js +14 -0
- package/tools/cli/commands/install.js +29 -128
- package/tools/cli/commands/memory.js +1 -0
- package/tools/cli/commands/scan.js +44 -42
- package/tools/cli/commands/uninstall.js +10 -5
- package/tools/cli/commands/update.js +21 -3
- package/tools/cli/lib/ide-config.js +259 -0
- package/tools/cli/lib/memory-init.js +0 -1
- package/tools/cli/lib/pack-copy.js +84 -84
- package/tools/cli/lib/packs.js +16 -8
- package/tools/cli/lib/stack-detect.js +102 -0
- package/tools/cli/lib/validate.js +50 -0
|
@@ -1,208 +1,208 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""OSINT First Volley + Merge — parallel search across all engines, then deduplicate.
|
|
3
|
-
|
|
4
|
-
Replaces: first-volley.sh + merge-volley.sh
|
|
5
|
-
Uses concurrent.futures for parallel execution (stdlib).
|
|
6
|
-
|
|
7
|
-
Usage:
|
|
8
|
-
python volley.py search "Full Name" ["context keywords"]
|
|
9
|
-
python volley.py merge /tmp/osint-<timestamp>
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
import concurrent.futures
|
|
13
|
-
import json
|
|
14
|
-
import os
|
|
15
|
-
import re
|
|
16
|
-
import subprocess
|
|
17
|
-
import sys
|
|
18
|
-
import time
|
|
19
|
-
|
|
20
|
-
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
21
|
-
from _http import get_workspace
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def run_script(scripts_dir, script_name, cmd, query, output_file):
|
|
25
|
-
"""Run a Python OSINT script and save output to file."""
|
|
26
|
-
script_path = os.path.join(scripts_dir, script_name)
|
|
27
|
-
if not os.path.isfile(script_path):
|
|
28
|
-
return
|
|
29
|
-
try:
|
|
30
|
-
result = subprocess.run(
|
|
31
|
-
[sys.executable, script_path, cmd, query],
|
|
32
|
-
capture_output=True, text=True, timeout=60,
|
|
33
|
-
env=os.environ.copy()
|
|
34
|
-
)
|
|
35
|
-
with open(output_file, "w", encoding="utf-8") as f:
|
|
36
|
-
f.write(result.stdout or "")
|
|
37
|
-
if result.stderr:
|
|
38
|
-
print(f" ⚠️ {script_name}: {result.stderr[:200]}", file=sys.stderr)
|
|
39
|
-
except subprocess.TimeoutExpired:
|
|
40
|
-
print(f" ⏱️ {script_name}: timeout", file=sys.stderr)
|
|
41
|
-
except Exception as e:
|
|
42
|
-
print(f" ❌ {script_name}: {e}", file=sys.stderr)
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
def first_volley(name, context=""):
|
|
46
|
-
"""Launch parallel searches across all available engines."""
|
|
47
|
-
workspace, skill_dir, scripts_dir = get_workspace()
|
|
48
|
-
query = f"{name} {context}".strip()
|
|
49
|
-
timestamp = int(time.time())
|
|
50
|
-
outdir = os.path.join(os.environ.get("TEMP", "/tmp"), f"osint-{timestamp}")
|
|
51
|
-
os.makedirs(outdir, exist_ok=True)
|
|
52
|
-
|
|
53
|
-
print(f"🔍 First Volley: {query}")
|
|
54
|
-
print(f" Output: {outdir}")
|
|
55
|
-
print()
|
|
56
|
-
|
|
57
|
-
# Build list of searches to run
|
|
58
|
-
searches = []
|
|
59
|
-
|
|
60
|
-
# Jina — general + social
|
|
61
|
-
if os.environ.get("JINA_API_KEY") or os.path.isfile(
|
|
62
|
-
os.path.join(workspace, "scripts", "jina-api-key.txt")):
|
|
63
|
-
searches.append(("jina.py", "search", query,
|
|
64
|
-
os.path.join(outdir, "jina-general.json")))
|
|
65
|
-
searches.append(("jina.py", "search",
|
|
66
|
-
f"{name} instagram linkedin facebook telegram",
|
|
67
|
-
os.path.join(outdir, "jina-social.json")))
|
|
68
|
-
|
|
69
|
-
# Parallel — general + social
|
|
70
|
-
if os.environ.get("PARALLEL_API_KEY") or os.path.isfile(
|
|
71
|
-
os.path.join(workspace, "scripts", "parallel-api-key.txt")):
|
|
72
|
-
searches.append(("parallel.py", "search", query,
|
|
73
|
-
os.path.join(outdir, "parallel-general.json")))
|
|
74
|
-
searches.append(("parallel.py", "search",
|
|
75
|
-
f"{name} instagram linkedin telegram facebook profile",
|
|
76
|
-
os.path.join(outdir, "parallel-social.json")))
|
|
77
|
-
|
|
78
|
-
# Tavily
|
|
79
|
-
if os.environ.get("TAVILY_API_KEY"):
|
|
80
|
-
searches.append(("tavily.py", "search", query,
|
|
81
|
-
os.path.join(outdir, "tavily-general.json")))
|
|
82
|
-
|
|
83
|
-
# Exa
|
|
84
|
-
if os.environ.get("EXA_API_KEY"):
|
|
85
|
-
searches.append(("exa.py", "people", name,
|
|
86
|
-
os.path.join(outdir, "exa-people.json")))
|
|
87
|
-
|
|
88
|
-
# Perplexity
|
|
89
|
-
if os.environ.get("PERPLEXITY_API_KEY"):
|
|
90
|
-
searches.append(("perplexity.py", "sonar", query,
|
|
91
|
-
os.path.join(outdir, "perplexity-sonar.json")))
|
|
92
|
-
|
|
93
|
-
if not searches:
|
|
94
|
-
print("❌ No API keys found. Set at least one search API key.")
|
|
95
|
-
print(" Run: python diagnose.py")
|
|
96
|
-
sys.exit(1)
|
|
97
|
-
|
|
98
|
-
print(f"Launching {len(searches)} parallel searches...")
|
|
99
|
-
|
|
100
|
-
# Execute in parallel
|
|
101
|
-
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
|
|
102
|
-
futures = []
|
|
103
|
-
for script, cmd, q, outfile in searches:
|
|
104
|
-
print(f" → {script} {cmd}")
|
|
105
|
-
futures.append(executor.submit(run_script, scripts_dir, script, cmd, q, outfile))
|
|
106
|
-
concurrent.futures.wait(futures, timeout=90)
|
|
107
|
-
|
|
108
|
-
print()
|
|
109
|
-
print(f"✅ All searches complete. Results in {outdir}")
|
|
110
|
-
|
|
111
|
-
# List result files
|
|
112
|
-
for f in os.listdir(outdir):
|
|
113
|
-
fpath = os.path.join(outdir, f)
|
|
114
|
-
size = os.path.getsize(fpath)
|
|
115
|
-
print(f" {f} ({size:,} bytes)")
|
|
116
|
-
print()
|
|
117
|
-
print(f"Run: python volley.py merge {outdir}")
|
|
118
|
-
return outdir
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
def merge_volley(outdir):
|
|
122
|
-
"""Merge and deduplicate first-volley results."""
|
|
123
|
-
if not os.path.isdir(outdir):
|
|
124
|
-
print(f"Error: {outdir} not found")
|
|
125
|
-
sys.exit(1)
|
|
126
|
-
|
|
127
|
-
print(f"=== MERGE: {outdir} ===")
|
|
128
|
-
print()
|
|
129
|
-
|
|
130
|
-
# Extract all URLs from result files
|
|
131
|
-
all_urls = set()
|
|
132
|
-
for fname in os.listdir(outdir):
|
|
133
|
-
fpath = os.path.join(outdir, fname)
|
|
134
|
-
if not os.path.isfile(fpath):
|
|
135
|
-
continue
|
|
136
|
-
try:
|
|
137
|
-
with open(fpath, "r", encoding="utf-8") as f:
|
|
138
|
-
content = f.read()
|
|
139
|
-
urls = re.findall(r'https?://[^\s"\'<>]+', content)
|
|
140
|
-
all_urls.update(urls)
|
|
141
|
-
except Exception:
|
|
142
|
-
continue
|
|
143
|
-
|
|
144
|
-
if not all_urls:
|
|
145
|
-
print("⚠️ No URLs found in results.")
|
|
146
|
-
sys.exit(0)
|
|
147
|
-
|
|
148
|
-
print(f"📊 Total unique URLs: {len(all_urls)}")
|
|
149
|
-
print()
|
|
150
|
-
|
|
151
|
-
# Group by platform
|
|
152
|
-
platforms = {
|
|
153
|
-
"🔗 LinkedIn": lambda u: "linkedin.com" in u.lower(),
|
|
154
|
-
"📸 Instagram": lambda u: "instagram.com" in u.lower(),
|
|
155
|
-
"📘 Facebook": lambda u: "facebook.com" in u.lower(),
|
|
156
|
-
"✈️ Telegram": lambda u: "t.me" in u.lower(),
|
|
157
|
-
"🐦 Twitter/X": lambda u: "twitter.com" in u.lower() or "x.com" in u.lower(),
|
|
158
|
-
"📺 VK": lambda u: "vk.com" in u.lower(),
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
categorized = set()
|
|
162
|
-
for label, matcher in platforms.items():
|
|
163
|
-
matches = [u for u in all_urls if matcher(u)]
|
|
164
|
-
print(f"{label}:")
|
|
165
|
-
if matches:
|
|
166
|
-
for u in list(matches)[:10]:
|
|
167
|
-
print(f" {u}")
|
|
168
|
-
categorized.update(matches)
|
|
169
|
-
else:
|
|
170
|
-
print(" (none)")
|
|
171
|
-
print()
|
|
172
|
-
|
|
173
|
-
# Other
|
|
174
|
-
other = [u for u in all_urls if u not in categorized]
|
|
175
|
-
print("📰 Media/Other:")
|
|
176
|
-
for u in other[:20]:
|
|
177
|
-
print(f" {u}")
|
|
178
|
-
print()
|
|
179
|
-
|
|
180
|
-
# Save merged
|
|
181
|
-
merged_file = os.path.join(outdir, "merged-urls.txt")
|
|
182
|
-
with open(merged_file, "w", encoding="utf-8") as f:
|
|
183
|
-
f.write("\n".join(sorted(all_urls)))
|
|
184
|
-
print(f"✅ Saved to {merged_file}")
|
|
185
|
-
print("=== END MERGE ===")
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
def main():
|
|
189
|
-
if len(sys.argv) < 3:
|
|
190
|
-
print("Usage:")
|
|
191
|
-
print(' python volley.py search "Full Name" ["context"]')
|
|
192
|
-
print(" python volley.py merge /tmp/osint-<timestamp>")
|
|
193
|
-
sys.exit(1)
|
|
194
|
-
|
|
195
|
-
cmd = sys.argv[1]
|
|
196
|
-
if cmd == "search":
|
|
197
|
-
name = sys.argv[2]
|
|
198
|
-
context = sys.argv[3] if len(sys.argv) > 3 else ""
|
|
199
|
-
first_volley(name, context)
|
|
200
|
-
elif cmd == "merge":
|
|
201
|
-
merge_volley(sys.argv[2])
|
|
202
|
-
else:
|
|
203
|
-
print(f"Unknown: {cmd} (use search|merge)", file=sys.stderr)
|
|
204
|
-
sys.exit(1)
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
if __name__ == "__main__":
|
|
208
|
-
main()
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""OSINT First Volley + Merge — parallel search across all engines, then deduplicate.
|
|
3
|
+
|
|
4
|
+
Replaces: first-volley.sh + merge-volley.sh
|
|
5
|
+
Uses concurrent.futures for parallel execution (stdlib).
|
|
6
|
+
|
|
7
|
+
Usage:
|
|
8
|
+
python volley.py search "Full Name" ["context keywords"]
|
|
9
|
+
python volley.py merge /tmp/osint-<timestamp>
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import concurrent.futures
|
|
13
|
+
import json
|
|
14
|
+
import os
|
|
15
|
+
import re
|
|
16
|
+
import subprocess
|
|
17
|
+
import sys
|
|
18
|
+
import time
|
|
19
|
+
|
|
20
|
+
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
21
|
+
from _http import get_workspace
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def run_script(scripts_dir, script_name, cmd, query, output_file):
|
|
25
|
+
"""Run a Python OSINT script and save output to file."""
|
|
26
|
+
script_path = os.path.join(scripts_dir, script_name)
|
|
27
|
+
if not os.path.isfile(script_path):
|
|
28
|
+
return
|
|
29
|
+
try:
|
|
30
|
+
result = subprocess.run(
|
|
31
|
+
[sys.executable, script_path, cmd, query],
|
|
32
|
+
capture_output=True, text=True, timeout=60,
|
|
33
|
+
env=os.environ.copy()
|
|
34
|
+
)
|
|
35
|
+
with open(output_file, "w", encoding="utf-8") as f:
|
|
36
|
+
f.write(result.stdout or "")
|
|
37
|
+
if result.stderr:
|
|
38
|
+
print(f" ⚠️ {script_name}: {result.stderr[:200]}", file=sys.stderr)
|
|
39
|
+
except subprocess.TimeoutExpired:
|
|
40
|
+
print(f" ⏱️ {script_name}: timeout", file=sys.stderr)
|
|
41
|
+
except Exception as e:
|
|
42
|
+
print(f" ❌ {script_name}: {e}", file=sys.stderr)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def first_volley(name, context=""):
|
|
46
|
+
"""Launch parallel searches across all available engines."""
|
|
47
|
+
workspace, skill_dir, scripts_dir = get_workspace()
|
|
48
|
+
query = f"{name} {context}".strip()
|
|
49
|
+
timestamp = int(time.time())
|
|
50
|
+
outdir = os.path.join(os.environ.get("TEMP", "/tmp"), f"osint-{timestamp}")
|
|
51
|
+
os.makedirs(outdir, exist_ok=True)
|
|
52
|
+
|
|
53
|
+
print(f"🔍 First Volley: {query}")
|
|
54
|
+
print(f" Output: {outdir}")
|
|
55
|
+
print()
|
|
56
|
+
|
|
57
|
+
# Build list of searches to run
|
|
58
|
+
searches = []
|
|
59
|
+
|
|
60
|
+
# Jina — general + social
|
|
61
|
+
if os.environ.get("JINA_API_KEY") or os.path.isfile(
|
|
62
|
+
os.path.join(workspace, "scripts", "jina-api-key.txt")):
|
|
63
|
+
searches.append(("jina.py", "search", query,
|
|
64
|
+
os.path.join(outdir, "jina-general.json")))
|
|
65
|
+
searches.append(("jina.py", "search",
|
|
66
|
+
f"{name} instagram linkedin facebook telegram",
|
|
67
|
+
os.path.join(outdir, "jina-social.json")))
|
|
68
|
+
|
|
69
|
+
# Parallel — general + social
|
|
70
|
+
if os.environ.get("PARALLEL_API_KEY") or os.path.isfile(
|
|
71
|
+
os.path.join(workspace, "scripts", "parallel-api-key.txt")):
|
|
72
|
+
searches.append(("parallel.py", "search", query,
|
|
73
|
+
os.path.join(outdir, "parallel-general.json")))
|
|
74
|
+
searches.append(("parallel.py", "search",
|
|
75
|
+
f"{name} instagram linkedin telegram facebook profile",
|
|
76
|
+
os.path.join(outdir, "parallel-social.json")))
|
|
77
|
+
|
|
78
|
+
# Tavily
|
|
79
|
+
if os.environ.get("TAVILY_API_KEY"):
|
|
80
|
+
searches.append(("tavily.py", "search", query,
|
|
81
|
+
os.path.join(outdir, "tavily-general.json")))
|
|
82
|
+
|
|
83
|
+
# Exa
|
|
84
|
+
if os.environ.get("EXA_API_KEY"):
|
|
85
|
+
searches.append(("exa.py", "people", name,
|
|
86
|
+
os.path.join(outdir, "exa-people.json")))
|
|
87
|
+
|
|
88
|
+
# Perplexity
|
|
89
|
+
if os.environ.get("PERPLEXITY_API_KEY"):
|
|
90
|
+
searches.append(("perplexity.py", "sonar", query,
|
|
91
|
+
os.path.join(outdir, "perplexity-sonar.json")))
|
|
92
|
+
|
|
93
|
+
if not searches:
|
|
94
|
+
print("❌ No API keys found. Set at least one search API key.")
|
|
95
|
+
print(" Run: python diagnose.py")
|
|
96
|
+
sys.exit(1)
|
|
97
|
+
|
|
98
|
+
print(f"Launching {len(searches)} parallel searches...")
|
|
99
|
+
|
|
100
|
+
# Execute in parallel
|
|
101
|
+
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
|
|
102
|
+
futures = []
|
|
103
|
+
for script, cmd, q, outfile in searches:
|
|
104
|
+
print(f" → {script} {cmd}")
|
|
105
|
+
futures.append(executor.submit(run_script, scripts_dir, script, cmd, q, outfile))
|
|
106
|
+
concurrent.futures.wait(futures, timeout=90)
|
|
107
|
+
|
|
108
|
+
print()
|
|
109
|
+
print(f"✅ All searches complete. Results in {outdir}")
|
|
110
|
+
|
|
111
|
+
# List result files
|
|
112
|
+
for f in os.listdir(outdir):
|
|
113
|
+
fpath = os.path.join(outdir, f)
|
|
114
|
+
size = os.path.getsize(fpath)
|
|
115
|
+
print(f" {f} ({size:,} bytes)")
|
|
116
|
+
print()
|
|
117
|
+
print(f"Run: python volley.py merge {outdir}")
|
|
118
|
+
return outdir
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def merge_volley(outdir):
|
|
122
|
+
"""Merge and deduplicate first-volley results."""
|
|
123
|
+
if not os.path.isdir(outdir):
|
|
124
|
+
print(f"Error: {outdir} not found")
|
|
125
|
+
sys.exit(1)
|
|
126
|
+
|
|
127
|
+
print(f"=== MERGE: {outdir} ===")
|
|
128
|
+
print()
|
|
129
|
+
|
|
130
|
+
# Extract all URLs from result files
|
|
131
|
+
all_urls = set()
|
|
132
|
+
for fname in os.listdir(outdir):
|
|
133
|
+
fpath = os.path.join(outdir, fname)
|
|
134
|
+
if not os.path.isfile(fpath):
|
|
135
|
+
continue
|
|
136
|
+
try:
|
|
137
|
+
with open(fpath, "r", encoding="utf-8") as f:
|
|
138
|
+
content = f.read()
|
|
139
|
+
urls = re.findall(r'https?://[^\s"\'<>]+', content)
|
|
140
|
+
all_urls.update(urls)
|
|
141
|
+
except Exception:
|
|
142
|
+
continue
|
|
143
|
+
|
|
144
|
+
if not all_urls:
|
|
145
|
+
print("⚠️ No URLs found in results.")
|
|
146
|
+
sys.exit(0)
|
|
147
|
+
|
|
148
|
+
print(f"📊 Total unique URLs: {len(all_urls)}")
|
|
149
|
+
print()
|
|
150
|
+
|
|
151
|
+
# Group by platform
|
|
152
|
+
platforms = {
|
|
153
|
+
"🔗 LinkedIn": lambda u: "linkedin.com" in u.lower(),
|
|
154
|
+
"📸 Instagram": lambda u: "instagram.com" in u.lower(),
|
|
155
|
+
"📘 Facebook": lambda u: "facebook.com" in u.lower(),
|
|
156
|
+
"✈️ Telegram": lambda u: "t.me" in u.lower(),
|
|
157
|
+
"🐦 Twitter/X": lambda u: "twitter.com" in u.lower() or "x.com" in u.lower(),
|
|
158
|
+
"📺 VK": lambda u: "vk.com" in u.lower(),
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
categorized = set()
|
|
162
|
+
for label, matcher in platforms.items():
|
|
163
|
+
matches = [u for u in all_urls if matcher(u)]
|
|
164
|
+
print(f"{label}:")
|
|
165
|
+
if matches:
|
|
166
|
+
for u in list(matches)[:10]:
|
|
167
|
+
print(f" {u}")
|
|
168
|
+
categorized.update(matches)
|
|
169
|
+
else:
|
|
170
|
+
print(" (none)")
|
|
171
|
+
print()
|
|
172
|
+
|
|
173
|
+
# Other
|
|
174
|
+
other = [u for u in all_urls if u not in categorized]
|
|
175
|
+
print("📰 Media/Other:")
|
|
176
|
+
for u in other[:20]:
|
|
177
|
+
print(f" {u}")
|
|
178
|
+
print()
|
|
179
|
+
|
|
180
|
+
# Save merged
|
|
181
|
+
merged_file = os.path.join(outdir, "merged-urls.txt")
|
|
182
|
+
with open(merged_file, "w", encoding="utf-8") as f:
|
|
183
|
+
f.write("\n".join(sorted(all_urls)))
|
|
184
|
+
print(f"✅ Saved to {merged_file}")
|
|
185
|
+
print("=== END MERGE ===")
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def main():
|
|
189
|
+
if len(sys.argv) < 3:
|
|
190
|
+
print("Usage:")
|
|
191
|
+
print(' python volley.py search "Full Name" ["context"]')
|
|
192
|
+
print(" python volley.py merge /tmp/osint-<timestamp>")
|
|
193
|
+
sys.exit(1)
|
|
194
|
+
|
|
195
|
+
cmd = sys.argv[1]
|
|
196
|
+
if cmd == "search":
|
|
197
|
+
name = sys.argv[2]
|
|
198
|
+
context = sys.argv[3] if len(sys.argv) > 3 else ""
|
|
199
|
+
first_volley(name, context)
|
|
200
|
+
elif cmd == "merge":
|
|
201
|
+
merge_volley(sys.argv[2])
|
|
202
|
+
else:
|
|
203
|
+
print(f"Unknown: {cmd} (use search|merge)", file=sys.stderr)
|
|
204
|
+
sys.exit(1)
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
if __name__ == "__main__":
|
|
208
|
+
main()
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: bmad-osint-investigator
|
|
3
|
-
description: "OSINT Intelligence Analyst agent — systematic intelligence gathering on individuals. From a name or handle to a scored dossier with psychoprofile, career map, and confidence grades. 55+ Apify actors, 7 search APIs."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
|
7
|
-
|
|
8
|
-
<agent-activation CRITICAL="TRUE">
|
|
9
|
-
1. LOAD the FULL agent file from {project-root}/_bmad/bmm/agents/osint-investigator.md
|
|
10
|
-
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
|
11
|
-
3. FOLLOW every step in the <activation> section precisely
|
|
12
|
-
4. DISPLAY the welcome/greeting as instructed
|
|
13
|
-
5. PRESENT the numbered menu
|
|
14
|
-
6. WAIT for user input before proceeding
|
|
15
|
-
</agent-activation>
|
|
1
|
+
---
|
|
2
|
+
name: bmad-osint-investigator
|
|
3
|
+
description: "OSINT Intelligence Analyst agent — systematic intelligence gathering on individuals. From a name or handle to a scored dossier with psychoprofile, career map, and confidence grades. 55+ Apify actors, 7 search APIs."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
|
7
|
+
|
|
8
|
+
<agent-activation CRITICAL="TRUE">
|
|
9
|
+
1. LOAD the FULL agent file from {project-root}/_bmad/bmm/agents/osint-investigator.md
|
|
10
|
+
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
|
11
|
+
3. FOLLOW every step in the <activation> section precisely
|
|
12
|
+
4. DISPLAY the welcome/greeting as instructed
|
|
13
|
+
5. PRESENT the numbered menu
|
|
14
|
+
6. WAIT for user input before proceeding
|
|
15
|
+
</agent-activation>
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "bmad-plus",
|
|
4
|
-
"version": "0.9.
|
|
4
|
+
"version": "0.9.2",
|
|
5
5
|
"description": "BMAD+ — Augmented AI-Driven Development Framework with multi-role agents, autopilot, and parallel execution",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"bmad",
|
|
@@ -34,7 +34,11 @@
|
|
|
34
34
|
"install:bmad": "node tools/cli/bmad-plus-cli.js install",
|
|
35
35
|
"update:bmad": "node tools/cli/bmad-plus-cli.js update",
|
|
36
36
|
"doctor:bmad": "node tools/cli/bmad-plus-cli.js doctor",
|
|
37
|
-
"
|
|
37
|
+
"lint": "eslint tools/ tests/",
|
|
38
|
+
"format": "prettier --write \"tools/**/*.js\" \"tests/**/*.js\"",
|
|
39
|
+
"format:check": "prettier --check \"tools/**/*.js\" \"tests/**/*.js\"",
|
|
40
|
+
"test": "jest --coverage",
|
|
41
|
+
"prepare": "husky || true",
|
|
38
42
|
"uninstall:bmad": "node tools/cli/bmad-plus-cli.js uninstall"
|
|
39
43
|
},
|
|
40
44
|
"dependencies": {
|
|
@@ -56,7 +60,30 @@
|
|
|
56
60
|
"publishConfig": {
|
|
57
61
|
"access": "public"
|
|
58
62
|
},
|
|
63
|
+
"jest": {
|
|
64
|
+
"collectCoverage": true,
|
|
65
|
+
"coverageDirectory": "coverage",
|
|
66
|
+
"moduleNameMapper": {
|
|
67
|
+
"^@clack/prompts$": "<rootDir>/tests/__mocks__/clack-prompts.js"
|
|
68
|
+
},
|
|
69
|
+
"coverageThreshold": {
|
|
70
|
+
"global": {
|
|
71
|
+
"branches": 35,
|
|
72
|
+
"functions": 40,
|
|
73
|
+
"lines": 40,
|
|
74
|
+
"statements": 40
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"coverageReporters": [
|
|
78
|
+
"text",
|
|
79
|
+
"lcov"
|
|
80
|
+
],
|
|
81
|
+
"testEnvironment": "node"
|
|
82
|
+
},
|
|
59
83
|
"devDependencies": {
|
|
60
|
-
"
|
|
84
|
+
"eslint": "^9.0.0",
|
|
85
|
+
"husky": "^9.0.0",
|
|
86
|
+
"jest": "^30.4.2",
|
|
87
|
+
"prettier": "^3.4.0"
|
|
61
88
|
}
|
|
62
89
|
}
|
|
@@ -356,7 +356,12 @@ npx bmad-plus install
|
|
|
356
356
|
|
|
357
357
|
🔍 OSINT — Shadow (Untersuchung, Scraping, Psychoprofil)
|
|
358
358
|
🧬 Agent Creator — Maker (Design, Build, Package)
|
|
359
|
-
🛡️
|
|
359
|
+
🛡️ Shield GRC — 38 Compliance-Agenten (DSGVO, ISO 27001, SOC 2, HIPAA...)
|
|
360
|
+
🏗️ Dev Studio — 6 SDLC-Agenten (voller Lebenszyklus: Design bis Bereitstellung)
|
|
361
|
+
🔎 SEO — Scout, Chief, Judge (6-Phasen-Audit, PageSpeed)
|
|
362
|
+
🧠 Memory — Zecher (persistentes Gehirn, Session-Handoffs)
|
|
363
|
+
🗂️ Backup — Intelligentes Archiv mit Versionierung
|
|
364
|
+
🎬 Animated — Scroll-driven animierte Websites
|
|
360
365
|
🤖 Alles installieren
|
|
361
366
|
Keine — Nur Core
|
|
362
367
|
```
|
|
@@ -549,8 +554,8 @@ BMAD+/
|
|
|
549
554
|
| **0.4.2** | 2026-03-19 | 📦 Öffentliche Packs — SEO/Backup/Animated in npm |
|
|
550
555
|
| **0.4.3** | 2026-05-17 | 🔧 update + doctor Befehle, i18n komplett, Credits-Korrektur |
|
|
551
556
|
| **0.4.4** | 2026-05-17 | 🔧 UTF-8-Kodierungsfix, vollständige i18n 10 Sprachen, 62 Unit-Tests |
|
|
552
|
-
| **0.5.0** | 2026-05-17 | 🛡️ **Pack Shield** — 38 GRC-Compliance-Agenten |
|
|
553
|
-
| **0.6.0** | 2026-05-17 | 🏗️ **Pack Dev Studio** — 6
|
|
557
|
+
| **0.5.0** | 2026-05-17 | 🛡️ **Pack Shield** — 38 GRC-Compliance-Agenten, 7 Kategorien, 25+ Frameworks (DSGVO, ISO 27001, SOC 2, EU AI Act...) |
|
|
558
|
+
| **0.6.0** | 2026-05-17 | 🏗️ **Pack Dev Studio** — 6 SDLC-Agenten (Miriam, Yosef, Bezalel...) + 30 SDLC-Workflows, BWML DSL |
|
|
554
559
|
| **0.9.0** | 2026-06-24 | 🚀 **Erweitert & Sicher** — 3 neue Packs (animated, backup, seo), P0 Sicherheitsbehebung, 143/143 Tests |
|
|
555
560
|
| **0.8.0** | 2026-06-24 | 🚀 **Erweitert & Sicher** — 3 neue Packs (animated, backup, seo), P0 Sicherheitsbehebung, 143/143 Tests |
|
|
556
561
|
|
|
@@ -360,7 +360,12 @@ npx bmad-plus install
|
|
|
360
360
|
|
|
361
361
|
🔍 OSINT — Shadow (investigación, scraping, psicoperfil)
|
|
362
362
|
🧬 Agent Creator — Maker (diseño, desarrollo, empaque)
|
|
363
|
-
🛡️
|
|
363
|
+
🛡️ Shield GRC — 38 agentes de cumplimiento (GDPR, ISO 27001, SOC 2, HIPAA...)
|
|
364
|
+
🏗️ Dev Studio — 6 agentes SDLC (ciclo de vida completo: diseño a despliegue)
|
|
365
|
+
🔎 SEO — Scout, Chief, Judge (auditoría 6 fases, PageSpeed)
|
|
366
|
+
🧠 Memory — Zecher (cerebro persistente, handoff sessions)
|
|
367
|
+
🗂️ Backup — Archivo inteligente con versionado
|
|
368
|
+
🎬 Animated — Sitios web animados scroll-driven
|
|
364
369
|
🤖 Instalar todo
|
|
365
370
|
Ninguno — Solo Core
|
|
366
371
|
```
|
|
@@ -564,8 +569,8 @@ BMAD+/
|
|
|
564
569
|
| **0.4.2** | 2026-03-19 | 📦 Packs públicos — SEO/Backup/Animated en npm |
|
|
565
570
|
| **0.4.3** | 2026-05-17 | 🔧 Comandos update + doctor, i18n completa, corrección de créditos |
|
|
566
571
|
| **0.4.4** | 2026-05-17 | 🔧 Corrección codificación UTF-8, i18n completa 10 idiomas, 62 tests unitarios |
|
|
567
|
-
| **0.5.0** | 2026-05-17 | 🛡️ **Pack Shield** — 38 agentes de cumplimiento GRC |
|
|
568
|
-
| **0.6.0** | 2026-05-17 | 🏗️ **Pack Dev Studio** — 6 agentes
|
|
572
|
+
| **0.5.0** | 2026-05-17 | 🛡️ **Pack Shield** — 38 agentes de cumplimiento GRC, 7 categorías, 25+ frameworks (GDPR, ISO 27001, SOC 2, EU AI Act...) |
|
|
573
|
+
| **0.6.0** | 2026-05-17 | 🏗️ **Pack Dev Studio** — 6 agentes SDLC (Miriam, Yosef, Bezalel...) + 30 flujos de trabajo SDLC, BWML DSL |
|
|
569
574
|
| **0.9.0** | 2026-06-24 | 🚀 **Aumentado & Seguro** — 3 nuevos packs (animated, backup, seo), corrección P0 seguridad, 143/143 tests |
|
|
570
575
|
| **0.8.0** | 2026-06-24 | 🚀 **Aumentado & Seguro** — 3 nuevos packs (animated, backup, seo), corrección P0 seguridad, 143/143 tests |
|
|
571
576
|
|
|
@@ -360,7 +360,12 @@ npx bmad-plus install
|
|
|
360
360
|
|
|
361
361
|
🔍 OSINT — Shadow (investigation, scraping, psychoprofil)
|
|
362
362
|
🧬 Agent Creator — Maker (design, build, package)
|
|
363
|
-
🛡️
|
|
363
|
+
🛡️ Shield GRC — 38 agents de conformité (RGPD, ISO 27001, SOC 2, HIPAA...)
|
|
364
|
+
🏗️ Dev Studio — 6 agents SDLC (cycle de vie complet : conception à déploiement)
|
|
365
|
+
🔎 SEO — Scout, Chief, Judge (audit 6 phases, PageSpeed)
|
|
366
|
+
🧠 Memory — Zecher (cerveau persistant, handoff sessions)
|
|
367
|
+
🗂️ Backup — Archive intelligente avec versioning
|
|
368
|
+
🎬 Animated — Sites web animés scroll-driven
|
|
364
369
|
🤖 Tout installer
|
|
365
370
|
Aucun — Core uniquement
|
|
366
371
|
```
|
|
@@ -564,8 +569,8 @@ BMAD+/
|
|
|
564
569
|
| **0.4.2** | 2026-03-19 | 📦 Packs publics — SEO/Backup/Animated dans npm |
|
|
565
570
|
| **0.4.3** | 2026-05-17 | 🔧 Commandes update + doctor, i18n complète, correction crédits |
|
|
566
571
|
| **0.4.4** | 2026-05-17 | 🔧 Correction encodage UTF-8, i18n complète 10 langues, 62 tests unitaires |
|
|
567
|
-
| **0.5.0** | 2026-05-17 | 🛡️ **Pack Shield** — 38 agents de conformité GRC |
|
|
568
|
-
| **0.6.0** | 2026-05-17 | 🏗️ **Pack Dev Studio** — 6 agents
|
|
572
|
+
| **0.5.0** | 2026-05-17 | 🛡️ **Pack Shield** — 38 agents de conformité GRC, 7 catégories, 25+ frameworks (RGPD, ISO 27001, SOC 2, EU AI Act...) |
|
|
573
|
+
| **0.6.0** | 2026-05-17 | 🏗️ **Pack Dev Studio** — 6 agents SDLC (Miriam, Yosef, Bezalel...) + 30 workflows SDLC, BWML DSL |
|
|
569
574
|
| **0.9.0** | 2026-06-24 | 🚀 **Augmenté & Sécurisé** — 3 nouveaux packs (animated, backup, seo), correction P0 sécurité, 143/143 tests |
|
|
570
575
|
| **0.8.0** | 2026-06-24 | 🚀 **Augmenté & Sécurisé** — 3 nouveaux packs (animated, backup, seo), correction P0 sécurité, 143/143 tests |
|
|
571
576
|
|